Day Seven Part Two
This commit is contained in:
parent
ce50531971
commit
3105abc935
@ -1,4 +1,4 @@
|
|||||||
import {isEqual, zip} from "lodash";
|
import {isEqual, omit, zip} from "lodash";
|
||||||
import {anyChar, int, newline, rest, space, whitespace} from "parjs";
|
import {anyChar, int, newline, rest, space, whitespace} from "parjs";
|
||||||
import {stringify, manyBetween, between, then, manySepBy, manyTill} from "parjs/combinators";
|
import {stringify, manyBetween, between, then, manySepBy, manyTill} from "parjs/combinators";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
@ -6,7 +6,7 @@ import fs from "fs";
|
|||||||
const CardLetterScores = ['J', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'Q', 'K', 'A'];
|
const CardLetterScores = ['J', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'Q', 'K', 'A'];
|
||||||
|
|
||||||
export class CamelCard {
|
export class CamelCard {
|
||||||
private readonly hand: Record<string, number>;
|
private hand: Record<string, number>;
|
||||||
public readonly score: number;
|
public readonly score: number;
|
||||||
|
|
||||||
constructor(protected readonly card: string) {
|
constructor(protected readonly card: string) {
|
||||||
@ -35,7 +35,24 @@ export class CamelCard {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private redistributeJ(): void {
|
||||||
|
if ('J' in this.hand) {
|
||||||
|
const js = this.hand.J;
|
||||||
|
const withoutJ = omit(this.hand, 'J') as Record<string, number>;
|
||||||
|
|
||||||
|
const [mostCommon, mostCommonValue] = Object.entries(withoutJ).reduce(([maxKey, maxValue], [key, value]) => {
|
||||||
|
if (value > maxValue) return [key, value];
|
||||||
|
return [maxKey, maxValue];
|
||||||
|
}, ['J', 0]);
|
||||||
|
|
||||||
|
withoutJ[mostCommon] = mostCommonValue + js;
|
||||||
|
this.hand = withoutJ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private calculateScore(): number {
|
private calculateScore(): number {
|
||||||
|
this.redistributeJ();
|
||||||
|
|
||||||
const cards = Object.values(this.hand).sort((a, b) => b-a);
|
const cards = Object.values(this.hand).sort((a, b) => b-a);
|
||||||
|
|
||||||
if (isEqual(cards, [1, 1, 1, 1, 1])) return 1;
|
if (isEqual(cards, [1, 1, 1, 1, 1])) return 1;
|
||||||
@ -46,6 +63,7 @@ export class CamelCard {
|
|||||||
if (isEqual(cards, [4, 1])) return 6;
|
if (isEqual(cards, [4, 1])) return 6;
|
||||||
if (isEqual(cards, [5])) return 7;
|
if (isEqual(cards, [5])) return 7;
|
||||||
|
|
||||||
|
console.log(`Returning 0 for ${JSON.stringify(this.hand)}`)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user