Code n Golang の登場: スライスとダイシングのレポート
導入
ということで、これは 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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

Cは、ハードウェアリソースと高性能の最適化が必要なシナリオにより適していますが、Golangは迅速な開発と高い並行性処理が必要なシナリオにより適しています。 1.Cの利点は、ハードウェア特性と高い最適化機能に近いものにあります。これは、ゲーム開発などの高性能ニーズに適しています。 2.Golangの利点は、その簡潔な構文と自然な並行性サポートにあり、これは高い並行性サービス開発に適しています。

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。
