国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ バックエンド開(kāi)発 Golang Code n Golang の登場(chǎng): スライスとダイシングのレポート

Code n Golang の登場(chǎng): スライスとダイシングのレポート

Dec 20, 2024 am 08:31 AM

導(dǎo)入

ということで、これは Golang の Advent of Code 2024 の 2 日目であり、これに対する私のアプローチと解決策を探っていきます。問(wèn)題はそれほど簡(jiǎn)単ではありませんでしたが、実裝して正しいことが判明した後は非常に簡(jiǎn)単でした。

ここ GitHub で私のソリューションをチェックできます。

Advent of Code n Golang: Slicing and Dicing Reports ミスター?ディストラクティブ / コードの出現(xiàn)

コードの到來(lái)

パート 1

レポートと呼ばれるいくつかの行が與えられており、各レポートには多數(shù)のレベルがあります。そしてレポートの要件は、少なくとも 1 倍、最大 3 倍の増加または減少である必要があることです。

これは、最初の 2 つの要素が 1 だけでも増加している場(chǎng)合、そのレポート內(nèi)の他の後続の要素も (1、2、または 3 ずつ) レベル増加する必要があり、いかなる変化もあり得ない (つまり、隣接する 2 つの要素の変化が 0 である) ことを意味します。數(shù)字、または隣接する 2 つの數(shù)字を同じにすることはできません)

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
  • 最初に入力解析を行います。これは非常に簡(jiǎn)単です。個(gè)々のレポートを取得するには、それを n で分割する必要があります。これは文字列なので、「7 6 4 2 1」、スライスを取得したいと考えています。整數(shù)の。

  • それでは、スペース/空白 ” ” で分割して個(gè)々のレベル (數(shù)値) を取得し、それらを整數(shù)に変換する必要があります。

  • レポートの個(gè)々の文字列、つまり [“7”、“6”、“4”、“2”、“1”] のレベルを取得したら、それらを整數(shù)にキャストする必要があります。

  • それぞれを反復(fù)処理して整數(shù)にキャストし、リストに追加します。

  • リストを作成したら、配列の配列となるレポート リストに追加します。つまり、各行がレポートであり、各レポートには多くのレベルがあるため、整數(shù)のスライスが分割されます。

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
}

レポートとレベルを構(gòu)築したら、個(gè)々のレポートのレベル內(nèi)のパターンを?qū)g際に分析していきます。

そのために:

  • まず個(gè)??々のレポートを取得し、最初の 2 つの要素の差を計(jì)算します。ここでは絶対差を慎重に使用することを忘れないでください。

  • レポート內(nèi)のレベルが増加しているか減少しているかを示すフラグを維持する必要があります。これは最初の 2 つの要素で決定できます。

    つまり、最初の 2 つの要素が増加している場(chǎng)合は、後続のレベルも増加している必要があり、それらが減少している場(chǎng)合は、すべてのレベルも同様に減少しているはずです

  • 最初にガード チェックがあり、それらの差が 0、または 3 より大きい、または -3 より小さい場(chǎng)合、これが安全なレベルの條件です。その場(chǎng)合は、レポートが安全ではないことを示す false を返します。

  • 最初の 2 つの要素の後でレポートを反復(fù)処理し、増加フラグが true で、現(xiàn)在の差が 0 以下であるか、それを超えている場(chǎng)合に、次の 2 つのレベルの差を計(jì)算します。 3 また、false としてマークします

  • もう 1 つの條件は、フラグが減少している場(chǎng)合です。これは、最初の 2 つの要素に負(fù)の差があることを意味するため、現(xiàn)在の差が 0 以上であるか、または - より小さいかを確認(rèn)します。 3、その場(chǎng)合、それを false としてマークします

  • すべてのレベルの差を計(jì)算した後、ループから抜け出すと、レベルに矛盾が見(jiàn)られなかったため 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 では、いくつかのことを行う必要があります。レポートが安全かどうかを計(jì)算する必要があります。安全でない場(chǎng)合は、レポートから 1 つの要素をほぼ削除して安全にすることができます。

そのためのアプローチは次のとおりです。

  • レベルの不一致が最初に確認(rèn)されたインデックスを取得します

  • レポートからその要素を削除して確認(rèn)し、レポートが安全になった場(chǎng)合は true を返します。つまり、安全なレポートが見(jiàn)つかったということです

  • それでもレポートが安全ではないことが判明した場(chǎng)合は、不一致が見(jiàn)つかったインデックスの前の要素を削除します。その要素を削除した後で安全であることが判明した場(chǎng)合は、安全とマークします

  • それでもレポートが安全でないと判斷した場(chǎng)合は、最初に不一致が見(jiàn)つかったインデックスの後の要素を削除します。レポートが安全になった場(chǎng)合は、そのレポートを安全とマークします

  • それ以外の場(chǎng)合、レポートを安全にする削除可能な要素のみが見(jiàn)つからないため、レポートを安全でないとマークします。

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 で私のソリューションをチェックできます。

Advent of Code n Golang: Slicing and Dicing Reports ミスター?ディストラクティブ / コードの出現(xiàn)

コードの到來(lái)

結(jié)論

これが、Golang におけるコード 2024 の出現(xiàn) 2 日目の非常に単純な問(wèn)題でした。 Golang の Advent of Code 2024 の初日パズルのこのウォークスルーを楽しんでいただければ幸いです。

他に興味深い解決策がある場(chǎng)合、またはこれに関して共有したいことがあればお知らせください。フィードバック、質(zhì)問(wèn)、提案は大歓迎です。

読んでいただきありがとうございます。また明日 3 日目にお會(huì)いしましょう

コーディングを楽しんでください:)

以上がCode n Golang の登場(chǎng): スライスとダイシングのレポートの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

GOでバッファーチャネルを作成するにはどうすればよいですか? (例えば、make(chan int、10)) GOでバッファーチャネルを作成するにはどうすればよいですか? (例えば、make(chan int、10)) Jun 20, 2025 am 01:07 AM

GOでバッファチャネルを作成するには、Make関數(shù)の容量パラメーターを指定するだけです。バッファチャネルは、指定された容量を超えない限り、受信機(jī)がない場(chǎng)合に送信操作が一時(shí)的にデータを保存できるようにします。たとえば、ch:= make(chanint、10)は、最大10個(gè)の整數(shù)値を保存できるバッファチャネルを作成します。バッファーされていないチャネルとは異なり、データは送信時(shí)にすぐにブロックされませんが、データはレシーバーによって奪われるまで一時(shí)的にバッファーに保存されます。それを使用する場(chǎng)合、注意してください。1。メモリの無(wú)駄や頻繁なブロックを避けるために、容量設(shè)定は妥當(dāng)でなければなりません。 2。バッファは、バッファーにメモリの問(wèn)題が無(wú)期限に蓄積されないようにする必要があります。 3.信號(hào)は、リソースを保存するために、chantruct {}タイプを渡すことができます。一般的なシナリオには、並行性の數(shù)、生産者消費(fèi)者モデル、および差別化の制御が含まれます

GOの構(gòu)造インスタンスでメソッドを呼び出すにはどうすればよいですか? GOの構(gòu)造インスタンスでメソッドを呼び出すにはどうすればよいですか? Jun 24, 2025 pm 03:17 PM

GO言語(yǔ)では、構(gòu)造メソッドを呼び出すには、最初に構(gòu)造と受信機(jī)を結(jié)合する方法を定義し、ポイント番號(hào)を使用してアクセスする必要があります。構(gòu)造の長(zhǎng)方形を定義した後、メソッドは値受信機(jī)またはポインターレシーバーを介して宣言できます。 1。func(rrectangle)領(lǐng)域()intなどの値受信機(jī)を使用し、rect.area()を介して直接呼び出します。 2.構(gòu)造を変更する必要がある場(chǎng)合は、FUNC(r*長(zhǎng)方形)setWidth(...)などのポインターレシーバーを使用し、GOはポインターと値の変換を自動(dòng)的に処理します。 3.構(gòu)造を埋め込むと、埋め込まれた構(gòu)造の方法が改善され、外側(cè)の構(gòu)造を介して直接呼び出すことができます。 4。GOは、Getter/Setterを使用する必要はありません。

GOのインターフェイスとは何ですか?また、それらを定義するにはどうすればよいですか? GOのインターフェイスとは何ですか?また、それらを定義するにはどうすればよいですか? Jun 22, 2025 pm 03:41 PM

Goでは、インターフェイスは、実裝を指定せずに動(dòng)作を定義するタイプです。インターフェイスはメソッドシグネチャで構(gòu)成され、これらのメソッドを?qū)g裝する任意のタイプは、インターフェイスを自動(dòng)的に満たします。たとえば、speak()メソッドを含むスピーカーインターフェイスを定義する場(chǎng)合、メソッドを?qū)g裝するすべてのタイプをスピーカーと見(jiàn)なすことができます。インターフェイスは、一般的な関數(shù)、抽象的な実裝の詳細(xì)、およびテストで模擬オブジェクトの使用に適しています。インターフェイスの定義は、インターフェイスキーワードを使用し、メソッドシグネチャをリストし、インターフェイスを?qū)g裝するためにタイプを明示的に宣言することはありません。一般的なユースケースには、ログ、フォーマット、さまざまなデータベースまたはサービスの抽象化、および通知システムが含まれます。たとえば、犬とロボットの両方のタイプは、話す方法を?qū)g裝し、それらを同じannoに渡すことができます

Golangサービスを既存のPythonインフラストラクチャと統(tǒng)合するための戦略 Golangサービスを既存のPythonインフラストラクチャと統(tǒng)合するための戦略 Jul 02, 2025 pm 04:39 PM

統(tǒng)合されたservicesと統(tǒng)合されたpothonistoninfrastructure、userestapisorgrpcforinter-servicecommunication、goandpythonappstoStoStosandizedprotocols.1.userestapis(Frameworkslikeginingoand flaskinpython)またはuserestapisを許可します

GOの文字列パッケージから文字列関數(shù)を使用するにはどうすればよいですか? (例えば、len()、strings.contains()、strings.index()、strings.replaceall()) GOの文字列パッケージから文字列関數(shù)を使用するにはどうすればよいですか? (例えば、len()、strings.contains()、strings.index()、strings.replaceall()) Jun 20, 2025 am 01:06 AM

GO言語(yǔ)では、文字列操作は主に文字列パッケージと組み込み関數(shù)を介して実裝されます。 1.Strings.Contains()は、文字列にサブストリングを含み、ブール値を返すかどうかを判斷するために使用されます。 2.Strings.index()は、サブストリングが初めて表示される場(chǎng)所を見(jiàn)つけることができ、存在しない場(chǎng)合は-1を返します。 3.Strings.ReplaceAll()は、一致するすべてのサブストリングを置き換えることができ、strings.replace()を介して交換の數(shù)も制御できます。 4.Len()関數(shù)は、文字列のバイトの長(zhǎng)さを取得するために使用されますが、Unicodeを処理する場(chǎng)合は、文字とバイトの違いに注意を払う必要があります。これらの機(jī)能は、データフィルタリング、テキスト解析、文字列処理などのシナリオでよく使用されます。

IOパッケージを使用して、GOの入力ストリームと出力ストリームを使用するにはどうすればよいですか? IOパッケージを使用して、GOの入力ストリームと出力ストリームを使用するにはどうすればよいですか? Jun 20, 2025 am 11:25 AM

thegoiopackageProvidesInterfacesLikerEaderAnderandRitoHandlei/ooperationsUniformlyAcrossources.1.io.Reader'SreadMethodenablessablesSreadingSuourCessuchasfilesorhtttttttttts

時(shí)間パッケージを使用して、GOの時(shí)間と期間で動(dòng)作するにはどうすればよいですか? 時(shí)間パッケージを使用して、GOの時(shí)間と期間で動(dòng)作するにはどうすればよいですか? Jun 23, 2025 pm 11:21 PM

GOの時(shí)間パッケージは、現(xiàn)在の時(shí)刻の取得、時(shí)刻差の計(jì)算、処理時(shí)間ゾーン、スケジューリング、睡眠操作など、処理時(shí)間と期間の機(jī)能を提供します?,F(xiàn)在の時(shí)間を取得するには、time.now()を使用して時(shí)間構(gòu)造を取得し、年()、月()、day()、およびその他の方法を通じて特定の時(shí)間情報(bào)を抽出できます。 Format( "2006-01-0215:04:05")を使用して、時(shí)間文字列をフォーマットします。時(shí)差を計(jì)算するときは、sub()またはonsy()を使用して持続時(shí)間オブジェクトを取得し、秒()、minutes()、およびhours()を通じて対応するユニットに変換します。

GOの條件に基づいてコードを?qū)g行するためのステートメントの場(chǎng)合、どのように使用しますか? GOの條件に基づいてコードを?qū)g行するためのステートメントの場(chǎng)合、どのように使用しますか? Jun 23, 2025 pm 07:02 PM

Ingo、ifstatementementecutecodebasedonconditions.1.BasicsTructurerunSablockifaconditionistrue、例えば、Ifx> 10 {...} dlesfalseconditions、例えば、else {...}。3.ElseifChainsMultipLeconditions、例えば、Elseifx == 10 {...}

See all articles