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

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

4
グループ療法:グループを特定する
特定の有限マグマの乗算表がグループを表すかどうかを決定するプログラムを作成します。マグマは、閉じている二項演算のセットです。つまり、 Gのすべてのa、bについて、a * bは再びGにあります(閉店) (G、*)をマグマとします。(G、*)は次の場合にグループです Gのすべてのa、b、cに対して、(a * b)* c = a *(b * c)(結合性) Gにすべてのaに対してe * a = a * e = aとなる要素eが存在します(中立要素の存在) Gのすべてのaについて、a * b = b * a = eであるようなGにabがあります。ここで、eは中立要素です(逆の存在) スペック 入力は、n ^ 2-1文字の文字列(マグマの各要素に1文字、許可されるのは0-9、az)で、演算子名を省略して、行ごとに読み取ったテーブルを表します。入力が有効なマグマを表すと仮定できます(つまり、各要素はヘッダー行/列で1回だけ出現します)。 例:ここにZ_4のテーブルがあります + | 0 1 2 3 ----------- 0 | 0 1 2 3 …

4
DDOSされたインターネットから回復する方法
インターネットが失敗しました。現在、DDoS攻撃はramp延し、広まっています。インターネットを制御し、修復するのはあなた次第です。 各ボットは、このネットワーク内の20のノードを制御します。すべてのノードはアクティブまたは安全であり、所有者を持ち、2から始まる強度を持ちます。すべてのアクティブノードは他のすべてのアクティブノードに接続されます。 ターンごとに、すべてのアクティブノードとその強さのリストを受け取ります。所有するアクティブノードごとに、次のいずれかを実行します。 全体の強度を転送するアクティブノードを指定するか、または 強度を保存して向上させる その後、次のことが順番に発生します。 強度を保存することを選択したノードは、強度を1増加させます。 強度を転送することを選択したすべてのノードは、強度全体を新しいノードに同時に転送します。 ノードが敵ノードから強さを転送された場合、攻撃が続きます。敵の所有者が元の所有者(および他のすべての攻撃者)よりも多くの力をまとめて移した場合、その敵は新しい所有者になります。そのノードの強度は、攻撃者の強度になります。強さが同点の場合、所有者はランダムに選択されます。 強度なしで残されたすべてのノードは安全と見なされ、所有者に1ポイントを与えます。 100ターンの100ゲーム後、すべてのゲームで最も安全なノードを持つ所有者が勝ちます。編集:2000から100ターンに変更しました。最後の1900ターンは役に立たなかったので IO 次のようなアクティブノードのリストが(コマンドライン引数を介して)渡されます。 F20 F4 E7 E2 E20 F2 Fノードが味方ノードであるEことを示し、ノードが敵であることを示します。 フレンドリノードごとに、次のようなアクションを(STDOUT経由で)返す必要があります。 0,0 1,3 5,0 上記は、最初のノードの強度を増やし、2番目のノードを使用して4番目のノードを攻撃し、最後のノードがその強度を最初のノードに転送することを意味します(誰も攻撃しない場合、それは安全なノードになります)。 戻った後、プログラムは終了するはずです。 スコアボード アキュムレーターは3240ポイントを獲得しました 上品な2370ポイントを得た ダンボットは2262ポイントを獲得しました random_botは1603ポイントを獲得しました smarter_random_botは1319ポイントを獲得しました steady_botは1097ポイントを獲得しました コントローラーはここで見つけることができます:https : //github.com/nathanmerrill/NetAttack

16
黄金比継続分数のMathJaxを生成する
MathJaxが一時的に無効になることを見越して、この質問でレンダリングされたMathJaxは画像に置き換えられました。回答を投稿することはできますが、レンダリングされたMathJaxを別のサイトで表示する必要があります。 PPCG が MathJaxを入手しました!これは、適切にフォーマットされた数式を投稿に簡単に含めることができることを意味します。(便利なMathJaxチュートリアル。) たとえば、次の例は黄金比を無限連続分数として表したものです。 この方程式のMathJaxコードは $$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}}$$ これを見つけるには、数式を右クリックし、[ 数学を表示 ] →[ TeXコマンド ]をクリックします。手段は、それは代わりに、インラインのページの中央に、自身の上に表示されます。単一のインラインを使用します。$$$ チャレンジ 非負の整数nを取り込んで、黄金比の継続分数の「ステップ」の多くの「ステップ」のMathJaxコードを出力するプログラムを作成します。 回答全体で物事を標準に保つには、次の正確な MathJax構文を使用する必要があります。 n = 0の場合、出力はでなければなりません$$\varphi=1+\dots$$。 次のようにレンダリングされます: n = 1の場合、出力はでなければなりません$$\varphi=1+\cfrac1{1+\ddots}$$。 次のようにレンダリングされます: n = 2の場合、出力はでなければなりません$$\varphi=1+\cfrac1{1+\cfrac1{1+\ddots}}$$。 次のようにレンダリングされます: n = 3の場合、出力はでなければなりません$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}$$。 次のようにレンダリングされます: このパターンは、nが大きくなると続きます。nは、方程式の分割線の数を表していると言えます。 ノート \cfracより一般的なの代わりに使用され\fracます。 \dots\ddotsn = 0の代わりに使用されます。 stdinまたはコマンドラインから入力を取得します。 stdoutへの出力(オプションの末尾の改行付き)。 または、nを整数として受け取り、MathJaxコードを文字列として返す(または印刷する)関数を作成することもできます。 得点 バイト単位の最小の提出が勝ちです。Tiebreakerは以前の提出に進みます。

30
前の回答の最初の文字を印刷します
受け入れられた勝者はisaacgで、彼の7ビットASCII回答があります。ただし、課題はまだ終わっていません-この賞金は最短の回答に与えられます。、場合何とか、あなたが他のすべての答えのすべての最初の文字を10バイトに降りて、あなたは懸賞金を獲得します。これには、ラウンド2のGolfScript回答からのすべてのキャラクター(およびその回答自体によって追加されたキャラクター)が含まれます。これは私があなたに順不同にすることを許す一度です-あなたがこれに異議があるならば、私にコメントで知らせてください。 randomraに敬意を表したいと思います。randomraは私の古いアイデアを助けてくれて、この新しいアイデアをくれました。 前の勝者 ラウンド1:isaacg、7ビットASCIIで Next bytes: 30 (or 10 if you want that sweet, sweet rep) ご存知のように、コードゴルフは本当にクールです。人々は挑戦し、ゆっくりと小さくなります!しかし、これを別の方法でやってみましょう。だから、ここに私の挑戦です: コードは、以前のすべての回答の最初の文字を、投稿された順序で出力します(最初の回答では何も出力されません) コードは100バイトから始まり、毎回5バイトずつ減少します。 2つの投稿の回答が同じ場合(つまり、両方とも数秒以内に投稿される場合)、新しい投稿は古い投稿のキャラクターを追加し、5バイト(数秒でも)減らす必要があります。 任意の言語を使用できます。 コードでエラーが発生してはいけません。 コードは、最初のステップに必要なすべてのバイトを使用する必要があります。 コードはSTDOUTに出力する必要があります。 印刷できない文字は問題ありませんが、次のとおりです。 彼らは最初のキャラクターにはなれません(この質問の目的のため) どこにいるのかをみんなに知らせる必要があります 複数の回答を投稿できますが、次のとおりです。 2つの回答を待ってから別の回答を投稿する必要があります(100バイトを投稿した場合、85バイトまで待つ必要があります)。 できません: 10バイト以上のコメントを使用する プログラム全体で使用されない変数がある プログラムを空白で埋めます 10バイトより長い変数名を使用します(ただし、10バイト未満の変数を複数使用できます) (EMBLEMの最初の回答は、これらの制限の前に投稿されたため、これらのルールの例外です。) 標準的な抜け穴はありません。あなたが挑戦からすべての楽しみを取りたくない限り。 3週間以上回答が送信されない場合、使用するバイト数が最も少ない回答が優先されます。(同点の場合、長い方の文字列を印刷した方が勝ちです。) 例:3番目の答えは、2つの文字(100バイトコードの最初の文字、次に95バイトコードの最初の文字)を出力する90バイト長のコードでなければなりません。最初の回答では何も出力されません(charを取得するための以前の回答はありません)。

7
Dammアルゴリズムを使用してチェックディジットを計算する
Luhnなどの一般的なチェックディジットアルゴリズムがあり、次にDammアルゴリズムなどの良いものがあります。Luhnなどのアルゴリズムの人気の背後にある唯一の考えられる理由は、それらのコードゴルフ実装が存在することです。これは、より良いアルゴリズムのゴルフ実装を提供することにより、コミュニティとしての世界を変える力を持っていることを意味します。 したがって、この課題は、Dammアルゴリズムを使用してチェックディジットを計算する関数または選択した言語で完全なプログラムを作成することにより、世界を変えることです。数が最も少ないの答え文字(バイトではない)は、数週間のうちに勝者として選択されます。すべての補助機能と操作テーブルの宣言を文字カウントに含める必要があることに注意してください。同点の場合、最も人気のある回答が選択されます。 このアルゴリズムは、順序10の弱く完全に反対称な準グループでなければならない操作テーブルを中心に展開します。ダムアルゴリズムに関するWikipediaの記事にある操作テーブルは、この課題で使用されるものです。完全を期すために、以下に再現します。 | 0 1 2 3 4 5 6 7 8 9 ----+---------------------------------------- 0 | 0 3 1 7 5 9 8 6 4 2 1 | 7 0 9 2 1 5 4 8 6 3 2 | 4 2 0 6 8 7 1 3 5 …
17 code-golf 

7
番号のソートされた字句分割
課題は実に簡単です。数字が与えられたら、その数字を小さな数字の配列に分割し、結果の数字が減少しないようにします。キャッチは、配列の長さが最大になるように分割する必要があるということです。 混乱した? STDIN(または最も近い代替)、コマンドライン引数、または便利で明白な入力形式の関数引数を介して正の整数が与えられます。 数値の10進数を連続した互いに素なグループに分割する必要があります。 これらの数字グループで表される数値の配列は、グループを再配置せずに(通常の減少しない順序で)ソートする必要があります。 そのようなパーティションが複数存在する場合は、入力をできるだけ多くの数にパーティション分割する必要があります。同数の場合、そのような結果を1つ返します。 配列をSTDOUT(または最も近い代替)に出力するか、関数の戻り値として出力できます。STDOUT(または最も近い代替)の場合、配列は便利で明確なリスト形式で印刷する必要があります。 分割番号の先頭にゼロを付けないでください。そのため、たとえば1002003、[1, 002, 003]またはとして印刷することはできず[1, 2, 3]、それに対する唯一の有効な答えは[100, 2003]です。 テストケース: 123456 -> [1, 2, 3, 4, 5, 6] 345823 -> [3, 4, 5, 8, 23] 12345678901234567890 -> [1, 2, 3, 4, 5, 6, 7, 8, 90, 123, 456, 7890] 102 -> [102] 302 -> [302] 324142 …

2
ロボットがテレポーターに到達するのを支援する
更新:はじめにPythonフレームワークを追加しました。 宇宙ステーションはクラッシャーボットによって追い抜かれました。ステーションが自己破壊する前に、「ウサギ」と呼ばれる高価で壊れやすいハイテクボットを出口テレポーターに向ける必要がありますが、クラッシャーボットは通路をパトロールしています。 プログラムにはASCIIマップが与えられ、各ターンにはクラッシャーボットと現在のウサギがいる場所が通知されます。その後、プログラムは、クラッシャーボットを避けながらウサギを出口テレポーターに移動します。 実行 Python 2コントローラーを実行するには: python controller.py <mapfile> <turns> <seed> <runs> <prog>... <prog> can be <interpreter> <yourprog> or similar. シードは、実行を繰り返し可能にするために、クラッシャーとプログラムPRNGに使用される小さな整数です。使用する実際のシードに関係なく、プログラムは一貫して実行する必要があります。シードがゼロの場合、コントローラーは実行ごとにランダムシードを使用します。 コントローラは、マップテキストファイルの名前とシードを引数として使用してプログラムを実行します。例えば: perl wandomwabbits.pl large.map 322 プログラムでPRNGを使用する場合は、指定されたシードで初期化する必要があります。コントローラは、STDINを介してプログラムの更新を送信し、STDOUTを介してウサギの動きを読み取ります。 コントローラが回転するたびに、3行が出力されます。 turnsleft <INT> crusher <x,y> <movesto|crushes> <x,y>; ... rabbits <x,y> <x,y> ... 次に、プログラムが1行を出力するのを待ちます。 move <x,y> to <x,y>; ... 更新:最初の行がコントローラーによって送信される前に、プログラムの初期化に2秒かかります。 コントローラーのウサギの位置を入力した後、プログラムが動きに応答するのに0.5秒以上かかる場合、コントローラーは終了します。 グリッド上にウサギがいない場合、ウサギの行には値がなく、プログラムはむき出しの「移動」文字列行を出力する必要があります。 毎ターン、プログラムの出力ストリームをフラッシュすることを忘れないでください。 例 …

9
不等式の連鎖を評価する
不等式のチェーンが真であるか偽であるかを評価するコードを記述します。入力例は文字列です 3<=4!=9>3==3 各コンポーネントが真であるため、これは真実です。 (3<=4) and (4!=9) and (9>3) and (3==3) 入力: 1つ以上の不等式のチェーンを表す文字列。許可される比較演算子は == equals != does not equal > is greater than >= is greater than or equal to < is less than <= is less than or equal to 許可される数字は一桁の数字です0通過9。スペース、括弧、その他の記号はありません。 出力: 一貫したTruthyまたはFalseyの値としての不平等の正しさ。一貫性とは、すべてのTruthy出力が同じであり、すべてのFalsey出力が同じであることを意味します。 制限: この課題の目的は、不平等を処理するコードを作成することです。不平等は、チェーン内の単一の不平等であっても、それらをコードとして評価することではありません。そのため、Pythonのような方法eval及びexecその評価または実行コードが禁止されています。文字列として名前が指定されたメソッドまたは演算子を検索する関数も同様です。また、評価を行うためのプロセスやプログラムを起動することも許可されていません。 テストケース: 3<=4!=9>3==3 True 3<=4!=4 False …
17 code-golf 

6
画像の色相をトレースする
このスタックスニペットに画像をロードし、マウスをその上に移動します。カーソルポイントから始まる、色相角に続く黒い曲線が描画されます。 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><style>canvas{border:1px solid black;}</style>Load an image: <input type='file' onchange='load(this)'><br><br>Max length <input id='length' type='text' value='300'><br><br><div id='coords'></div><br><canvas id='c' width='100' height='100'>Your browser doesn't support the HTML5 canvas tag.</canvas><script>function load(t){if(t.files&&t.files[0]){var e=new FileReader;e.onload=setupImage,e.readAsDataURL(t.files[0])}}function setupImage(t){function e(t){t.attr("width",img.width),t.attr("height",img.height);var e=t[0].getContext("2d");return e.drawImage(img,0,0),e}img=$("<img>").attr("src",t.target.result)[0],ctx=e($("#c")),ctxRead=e($("<canvas>"))}function findPos(t){var e=0,a=0;if(t.offsetParent){do e+=t.offsetLeft,a+=t.offsetTop;while(t=t.offsetParent);return{x:e,y:a}}return void 0}$("#c").mousemove(function(t){function e(t,e){var a=ctxRead.getImageData(t,e,1,1).data,i=a[0]/255,r=a[1]/255,o=a[2]/255;return Math.atan2(Math.sqrt(3)*(r-o),2*i-r-o)}if("undefined"!=typeof img){var a=findPos(this),i=t.pageX-a.x,r=t.pageY-a.y;$("#coords").html("x = "+i.toString()+", y = "+r.toString());var o=parseInt($("#length").val());if(isNaN(o))return void …

2
スネークピットの食糧不足
スネークピットの食糧不足 35年ぶりに、スネークピットの食料が不足しています。住民のヘビは、この食糧不足を乗り切るために、互いに戦わなければなりません。食物連鎖の一番上に立つことができるのは1匹のヘビだけです! リーダーボード まだここにいない! 最終更新は2月24日 最後の試合の視覚化へのリンク 説明 最後の残りのリンゴ/サクランボ/何のために戦いたいなら、あなたは与えられた入力を受け入れてその次の動きを返すプログラムの形で蛇を提供しなければなりません。 唯一のひねりは、あなたがピットで一人ではないということです。別のヘビも珍しい食べ物を手に入れようとします!しかし、ヘビピット内は暗いので、自分とリンゴしか見えません。敵にぶつかると、自分を噛んだり壁にぶつかったりするように、死に至ります。さらに、最近ではリンゴはめったにないので、対戦相手が長さ7に達するのに十分な量を食べたら飢えてしまいます。 スネークピットは幅と高さが15の2次元マップであり、最外部のタイルは通過できない壁を構築します。 0 1 2 . . . c d e 0 # # # # # # # # # 1 # # 2 # x # . # # . # # . # # c # # d # …

3
単語内の単語内の単語。。。
このアルファベットの大文字のピクセル化されたフォントでは、すべての文字は幅5単位、高さ5単位です。 ███ ████ ███ ████ █████ █████ ████ █ █ █████ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ██ ██ █████ ████ █ █ █ ████ ████ █ ██ █████ █ █ ███ …

8
長い単語の連鎖を構築する
この課題は、次の単語の最初の3文字が最後の単語の最後の3文字と一致する英語の単語の最長チェーンを見つけることです。Linuxディストリビューションで利用可能な一般的な辞書を使用します。こちらからダウンロードできます。 https://www.dropbox.com/s/8tyzf94ps37tzp7/words?dl=0 99171英語の単語があります。ローカルLinux /usr/share/dict/wordsが同じファイルである場合(md5sum == cbbcded3dc3b61ad50c4e36f79c37084がある場合)、それを使用できます。 単語は回答で1回だけ使用できます。 編集:文字は大文字/小文字、アポストロフィ、アクセントを含めて正確に一致する必要があります。 有効な回答の例は次のとおりです idea deadpan panoramic micra craftsman mantra traffic fiche 。スコアは8です。 有効な単語のチェーンが最も長い答えが勝者になります。同点の場合、最も早い回答が勝ちます。答えには、見つけた単語のチェーンと、(もちろん)それを実行するために書いたプログラムがリストされているはずです。

20
ランダムな整数を生成します
あなたのプログラム/機能は 正確に1つの整数を出力します 正の確率で整数を出力します 少なくとも50%の確率で、1.000.000より大きい整数または-1.000.000より小さい整数を出力します。 出力例(すべてが可能である必要があります): 59875669123 12 -42 -4640055890 0 2014 12 24 -7190464664658648640055894646646586486400558904644646646586486400558904646649001 明確化: 末尾の改行が許可されます。 先行ゼロは許可されません。 -0 許可されています。 最短のコードが優先されます。

8
相対対絶対
このグリッドのポイントAで北を向いている人が、方向を緑のパス(グリッド線のみに従うことができるため)に沿ってポイントBにしたい場合、次のように伝えます。 ゴーNorth, North, West, East, East, South, East, East。 または同等に ゴーForward, Forward, Left, Back, Forward, Right, Left, Forward。 (Right、Left、またはBackのコマンドが暗黙的にその方向に回転することを意味する場合、次に進みます。) 同じポイントにだけではなく、同じパスに沿ったこれらの絶対方向と相対方向の間で変換する1つの引数を持つ関数を作成します。指示された人が常に北を向いていると仮定します。 引数が文字の文字列の場合、NSEW同等の相対方向を返します。 たとえばf("NNWEESEE")、文字列を返しますFFLBFRLF。 引数が文字の文字列の場合、FBLR同等の絶対方向を返します。 たとえばf("FFLBFRLF")、文字列を返しますNNWEESEE。 空の文字列はそれ自身をもたらします。他の入力ケースは想定しません。 言語に関数や文字列がない場合は、最も適切と思われるものを使用してください。 バイト単位の最短コードが優先されます。
17 code-golf 

3
独自の言語コードを選択してください
16x16の印刷可能なASCII文字(コードポイント0x20〜0x7E)のグリッドを見てみましょう。次の例のように、左上から右下隅まで30から15のパスがあり、直交移動のみを行います。 ##.............. .#.............. .######......... ......##........ .......##....... ........#....... ........#....... ........#....... ........###..... ..........###... ............#... ............#### ...............# ...............# ...............# そのような各パスは、正確に31文字で構成されます。これらの各文字は、31個の対角線のいずれかとは異なることに注意してください。 0123456789ABCDEF 123456789ABCDEFG 23456789ABCDEFGH 3456789ABCDEFGHI 456789ABCDEFGHIJ 56789ABCDEFGHIJK 6789ABCDEFGHIJKL 789ABCDEFGHIJKLM 89ABCDEFGHIJKLMN 9ABCDEFGHIJKLMNO ABCDEFGHIJKLMNOP BCDEFGHIJKLMNOPQ CDEFGHIJKLMNOPQR DEFGHIJKLMNOPQRS EFGHIJKLMNOPQRST FGHIJKLMNOPQRSTU これはグリッドの例ではありません。これは、31個の対角線を視覚化したものです。 対角線に同じ文字が2回含まれていない場合、対角線的に一意のグリッドを呼び出します。グリッドにこのプロパティがある場合、2つのパスに同じ文字列が含まれることはありません。(明確にするために、視覚化自体は基本的に対角線的に一意の反対です。) チャレンジ 可能な限り多くのパスが、可能な限りJabberwocky多くの言語でSTDOUT(オプションの末尾の改行付き)に出力される有効なコードになるように、斜めに一意の16x16グリッドを設計します。各コードは、完全なプログラム、またはreturnステートメントのないパラメーターレス関数の本体のいずれかです(これは、定型関数/クラス/名前空間にコードを置く必要がある言語を妨げないためです)。 注:簡単にするために、Ypnypnのように未使用のセルに予約文字を使用できます。 有効なパスごとに、有効なプログラミング言語を1つ明記してください。 受賞者は、上記のリストに含まれる言語の数が最も多い作品です。(または、カウントする言語ごとに、その言語で有効なパスを1つ表示しますが、2つの言語のパスをカウントしないようにしてください。) 同点の場合、有効なパスでカバーされていないグリッドセルを数えます。未使用のセルが少なくなります。まだ同点の場合は、最も(正味の)票数の回答を受け入れます。 検証スクリプト グリッドが対角線的に一意であることを検証するために使用できる小さなCJamスニペットを簡単にまとめました。 行くオンラインCJamインタプリタ。 次のコードを貼り付けます l:A; qN/W%A16**33/z{A-__|=}%:*"D""Not d"?"iagonally unique" 入力フィールドで、最初の行に予約文字を入力し(予約文字を使用しない場合は未使用文字を使用します)、2行目から17行目までグリッドを使用します。たとえば、Ypnypnの答え: …

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