2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mae616 Advent of CodeAdvent Calendar 2024

Day 1

[Advent of Code 2024] Day 1: Historian Hysteria

Last updated at Posted at 2024-12-01

この記事は、mae616 Advent of Code Advent Calendar 2024 の1日目の記事です。

ちなみにこのアドベントカレンダーは皆勤賞のQiitaくんのぬいぐるみに惹かれて挑戦している大変ゆるい挑戦のものです。そんな感じで読んでいただければ幸いです。
ちなみにアドベントカレンダー、アドベントコード共に初挑戦です٩( ᐛ )و


次の日: [Advent of Code 2024] Day 2: Red-Nosed Reports

本日のお題

物語はなんだ?

(最初はアドベントコードの概要かな?)
※ アドベントカレンダーは25日まで

毎年、クリスマスのサンタクロースのソリの発進を欠かさず見ている主任歴史学者を最近見ない。
他の歴史学者たちが主任歴史学者の現れそうな北極の地点を確かめて25日のサンタクロースが出発する前に主任歴史学者を探し出そう。「現れそうな北極の地点」は50個あって、1日に2個のパズルを解いてね。

て、ことらしいです。ファンタジーですね。世界観があって素晴らしいです。
2個解くのか。ありゃ、結構大変そう ꉂꉂ( ᐛ )

1問目のお題と物語

※ すごく適当に訳したり付け加えてます

歴史学者たちは、とりあえず、「現れそうな北極の地点」のリストを作ろうと主任歴史学者のオフィスにきた。すると何かのリストやらメモやらを発見した。もしやこれは、主任歴史学者がどっかにいく前に行こうとした場所をメモしたものかも。

おお、素晴らしい٩( ᐛ )و

主任歴史学者のオフィスに散らばってるメモを集めようと、歴史学者たちは、2つのグループに分かれてリストやらメモやらをそれぞれ全部見て「完全なリスト」を作ろうとした。(ちなみに主任歴史学者は場所を「場所ID」というのでメモしてた)
2つのグループがどちらも「完全のリスト」を作ったら、どうもその2つの「完全なリスト」が似てないっぽい。
1つ目のお題はその2つの「完全なリスト」の照合を手伝いましょう。

て、ことらしいです。

実際のお題

例:

3   4
4   3
2   5
1   3
3   9
3   3

要は1チームは左の「3, 4, 2, 1, 3, 3」て「完全なリスト」を出して、
もう1チームは右の「4, 3, 5, 3, 9, 3」て「完全なリスト」を出したらしいです。

これを左の一番小さい値「1」と右の一番小さい値「3」の差をとって、
次に左の二番目に小さい値「2」と右の二番目に小さい値「3」の差をとって
....
てひたすらやっていって差の合計を求めれば良いようです。

解いたコード

day1_1/main.js
function main(input) {
  const args = input.split("\n");

  const a = [];
  const b = [];
  for (const arg of args) {
    if (arg === "") continue;
    const [tempA, tempB] = arg.split("   ");
    a.push(Number(tempA));
    b.push(Number(tempB));
  }

  a.sort((a, b) => a - b);
  b.sort((a, b) => a - b);

  let sum = 0;
  for (let i = 0; i < a.length; i++) {
    sum += Math.abs(b[i] - a[i]);
  }

  console.log(sum);
}

main(require("fs").readFileSync("./input/puzzle.txt", "utf8"));

下記で実行できます。

cd day1_1
node main.js

2問目のお題

2つの「完全なリスト」は違った。なんか場所IDが重複してないか?

てことで...

実際のお題

例:

3   4
4   3
2   5
1   3
3   9
3   3

これを左の一番上の「3」と右のリストで「3」が出てくる回数をかけて(3 * 右で3が出てくる回数)
次に左の二番目の「4」と右のリストで「4」が出てくる回数をかけて(4 * 右で4が出てくる回数)
....
てひたすらやっていってその掛け算して求めた値の合計を出せば良いようです。

解いたコード

day1_1/main.js
function main(input) {
  const args = input.split("\n");

  const a = [];
  const b = {};
  for (const arg of args) {
    if (arg === "") continue;
    const [tempA, tempB] = arg.split("   ");
    a.push(Number(tempA));

    if (tempB in b) {
      b[tempB]++;
    } else {
      b[tempB] = 1;
    }
  }

  let sum = 0;
  for (let i = 0; i < a.length; i++) {
    if (a[i] in b) {
      sum += a[i] * b[a[i]];
    }
  }

  console.log(sum);
}

main(require("fs").readFileSync("./input/puzzle.txt", "utf8"));

1日目は終わり٩( ᐛ )و
最初から暗礁に乗り上げてますが主任歴史学者さんは見つかるのでしょうか。がんばれ٩( ᐛ )و

お疲れさまです٩( ᐛ )و


海外の人と一緒にヒャッハー!
https://www.reddit.com/r/adventofcode/

(何故、Googleスプレットシートで解いてる人がいるのでしょう。驚異です...)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?