C# を使用した Code 2021 の出現: 2 日目 - ダイブ!
8591 ワード
新しい日が始まり、新たな挑戦者がやってくる. Advent of Code 2日目です!
今日の問題はかなり簡単です.パズルには一連の指示が付属しており、これらの指示に従って潜水艦の位置を計算する必要があります.
いつものように、入力は文字列ファイルで提供され、各行は次のようにフォーマットされます:
入力の解釈は、パート 1 とパート 2 で異なります.
パート 1 では、一連の指示が与えられます.これらの指示に従う場合、潜水艦の最終的な位置を計算する必要があります.
forward: 水平位置を増やします up: 垂直位置を下げます down: 垂直位置を上げます
各トークンの後には、特定の方向への移動単位である数字が続きます.
ソリューションの構築を始めましょう.まず、パズルを解くアルゴリズムを設計し、それを C# コードに変換します.
すべての移動命令を含む文字列配列 Instructions があります.私たちの目標は、最終的な X 位置に最終的な Y 位置を掛けた積を計算することです.
命令シーケンスを反復処理し、各命令を取得します.命令形式は
コマンド トークンが
最後のステップは、XPosition と YPosition の積を計算することです.
アルゴリズムを理解したら、C# の実装を始めましょう.
解決策はかなり明確です.まず、命令が空白で分割され、
パート 2 では、計算にひねりを加えています.垂直位置を変更する代わりに、
これに対処するには、計算関数を少し調整する必要があります.
パート 2 の答えを計算するには、わずかな調整のみが必要です.
まず、潜水艦のピッチ角を格納するために、新しい整数変数
最後に、
Day02 パズルは、詳細に注意を払う必要のある難しい部分がなく、AoC の優れた明確な入門パズルです.
私のソリューションがどのように機能するかについて、より詳細な説明を皆さんに提供できれば幸いです.
私の Github Repo でこの解決策と他の解決策を見つけることができます.
Advent of Code 2021 の次のエピソードでお会いしましょう!
今日の問題はかなり簡単です.パズルには一連の指示が付属しており、これらの指示に従って潜水艦の位置を計算する必要があります.
いつものように、入力は文字列ファイルで提供され、各行は次のようにフォーマットされます:
command units
.入力の解釈は、パート 1 とパート 2 で異なります.
パート1
パート 1 では、一連の指示が与えられます.これらの指示に従う場合、潜水艦の最終的な位置を計算する必要があります.
forward
、 up
、 down
の 3 つの命令「トークン」があります.各トークンの後には、特定の方向への移動単位である数字が続きます.
ソリューションの構築を始めましょう.まず、パズルを解くアルゴリズムを設計し、それを C# コードに変換します.
すべての移動命令を含む文字列配列 Instructions があります.私たちの目標は、最終的な X 位置に最終的な Y 位置を掛けた積を計算することです.
命令シーケンスを反復処理し、各命令を取得します.命令形式は
command units
であるため、これを command
および units
にトークン化する必要があります.コマンド トークンが
forward
の場合、XPosition を units
だけ増やします.コマンド トークンが up
の場合、YPosition を units
だけ減らします.最後に、コマンド トークンが down
の場合、YPosition を units
だけ増やします.最後のステップは、XPosition と YPosition の積を計算することです.
SUBMARINE_MOVEMENT(Instructions)
INPUT: A list of string instructions
OUTPUT: The product of the final horizontal position times the final vertical position
XPosition = 0
YPosition = 0
FOREACH(Instruction in Instructions)
(instruction, units) = TOKENIZE(instruction)
SWITCH instruction
CASE "forward"
XPosition = XPosition + units
CASE "up"
YPosition = YPosition - units
CASE "down"
YPosition = YPosition + units
END SWITCH
END FOREACH
RETURN XPosition * YPosition
アルゴリズムを理解したら、C# の実装を始めましょう.
int xPosition = 0;
int yPosition = 0;
foreach(string instruction in data)
{
string[] commands = instruction.Split(" ");
switch(commands[0])
{
case "forward":
xPosition += int.Parse(commands[1]);
break;
case "up":
yPosition -= int.Parse(commands[1]);
break;
case "down":
yPosition += int.Parse(commands[1]);
break;
}
}
return xPosition * yPosition;
使い方
解決策はかなり明確です.まず、命令が空白で分割され、
[command, unit]
配列が作成されます.次に、switch ステートメントが command
引数を解析し、適切な位置計算を実行します.パート2
パート 2 では、計算にひねりを加えています.垂直位置を変更する代わりに、
up
および down
コマンドは潜水艦の pitch angle を変更します.ピッチ角のみが影響を受けるため、forward
コマンドは垂直方向と水平方向の位置を変更します.現在、forward
は水平位置に X 単位を追加し、垂直位置に pitch_angle
* X 単位を追加します.これに対処するには、計算関数を少し調整する必要があります.
int xPosition = 0;
int yPosition = 0;
int aim = 0;
foreach (string instruction in data)
{
string[] commands = instruction.Split(" ");
switch (commands[0])
{
case "forward":
xPosition += int.Parse(commands[1]);
yPosition += int.Parse(commands[1]) * aim;
break;
case "up":
aim -= int.Parse(commands[1]);
break;
case "down":
aim += int.Parse(commands[1]);
break;
}
}
return xPosition * yPosition
使い方
パート 2 の答えを計算するには、わずかな調整のみが必要です.
まず、潜水艦のピッチ角を格納するために、新しい整数変数
aim
を導入しました.up
および down
コマンドは、船の垂直位置に影響を与えなくなり、代わりにピッチ角を調整します.最後に、
forward
コマンドは、水平位置に X 単位を追加し、垂直位置を計算することによって、船の水平方向の動きを計算します.垂直位置は、移動角度 X 単位の積です.それはすべての人々です!
Day02 パズルは、詳細に注意を払う必要のある難しい部分がなく、AoC の優れた明確な入門パズルです.
私のソリューションがどのように機能するかについて、より詳細な説明を皆さんに提供できれば幸いです.
私の Github Repo でこの解決策と他の解決策を見つけることができます.
Advent of Code 2021 の次のエピソードでお会いしましょう!
Reference
この問題について(C# を使用した Code 2021 の出現: 2 日目 - ダイブ!), 我々は、より多くの情報をここで見つけました https://dev.to/kalkwst/advent-of-code-2021-using-c-day-02-dive-4e8kテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol