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

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

30
既知の既知のものがあります
元米国国防長官のドナルド・ラムズフェルドは、「既知の知人」というフレーズを有名にした。ここでは、彼の発言を4行のスタンザに要約します。 具体的には、次のテキストを出力します。 known knowns known unknowns unknown knowns unknown unknowns 大文字と小文字は区別されません(たとえば、大文字Known unKnownsで結構です)。また、単一の末尾の改行を使用できますが、他の形式の変更は許可されていません。これは、単語間の単一のスペース、および行間のLF(59バイト)またはCR/LF(62バイト)を意味します。 ルール 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

1
サイクリックレーベンキン
バックグラウンド 最もPPCGの常連が知っているように、QUINEが実行したときに、独自のソースコードを出力するプログラムです。2つの文字列間のレーベンシュタイン距離は、1つの文字列を別の文字列に変更するために必要な挿入、削除、および編集の最小数です。この課題では、2つの概念を「レベンキン」に組み合わせます。独自のソースコードを出力するプログラムですが、1つの文字の1つのインスタンスを挿入、削除、または別の文字に置き換えます。(つまり、プログラムとその出力の間のレーベンシュタイン距離は1です。) タスク その出力がレベンキンであるように、そのプログラムの出力もレベンキンであるように、レベンキンを書きます。さらに、ある時点で、プログラムの繰り返し実行、その出力の実行、その出力の出力の実行などのシーケンスは、最終的に元のプログラムに戻らなければなりません。 物事をより難しくする1つの追加の制限があります:このサイクル内のどこかに、共通の文字を持たない2つの異なるプログラムが必要です(つまり、1つのプログラム内に存在し、他のプログラム内にも存在する文字はありません)。したがって、プログラムは徐々に自分自身を別の文字セットに変換し、再び元に戻す必要があります。 出力を生成するプログラムに必要な避けられない定型文を含むプログラミング言語を使用している場合(たとえば、print文を書く方法が1つしかなく、他の有用な出力形式がない場合)、その定型文を目的のために存在しないものとして扱うことができます2つのプログラムに共通する文字を決定する。ただし、コードのレベンキンプロパティを決定するために、その定型文を引き続きカウントする必要があります。 明確化 サイクル内の各「プログラム」は、完全なプログラムまたは機能のいずれかです。それらはすべて同じである必要はありません。たとえば、一部は完全なプログラムであり、一部は機能である可能性があります。 サイクル内のすべてのプログラムが同じ形式の出力を使用する必要があるわけではありません。たとえば、一部は標準出力を介して出力でき、一部は標準エラーを介して出力できます。 プログラムは、入力なしで(または、入力をまったく必要としない言語で、最も単純な入力で)実行されます。 適切なクインルールが適用されます。Levenquineは真のクインではありませんが、適切なクインを書くときに違法となるようなことはできません。特に、nullプログラムは適切なLevenquineからの有効な出力になることはありません(したがって、サイクルの一部になることはできません)。 Levenquineの制限は、バイト単位ではなく文字単位で測定されます(たとえばê、ソースがUTF-8でエンコードされている場合でも1文字です)。非共通文字制限は、文字の観点からも測定されます。ただし、勝利条件はバイト単位でカウントされます。 勝利条件 サイクルから少なくとも次の3つのプログラムを提出してください。最短のプログラム(バイト単位)。共通の文字を持たないサイクルの2つのプログラム。これらのうち2つが同じである可能性があり、3つすべてが異なる可能性もあります。スコアは最短プログラムのバイト単位の長さに基づいており、短いほど良いため、これは一種のコードゴルフの競争になります。

30
3番目の文字列
2つの文字列が与えられた場合、2つの入力のいずれとも等しくないが、入力のいずれかと同じ長さ(文字数)を持つ3番目の文字列を出力します。有効な出力が少なくとも1つあることが保証されています。 テストケース テストケースは、文字列であることを示すために引用されています。出力は多くの可能性の1つです。 input, input -> output "test", "test" -> "tttt" "do", "don't" -> "dnut_" "ye s", "yes" -> "fals" "yes", "yes" -> "noo" "maybe", "mayue" -> "false" "false", "false" -> "truee" "false", "true" -> "fatr" "1", "" -> "0" "", "t" -> "s" "", "abcabc" -> "testst" "abcdefghijklmnopqrstuvwxyz", "aaaaaaaaaaaaaaaaaaaaaaaaaa" …
45 code-golf  string 

19
ハートグラフの描画/プロット
あなたの課題は、以下のハートの1つを描画/プロットすることです。サイズは少なくとも50x50ピクセルである必要があります(ベクターグラフィックは問題ありません)。どのハートを描画/プロットするかを選択できます。軸、グリッド線などが受け入れられます。グラフには少なくとも 100個の異なる座標/ポイントが必要です。必要に応じて、心を色で満たすことができます。 方程式は次のいずれかです。 または t範囲内[-1, 1]です。 または または これはコードゴルフなので、バイト単位の最短のコード(各言語)が優先されます。出力(またはオンライン通訳へのリンク)を提供してください。

26
ビット、ニブルまたはバイト?
この挑戦に触発された 範囲内の整数を指定すると、範囲0 <= n < 2**64外に収まる最小サイズのコンテナを出力します ビット:1 ニブル:4 バイト:8 短い:16 int:32 長い:64 テストケース: 0 -> 1 1 -> 1 2 -> 4 15 -> 4 16 -> 8 123 -> 8 260 -> 16 131313 -> 32 34359750709 -> 64 これはcode-golfであるため、バイト単位の最短回答が優先されます。

26
ビッグベンはBONG
あなたの仕事は、Big Ben(Twitter)を模倣するプログラムを作成することです。 仕事 (コンピューターのローカル時間またはUTCに従って)新しい時間が始まるたびに、BONG繰り返しhour時間を(単語間にスペースを入れて)出力する必要があります。たとえば、3時の場合、を出力する必要がありますBONG BONG BONG。時間形式は12時間形式に従います。つまり、12時以降、13ではなく1になります。プログラム/関数は永久に実行する必要があります。 例: カッコ内に出力しない (start: 00:34 for example) BONG (01:00) BONG BONG (02:00) (...) BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00) BONG (01:00 again) (...) (it continues forever) ルール BONGsの各シリーズは、改行で区切る必要があります 先頭/末尾の改行が許可されます しかし大手/末尾のスペースはされていない許可します 提出は永久に実行する必要があります 出力は、時間の開始から±3秒で印刷される場合があります 特定の時間にプログラムが実行されると想定することはできません。 これはcode-golfなので、バイトカウントが最も短いプログラムが勝ちます!

30
PPCG Jeopardy:警官
このサイトをどれだけ知っていますか?確認してみましょう。 これは警官と強盗の挑戦です。 強盗のスレッド。 警官として: このサイトで削除されていない、閉じられていないチャレンジを見つけて答えてください。チャレンジには、警官と強盗、人気コンテスト、コードトローリング、人手不足、ビジービーバー、キングオブザヒル、ヒント、アンサーチェーンのタグを含めることはできません。チャレンジには、有効な出力に制限が必要です。 ウィキペディアまたはesolangs.orgまたはtryitonlineにある無料の言語で、チャレンジの有効な投稿を書いてください。提出は競争的である必要はなく、有効であるだけです。編集:あなたの提出物のハッシュは許可されていません チャレンジを秘密にして、ここに投稿を投稿してください。提出物全体と言語(および該当する場合はバージョン)を投稿する必要があります。 1週間後、回答している課題が誰も見つからなかった場合、投稿が回答している課題を投稿できます。その時点で、投稿は安全です。 Nポイントの価値があります。ここで、Nはチャレンジに対するアップ投票の数です(2016-11-17現在)(高いほど良い) あなたの挑戦をクラックするために、強盗は見つける必要がある任意の提出がために有効なサブミッションでの挑戦を。 ノート: チャレンジにの出力が必要な場合、ユーザーがX出力するXYかYX、またはY空白以外の場所にある場合、そのチャレンジに対して送信は有効ではありません。 2016-11-17より新しいチャレンジは許可されていません。 隠されたチャレンジよりも新しい言語が許可されています。 特定の課題が広く適用可能な場合は、特定の課題を禁止する権利を留保します(すべての提出の大部分に適用できます)。 最初のアイデアをくれたダニエルに感謝します! クラックされていない提出: <script>site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 100357;</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script> コードスニペットを実行する結果を非表示スニペットを展開

30
3なしで数える
バックグラウンド 私が小学校にいたときは、数学クラスで次のようなゲームをしていました。 すべての子供は大きな輪になって、1から順番に数えます。 ただし、カウント中は次の番号をスキップする必要があります。 3の倍数である数字。 10進数表現で3を持つ数字。 子供が言うべき最初の15の数字は 1 2 4 5 7 8 10 11 14 16 17 19 20 22 25 誰かが番号を間違えた場合(シーケンスに含まれていない番号を言う場合、または番号をスキップした場合)は、サークルから削除されます。これは、子供が1人だけになるまで続きます。 仕事 あなたはこのゲームが苦手なので、カンニングをすることにします。シーケンスの数を指定すると、シーケンスの次の数を計算するプログラムまたは関数を作成します。 プログラムが入力251まで正しく機能し、アルゴリズムが任意の大きな入力に対して機能する場合、言語のネイティブな数値型を使用して表現できない数値を処理する必要はありません。 入力および出力は、任意の便利なベースを使用できます。 コードを隠す必要があるため、できるだけ短くする必要があります。実際、これはcode-golfであるため、バイト単位の最短コードが優先されます。 テストケース 1 -> 2 2 -> 4 11 -> 14 22 -> 25 29 -> 40 251 -> 254

20
怪しいものよりも大きい
小なり記号と大なり記号(<、>)の長さNの文字列を指定して、すべての不等式が満たされるように、記号の各ペアの開始と終了、および各ペアの間に整数0〜Nを挿入します。結果の文字列を出力します。有効な出力が複数ある場合は、いずれか(および1つだけ)を出力します。 例えば <<><><< は7文字なので、0から7までのすべての数字を挿入する必要があります。有効な出力は 2<3<4>1<5>0<6<7 なぜなら、すべての不等式が一度に一つずつとられたからです 2<3 3<4 4>1 1<5 5>0 0<6 6<7 本当です。 必要に応じて、出力に記号を囲むスペースを含めることができます2 < 3 < 4 > 1 < 5 > 0 < 6 < 7。 バイト単位の最短コードが優先されます。 テストケース 空の行の後の最初の行は入力であり、次の行はそれぞれ有効な出力例です。 [empty string] 0 < 0<1 > 1>0 << 0<1<2 <> 1<2>0 >< 1>0<2 2>0<1 >> 2>1>0 <<< 0<1<2<3 …

19
フェローシップの戦いKotH
この課題では、戦闘で他のすべてのフェローシップを打ち負かすことを目標とするフェローシップを作成します。 フェローシップ(チーム)は3人のキャラクターで構成されます。各キャラクターはチームの他のメンバーとは独立して動きますが、敵と戦うときは協力する必要があります。チームは回転しながらお互いに向かい合います。勝ちは3ポイント、同点は1ポイント、負けは0ポイントの価値があります。 キャラクターには能力があります。キャラクターが持っている能力の選択は、このKotHで最も重要な(そして楽しい)部分の1つです。それらはすべて強力で、敵を一掃する可能性があります。 キャラクターはヘルスポイント(HP)を持ち、HPが0になる(または下回る)と死亡します。対戦相手のチームのすべてのキャラクターが死亡した場合、あなたは勝ちます! キャラクターにはマナがあります。ほとんどのアクションを実行するにはManaが必要であり、十分な数がない場合、そのアクションは使用できません。 キャラクターにはターン遅延があります。これにより、各ターン間のティック数が決まります(100から始まります)。低いほど良い。 文字には属性があります。各キャラクターの各属性には5のベースがあり、分割するために20の追加の属性ポイントが与えられます。属性ポイントを割り当てた後、プライマリ属性が最高の属性として設定されます。 利用可能な属性は次のとおりです。 強さ:ターンごとに10 HPと0.5 HPを与える 知性:ターンごとに7マナと7マナを与える 敏ility性:ターン遅延を1減らす 移動、ビジョン、範囲の 範囲は次のとおりです(0を中心に)。一部の範囲はcardinalです。つまり、直接上下左右にしか移動できません。 444 43334 4322234 432111234 432101234 432111234 4322234 43334 444 キャラクターの開始ビジョンは2です。同じフェローシップのプレイヤー間のビジョンは共有されます。 遊び方 建設 プレイヤーはフェローシップを構築します。 次の手順を実行する必要があります。 各キャラクターにポイントを与えます。各キャラクターは各スタットで5から始まり、3の間でさらに20が分配されます。 各キャラクターに能力を与えます。各キャラクターは4つの能力スロットから始まり、能力はデフォルトで1スロットを取ります。一部の能力は反復可能で、キャラクターに複数回与えることができます。所有者の許可なしに別の提出の機能セットを使用することは許可されていません。 ボット用のコードを作成します。コードはJavaである必要があり、戦闘に使用されます(次のステップ) 行動 すべてのキャラクターは3つの標準アクションで始まります: ステップ:主な範囲1でキャラクターを移動する スライス:主属性範囲1 でPrimaryAttributeの敵を攻撃します 笑顔:何もしない キャラクターのターンで、実行するアクションを選択する必要があります。アクションにはマナコストがあり、クールダウンがあります。これは、そのアクションを再度実行するまで待機する必要があるターンの数を定義します。 能力 各キャラクターには4つの能力スロットがあります。能力が斜体の場合、それはアクションです。 能力 名前説明マナクールダウン モビリティ 瞬き 正方形に移動範囲が4 2 2 スワップ 対象とスワップ位置5 …

11
Stackylogicを実行する
Stackylogicは、私がそのテイクアップ作られたロジックベースのプログラミング言語である0のと1、入力用のを単一出力0または1上に完了したことを。 Stackylogicプログラムは、3文字01?だけでなく<、1行の最後に1 文字だけを含むことができる行で構成されます。行は空ではないかもしれないとして行が<少なくとも一つ持っている必要があります0、1または?それ以前に。 これは(説明しますが)2ビットのNANDを計算するサンプルプログラムです。 1 ?< 11 ? 0 Stackylogicプログラムのすべての行はスタックと見なされ、下が左、上が右になります。暗黙的に、プログラムの最初の行の前と最後の行の後に空のスタック(空の行)があります。 <我々は呼んでよこれ、カーソルを Stackylogicプログラムが実行されたときに起動するマークスタック。Stackylogicプログラムの実行は次のように進行します。 カーソルが現在指しているスタックから一番上の文字をポップします。 キャラクターがの場合、?ユーザーに0またはのプロンプトを表示し、それがキャラクターであるかのよう1に振る舞います。 文字がの場合、0カーソルを1スタック上に(現在の行の上の行に)移動します。 文字がの場合、1カーソルを1スタック下に(現在の行の下の行に)移動します。 カーソルの移動先のスタックが空の場合、スタックからポップされた最後の値(常にa 0または1)を出力し、プログラムを終了します。 それ以外の場合、カーソルの移動先のスタックが空でない場合は、手順1に戻ってプロセスを繰り返します。 Stackylogicプログラムは常にスタックを使い果たすため、常に終了することに注意してください。 NANDの例 NANDプログラムでは、カーソルは次の位置から始まります?。 1 ?< 11 ? 0 私たちは、入力、ユーザーを仮定します1一度?カーソルがこのようなプログラムを見て作り、下に移動することを意味している、ポップされます。 1 11< ? 0 これ1で、カーソルスタックの最上部にプレーンが表示されます。適切にポップされ、カーソルが再び移動します。 1 1 ?< 0 今、ユーザ入力仮定0のための?カーソルが上に移動することを意味し、: 1 1< 0 再び、a 1がカーソルスタック上にあるため、カーソルがポップして下に移動します。 1 < 0 最後に、カーソルスタックは空なので、最後にポップされた値が1出力され、プログラムが終了します。 であるため、これはNANDゲートに対して正確1 NAND 0です1。もちろん、これは他の3つの2ビット入力でも確認できます。 …

23
16進数とアルファベット
このチャレンジでは、入力を受け取り、16進数に変換し、いくつかの変更を加えて、結果を出力します。 16進数で16文字しかないため、コードはできるだけ短くする必要があります。 例 例は空白行で区切られています。1行目は入力、2行目はステップ、3行目は出力を示しています 234589 234589 -> 3945D -> 39454 -> 9A1E -> 9115 -> 239B -> 2392 -> 958 958 435234 435234 -> 6A422 -> 61422 -> EFEE -> 5655 -> 1617 1617 153 153 -> 99 -> 99 -> 63 1617 手順 入力は常に正の整数になります 出力を生成するには、次の手順に従います。 入力を16進数に変換します アルファベットで自分のインデックスを持つ任意の文字を置き換えます(例a -> 1, …

18
すべてのIPv6アドレスを印刷する
これは、数年前に誰かが急流「ハッカーツール:すべてのIPアドレスの完全なリスト」をアップロードしたことを思い出します。これは、もちろん、生成された〜40億のIPv4アドレスのリストでしたが、何千もの「h4xx0rz」がそれをダウンロードしました。ママ、imahackerを見てください! これは当時でしたが、今日では誰もがIPv6に切り替えています。(右?) あなたの仕事は、すべてのIPv6アドレスを出力するプログラムを書くことです。 入力を一切受け取らず、IPv6アドレスを1行に1つずつ出力し、他の出力を出力しない完全なプログラムを作成する必要があります。プログラムは、無効なものも含めて、2 128の可能なアドレスすべてを印刷する必要があります。各住所は1回だけ印刷する必要があります。アドレスは任意の順序で印刷できます。 各アドレスは、コロンで区切られた4つの16進数の8つのグループで完全に印刷できます。たとえば、 2001:0db8:85a3:0000:0000:8a2e:0370:7334 あなたの裁量で、RFC 5952の標準的な略語のいずれかを使用できます。 グループ内の先頭のゼロは省略できますが、0それ以上短縮することはできません。 :: 1つまたは複数のすべてゼロのグループのシーケンスを短縮するために、アドレスごとに最大1回使用できます。 16進数では、小文字または大文字を使用できます。 あなたが達成した場合、RFC 5952から表現勧告を(小文字のみ、最短の表現と::、それは使用することができ、複数の場所がある場合はできるだけ早くとして使用)、あなたが得る-20%のボーナスを。 出力のサイズが原因で、プログラムがそこに座っている間に終了することはありません。プログラムは、ある時点で外部の手段によって中断される可能性があります(Ctrl+ C、電源を抜くなど)。プログラムは出力をストリームとして生成する必要があります。そのため、「合理的な」待機の後、いくつかの行が生成されます。基本的に、最後に印刷するためだけにメモリに巨大な文字列を作成することは許可されていません。「標準」PCでメモリ不足になるプログラムはすべて失格となります。(それでも、プログラムが十分な時間実行されない場合、すべてのIPv6アドレスを出力して終了する必要があります。) (この状態が、完了するまでプログラムを実行してから出力を表示するWebインタープリターにとって問題であり、ホストされたインタープリターがない場合は、問題の小さいバージョンでプログラムをテストし、慎重に調整しますフル2 128まで。) スコアは、プログラムのバイト単位の長さで、ボーナスを獲得した場合は0.8倍されます。それはコードゴルフですので、最低スコアが勝ちます。

1
線形時間の最長共通部分文字列
この課題は、次の問題を解決するコードを記述することです。 2つの文字列AとBを指定すると、コードはAの部分文字列の開始インデックスと終了インデックスを次のプロパティで出力する必要があります。 Aの部分文字列もBの部分文字列と一致する必要があります。 最初のプロパティを満たすAの部分文字列はもうないはずです。 例えば: A = xxxappleyyyyyyy B = zapplezzz appleインデックス付きの部分文字列4 8(1からのインデックス)は有効な出力になります。 機能性 入力は、ローカルディレクトリ内のファイルまたはローカルディレクトリ内のファイルにあると想定できます。これが選択です。ファイル形式は、新しい行で区切られた2つの文字列になります。答えは、単なる機能ではなく、完全なプログラムでなければなりません。 最終的には、http://hgdownload.cse.ucsc.edu/goldenPath/hg38/chromosomes/の文字列から取得した2つの部分文字列でコードをテストしたいと思います。 スコア これはひねりを加えたコードゴルフです。コードはO(n)時間内に実行する必要がnあります。これは入力の全長です。 言語とライブラリ 自由に利用できるコンパイラー/インタープリター/などを備えた任意の言語を使用できます。Linuxの場合。このタスクを解決するように設計されていない標準のオープンソースライブラリのみを使用してください。論争の場合、これはあなたの言語に標準で付属しているライブラリ、またはデフォルトのリポジトリからデフォルトのubuntuマシンにインストールできるライブラリとしてカウントします。 有用な情報 この問題を線形時間で解決するには、少なくとも2つの方法があります。1つは最初にサフィックスツリーを計算することで、2つ目は最初にサフィックス配列とLCP配列を計算することです。 ここに、線形時間接尾辞ツリー構築の完全な(おそらく多すぎる)詳細な説明があります(残念ながら、図の一部が台無しになっています)。https://stackoverflow.com/questions/9452701/ukkonens-suffix-tree-algorithm-in-plain-englishには、線形時間サフィックスツリーの構築に関する非常に良いSO回答もあります。ソースコードへのリンクも含まれています。別の詳細な説明がここにあります。今回はCで完全なソリューションを提供します。 http://www.cs.cmu.edu/~guyb/realworld/papersS04/KaSa03.pdfのセクション2は線形時間接尾辞配列構築アルゴリズムを示し、付録AにはC ++ソースコードがあります。この回答は、最長の共通部分文字列https://cs.stackexchange.com/questions/9555/computing-the-longest-common-substring-of-two-strings-using-suffix-arraysを計算する方法を示しています。関連するビデオ講義もあるhttps://courses.csail.mit.edu/6.851/spring12/scribe/lec16.pdfのセクション5 https://courses.csail.mit.edu/6.851/spring12/lectures/L16 .htmlは1:16:00から始まる同じアルゴリズムについても説明しています。

30
2つの正方形の合計を数える
負でないn数値を指定するとn、整数の2乗の合計として表現する方法の数を出力しますn == a^2 + b^2(OEIS A004018)。注ことaとb、正、負、またはゼロ、及びその順序事項することができます。最少バイトが勝ちます。 例えば、n=25与える12ため25のように表すことができます。 (5)^2 + (0)^2 (4)^2 + (3)^2 (3)^2 + (4)^2 (0)^2 + (5)^2 (-3)^2 + (4)^2 (-4)^2 + (3)^2 (-5)^2 + (0)^2 (-4)^2 + (-3)^2 (-3)^2 + (-4)^2 (0)^2 + (-5)^2 (3)^2 + (-4)^2 (4)^2 + (-3)^2 以下がの値n=25です。コードがで動作するように注意してくださいn=0。 0 1 1 4 2 4 …

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