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

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

12
バイナリカーはいつありますか?
今日仕事を始めたとき、私の車の走行距離計は101101であったことに気づきました。これは、バイナリ(および回文ですが、それは重要ではありません)であるため、すばらしい数字です。さて、次にバイナリ走行距離計の読み取りを行うときを知りたいです。走行中は走行距離計を読むことができません。それは危険だからです。仕事や家に帰るときはバイナリでなければなりません。 オフィスへの行き帰りに交通渋滞がひどいので、毎日違うルートをとる必要があります。 この挑戦のために、一日は往復であり、通勤から始まります。 走行距離計の最初の測定値と、各方向のマイル数を表す10要素のシーケンスを取得する必要があります。バイナリ走行距離計の読み取り値に到達するまで、このシーケンスを繰り返す必要があります。次に、バイナリ読み取りに到達するまでにかかる日数を出力する必要があります。 ルートの走行距離と走行距離計の読み取り値は両方とも正の整数になります。日のカウントはどちらかになりますxか、x.5一日数のあなたの出力は半分日間浮動小数点をサポートする必要があるので、。日数が整数の場合、を出力する必要はありません.0。オドメーターは常に最終的にバイナリ状態になります。 あらゆる形式の入出力が許容され、標準の抜け穴は許可されません。 テストケース: 101101, [27, 27, 27, 27, 27, 27, 27, 27, 27, 27] == 165.0 1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100] == 22.5 2, [2, 3, 1, 2, 7, 6, 10, 92, 3, 7] == 2.0

13
中央二乗法
前書き 中間二乗法は、擬似乱数の生成に使用されます。ただし、これは実際には有効な方法ではありません。その期間は通常非常に短く、いくつかの深刻な弱点があるためです。これはどのように作動しますか?例を見てみましょう: シードについては、次のものを選択し123456ます。 Seed 123456 シードの2乗(シード×シード)は、次と等しい: Seed² 15241383936 6桁の数字から始めました。つまり、シードの2乗は12桁の数値を提供するはずです。そうでない場合は、先行ゼロを追加して補正します。 Seed² 015241383936 次に、シードと同じサイズの数値の中央部分を取得します。 Seed² 015241383936 ^^^^^^ これが新しい種です:241383。上記と同じプロセスを繰り返します。次のものが得られます。 0: 123456 015241383936 | | 1: 241383 058265752689 | | 2: 265752 070624125504 | | 3: 624125 389532015625 | | 4: 532015 283039960225 | | 5: 039960 001596801600 | | 6: 596801 そして、これはしばらく続きます...さて、中間二乗法が何であるかがわかったので、挑戦に行きましょう: タスク …

20
変動範囲
番号付きのリストが与えられたら、次のような範囲を出力します。 入力:[0, 5, 0]になり[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]ます。 これは、配列を範囲をマッピングしているので、私たちは最初の範囲を作成する必要が[0, 5]あります、[0, 1, 2, 3, 4, 5]。その後、を使用し5てrangeを作成します[5, 0]。以前の範囲で追加された、これは私たちに与えます: [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0] 同じ数字が2つ並んだテストケースを見てみましょう。 [3, 5, 5, 3], ranges: [3, 5] = 3, 4, 5 [5, 5] = 5 (actually …

1
0h n0ボードを解く
0h n0は非常にシンプルで楽しいゲームで、数独や掃海艇に少し似ています。 ゲームのルール (可能であれば、ゲームでチュートリアルを使用することをお勧めします。非常にシンプルで便利です) パズルは、n * nいくつかの固定ピースといくつかの空のセルを含むボードから始まります。ソルバーは、空のセルをピースで満たし、固定ピースによって課せられるすべての制約を満たす方法を見つけなければなりません。略語で使用するピースのタイプは次のとおりです。 # 赤い部分(青い部分のブロックビュー) O ブルーピース . 空の場所 number番号付きの青い部分(number1桁以上の数字です) 番号付きのすべてのピースには、番号とまったく同じ量の青いピースが表示される必要があります。例えば: #1O#O ...O. 1作品は一つだけ、他の青の部分を見ることができます。 ピース同士の見方 2つの青い部分が同じ行または列にあり、それらの間に赤い部分がない場合、互いに見えます。例: (作品が見ることができる、見ることができないS場所です)OX S S X#SOSS # X 各青いピースには、少なくとも1つの他の青いピースが表示される必要があります。 #O# うまくいかないが: #OO または: ### 仕事する。 デモボード解決 .1.. ..1. .... 22#2 右下2はそれ自体の上にしか見えないので、青でなければならず、右上は赤でなければなりません。 .1.# ..1O ...O 22#2 1は塗りつぶされているため、赤い部分で囲むことができます。 .1## .#1O ..#O 22#2 左上1は一方向にしか見えないため、埋めることができます。 O1## …

20
配列のミニマックスを計算する
アレイ検討xなど[1 5 3 4]と番号nたとえば、2。すべての長さ-書くnスライディングサブアレイを:[1 5]、[5 3]、[3 4]。配列のミニマックスをスライディングブロックの最大値の最小値として定義します。それで、この場合5, 5, 4、それは最小であるでしょう、それは4です。 チャレンジ 配列xと正の整数を指定すると、n上記で定義されたミニマックスを出力します。 配列xには正の整数のみが含まれます。nは常に少なくとも1、最大での長さになりxます。 計算は任意の手順で実行できますが、必ずしも上記で定義したとおりではありません。 コードゴルフ、最少バイトが勝ちます。 テストケース x、nその結果、 [1 5 3 4], 2 4 [1 2 3 4 5], 3 3 [1 1 1 1 5], 4 1 [5 42 3 23], 3 42

6
迷信的なプログラミング
あなたの挑戦は非常に簡単です。入力として年を指定し、グレゴリオ暦に従って13日金曜日を含むその年のすべての月を印刷します。グレゴリオ暦は1582年まで導入されていませんが、簡単にするために0001 AD以降使用されているふりをすることに注意してください。 ルール 完全なプログラムまたは機能が許可されます。 入力は、関数の引数として、STDINから、またはコマンドライン引数として受け取ることができます。 日付と時刻の組み込みを使用することはできません。 入力が有効な年になると安全に想定できます。入力が有効な整数ではなく1より小さいか、言語のネイティブの数値型より大きい場合、これを処理する必要はなく、未定義の動作が発生します。 出力は、標準を指定する限り、数字、英語、またはその他の人間が読める形式にすることができます。 うるう年を考慮してください。また、うるう年は4年ごとに発生するわけではありません。 ヒント これについてはさまざまな方法がありますので、その方法を説明したくありません。ただし、どこから始めれば混乱するかもしれないので、日付から曜日を決定するいくつかの異なる信頼できる方法があります。 コンウェイの終末アルゴリズム 0001年1月1日月曜日などの既知の曜日を使用して開始日を選択し、2日間の間隔を確認して、その数値をmod 7とします。 ガウスのアルゴリズム ガウスのアルゴリズムのバリエーション これらの方法のいずれか サンプルIO 2016 --> May 0001 --> 4, 7 1997 --> Jun 1337 --> 09, 12 123456789 --> January, October いつものように、これはコードゴルフなので、標準的な抜け穴が適用され、最短回答が勝ちます。 コードスニペットを表示 var QUESTION_ID=69510,OVERRIDE_USER=31716;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var …
19 code-golf  date  time 

11
二乗差を最大化する
整数値の順列を検討1するがN。たとえば、次の例N = 4: [1, 3, 4, 2] このリストは循環的である1と見なし、そのように、および2隣接として扱われます。そのようなリストについて計算できる1つの量は、隣接する値の差の2乗の合計です。 (1-3)² + (3-4)² + (4-2)² + (2-1)² = 10 あなたの仕事は、正の整数を与えられて、この量を最大にする順列を見つけることNです。N = 4上記の例の場合、最適ではありません(実際、最小限です)。18次の順列(および他のいくつかの順列)の合計平方差を達成できます。 [1, 4, 2, 3] アルゴリズムは(のN)多項式時間で実行する必要があります。特に、すべての順列の差の合計を単純に計算することはできません。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 出力は、任意の便利で明確なフラットリストまたは文字列形式にすることができます。0toのN-1代わりに1toの値を持つリストを返すことを選択できますN。 標準のコードゴルフ規則が適用されます。 テストデータ この問題に対する優れた分析ソリューションがあります。たとえば、すべての有効なソリューションN = 10は次のリストと同等です(巡回シフトおよび反転まで)。 [7, 5, 6, 4, 8, 2, 10, 1, 9, 3] 私は(それがパターンを把握する、おそらく十分ですが)それを超えてあまりにも明らかにし、その代わりに任意のより多くの例を与える、あなたは結果が与えられたため、次の総乗違いがあることを確認することができますしたくありませんN。 N Total squared difference 1 0 2 …
19 code-golf  array-manipulation  permutations  restricted-complexity  code-golf  geometry  grid  code-golf  string  sorting  code-golf  simulation  code-golf  string  code-golf  arithmetic  code-golf  sorting  code-golf  string  code-golf  sorting  code-golf  interpreter  code-golf  number  kolmogorov-complexity  natural-language  conversion  code-golf  random  internet  code-golf  board-game  code-golf  number  sequence  code-golf  math  number  code-challenge  image-processing  classification  test-battery  code-golf  ascii-art  code-golf  tips  code-golf  arithmetic  code-golf  tips  code-golf  tips  javascript  code-golf  array-manipulation  code-golf  ascii-art  code-golf  string  binary  code-golf  arithmetic  linear-algebra  matrix  code-golf  sequence  code-golf  math  number  arithmetic  code-golf  primes  code-golf  math  code-golf  array-manipulation  counting  code-golf  arithmetic  code-golf  quine  code-generation  polyglot  code-golf  math  kolmogorov-complexity  trigonometry  code-golf  string  encryption 

15
ハイパーキューブ要素
N次元ハイパーキューブの各タイプの要素(頂点、エッジ、面など)の数を出力する関数またはプログラムを作成します。 例として、3次元キューブには1つのセル(つまり1つの3次元キューブ)、6つの面(つまり6つの2次元キューブ)、12のエッジ(つまり12の2次元キューブ)と8つの頂点(つまり8つの0次元キューブキューブ)。 Hypercube要素の詳細については、こちらをご覧ください。 あなたにも見てとることができ、次のOEISシーケンスを。 入力 コードは(STDINまたは関数パラメーターなどを介して)入力として、0以上の整数(ハイパーキューブの次元)を受け取ります。 コードは、メモリと時間の問題を無視して、理論的には0以上の入力に対して機能する必要があります(つまり、入力が大きい場合、速度と潜在的なスタックオーバーフローは答えの問題ではありません)。テストケースとして与えられた入力は12を超えません。 出力 「最高次元」要素から始めて、ハイパーキューブのすべての要素のリストを出力します。たとえば、キュ​​ーブ(入力= 3)の場合、リスト[1,6,12,8](1セル、6面、12エッジ、8頂点)を出力します。 出力のリストの形式は、リストのように見える限り比較的自由です。 結果をSTDOUTに出力するか、関数から返すことができます。 テストケース Input = 0 Output = [1] Input = 1 Output = [1,2] Input = 3 Output = [1,6,12,8] Input = 10 Output = [1, 20, 180, 960, 3360, 8064, 13440, 15360, 11520, 5120, 1024] Input = 12 …

20
メタキンを書く
メタキンとは、クインではないが、その出力が同じ言語のプログラムとして実行されたとき、クインであるプログラムです。 この課題の目標は、メタキンを書くことです。これはcode-golfなので、最短のコードが優先され、最も早い回答がタイブレーカーとして使用されます。クインの定義により、完全なプログラムのみが許容されることに注意してください。 クインのルール 真のクインのみが受け入れられます。つまり、あなたは、STDOUTに逐語的に全体のソースコードを印刷する必要がなくて: ソースコードを直接または間接的に読み取る。 REPL環境に依存します。REPL環境は、フィードするすべての式を単に評価して出力するだけです。 特定の場合にソースを出力するだけの言語機能に依存しています。 エラーメッセージまたはSTDERRを使用して、クインのすべてまたは一部を書き込みます。(STDOUTが有効なクインであり、エラーメッセージがその一部でない限り、STDERRに書き込むか、警告/致命的でないエラーを生成できます。) 純粋にリテラル(文字列リテラル、数値リテラルなど)および/またはNOPのみで構成されるソースコード。 抑制できない出力(著作権表示、起動/シャットダウンメッセージ、末尾の改行など)は、クインの有効性のために出力で無視される場合があります。 例 リテラルのみのプログラムと組み込みのquiningを禁止するルールを無視すると、これはまじめにメタキンになります。 "Q" プログラムは、"Q"出力で暗黙的に出力される単一の文字列リテラルで構成されます。出力(Q)が実行されると、それはクインです(Q組み込みのクイン関数です)。

19
ルーカスナッチ数
バックグラウンド ほとんどの人はフィボナッチ数に 精通していますF(n): 0、1、1、2、3、5、8、13、21 ... これらは、再帰関数によって形成されているF(n) = F(n-1) + F(n-2)とF(0)=0してF(1)=1。A000045 密接に関連するシーケンスはルーカス番号 L(m)です: 2、1、3、4、7、11、18、29 ... これらは、再帰関数によって形成されているL(m) = L(m-1) + L(m-2)とL(0)=2してL(1)=1。A000032 我々は、構造と、偶数/奇数インデックスに基づいて、2つの配列の間で交互することができる A(x) = F(x)場合x mod 2 = 0とA(x) = L(x)そうでありません。たとえば、A(4)はF(4)since と等しい4 mod 2 = 0です。私たちは、このシーケンスを呼ぶだろうルーカス・nacci番号、A(x): 0、1、1、4、3、11、8、29、21、76 ... これは、再帰関数を用いて形成することができるA(x) = 3*A(x-2) - A(x-4)とともにA(0)=0、A(1)=1、A(2)=1、とA(3)=4。A005013 チャレンジ inputが与えられるとn、上記のようn+1に、それを含む一連の数値を出力しますA(n)。最少バイト(または、Metaで個別に決定される、LabVIEWなどのバイト相当)が勝ちます。 入力 単一の非負整数n。 出力 数字のリストからルーカス- nacci数のサブシーケンスに対応するようA(0)にA(n)。上記のように、リストは順番に並んでいる必要があります。 ルール 標準のコードゴルフ規則と抜け穴の制限が適用されます。 …

3
素数のマッピング
最近、正の整数から有限のネストされたシーケンスへの全単射写像fを見つけました。この課題の目的は、選択した言語で実装することです。 マッピング 数考えるN因子とどこ。次に: 例えば: ルール このタスクを実行するための完全なプログラムまたは関数を作成できます。 出力は、シーケンスとして認識可能な任意の形式にすることができます。 素因数分解、素数テストなどの組み込みが許可されています。 標準の抜け穴は許可されていません。 プログラムは、私のマシンで10分以内に最後のテストケースを完了する必要があります。 これはコードゴルフなので、最短のコードが勝ちです! テストケース 10: {{},{{}},{}} 21: {{{}},{},{{}}} 42: {{{}},{},{{}},{}} 30030: {{{}},{{}},{{}},{{}},{{}},{}} 44100: {{{{}}},{{{}}},{{{}}},{},{}} 16777215: {{{{}}},{{}},{{}},{},{{}},{{}},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{{}}} 16777213:ペーストビン

1
日付から数式を作成する
私の経済学のクラスでは、友人と私は、日付(MM / DD / YY)形式の数字を再配置して有効な数学方程式を作成する方法を考え出します。ほとんどの場合、連結に加えて、加算、減算、乗算、除算、括弧、およびべき乗を使用できます。 プログラムは同様のことを行う必要があります。プログラムは現在の日付をインポートし、演算子を挿入して、次の規則に従って式を印刷する必要があります。 数字は順番に使用する必要があります。数字の再配置は許可されていません。 結果の式は数学的に正確でなければなりません。 加算、減算、乗算、除算、べき乗、および括弧の使用が許可されています。数字の連結も同様です。ただし、すべての操作が必要なわけではありません。減算記号を使用して数字を負にすることはできません(-1+1+11=102010年11月11日など)。 プログラムは、標準のマシンで60秒で実行する必要があります。 たとえば、このチャレンジは2015年11月10日に作成されました。プログラムはこれを11/10/15と解釈します。サンプル出力はになります(1+1)/10=1/5。 ボーナス プログラムがサポートする次の各コードごとに、コードのバイト数に0.9を掛けることができます。 プログラムは、形成可能なすべての可能な式を改行で区切って出力します。式が追加のシンボルの昇順でリストされている場合は、追加の0.95を掛けます。 このプログラムはMM / DD / YYYYの日付でも機能し、年の最初の2桁の可能性に加えて、可能性を印刷します。このボーナスを最初のボーナスと組み合わせる場合、年の最初の2桁のすべての可能性を印刷する必要があります。 プログラムはまた、複数の等式がある場合の式(例えば、2011年11月11日に、プリント1=1=1=1=1=1などの可能性に加えて、印刷される1*1=1=1=1=1、1*1*1=1=1=1および1*1*1*1=1=1すべてのそのような場合には、達成すべき最初のボーナスのために印刷されなければなりません。 プログラムは、2〜16の基数への変換をサポートしています。基数が10でない場合、式のすべての数値は同じ基数で (Base b)記述し、式の後に(必要bに応じて置き換えて)記述する必要があります。 これはコードゴルフなので、標準的な規則が適用されます。バイト単位の最短コードが優先されます。

1
Connect 4の勝者を決定する
部分的に塗りつぶされたConnect 4グリッド(7x6)が表示されます。 O X O X X O X O O X O X O X X O X X X O O X O O O X X O X (入力は1Dまたは2D配列として、また文字または数字などとして与えることができます。) と仮定する Xがゲームを開始しました。 誰もまだ勝ちません。 プレイヤーは今までうまくプレイできなかったかもしれませんが、今後は両方とも最適な戦略を採用します。 入力グリッドに問題はありません。 どのプレイヤーが勝つ(または引き分け)を示す単一の値を出力する必要があります コードゴルフチャレンジ; 最短のコードが優先されます。プログラムは、妥当な時間で実際に出力を計算する必要はありませんが、有限の時間で出力が正しく取得されることを証明できるはずです。

10
できるだけ近くにあるキーを使用してQWERTYキーボードを印刷します
通常、チャレンジはバイト単位、または時にはレーベンシュタイン距離でスコア付けされますが、これにはキーボード距離(プログラムの入力に使用されるキー間のキーの数)を使用します(上記のキーボードを最終的な参照として使用します)。たとえば、パスは=> => => であるため、Aとの間の距離Fは3 です。間の距離とは、あなたが取るどのようなパスに関係なく、それは少なくとも4つのステップを必要とするため、4です。あなたの仕事は、可能な限り短いキーボード距離で、次のものを出力することです(末尾のスペースは含みません):ASDFN5 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M ラッピング: 生活を楽にするために、特定のキーをキーボードの周りに巻き付けることができます。Left ShiftにラップRight Shift、Caps LockラップEnter、Tabラップ\、~ラップしBackspaceます。例えば、の間の距離QとはP、5であるためQ=> Tab=> \=> ]=> [=>Pです。 注:折り返しは水平方向にのみ機能します-たとえば、\にCaps Lock 得点: スコア=キーボード距離+バイト数 計算例: print(5); p=>r == 6 r=>i …

5
Antichessをプレイ!
https://en.wikipedia.org/wiki/Losing_chess これは基本的にチェストーナメントですが、アンチチェス用です;) アンチチェスは、発明された多くのチェスのバリエーションの 1つです。目標は、すべてのピースを失うことです(これは少し奇妙に思えるかもしれませんが、理由によりアンチチェスと呼ばれます)。 ルール アンチチェスのルールは標準チェスと非常に似ていますが、いくつかのかなり小さな違いがあります。上記の目標は、すべてのピースを失うことです。これを実現するために、対戦相手が自分のピースの1つをキャプチャする機会がある場合、それは彼が行うことができる唯一の動きです。1ターンで彼に複数のチャンスを与えた場合、他のプレイヤーは自分のターンを選択できます。変更されたもう1つのことは、王には特別な力がないことです-あなたのように相手をチェックメイトすることができず、あなたに彼を強制的にチェックすることはできません。 標準ゲームに対する次の変更も適用されます(ゲームの簡素化に役立ちます)。 入場者は無視されます。 キャスリングはできません。 50手ルールは、(引き分けで試合終了を意味する)に自動的に適用されます。 ポーンは、昇格先を選択できます。 プレイヤーが移動するのに2秒以上かかる場合、ゲームに負けます。 無効な動きを返すと、ゲームに負けます。 勝つためには、対戦相手がすべてのピースをキャプチャする必要があります。 ホワイトがゲームを開始します。 白はフィールドの「下部」に配置され(y = 0)、黒は上部に配置されます(y = 7)。 ボット以外のリソース(インターネット、ファイル、他のボットなど)へのアクセスは禁止されています。 得点 勝つと3ポイント、引き分け1ポイント、0ポイントを失います。 各サブミッションは、他のサブミッションと10回対戦します(白で5回、黒で5回)。 ボットを書く コントローラーコードはこちら:https : //github.com/JJ-Atkinson/SimpleAntichessKOTH ボットはJavaまたはGroovyで作成できます。ボットを作成するには、Playerクラスを拡張する必要があります。プレーヤークラスには1つの抽象メソッドがありMove getMove(Board board, Player enemy, Set<Move> validMoves)ます。 便利なメソッドの簡単な概要を次に示します。 Player: List<Piece> getPieces(Board board):ボード上のすべてのピースを返却します。 PieceUpgradeType pieceUpgradeType:ポーンの1つがボードの最後に達した場合、これをアップグレードするピースのタイプに定義する必要があります。あなたは、の選択肢を持っているROOK、KNIGHT、QUEEN、BISHOP、とKING。 Board: Field getFieldAtLoc(Location loc):Fieldその場所に戻ります。これにはマッチングgetAt方法があるため、groovyを使用している場合は記述できますboard[loc]。 Field getFieldAtLoc(int x, int …

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