導入
ということで、これは Golang の Advent of Code 2024 の 2 日目であり、これに対する私のアプローチと解決策を探っていきます。問題はそれほど簡単ではありませんでしたが、実装して正しいことが判明した後は非常に簡単でした。
ここ GitHub で私のソリューションをチェックできます。
ミスター・ディストラクティブ
/
コードの出現
コードの到来
パート 1
レポートと呼ばれるいくつかの行が与えられており、各レポートには多数のレベルがあります。そしてレポートの要件は、少なくとも 1 倍、最大 3 倍の増加または減少である必要があることです。
これは、最初の 2 つの要素が 1 だけでも増加している場合、そのレポート内の他の後続の要素も (1、2、または 3 ずつ) レベル増加する必要があり、いかなる変化もあり得ない (つまり、隣接する 2 つの要素の変化が 0 である) ことを意味します。数字、または隣接する 2 つの数字を同じにすることはできません)
7 6 4 2 1 1 2 7 8 9 9 7 6 2 1 1 3 2 4 5 8 6 4 4 1 1 3 6 7 9
最初に入力解析を行います。これは非常に簡単です。個々のレポートを取得するには、それを n で分割する必要があります。これは文字列なので、「7 6 4 2 1」、スライスを取得したいと考えています。整数の。
それでは、スペース/空白 ” ” で分割して個々のレベル (数値) を取得し、それらを整数に変換する必要があります。
-
レポートの個々の文字列、つまり [“7”、“6”、“4”、“2”、“1”] のレベルを取得したら、それらを整数にキャストする必要があります。
それぞれを反復処理して整数にキャストし、リストに追加します。
リストを作成したら、配列の配列となるレポート リストに追加します。つまり、各行がレポートであり、各レポートには多くのレベルがあるため、整数のスライスが分割されます。
func SplitLevels(lines []string) [][]int { reportLevels := [][]int{} for i, reportLine := range lines { reportLevels = append(reportLevels, []int{}) for _, levelStr := range strings.Split(reportLine, " ") { level, err := strconv.Atoi(levelStr) if err != nil { log.Fatal(err) } reportLevels[i] = append(reportLevels[i], level) } } return reportLevels }
レポートとレベルを構築したら、個々のレポートのレベル内のパターンを実際に分析していきます。
そのために:
まず個々のレポートを取得し、最初の 2 つの要素の差を計算します。ここでは絶対差を慎重に使用することを忘れないでください。
-
レポート内のレベルが増加しているか減少しているかを示すフラグを維持する必要があります。これは最初の 2 つの要素で決定できます。
つまり、最初の 2 つの要素が増加している場合は、後続のレベルも増加している必要があり、それらが減少している場合は、すべてのレベルも同様に減少しているはずです
最初にガード チェックがあり、それらの差が 0、または 3 より大きい、または -3 より小さい場合、これが安全なレベルの条件です。その場合は、レポートが安全ではないことを示す false を返します。
最初の 2 つの要素の後でレポートを反復処理し、増加フラグが true で、現在の差が 0 以下であるか、それを超えている場合に、次の 2 つのレベルの差を計算します。 3 また、false としてマークします
もう 1 つの条件は、フラグが減少している場合です。これは、最初の 2 つの要素に負の差があることを意味するため、現在の差が 0 以上であるか、または - より小さいかを確認します。 3、その場合、それを false としてマークします
すべてのレベルの差を計算した後、ループから抜け出すと、レベルに矛盾が見られなかったため true を返します。
7 6 4 2 1 1 2 7 8 9 9 7 6 2 1 1 3 2 4 5 8 6 4 4 1 1 3 6 7 9
パート 2
パート 2 では、いくつかのことを行う必要があります。レポートが安全かどうかを計算する必要があります。安全でない場合は、レポートから 1 つの要素をほぼ削除して安全にすることができます。
そのためのアプローチは次のとおりです。
レベルの不一致が最初に確認されたインデックスを取得します
レポートからその要素を削除して確認し、レポートが安全になった場合は true を返します。つまり、安全なレポートが見つかったということです
それでもレポートが安全ではないことが判明した場合は、不一致が見つかったインデックスの前の要素を削除します。その要素を削除した後で安全であることが判明した場合は、安全とマークします
それでもレポートが安全でないと判断した場合は、最初に不一致が見つかったインデックスの後の要素を削除します。レポートが安全になった場合は、そのレポートを安全とマークします
それ以外の場合、レポートを安全にする削除可能な要素のみが見つからないため、レポートを安全でないとマークします。
func SplitLevels(lines []string) [][]int { reportLevels := [][]int{} for i, reportLine := range lines { reportLevels = append(reportLevels, []int{}) for _, levelStr := range strings.Split(reportLine, " ") { level, err := strconv.Atoi(levelStr) if err != nil { log.Fatal(err) } reportLevels[i] = append(reportLevels[i], level) } } return reportLevels }
ここ GitHub で私のソリューションをチェックできます。
ミスター・ディストラクティブ
/
コードの出現
コードの到来
結論
これが、Golang におけるコード 2024 の出現 2 日目の非常に単純な問題でした。 Golang の Advent of Code 2024 の初日パズルのこのウォークスルーを楽しんでいただければ幸いです。
他に興味深い解決策がある場合、またはこれに関して共有したいことがあればお知らせください。フィードバック、質問、提案は大歓迎です。
読んでいただきありがとうございます。また明日 3 日目にお会いしましょう
コーディングを楽しんでください:)
以上がCode n Golang の登場: スライスとダイシングのレポートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

GoroutinesAreSareSareSareSormethodSthaturncurlyntingo、Enableing and LightweightConcurrency.1)theyRuntimeSimeSingMultiplexing、SountyStorunonFeweroSthReads.2)ゴルチンズを失ったことを許可します

initistoistoInitializevariables、setupconutupurations、orforformndexedarysetupbe foreThemainfunctionexecutes.useinitby:1)inginginyourcodeTorunautorunaintalunain、2)KeepingItshortandpocusedonsimpletasks、3)ConsididiriveSusinginsingingingingingingingingingingingingingingingingingingingingingingsingpltassksを使用すると、

go interfacesaremethodsignaturesetsetsattypesmustimplement、unableingpolymorphism withintinheritance forcleaner、modularcode.theyareimplictilistifisisfiestified、houseforfflexibleapisanddeaupling、busrecarefulusoavoidoidoimoidimeerrororsypertety。

Goで回復()関数を使用して、パニックから回復します。特定の方法は次のとおりです。1)回復()を使用して、延期関数でパニックをキャプチャして、プログラムのクラッシュを避けます。 2)デバッグの詳細なエラー情報を記録します。 3)特定の状況に基づいてプログラムの実行を再開するかどうかを決定します。 4)パフォーマンスに影響を及ぼさないように注意して使用します。

この記事では、弦の操作にGOの「文字列」パッケージを使用し、効率を高め、ユニコードを効果的に処理するための一般的な機能とベストプラクティスの詳細を説明します。

記事の詳細は、暗号化操作のためのGoの「暗号」パッケージ、安全な実装のための主要な生成、管理、およびベストプラクティスについて議論するためのパッケージ。

この記事では、現在の時間の取得、特定の時間の作成、文字列の解析、経過時間の測定など、日付、時間、およびタイムゾーンを処理するためのGoの「時間」パッケージの使用について詳しく説明しています。

記事では、可変検査と変更のためにGOの「反射」パッケージを使用して、方法とパフォーマンスの考慮事項を強調するために説明します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









