プログラミングパズルとコードゴルフ

プログラミング愛好家やコードゴルファーのためのQ&A

29
巡回後継者の合計で私を置き換えてください!
今回は簡単な挑戦です。正の整数の配列を指定して、A(またはあなたの言語で同等)、各エントリ置き換えるAを、私は、次の合計とAのi個のの要素A、十分なアイテムが存在しない場合は、最初からバックをサイクリング。 いつものように、これらの抜け穴はデフォルトで禁止されていることに注意しながら、任意のプログラミング言語で競争し、標準的な方法および合理的な形式で入力を取得し、出力を提供できます。オプションで、入力としてAのサイズを取ることもできます。これはcode-golfであるため、すべての言語の最短の送信(バイト単位)が優先されます。 例/テストケース 与えられた場合[1,3,4,5]、あなたのコードは[3,10,13,14]、に1置き換えられますので3、3に置き換えられます4+5+1=10(最初からどのように折り返されたかに注意してください)、4by 5+1+3+4=13および5by 1+3+4+5+1=14。 与えられた[3,2,1,9]、あなたのプログラムが生成しなければならない[12,10,9,33]、我々は代用ので、3と2+1+9=12、2と1+9=10、1と9と9と3+2+1+9+3+2+1+9+3=33(私たちは戻って最初から複数回包まれた方法に注目してください)。 いくつかのテストケースから選択できます。 [4,3,2,1] -> [10,7,5,4] [3,2,1,9] -> [12,10,9,33] [1,3,4,5] -> [3,10,13,14] [4,4,3,2,2] -> [11,11,8,6,8] [3,5,3,2,1] -> [10,14,6,4,3] [3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3] [7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30] [28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34] [1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] -> [2,7,13,14,12,8,5,3,2,7,9,7,4,2,1]

30
ゼロサムカウント
与えられたプログラムまたは機能を記述≥1 N ±1±2、±3±...±へ戻るソリューションの数N = 0。 n = 6の場合、解は存在しないため、答えは0です。n= 4の場合、解は2つありますので、答えは2です(2つの解は1-2-3 + 4 = -1 + 2 + 3-4 = 0)。 これは、OEISシーケンスA063865です。入力/出力の例は次のとおりです。 n a(n) 1 0 2 0 3 2 4 2 5 0 6 0 7 8 8 14 9 0 10 0 11 70 12 124 13 0 14 0 …

25
Golf A括弧マッチングアルゴリズム
文字列が与えられますs。文字列[のsと]s が等しく、少なくとも1つあることが保証されます。ブラケットのバランスが取れていることも保証されます。文字列には他の文字を含めることもできます。 目的は、タプルのリストまたは各[および]ペアのインデックスを含むリストのリストを出力/返すことです。 注:文字列はゼロインデックスです。 例: !^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]返す必要があります [(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]またはこれと同等のもの。タプルは必要ありません。リストも使用できます。 テストケース: input:[[asdf][][td([)ty54g% ]hg[[f]u][f[[jhg][gfd]sdf]sdfs]ghd]fr43f] output:[(0, 62),(1, 6), (7, 8), (9, 56), (13, 22), (25, 30), (26, 28), (31, 52), (33, 47), (34, 38), (39, 43)] input:[[][][][]][[][][][[[[(]]]]])) output:[(0, 9), (1, 2), (3, 4), …

20
形状識別プログラム
あなたの仕事は、入力の形状を識別するプログラムを作成することです。識別される形状は、次のいずれかです。 平方 正方形として識別されるためには、ソースはすべて同じ長さの行と、1行あたりの文字数と同じ行数(改行文字を除く)を持っている必要があります。オプションの末尾の改行も使用できます。 $_=' $_=" $_"' ;say 矩形 長方形として識別されるためには、ソースはすべて等しい長さの行を持っている必要がありますが、行数は行ごとの文字数と一致しません(改行文字は除外されます)。オプションの末尾の改行も使用できます。これは、水平または垂直のいずれかです。 $_= "no t a squ are ";# $_="but it is still a consistent shape!";## 三角形 三角形として識別するには、ソースは1文字で始まり、後続の各行に追加の文字(最後を含む)が1つ必要です。または、最初の行の後、後続の各行は最後まで1文字少ない必要があります。 1つだけです。 $ _= "So this "."". shape; $_="or even, this way !! " 混乱 上記のような一貫した形式に従わないものはすべて、混乱として識別される必要があります。 ルール 4つの一貫した印刷可能な値を返して、各形状を識別できます。 また、ソースコードは上記の形状のいずれかに準拠する必要があります(いや、混乱ではありません)。 ソース内の単一の末尾の改行は許容されます。 入力には空白行(末尾の改行を含む)が含まれておらず、空ではなく、改行のみで構成されていないことが想定できます。 すべての形状の高さと幅は2以上である必要があります。それ以外の場合、これは混乱として定義されます。 標準的な抜け穴は禁止されています。 各言語のバイト単位の最短ソリューションが勝ちです。

19
覚えておいてください!
入力 印刷可能なASCII文字の文字列、たとえば: This is an example string. 出力 BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz母音(AEIOUaeiou)が後に続かない子音()ごとに、その前の最後の母音を小文字で追加します。 最初の母音の前の子音はそのまま残されます: Thisi isi ana examapale seterinigi. テストケース AN EXAMPLE WITH A LOT UPPERCASE (plus some lowercase) => ANa EXAMaPaLE WITiHi A LOTo UPuPEReCASE (pelusu some lowerecase) And here comes a **TEST** case with 10% symbols/numbers(#)! => Anada here comese a **TESeTe** …
25 code-golf  string 

2
ルービックキューブですか?
ped敬の念を抱かせる時間は、「ルービックキューブ」の写真(Tシャツ、ポスターなど)が実際には解けないことを指摘することです。 最初に確認する必要があるのは、キューブが適切なピースで構成されていることです。キューブを解くには、それぞれが9つの正方形の6色が必要です。また、キューブには、エッジとコーナーの各ユニット(キューブを構成する小さなキューブ)が一意である必要があります。それらは一意である必要があるだけでなく、2つの中央ピースが互いに向かい合っている場合、エッジまたはコーナーピースはこれらの色の両方を含むことができません。 すべての適切なピースで構成されるキューブを作成したら、それが解決可能であることを確認する必要があります。ここにはいくつかのルールがありますので、専門家に説明を委ねます。以下のネタバレでこれを行う方法を説明します。自分で問題を解決することに興味がある場合は、サイトにアクセスしてこの課題を理解したり参加したりする必要はありません。 リンクされた説明 あなたの仕事は、入力としてパターンを取り、それが実際に解けるルービックキューブであるかどうかを判断することです。解けるようにするには、キューブの有効な移動を実行する方法が必要です。これにより、キューブの各面の色が1つだけになります(また、異なる面の色は異なります)。ほとんどのルービックキューブには標準の色が付いています(白は黄色の反対側など)。この特定の色に解決状態が続くとは思わないかもしれません。 有効な移動は、立方体の1つの面の時計回りまたは反時計回りの回転です。立方体の面を回転すると、面に接する正方形も回転し、以前に触れていた面に接続されたままになります。 IO キューブは合理的な方法で使用できます。言語に組み込みの「キューブフェイス」タイプがあり、入力に適している場合は、キューブのネットの2D配列、各フェイスに1 3 x 3リストを使用できます。ただ合理的です。特定の形式が受け入れられるかどうかを知りたい場合、またはチャットでpingを送信し、その有効性を示すためにチャレンジに追加します。 入力フォーマットは、最大9色までサポートする必要があります。 出力の場合、これは決定問題であるため、「はい、これは有効なルービックキューブです」に1つの定数値を、「いいえ、これは有効なルービックキューブではありません」に別の定数値を出力する必要があります。 これはコードゴルフであるため、回答はバイト単位でスコアリングされ、バイト数が少ない方が優れています。 テストケース ここにテストケースがあります。これらは、各正方形が1文字の立方体のネットとしてフォーマットされます。異なる文字は異なる色を表します。リクエストに応じて、さらにテストケースを追加できます。 可解 RRR RRR RRR GGGWWWBBBOOO GGGWWWBBBOOO GGGWWWBBBOOO YYY YYY YYY GRR GRR ORW WWRBWYBOOGGY GGRBWGYBBOOO OOGRWGYWWRBB WYO YYB YYB 解決できない RRR RRR RRR GGGWWWBBBOOO GGGWWWBBBOOO GGGWYWBBBOOO YWY YYY YYY RRR RRR RRR GGGWWWBBBOOO GGGWWWBBBOOO …

30
紛らわしいアルファベット階段
入力がない場合、受け入れられた出力方法を介して、どちらの場合でもこの興味深いアルファベットパターンを出力します(大文字と小文字が一致している必要があります)。 A AB ACBC ADBDCD アベケデ AFBFCFDFEF AGBGCGDGEGFG AHBHCHDHEHFHGH AIBICIDIEIFIGIHI AJBJCJDJEJFJGJHJIJ AKBKCKDKEKFKGKHKIKJK ALBLCLDLELFLGLHLILJLKL AMBMCMDMEMFMGMHMIMJMKMLM ANBNCNDNENFNGNHNINJNKNLNMN AOBOCODOEOFOGOHOIOJOKOLOMONO APBPCPDPEPFPGPHPIPJPKPLPMPNPOP AQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQ ARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQR ASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRS ATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTST AUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURSTU AVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUV AWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVW AXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXTXVVXWX AYBYCYDYEYFYGYHYYYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXY AZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZ 末尾のスペースと改行は許容され、標準の抜け穴は許可されません。これはたまたまcode-golfであるため、バイト単位の最短回答が優先されます。

30
数字モザイクをデザインしましょう
チャレンジ 正の整数与えられ、NNNその各桁d1,d2,d3,⋯,dnd1,d2,d3,⋯,dnd_1, d_2, d_3, \cdots, d_nを内の位置に対応する回数繰り返しNNNます。換言すれば、各桁dkdkd_k繰り返されるべきkkk回(各1≤k≤n1≤k≤n1\le k\le n、1インデックス)こうして新たな数を作成し、: d1d2d2d3d3d3⋯dndndn⋯dnn times¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯d1d2d2d3d3d3⋯dndndn⋯dn⏟n times¯\overline{d_1d_2d_2d_3d_3d_3\cdots\underbrace{d_nd_nd_n\cdots d_n}_{n\text { times}}} 次に、水平方向と垂直方向の両方に書き留めて、空白の列インデックスと行インデックスの間の大きいインデックスに対応する数字のコピーで空白を埋めます。最終的な出力は次のようになります。 ⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢d1d2d2d3d3d3⋯d2d2d2d3d3d3⋯d2d2d2d3d3d3⋯d3d3d3d3d3d3⋯d3d3d3d3d3d3⋯d3d3d3d3d3d3⋯⋮⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[d1d2d2d3d3d3⋯d2d2d2d3d3d3⋯d2d2d2d3d3d3⋯d3d3d3d3d3d3⋯d3d3d3d3d3d3⋯d3d3d3d3d3d3⋯⋮]\begin{bmatrix} \color{red}{d_1} \color{green}{d_2 d_2} \color{blue}{d_3 d_3 d_3} \cdots \\ \color{green}{d_2 d_2 d_2} \color{blue}{d_3 d_3 d_3} \cdots \\ \color{green}{d_2 d_2 d_2} \color{blue}{d_3 d_3 d_3} \cdots \\ \color{blue}{d_3 d_3 d_3 d_3 d_3 d_3} \cdots \\ \color{blue}{d_3 d_3 …

25
完全なペアリングの検出
関数fを持ちましょうfff文字列を受け取り、隣接する同一の文字のすべてのペアを削除をします。例えば f(abbbacc)=abaf(abbbacc)=abaf(a\color{red}{bb}ba\color{red}{cc}) = aba 2つのペアが重複する場合、そのうちの1つのみを削除することに注意してください。 繰り返しアプリケーションが最終的に空の文字列を生成する場合、文字列を完全にペアで呼び出します。たとえば、上の文字列は完全にペアではありません再度適用するとが得られるためです。ただし、ような文字列は完全にペアになっています 3回適用すると空の文字列が取得されるためです。f a b a e a b b c c a d d e fabbbaccabbbaccabbbaccfffabaabaabaeabbccaddeeabbccaddeeabbccaddefff f(eabbccadde)=eaaef(eabbccadde)=eaaef(ea\color{red}{bbcc}a\color{red}{dd}e) = eaae f(eaae)=eef(eaae)=eef(e\color{red}{aa}e) = ee f(ee)=f(ee)=f(\color{red}{ee}) = あなたの仕事は、(印刷可能なASCIIの)文字列を受け取り、それが完全にペアリングされているかどうかを判断する、完全にペアリングされたコンピューターコードを記述することです。 ソースのバイト文字列はそれ自体が完全にペアの文字列である必要がありますが、コードは必ずしも印刷可能なASCIIに制限する必要はありません。 2つの異なる値を出力できます。1つは入力が完全にペアリングされている場合、もう1つはペアリングされていない場合です。 これはコードとゴルフの質問であるため、回答はソースのバイト数でスコア付けされ、バイト数は少ない方が良いでしょう。 テストケース abbbacc→Falseabcba→Falseabab→Falseabbbaabacc→Trueeabbccadde→Truebbbb→Trueabbbacc→Falseabcba→Falseabab→Falseabbbaabacc→Trueeabbccadde→Truebbbb→Trueabbbacc \rightarrow \mathrm{False}\\ abcba \rightarrow \mathrm{False}\\ abab \rightarrow \mathrm{False}\\ abbbaabacc \rightarrow \mathrm{True}\\ eabbccadde \rightarrow \mathrm{True}\\ bbbb …

30
IPアドレスかどうか?
ネットワークスキャンツールは、入力についてうるさくうるさいので、不適切な文字を含むIPv4アドレスまたは適切にフォーマットされていないIPv4アドレスを入力すると、すぐにクラッシュします。 IPv4アドレスは、ピリオドで区切られた4つの数字として記述された32ビットの数値アドレスです。各番号は0〜255にできます。 これらのクラッシュを回避するために、入力を事前検証するツールを作成する必要がありますが、特定のツールには注意が必要です。有効な形式はa.b.c.d、a、b、c、dのようになります。 先行ゼロなしの0自然数または自然数を指定できます。 0から255の間(両端を含む)でなければなりません。 必要がありませんのような特殊な記号含まれ+、-、,、などを。 10進数でなければなりません(基数10) 入力:文字列 出力:TruthyまたはFalseyの値(任意の値も受け入れられます) テストケース: Input | Output | Reason | | - 1.160.10.240 | true | - 192.001.32.47 | false | (leading zeros present) - 1.2.3. | false | (only three digits) - 1.2.3 | false | (only three digits) - 0.00.10.255 | false …

23
交通方向
ルール ISO3166-1-Alpha-2国コードが与えられた場合、あなたの仕事はその国の交通の方向を決定することです。 入力は有効な国コードになります(それは、提供されている2つのリストの要素であるため有効です)。 入力が役立つ場合は、文字列ではなく2文字のリストにすることができます 小文字で入力することを選択できます 1つの値を選択します(正しい場合)(その国のトラフィックが右利きである場合、および他の場合はそれ以外の場合はその値を出力します) これらのリストのいずれかに含まれる国コードのみを処理する必要があります。 これらは、トラフィックが左利きのすべての国です。 ['AI', 'AG', 'AU', 'BS', 'BD', 'BB', 'BM', 'BT', 'BW', 'VG', 'BN', 'KY', 'CX', 'CC', 'CK', 'CY', 'DM', 'FK', 'FJ', 'GD', 'GG', 'GY', 'HK', 'IN', 'ID', 'IE', 'IM', 'JM', 'JP', 'JE', 'KE', 'KI', 'LS', 'MO', 'MW', 'MY', 'MV', 'MT', 'MU', 'MS', 'MZ', 'NA', …

30
シンプルなストップウォッチを実装する
チャレンジ あなたの仕事は、プログラムを作成することです。プログラムは、1秒に1回(プログラムの開始時を含む)、プログラムが開始されてからの経過時間を出力します。 ルール 時間はhh:mm:ss形式で印刷する必要があります。(1桁の値の場合は先行ゼロ) タイムスタンプは、CR、LF、またはCRLFで区切る必要があります。(先頭に空白がない) 毎秒新しい時間が表示されなければなりません。(stdoutは1秒間バッファリングできません) 23:59:59を過ぎて実行された場合のプログラムの動作は未定義です。 sleep(1)印刷、計算、ループなどのオーバーヘッドが1秒に累積するたびに特定の1秒がスキップされる場合でも使用できます。 出力例: 00:00:00 00:00:01 00:00:02 00:00:04 00:00:05 ⋮ 00:00:03処理のオーバーヘッドのためにここにないことに注意してください。実際にスキップされた値(もしあれば)は、もちろん実装やシステムに依存します。 Cでの参照実装:(POSIX互換システムのみ) #include <unistd.h> // sleep() #include <tgmath.h> #include <assert.h> #include <stdlib.h> #include <stdio.h> #include <time.h> #ifndef __STDC_IEC_559__ #error "unsupported double" #endif static_assert(sizeof(double) == 8, "double must have double precision"); #define MAX_PRECISE_DOUBLE ((double)(1ULL << 52)) …
25 code-golf  date 

17
私の愚かな古い目覚まし時計をシミュレート
私は2つのボタンを持つ愚かな古い目覚まし時計を持っています:hourとminute。このhourボタンは、設定されたアラームの時間を増やし、設定されたアラームminuteの分の時間を増やします。ただし、一部のスマートデザイナーは、両方のボタンを同時に押すことには意味があることに気付き、and hourをminute同時に押すとアラームが12:00 am/ に設定されると判断しました0:00。あなたの仕事は、この動作をシミュレートすることです。 仕事 開始時間と一連のボタン状態が与えられたら、終了時間を把握します。 開始時刻から開始して、の各出現ごとに時間を(1,0)増やし、の各出現ごとに分を増やし、の各出現ごとに(0,1)時間を設定します。どちらのボタンも押されていないことに対応するため、状態は無視する必要があります。0:00(1,1)(0,0) 分と時間に追加するときに、分/時間が最大値を超える場合、に設定し0ます。つまり、分の値を増やすと分値が59設定され、0時間の値を増やすと時間値が23設定され0ます。制限を超える分/時間値の増分は、他の値に影響しません。たとえば、10:59yields の分では10:00なく、yieldsの増分11:00です。 例 入力時間13:58とステップを考えると[(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)]、 (0,1)。これはminute押されることに対応します。今が時です13:59。 (0,1)。これはminute押されることに対応します。今が時です13:00。 (0,1)。これはminute押されることに対応します。今が時です13:01。 (0,0)。これは、どちらのボタンも押されていないことに対応します。影響を受けない時間は今13:01 (1,1)。これは、両方のボタンが押されていることに対応します。今が時です0:00。 (1,0)これはhour押されることに対応します。今が時です1:00。 で終わるので1:00、それが出力です。 I / O 入力は、時間と一連のボタン状態で構成されます。出力は1回です。 入力時間と出力時間は 2組(hour, minute)または(minute, hour)中24など-hour時間(13, 30)(hourの範囲0へ23とminute範囲から0の59) 前しかしと同じ12-hour時間とブールam/ pmスイッチ(hourの範囲0に11、または12と1を11有するminuteから0の59)。 0:00810などの分数(0から1439まで) 同じ情報をエンコードするその他の形式 ボタンの状態のシーケンスは、ブール2タプルのリストの表現です。次に例を示します。 タプルのリスト: [(0,1),(1,0),(0,0),(1,1)] スペース区切りの文字列: "01 10 00 11" 文字列: "01100011" 第四紀に: [1,2,0,3] 整数に変換: 99 同じ情報をエンコードするその他の形式 テストケース time,steps -> output …
25 code-golf  date 

30
このコードは、* this *および* that *でエラーが発生しますが、実際にそれらに書き込まれていますか?
私はあなたが探している言語ではないことに触発されました! チャレンジ 2つの異なるプログラミング言語を選択し、次の行をstdout(または同等のもの)に出力するプログラムを作成します。 This program errors out in <the current language> :P そして、2つの言語のそれぞれで異なる種類のエラーを生成します。 ルール いくつかのルールは元のチャレンジから取られています。 出力では、言語名は次のとおりです。 記載されている名前TIO、必要に応じてバージョン番号および/または実装名を除いて、(あなたが使用している場合たとえばJavaScript (Node.js)、あなたの言語の一つとして、あなたが使用できるJavaScript言語名のために、ではありませんJSかJavascript。) 選択した言語がTIOで利用できない場合は、公式Webサイト(またはGitHubリポジトリ)のフルネーム。 どちらのプログラムもユーザーからの入力を受け付けません。 コメントはどちらの言語でも使用できます。 同じ言語の2つの異なるバージョンは、異なる言語としてカウントされます。 これを行うと、プログラムはメジャーバージョン番号を出力し、2つの異なるマイナーバージョンで実行している場合は、マイナーバージョンも報告する必要があります。 ビルド済みのバージョン関数を使用しないでください(これには、実行時にすでに評価された変数が含まれます)。 同じ言語の2つの異なるコマンドラインフラグも、フラグにコードフラグメントが含まれていない限り(C など)、このメタコンセンサスに従って異なる言語としてカウントされ-Dblahblah...ます。 これが行われた場合、プログラムは使用されたフラグも出力する必要があります。 2つのエラーは、両方のエラーが同じセマンティクス(「ゼロ除算」、「セグメンテーション違反」、「インデックス範囲外」など)によって生成されない限り、異なると見なされます。 言語のランタイムがエラー後に終了せず、何らかの方法でエラーをユーザーに報告する場合、それは有効なエラーです。 言語がエラーメッセージを識別しないが、エラーを引き起こす原因の既知のリストがある場合、エラーメッセージではなく理由を指定する必要があります。 例としては><>、エラーメッセージsomething smells fishy...が1つしかありませんが、esolangs wikiページにはエラーの理由のリストがあります。 呼び出しeval()などによって生成されない限り、構文エラーは許可されません。 手動で(throwJS)、raise(Python)、die(Perl)などを使用して何かをスローすることは許可されますが、それらはすべて1種類のエラーと見なされます。 2Dまたはgolflangsの無効なコマンドによるエラーも許可されます(1種類のエラーとして扱われます)。 例 PythonとRuby Python:This program errors out in Python :P標準出力、未定義識別子 Ruby:This program errors out …

6
ギムリ、もっと短くしますか?
私はギムリの著者の一人です。Cにはすでに2ツイート(280文字)のバージョンがありますが、どれだけ小さくできるかを確認したいと思います。 Gimli(論文、ウェブサイト)は、暗号化ハードウェアおよび組み込みシステムに関する会議(CHES)2017(9月25-28日)で発表される、高セキュリティレベルの暗号順列設計です。 タスク いつものように:Gimliの小さく使用可能な実装を、選択した言語で作成します。 することができるはず、入力として384ビット取る(...または48バイト、または12 unsigned int型の)とリターン(あなたは、ポインタを使用する場合は所定の位置に変更することができる)ギムリの結果は、これらの384ビットに適用されます。 10進数、16進数、8進数、または2進数からの入力変換が許可されます。 潜在的なコーナーケース 整数エンコードは、リトルエンディアンであると想定されます(たとえば、既にあるもの)。 名前を変更するGimliにGそれはまだ、関数呼び出しでなければなりません。 誰が勝ちますか? これはコードゴルフなので、バイト単位の最短回答が勝ちです!もちろん、標準ルールが適用されます。 リファレンス実装を以下に示します。 注意 いくつかの懸念が提起されました。 「ギャングさん、私のプログラムを他の言語で無料で実装してください。そうする必要はありません」(thx to @jstnthms) 私の答えは次のとおりです。 Java、C#、JS、Ocamlで簡単に実行できます。現在、我々(Gimliチーム)は、AVR、Cortex-M0、Cortex-M3 / M4、Neon、SSE、SSE-unrolled、AVX、AVX2、VHDL、Python3に実装(および最適化)しています。:) Gimliについて 状態 Gimliは、一連のラウンドを384ビット状態に適用します。状態は、次元3×4×32の平行六面体、または同等に、32ビットワードの3×4マトリックスとして表されます。 各ラウンドは、3つの操作のシーケンスです。 非線形層、具体的には各列に適用される96ビットSPボックス。 2ラウンドごとに、線形混合層。 4ラウンドごとに、一定の追加。 非線形レイヤー。 SPボックスは3つのサブ操作で構成されています。1番目と2番目の単語の回転。3入力の非線形T関数。そして、最初と3番目の単語の交換。 線形レイヤー。 リニアレイヤーは、Small-SwapとBig-Swapの2つのスワップ操作で構成されます。スモールスワップは、1ラウンド目から4ラウンドごとに発生します。ビッグスワップは、3ラウンド目から4ラウンドごとに発生します。 ラウンド定数。 ギムリには24ラウンド、24、23、...、1の番号が付けられています。ラウンド数rが24,20,16,12,8,4の場合、ラウンド定数(0x9e377900 XOR r)を最初の状態ワードとXORします。 Cの参照ソース #include <stdint.h> uint32_t rotate(uint32_t x, int bits) { if (bits == …

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