タグ付けされた質問 「hashing」

大量のデータを1つの非常に少ない数にまとめることを伴う課題。

24
ツイート可能なハッシュ関数チャレンジ
このコードチャレンジでは、140バイト1以下のソースコードでハッシュ関数を記述します。ハッシュ関数は、入力としてASCII文字列を受け取り、出力として24ビットの符号なし整数([0、2 24 -1])を返す必要があります。 ハッシュ関数は、この大きな英国英語辞書2のすべての単語に対して評価されます。スコアは、ハッシュ値を別の単語と共有する(衝突する)単語の量です。 最も低いスコアが勝ち、最初のポスターでタイが壊れます。 テストケース 送信する前に、次の入力でスコアリングスクリプトをテストしてください。 duplicate duplicate duplicate duplicate 4以外のスコアを与える場合、バグがあります。 明確化ルール: ハッシュ関数は、配列全体ではなく、単一の文字列で実行する必要があります。また、ハッシュ関数は入力文字列と出力整数以外のI / Oを実行しない場合があります。 組み込みのハッシュ関数または同様の機能(たとえば、スクランブルバイトへの暗号化)は許可されていません。 ハッシュ関数は決定的でなければなりません。 他のほとんどのコンテストとは異なり、得点入力用に最適化することは特に許可されています。 1 Twitterではバイトではなく文字が制限されていることは承知していますが、簡単にするために、この課題の制限としてバイトを使用します。 2 Debianのwbritish-hugeから変更し、非ASCIIワードを削除します。

20
ハッシュ衝突:「NO」は「YES」を意味します
このコードゴルフは、最近のDaily WTFの記事「You Ca n't Can the True!」に触発されました!、次のように記述された文字列比較を備えています。 String yes = "YES"; if ((delay.hashCode()) == yes.hashCode()) JavaのString.hashCodeメソッドがたまたまJavaのメソッドが次のように実装された場合、Steveのチームに生じたトラブルを想像してください"YES".hashCode() == "NO".hashCode()。したがって、ここで提案する課題は次のとおりです。 (私はそれを呼び出すよ、できるだけ少ない文字数で、ハッシュ関数を書く hように、文字列パラメータと整数戻り値で) h("YES")に等しいですh("NO")。 もちろん、これはdef h(s): return 0、すべての文字列に対してハッシュ衝突を発生させるのような関数で行うのは簡単です。この課題をさらに面白くするには、次の追加規則を順守する必要があります。 3つ以下の大文字のASCII文字()で構成される他の 18 277の可能な文字列のうち、ハッシュの衝突が発生して^[A-Z]{0,3}$はなりません。 明確化(Heiko Oberdiekが指摘):入力文字列には以外の文字が含まれている場合がA-Zあり、コードは任意の文字列をハッシュできる必要があります。(ただし、入力がいることを仮定してもよいです文字列ではなくNULLポインタまたは他のいくつかのデータ型のオブジェクト。)しかし、戻り値が一致しない文字列を何のためにあるのかは重要ではありません^[A-Z]{0,3}$限り、整数です。 さらに、この関数の意図をわかりにくくするには: コードには、文字または文字列リテラル内に文字「Y」、「E」、「S」、「N」、または「O」(大文字または小文字)を含めないでください。 もちろん、この制限は、言語のキーワードには適用されませんのでelse、returnなど細かいです。

19
私のパイは二等分されましたか?
正の整数の空でないリストを取り込むプログラムまたは関数を作成します。"1 2 3 4"またはなどの合理的で便利な形式で入力されていると想定できます[1, 2, 3, 4]。 入力リストの数値は、円グラフ全体のスライスを表します。各スライスサイズは対応する数値に比例し、すべてのスライスは指定された順序でグラフの周囲に配置されます。 たとえば、次のパイ1 2 3 4は次のとおりです。 あなたのコードが答えなければならない問題は、円グラフが今までされてい二分しますか?つまり、円の一方の側から他方の側に完全に直線があり、対称的に2つに分割されていますか? あなたはする必要があり、出力truthyの少なくとも一つの二等分線と出力がある場合に値をfalsy何も存在しない場合、値。 で1 2 3 4例との二分がある4 1と2 3出力truthyであろうように。 ただし、入力の1 2 3 4 5場合は二等分線がないため、出力は偽になります。 追加の例 数値を異なる方法で配置すると、二等分線が削除される場合があります。 例2 1 3 4→偽: 入力リストに数字が1つしかない場合、パイは二等分されません。 例10→偽: 複数の二等分線が存在する場合があります。ゼロ以上である限り、出力は真実です。 例6 6 12 12 12 11 1 12→真実:(3つの二等分線があります) 視覚的に明らかではない場合でも、2分割が存在する場合があります。 例1000000 1000001→偽: 例1000000 1000001 1→真実: (円グラフを生成してくれたnces.ed.govに感謝します。) テストケース …
43 code-golf  math  arithmetic  combinatorics  decision-problem  code-golf  sequence  number-theory  binary  code-golf  number-theory  set-theory  code-golf  hashing  code-golf  game  card-games  code-golf  ascii-art  code-golf  arithmetic  array-manipulation  jelly  code-golf  string  array-manipulation  code-golf  sorting  code-challenge  code-golf  number  date  binary  code-golf  arithmetic  code-golf  math  number  linear-algebra  polynomials  code-golf  ascii-art  code-golf  grid  decision-problem  code-golf  string  combinatorics  code-golf  string  kolmogorov-complexity  arithmetic  date  code-golf  number  data-structures  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  array-manipulation 

9
モンスターを認識させてください
バックグラウンド コンピューターゲームNetHackは、コンピューターゲームでのグラフィックスの使用が広く確立される前の1987年に遡ります。ゲームにはたくさんのモンスターがいて、一度に画面に収まる必要がある可能性があるため、モンスターは非常に最小限の方法で描かれます。モンスターは単にASCII文字として画面に描かれます。 たくさんのモンスターがあることに加えて、たくさんの種類のモンスターがあります。どちらがどれであるかを知ることは重要です。子猫とドラゴンを見たとき、あなたは異なる反応をしなければなりません。そのため、ASCIIのほとんどはモンスターを表すために使用されます。たとえば、子猫はfで、赤いドラゴンはDです。つまり、特定のモンスターがどのように見えるかを知ることは、ゲームの後半で遭遇した場合にそれを認識するのに役立つため、非常に役立つことがあります。(ASCII文字よりも多くの種類のモンスターがあるので、それらのいくつかは共有していることに注意してください;赤いドラゴンと青いドラゴンは両方Dです。) 仕事 プログラムは、入力としてNetHackモンスターの名前を取り、ゲーム内でそれを表すASCII文字を出力として生成する必要があります。プログラムは、入力が実際にはNetHackモンスターの名前であると想定できます。入力が無効な場合、クラッシュしたい場合、意味のない結果を生成する場合などがあります。 次のStack Snippetは、可能な入力を対応する出力に完全にマッピングするJSONオブジェクトです。 コードスニペットを表示 { "Aleax": "A", "Angel": "A", "Arch Priest": "@", "Archon": "A", "Ashikaga Takauji": "@", "Asmodeus": "&", "Baalzebub": "&", "Chromatic Dragon": "D", "Croesus": "@", "Cyclops": "H", "Dark One": "@", "Death": "&", "Demogorgon": "&", "Dispater": "&", "Elvenking": "@", "Famine": "&", "Geryon": "&", "Grand Master": "@", …

18
26人の歌手、26通の手紙
RollingStoneによると、以下は史上最高の26人の歌手です。 Aretha Franklin Al Green Ray Charles Robert Plant Elvis Presley Mick Jagger Sam Cooke Tina Turner John Lennon Freddie Mercury Marvin Gaye Bob Marley Bob Dylan Smokey Robinson Otis Redding Johnny Cash Stevie Wonder Etta James James Brown David Bowie Paul McCartney Van Morrison Little Richard Michael Jackson Roy …

23
暗号ハッシュゴルフ
このコンテストは終了しました。 警官と強盗のチャレンジの性質により、警官のチャレンジは、関連する強盗のチャレンジへの関心が減少した場合、はるかに簡単になります。したがって、ハッシュ関数を投稿することはできますが、回答は受け入れられず、リーダーボードの一部にもなりません。 この課題は、最短の実装のために検索されたハッシュ関数で衝突耐性、すなわち、同じハッシュを持つ2つの異なるメッセージを見つけるために実行不可能でなければなりません。 警官として、あなたはコードサイズと衝突抵抗の間の最良の妥協点を見つけるハッシュ関数を発明して実装しようとします。あまりにも多くのバイトを使用すると、別の警官があなたを追い出します! 強盗として、あなたは警官の機能をクラックすることで警官の試みを阻止しようとし、それらが不適切であることを証明します。これにより、アルゴリズムを強化するためにより多くのバイトが使用されるようになります! 警官の挑戦 仕事 暗号化ハッシュ関数H:I-> Oを選択して実装します。ここで、Iは2 2 30未満のすべての非負整数のセットであり、Oは2 128未満のすべての非負整数のセットです。 Hは、単一の整数、整数または整数の配列の文字列表現、またはSTDINから読み取り10進数または16進数でSTDOUTに出力する完全なプログラムを受け入れて返す実際の関数として実装できます。 得点 Hそれは抵抗するがあることを強盗は挑戦以下に定義します。 強盗が投稿後最初の168時間以内にあなたの投稿を無効にすると、クラックされたと見なされます。 Hの実装はできるだけ短くする必要があります。最短のクラックされていない提出物が警官チャレンジの勝者になります。 追加のルール Hを関数として実装する場合、上で説明したように動作するプログラム内から関数を実行するラッパーを提供してください。 プログラムまたはラッパーに少なくとも3つのテストベクトルを入力してください(入力例と対応する出力)。 Hは、自分で実装する限り、新しい設計(推奨)または既知のアルゴリズムにすることができます。あらゆる種類の組み込みハッシュ関数、圧縮関数、暗号、PRNGなどを使用することは禁じられています。 ハッシュ関数(たとえば、ベース変換)を実装するために一般的に使用されるすべての組み込みは、公正なゲームです。 プログラムまたは関数の出力は確定的でなければなりません。 x86またはx64プラットフォーム上で、またはWebブラウザー内から実行できる無料の(ビールのように)コンパイラー/インタープリターが必要です。 プログラムまたは関数は合理的に効率的で、2 2 19未満のIのメッセージを1秒未満でハッシュする必要があります。 エッジケースの場合、私のマシン(Intel Core i7-3770、16 GiBのRAM)にかかる(壁の)時間は決定的になります。 この課題の性質を考えると、出力を変更するかどうかにかかわらず、回答のコードを何らかの方法で変更することは禁止されています。 提出物がクラックされている場合(または、クラックされていない場合でも)、追加の回答を投稿できます。 回答が無効な場合(たとえば、I / O仕様に準拠していない場合)、削除してください。 例 Python 2.7、22バイト def H(M): return M%17 ラッパー print H(int(input())) 強盗チャレンジ 仕事 に次のように掲載することにより提出警官のいずれかをクラックスレッド強盗:二つのメッセージMとNでIようにH(M)= H(N)およびM≠N …

20
ファロは配列をシャッフルする
A ファロshuffleが頻繁に「シャッフル」デッキにマジシャンで使用される技術です。ファロシャッフルを実行するには、まずデッキを2つの等しい半分にカットしてから、2つの半分をインターリーブします。例えば [1 2 3 4 5 6 7 8] シャローファロは [1 5 2 6 3 7 4 8] これは何回でも繰り返すことができます。興味深いことに、これを十分な回数繰り返すと、常に元の配列に戻ります。例えば: [1 2 3 4 5 6 7 8] [1 5 2 6 3 7 4 8] [1 3 5 7 2 4 6 8] [1 2 3 4 5 6 …
31 code-golf  permutations  card-games  code-golf  graphical-output  random  code-golf  image-processing  color  code-golf  primes  code-golf  math  arithmetic  combinatorics  decision-problem  code-golf  sequence  number-theory  binary  code-golf  number-theory  set-theory  code-golf  hashing  code-golf  game  card-games  code-golf  ascii-art  code-golf  arithmetic  array-manipulation  jelly  code-golf  string  array-manipulation  code-golf  sorting  code-challenge  code-golf  number  date  binary  code-golf  arithmetic  code-golf  math  number  linear-algebra  polynomials  code-golf  ascii-art  code-golf  grid  decision-problem  code-golf  string  combinatorics  code-golf  string  kolmogorov-complexity  arithmetic  date  code-golf  number  data-structures  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  array-manipulation 

30
常に同じ長さの出力
以下のような課題にコードと同じ長さの出力と二回のコードの長さを出力を作成し、私は別のが、同様の課題を考えました。 タスクは出力を生成することです。文字列、文字のリスト、またはプログラムのデフォルトの出力形式を使用できます。ただし、入力に関係なく、出力は常に同じ長さでなければなりません。さらに重要なことに、出力は入力ごとに異なる必要があります。 入力 単一の整数nnnの範囲は、言語の選択によって決まります。お使いの言語が可変長整数を持っている場合、範囲は−231≤n&lt;231−231≤n&lt;231-2^{31} \leq n < 2^{31}。 出力 文字列または文字のリスト、またはSTDOUTまたはSTDERRへの印刷。これらの方法のいずれかのみを使用できます。出力は、入力に関係なく同じ長さである必要がありますが、どの長さを定義するかはユーザー次第です。出力には、数字0-9またはマイナス記号が含まれていない場合があります-。出力は決定的でなければなりません。 正式な証明、引数、または総当たり検索によって、すべての出力に対して可能な入力が1つしかないことを証明できるはずです。 これはコードゴルフの質問であるため、余分なバイトを取り除きます。すべての言語が歓迎されます、より良い!

15
セミパリンドロームパズル
回文とは、それ自体が逆の言葉です。 今ではパリンドロームのように見えるかもしれないがそうではない単語がいくつかあります。たとえば、単語 はパリンドロームsheeshで sheeshはありません。その逆はhseehsどちらが異なるかを考えshてみましょう。しかし、単一の文字と考えると、逆はになりsheeshます。この種の単語をセミパリンドロームと呼びます。 具体的には、単語をいくつかのチャンクに分割して、チャンクの順序が逆になったときに元の単語が形成される場合、単語はセミパリンドロームです。(sheeshこれらのチャンクはsh e e sh)単語の両方の半分からの文字を含むチャンクも必要ありません(そうでない場合、すべての単語はセミパリンドロームになります)。たとえば、元の単語の両側の文字を含むチャンク()があるrearため、セミパリンドロームではありません。奇数の長さの単語の中心文字は単語のどちら側にもないと考えます。したがって、奇数の長さの単語の場合、中心文字は常に独自のチャンクになければなりません。r ea rea あなたの仕事は、正の整数のリストを取得し、それらがセミパリンドロームかどうかを判断することです。コードは、入力がセミパリンドロームの場合とそうでない場合の2つの一貫した等しくない値を出力する必要があります。ただし、コードのバイトシーケンスはセミパリンドロームそのものでなければなりません。 回答はバイト単位でスコアリングされ、バイト数が少ないほど優れています。 テストケース [] -&gt; True [1] -&gt; True [2,1,2] -&gt; True [3,4,2,2,3,4] -&gt; True [3,5,1,3,5] -&gt; True [1,2,3,1] -&gt; False [1,2,3,3,4,1] -&gt; False [11,44,1,1] -&gt; False [1,3,2,4,1,2,3] -&gt; False より多くのテストケースを生成するプログラム。 恐ろしいことは、これらが一般化されたスマランダチェ回文に似ていることを指摘した。したがって、さらに読みたい場合は、1つの場所から始めてください。

10
自然ログのアリ
これは良い初心者の挑戦であり、良い時間のキラーです。 タイトルが短すぎたため、自然対数だけを言いました。これは対数とは関係ありません。 与えられた2つの変数: アリの数n。 ログの幅w。 幅のログwをnアリで出力します(例はw=3、n=6) | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | …

30
最初に0ではなく、個別の数字でランダムなn桁の数字を取得します
私はこの質問を読み、それがいい挑戦になると思った。 仕事 入力0&lt;n&lt;10で乱数を生成する 正確にn桁 最初ではない 0 そう f(n)&gt;10**(n-1)-1 個別の数字 受賞基準 これはコードゴルフなので、最短のコードが優先されます。 ランダム ランダムに均等に分散されるということです。そのため、プログラムの観点からは、考えられる各数字には同じチャンスがあります。あなたが書いている言語が奇妙な乱数ジェネレーターを持っているなら、それを使用しても大丈夫です。 例 ランダムに選択する値のリストn=2は次のとおりです。 [10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, …
22 code-golf  number  random  grid  game  king-of-the-hill  javascript  code-golf  arithmetic  statistics  code-golf  math  code-golf  math  code-golf  string  palindrome  code-golf  string  interactive  code-golf  quine  polyglot  code-golf  string  stack-exchange-api  code-golf  number-theory  decision-problem  code-golf  tips  code-golf  string  internet  code-golf  graphical-output  image-processing  fractal  code-golf  ascii-art  geometry  hexagonal-grid  code-golf  string  restricted-source  hello-world  code-golf  game  code-golf  cipher  code-golf  permutations  cops-and-robbers  permutations  cops-and-robbers  code-golf  internet  stack-exchange-api  code-golf  ascii-art  random  code-golf  tips  code-golf  ascii-art  code-golf  code-golf  kolmogorov-complexity  code-golf  string  unicode  code-golf  number  sequence  primes  palindrome  code-golf  game  decision-problem  code-golf  math  geometry  code-golf  graphical-output  interactive  code-golf  set-partitions  code-golf  number  arithmetic  restricted-source  code-golf  decision-problem  python  recursion  code-golf  ascii-art  code-golf  source-layout  code-golf  function  recursion  functional-programming  code-golf  game  combinatorics  permutations  code-golf  string  file-system  code-golf  string  hashing  code-golf  stack-exchange-api  code-golf  string  code-golf  math  number  arithmetic  polyglot 

3
メタ放射線硬化剤
バックグラウンド このサイトでは、プログラムを「放射線強化」するように要求する質問が時々あります。つまり、どのバイトが削除されても、プログラムは1つまたは複数のバイトの削除に耐えることができなければなりません。 プログラミングの課題で頻繁に設定されるタスクでは一般的であるように、これらの課題に特に優れた言語を作成したいのは自然なことです。これを行うための自然な方法は、破損を元に戻すことができるメタデータを追加することであることを考えると、実際には設計が必要な言語ではなく、エンコードです。アイデアは、各入力をバイトのシーケンスに変換することで、シーケンスがわずかに照射されても、元の入力を抽出できるようにします。 タスク 次のような2つのプログラムまたは関数、E(エンコーダー)およびD(デコーダー)を記述します。 Eは、オクテットのシーケンス(この仕様では「入力」と呼びます)と非負整数の「放射」の2つの引数を取り、「エンコーディング」のオクテットのシーケンスを出力します。 Dは1つの引数、オクテットのシーケンス( " encdng ")を取り、オクテットのシーケンス " 再構成 " を出力します。 EとDの両方を実行する場合(encdng、エンコーディングから放射要素を削除することで選択されるDへの入力(必ずしも連続的ではない))、encdngを形成するために削除された文字に関係なく、再構築は入力と等しくなります。 明確化 あなたが機能を提出する場合は、それらを呼び出す必要はありませんEとしますD。言語に最適な名前を​​選択できます。 「オクテット」は基本的に0から255までの整数であり、整数、文字、または言語に適したものとしてエンコードできます。 EとDは完全に決定的でなければなりません(つまり、同じ入力を与えると常に同じ出力が生成されます。「入力」はEの入力と放射、またはDのencdngとして定義されます)。特に、Eはサイドチャネルを介してDに情報を伝達しない場合があります。 削除は、シーケンスの1つの要素を削除することにより実行されます。エディターでシーケンスを開き、カーソルを任意のポイントに置き、Backspaceキーを押すことを考えてください。要素が複数回出現する場合、要素のコピーが1つだけ削除される可能性があります(つまり、同じオクテットの他のインスタンスは影響を受けません)。 スコアはかなり短い入力に基づいてのみ計算されますが、プログラムは入力および放射に対して理論的に機能する必要があります。特に、inputにどのオクテットが現れても機能しなければなりません。(申し訳ありませんが、入力に表示されないことがわかっている印刷できない文字を使用したい人は、入力が非圧縮性であることを確認する必要があります。 2つの関数を定義する1つのファイルを送信できます。それぞれ関数を定義するか、両方とも完全なプログラムである2つのファイル。または3つのファイル。2つはそれぞれDおよびEを実装します(完全なプログラムであるか関数を定義することにより)。3つ目はDとEの両方に共通のヘッダーファイルまたはライブラリです。使用する送信形式に関係なく、プログラミング言語の実装は、ファイルの場所などの引数を追加せずに両方のプログラムを理解できる必要があります(または、標準の規則に従って、通常とは異なる方法で実装を呼び出すためのバイトペナルティを支払う必要があります)。 勝利条件 各々に対して長さと放射線、聞かせてF(長さ、放射線の)の合計の長さである符号化全て秒その対応する入力の長さと長さ、及び所定の放射。(つまり、f(長さ、放射)= 入力の長さは長さ length(E(入力、放射))になります。)次に、g(長さ、放射)がf(長さ、放射)÷256 長さ。言い換えれば、gは入力の長さと放射線強化の要件に対するエンコードされた出力の平均長です。(理論上はこれをブルートフォースで計算できますが、そのようにスコアを計算するのには信じられないほど時間がかかるでしょう。不明な点があります。おおよそのスコアを投稿してください。他のエントリが同様のスコアを投稿した場合、あなたまたは他の誰かがより深く計算することができます。) あなたのスコアはの和に等しいグラム(長さ、放射線のすべてのための)放射範囲の0〜9まで含めて、すべての長さ 99包括範囲0で、プラス(主にハードコーディングを避けるために、または行く競争を維持する場合誰かが数学的に完璧なエンコーディングを発見します。これは、そうでなければ最小限の要因である可能性があります)チャレンジへの提出の合計バイト数(および異常なインタープリターフラグまたは特定のファイル名を要求するようなものに対する標準ペナルティ)。勝者は、最も低いスコアのエントリです(最初に送信するエントリによってタイブレークされます)。

4
SHA-256を実装する
バイトのシーケンスを指定して、シーケンスのSHA-256ハッシュ値を出力します。 SHA-256アルゴリズム 次の擬似コードは、SHA-2のウィキペディアのページから取得したものです。 Note 1: All variables are 32 bit unsigned integers and addition is calculated modulo 2^32 Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 ≤ i ≤ 63 Note 3: The compression function uses 8 …

5
ビットコインで2016年の鉱山!PCG.SE新年のパズル2016
ビットコインプロトコルでは、2016年は非常に特別な数字です。ハッシュを見つけて新しいブロックを作成する「難易度」は、2,016ブロックごとに調整され、2週間に1回の変化を概算します。 この数値が選択された理由は、難易度が調整されて、すべてのブロックが見つかるまで約10分かかり、2週間で2×7×24×6 = 2,016の10分の期間があるためです。 この数値の偶然の一致を記念して、今年の新年の問題はビットコイン、具体的にはブロックに署名するために使用するハッシュアルゴリズムSHA-256についてです。 あなたの仕事は含んでSHA-256ハッシュを生成すること(お好みの形式で)Aナンスのバイトバイト(少なくともASCII)で入力と出力を取るプログラムを作成することで2016、その中にbase64で元に追加するときの表現をバイト入力。 以下は、人々がすでに生成したエンジンとそれらが生成したハッシュのおかげで、有効なソリューションの例です。 &gt; foo Nonce: 196870 SHA256 hash: OCUdDDtQ42wUlKz2016x+NROo8P2lbJf8F4yCKedTLE= &gt; bar Nonce: 48230 SHA256 hash: CNcaOCQgT7bnlQzQPXNwuBu8/LYEdk2016khRaROyZk= &gt; happynewyear Nonce: 1740131 SHA256 hash: XsKke6z2016BzB+wRNCm53LKJ6TW6ir66GwuC8oz1nQ= &gt; 2016 Nonce: 494069 SHA256 hash: rWAHW2YFhHCr22016zw+Sog6aW76eImgO5Lh72u6o5s= (note: the nonces don't actually have to be ASCII numbers; you can do any byte …

14
任意の長さのハッシュ
あなたが持って考えてみましょうハッシュ関数 HH\mathcal{H}の長さの文字列を取る2n2n2nの長さの戻り文字列nnn、それがあることを素敵なプロパティがある耐衝突、すなわち、見つけるのは難しいです二つの異なる文字列s≠s′s≠s′s \neq s'同じハッシュを持つH(s)=H(s′)H(s)=H(s′)\mathcal{H}(s) = \mathcal{H}(s')。 ここで、任意の長さの文字列を取得し、それらを長さnの文字列にマッピングする新しいハッシュ関数H′H′\mathcal{H'}を作成します。nnn 幸運なことに、すでに1979年に、Merkle–Damgård構造として知られる方法が公開されました。 この課題の課題は、このアルゴリズムを実装することです。そのため、アプローチがより簡単であることを示すステップバイステップの例に進む前に、最初にマークル・ダムガード構造の形式的な説明を見ていきます。最初に表示される場合があります。 いくつかの整数n&gt;0n&gt;0n > 0、上記のハッシュ関数HH\mathcal{H}および任意の長さsss入力文字列sが与えられると、新しいハッシュ関数H′H′\mathcal{H'}は次のことを行います。 設定l=|s|l=|s| l = |s|、sssの長さ、および長さnのチャンクにsssを分割し、必要に応じて最後のチャンクを末尾のゼロで埋めます。この収率は、mは= ⌈ Lnnnm=⌈ln⌉m=⌈ln⌉m = \lceil \frac{l}{n} \rceil 標識されている多くのチャンクc1,c2,…,cmc1,c2,…,cmc_1, c_2, \dots, c_m 。 リーディングを追加して、後続チャンクc0c0c_0とcm+1cm+1c_{m+1}、ここで、c0c0c_0からなる文字列であり、nnnゼロとcm+1cm+1c_{m+1}であり、nnnバイナリで、で埋め主要長さにゼロnnn。 今反復適用HH\mathcal{H}現在のチャンクにcicic_i、前の結果に添付ri−1ri−1r_{i-1}:ri=H(ri−1ci)ri=H(ri−1ci) r_i = \mathcal{H}(r_{i-1}c_i)、r0=c0r0=c0r_0 = c_0。(このステップは、以下の例を見るとより明確になるかもしれません。) H ′の出力H′H′\mathcal{H'}は、最終結果rm+1rm+1r_{m+1}です。 タスク 入力として正の整数かかるプログラムや関数書き込みnnn、ハッシュ関数HH\mathcal{H}としてブラックボックスおよび空でない文字列sss、H 'と同じ結果を返すH′H′\mathcal{H'}、同じ入力で。 これはcode-golfであるため、各言語の最短の回答が優先されます。 例 レッツ・発言n=5n=5n = 5、そう私たちの与えられたハッシュ関数HH\mathcal{H}長さ5の長さ10とリターンの文字列の文字列を取ります。 入力所与s="Programming Puzzles"s="Programming Puzzles"s = \texttt{"Programming Puzzles"} …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.