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

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

30
ゴルフイタチプログラム
リチャードドーキンスは彼の本The Blind Watchmakerでイタチプログラムについて説明しています。アルゴリズムは次のように説明できます。 28文字のランダムな文字列から始めます。有効な文字はすべて大文字とスペースです。 その文字列のコピーを100個作成し、その文字の文字ごとに5%の確率でランダムな文字に置き換えます。 新しい文字列をターゲット「METHINKS IT IS LIKE A WEASEL」と比較し、文字列内の正しい文字と正しい位置にある文字の数に応じてそれぞれにスコアを付けます。 新しい文字列のいずれかに完全なスコア(28)がある場合、停止します。 ステップ3から最高得点の文字列を選択します。タイの計算方法はユーザー次第ですが、選択できる文字列は1つだけです。選択した文字列を取得して、手順2に進みます。 勝者は、各世代の最高得点の文字列を次の形式で印刷しながら、正しい答えを得るための最短のコードスニペットになります。 人々が他の人々の答えをチェックすることで助けてくれるなら、とても役に立ちます!

30
娘のアルファベット
先日、私たちは娘と冷蔵庫のマグネットレターで文章を書いていました。一部(I love cat)を作成することはできましたがI love you too、文字数が不足しているためo(4) 次に、1つのセットに3 e文字が含まれていたのに、2 o文字しかなかったことがわかりました。おそらくhttp://en.wikipedia.org/wiki/Letter_frequencyに触発されたものですが、これは「冷蔵庫」の実際の状況をまだ反映していません。 問題 各行に "サンプル文"が含まれているテキストファイルを冷蔵庫に書きたい場合、最小限の文字数で、各文を個別に書くのに十分なアルファベットセットを提案します。 注:大文字小文字は無視してください。磁石文字はすべて大文字です。 入力 ファイルには改行で区切られた文が含まれます。 hello i love cat i love dog i love mommy mommy loves daddy 出力 バックソートされた文字のリストを提供します。各文字は、文章を書くのに十分な回数だけ表示されます。 acdddeghillmmmoostvyy (ありがとう、isaacg!) 勝者 最短の実装(コード) 更新:テスト 私は追加のテストを作成し、さまざまな答えをここで試しました: https://gist.github.com/romaninsh/11159751
65 code-golf 

15
9ホールチャレンジ[終了]
9ホールチャレンジ 難易度の異なる9コードゴルフチャレンジ。 同じ言語を複数回使用した場合の罰則。 質問は、パー、ホールチャンピオン、トロフィーの勝者で更新されます。 これは私が何人かの友人と行ったコンペティションから来たもので、通常の形式ではありませんが、あなたが何人かがそれの異なるスピンに感謝することを願っています。以下の課題、ルール、トロフィー。 穴 グリーンウェイ(24) f(c:string, n:integer) のnインスタンスを含む行を出力しますc。 荒野のどこか(73) f(t:string, s:string, n:integer) -> iin iのnthインスタンスのインデックスは どこですか。st 夕食のカレー(6235) f(x:function, y: function) -> g どこをg呼び出す機能がありy、n倍。nの戻り値はどこですかx 噴出(92) f(p:string) ファイルに書き込みp、ランダムな文字のランダムなサイズの長方形(ascii)で塗りつぶします。 トレジャーハント(75) f(p:string, c:char) -> (x, y)pシンボルのグリッドを含む ファイルを読み取り、グリッド内のそのシンボルの最初のインスタンスの座標xとy座標を返します。 クワイ川の橋(179) f(l:list[int]) の差分ブリッジ図を印刷しlます。例えば[1,7,3,17,1] /+6\ /-4\ /+14\ /-16\ 1 7 3 17 1 上記の数値のサイズに従ってスペースが作成されていることを確認してください。3桁の長い数字の場合、下の行の数字の間に4つのスペースが必要になります。 キャッチ:どこかに、コードはズボンを綴る必要があります(少なくとも1つの非英数字区切り文字が必要です。例えば tr(ou,se)(rs) …

30
99本のビール[閉鎖]
「99本のビールを壁に」再現します。 望ましい出力は次のとおりです。 99 bottles of beer on the wall, 99 bottles of beer. Take one down and pass it around, 98 bottles of beer on the wall. 98 bottles of beer on the wall, 98 bottles of beer. Take one down and pass it around, 97 bottles of beer on …

30
COBOLプログラムのコメントを外します!
COBOLは非常に古い言語であり、執筆時点では58歳です。実際、非常に古いため、非常に興味深い癖があります。各行の最初の6文字はコメントです。 これはなぜですか?まあ、これらの6文字は、プログラムが完全にデジタル化されておらず、コンピューターに入力されていなかった当時、行番号として使用されることを目的としていました。 さらに、7番目の文字は非常に小さなセットの一部にしかならない可能性があります(通常*、行またはスペースをコメントアウトして、コードから行番号を分離します) しかし、よりデジタルシステムを使用していて、生のプログラムだけが必要な場合はどうでしょうか。 コメントシステム COBOLには2種類のコメントがあります。行コメントと前述の「行番号」コメントです。 行番号のコメントを外すのは簡単です。各行から最初の7文字(6プラス1スペース)を削除するだけです。 000000 apple 000001 banana celery donuts になるだろう: apple banana donuts 行コメントはそれを少し難しくします。行コメントは*、次のように、行の7番目の文字位置にアスタリスクを配置して開始されます。 000323* this is a comment これは行コメントではありません: *00000 this isn't a comment 行コメントのコメントを解除するには、行全体を削除します。 「プログラム」とコメントされた例: 000000 blah blah 000001* apples 000002 oranges? 000003* yeah, oranges. 000*04 love me some oranges コメントなしのバージョン: blah blah oranges? …

11
偶数バイトのみ
シナリオ 最近、お気に入りのテキストエディターで奇妙な動作に気づいています。最初は、ディスクに書き込むときにコード内のランダムな文字を無視しているように見えました。しばらくすると、パターンに気付きました。ASCII値が奇数の文字は無視されていました。さらに詳しく調べてみると、8ビットごとにゼロの場合にのみファイルに適切に書き込むことができることがわかりました。ここで、貴重なファイルがこの奇妙なバグの影響を受けているかどうかを知る必要があります。 タスク ファイルに奇数バイトが含まれているかどうかを判断する完全なプログラムを作成する必要があります(破損していないことを示します)。ただし、テキストエディタのため、ソースコードに奇数バイトを書き込むことはできません。入力には既存のエンコーディングを想定できますが、文字だけでなく個々のバイトごとにチェックする必要があります。 入力 プログラムは、stdinまたはコマンドラインからファイルの内容またはファイルへのパスを取得します。 出力 プログラムは、指定されたファイルに奇数バイトが含まれている場合は真偽値を、8ビットごとにゼロの場合は偽をstdoutに出力します。 基準 これは、タスクを完了する最短のプログラムであるコードゴルフです。ファイルのソースコードの8ビットごとに有効な送信を行うには、ゼロでなければなりません。提出物にソースコードのバイナリのコピーを含めることをお勧めします。 標準抜け穴適用されます。 テストケース (ASCIIエンコード)入力: "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~ Output: falsy Input: !#%')+-/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{} Output: truthy Input: LOREMIPSVMDOLORSITAMETCONSECTETVRADIPISCINGELITSEDDOEIVSMODTEMPORINCIDIDVNTVTLABOREETDOLOREMAGNAALIQVA VTENIMADMINIMVENIAMQVISNOSTRVDEXERCITATIONVLLAMCOLABORISNISIVTALIQVIPEXEACOMMODOCONSEQVAT DVISAVTEIRVREDOLORINREPREHENDERITINVOLVPTATEVELITESSECILLVMDOLOREEVFVGIATNVLLAPARIATVR EXCEPTEVRSINTOCCAECATCVPIDATATNONPROIDENTSVNTINCVLPAQVIOFFICIADESERVNTMOLLITANIMIDESTLABORVM Output: truthy ヒント 言語を賢く選択してください。この課題はすべての言語で可能とは限りません Unixコマンドxxd -b <file name>は、ファイルのバイナリをコンソールに出力します(いくつかの追加のフォーマット設定要素とともに)。 UTF-8など、ASCII以外の他のエンコードを使用する場合は、他のすべての規則に従ってください。

9
ベース-1 + iの加算
ガウス整数はa+bi、aとのb両方の形式の複素数です。ベース-1 + iでは、すべてのガウス整数は、記号を示す記号を必要0と1せずに、数字とを使用して一意に表現できます。 たとえば1100、基数-1 + iは10進数2を表します。 1*(-1+i)^3 + 1*(-1+i)^2 + 0*(-1+i)^1 + 0*(-1+i)^0 = (2+2i) + (-2i) + 0 + 0 = 2 入力は、数字を使用して表されるベース-1 + iの2つのガウス整数になります01。これは、次のいずれかの形式をとることができます。 2つの個別の数字列、 01基数-1 + iの数値を表す2つの10進整数(1100基数-1 + iの2など) 基数-1 + iの数値を表す2つの2進整数(10進数12または0b1100基数-1 + iの2など) 単一の非英数字セパレーターによって2桁の文字列/バイナリ整数を分離する単一の文字列(1100 1100または12,122 + 2の場合) 2つのガウス整数の合計を、ベース-1 + iで出力し、数字を使用して表されます01(入力として許可される形式の1つで、必ずしも同じ選択ではありません)。出力には、有限数の先行ゼロを含めることができます。 関数またはプログラムは、それぞれ最大30桁の入力に対して2秒以内に終了する必要があります。 追加の説明 入力に余分な先行ゼロが含まれていないと想定できます。0の特殊なケースでは0、表現として空の文字列または空の文字列を選択できます。 テストケース 0, 0 …

19
全体として、それはただ、ええと、コードゴルフの別のトリックです
このチャレンジの目的は、ロックバンドのピンクフロイドによるこの素晴らしいアルバムの表紙のASCIIバージョンを作成することです。 レンガジャンクションはキャラクター_とでできてい|ます。レンガには、接合部を除く幅7および高さ2の文字があります。したがって、ジャンクションを含む基本単位は次のとおりです。 _________ | | | | _________ レンガの各行は、前の行に対してレンガの幅の半分(4文字)オフセットされています。 ________________________________________ | | | | | | | | | | ________________________________________ | | | | | | | | | | ________________________________________ | | | | | | | | | | 壁は次のようにパラメーター化されます。すべてのパラメーターは、ジャンクションを含む文字で測定されます。 最初の行の水平オフセットF。これは、左マージンと最上行の最初の垂直ジャンクション間の距離です。(行間のハーフブリック相対オフセットも覚えておいてください)。その可能な値は0、1、...、 7。 総幅、W。これにはジャンクションが含まれます。その値は正の整数です。 総高さ、H。これにはジャンクションが含まれます。その値は正の整数です。 壁の上部は常に行の上部と一致します。底面が不規則になる場合があります(合計の高さがの倍数でない場合3)。例えば、ここのための出力です6、44、11: ____________________________________________ | …

20
繰り返してください
出力するプログラムを書く Do not repeat yourself! プログラムコードは次の制約を順守する必要があります。 その長さは偶数でなければなりません positionにある各文字2n(n整数は0より大きい)は、positionにある文字と等しくなければなりません2n-1。プログラムの2番目の文字は最初の文字と等しく、4番目は3番目と等しくなります。 改行は文字としてカウントされます! これはコードゴルフなので、最短のコードが勝ちです! 例 HHeellllooWWoorrlldd 有効なプログラムです 123またはAAABBB、HHeello正しくない 検証 このCJamスクリプトを使用して、ソースコードが有効であることを確認できます。コードを「入力」ボックスに貼り付けて、スクリプトを実行するだけです。

13
nまでの素数の計算
π(N)素数の数未満またはそれに等しいN。 入力:自然数、nは。 出力: π(n)。 スコアリング:これは最速のコードチャレンジです。スコアは、スコアケースの時間の合計になります。コンピューター上の各エントリーの時間を計ります。 ルールと詳細 あなたのコードは、のために働く必要がありますnは 20億(2,000,000,000)まで。 これを単純化するビルトインは許可されていません。これには、組み込みのπ関数またはπ(n)の値のリストが含まれます。 素数性をテストしたり、素数を生成したりするビルトインは許可されていません。これには素数のリストが含まれますが、次の箇条書きに関する場合を除き、外部から検索したり、ローカルでハードコーディングしたりすることはできません。 19以下の素数をハードコーディングできます。 πの実装は決定的でなければなりません。これは、特定のnを指定すると、コードが(ほぼ)同じ時間で実行されることを意味します。 使用する言語は、Linux(Centos 7)で自由に使用できる必要があります。コードの実行方法に関する指示を含める必要があります。必要に応じて、コンパイラ/インタープリターの詳細を含めます。 公式の時間は私のコンピューターからです。 投稿するときは、コードの実行速度の推定値を提供するために、テスト/スコアの一部またはすべてのケースで自己測定時間を含めてください。 提出物は、この質問に対する回答投稿に収まらなければなりません。 64bit centos7を実行しています。8GBのRAMと1GBのスワップしかありません。CPUモデルは次のとおりです。AMDFX(tm)-6300 6コアプロセッサ。 テストケース(ソース): Input Output 90 24 3000 430 9000 1117 4000000 283146 <--- input = 4*10^6 800000000 41146179 <--- input = 9*10^8 1100000000 55662470 <--- input = 1.1*10^9 スコアケース(同じソース) いつものように、これらのケースは変更される可能性があります。スコアリングケースの最適化は許可されていません。また、妥当な実行時間と正確な結果のバランスを取るために、ケースの数を変更する場合があります。 Input …

30
メキシコの波を作る
できるだけ少ないバイトで、次を出力するプログラムまたは関数を作成します。 Abcdefghijklmnopqrstuvwxyz aBcdefghijklmnopqrstuvwxyz abCdefghijklmnopqrstuvwxyz abcDefghijklmnopqrstuvwxyz abcdEfghijklmnopqrstuvwxyz abcdeFghijklmnopqrstuvwxyz abcdefGhijklmnopqrstuvwxyz abcdefgHijklmnopqrstuvwxyz abcdefghIjklmnopqrstuvwxyz abcdefghiJklmnopqrstuvwxyz abcdefghijKlmnopqrstuvwxyz abcdefghijkLmnopqrstuvwxyz abcdefghijklMnopqrstuvwxyz abcdefghijklmNopqrstuvwxyz abcdefghijklmnOpqrstuvwxyz abcdefghijklmnoPqrstuvwxyz abcdefghijklmnopQrstuvwxyz abcdefghijklmnopqRstuvwxyz abcdefghijklmnopqrStuvwxyz abcdefghijklmnopqrsTuvwxyz abcdefghijklmnopqrstUvwxyz abcdefghijklmnopqrstuVwxyz abcdefghijklmnopqrstuvWxyz abcdefghijklmnopqrstuvwXyz abcdefghijklmnopqrstuvwxYz abcdefghijklmnopqrstuvwxyZ abcdefghijklmnopqrstuvwxYz abcdefghijklmnopqrstuvwXyz abcdefghijklmnopqrstuvWxyz abcdefghijklmnopqrstuVwxyz abcdefghijklmnopqrstUvwxyz abcdefghijklmnopqrsTuvwxyz abcdefghijklmnopqrStuvwxyz abcdefghijklmnopqRstuvwxyz abcdefghijklmnopQrstuvwxyz abcdefghijklmnoPqrstuvwxyz abcdefghijklmnOpqrstuvwxyz abcdefghijklmNopqrstuvwxyz abcdefghijklMnopqrstuvwxyz abcdefghijkLmnopqrstuvwxyz abcdefghijKlmnopqrstuvwxyz abcdefghiJklmnopqrstuvwxyz abcdefghIjklmnopqrstuvwxyz abcdefgHijklmnopqrstuvwxyz abcdefGhijklmnopqrstuvwxyz abcdeFghijklmnopqrstuvwxyz abcdEfghijklmnopqrstuvwxyz abcDefghijklmnopqrstuvwxyz abCdefghijklmnopqrstuvwxyz …

23
キングオブザヒル-スペースウォー!
Spacewarを プレイしたことがあるなら!、あなたはそれが楽しいゲームだったことを知っています。まだ知らない場合は、これを知ってください。これは、非常に最初で最も重要なコンピューターゲームの1つでした(現在もそうです)。そして、それはまだ楽しいです!私が育ったクローンはこれで、明らかに残念なことにWindowsのみです。だから私はそれを再作成しました! KotHはここでホストされています:PPCG-Spacewar!キングオブザヒル。ゲームがどのように機能するかを把握するために、少なくとも1つの他のボットに対して人間としてプレイすることをお勧めします。 ゲーム 1フレームは30ミリ秒です(したがって、約33フレーム/秒)。 フィールドは幅800ピクセル、高さ600ピクセルです。 フィールドはトロイダルです。つまり、フィールドの外側に移動する宇宙船とミサイルが反対側に再び現れます。 赤と青の2つの宇宙船があります。 赤はx = 50に配置され、ランダムなyは50(フィールドの高さ-50)ピクセルの間です。 青はx =(フィールド幅-50)に配置され、ランダムなyは50(フィールド高さ-50)ピクセルです。 両面x =(フィールド幅)/ 2。 使用可能なコントロールは次のとおりです。 左折-フレームごとに反時計回りに5度。 右折-フレームごとに時計回りに5度。 発射ミサイル-船の速度に加えて、フレームが10ピクセル余分に、船が指している方向に移動します。 消防車-宇宙船が指している方向にフレームあたり0.30ピクセルで宇宙船を加速します。 ハイパースペースジャンプ-フィールド内のランダムな座標にテレポートし、25%の確率で爆発します。これらのランダムな座標は、太陽の上にある場合があります。 船の最高速度は、エンジン出力のもとでフレームあたり15ピクセル、重力ブースト時のフレームあたり40ピクセルです。 フレームあたり15ピクセルよりも速く移動する場合、エンジンの推力は方向を変えるか、減速するだけです。 ミサイルについて: ミサイルは直線で移動します。 ミサイルは、0.1秒に1回の割合で発射できます。 ミサイルの寿命は2.25秒です。 船にはそれぞれ最大20個のミサイルがあります。 ミサイルは内部的に点粒子です。 あなたの船にとって非常に危険な太陽がまさに中心にあります。わずかな接触は致命的です。この太陽はミサイルも破壊します。 太陽には重力があります。結果の加速度は5000 /(距離^ 2)ピクセル/フレーム^ 2で、距離はピクセル単位です。宇宙船とミサイルが影響を受けます。 どちらの船にも3つのストライクゾーンがあります。機首、左翼、右翼です。 鼻に当たると即死します。 どちらかの翼にヒットすると、宇宙船の回転速度とエンジンの加速が半分に減少します。 両方の翼が破壊された場合、宇宙船は操縦できず、ミサイルのみを発射できます。 船同士が衝突する場合があります。 鼻と鼻の衝突は、両方の船にとって致命的です。 鼻翼の衝撃により、翼が破壊されます。 翼と翼の衝突により、両方の翼が破壊されます。 死んだ船は固く、1秒後に爆発するまで凍結します。 少なくとも1隻の船が死亡した後、フィールドは3秒後にリセットされます。それまでは、太陽と残っているミサイルはまだ危険です。 元のゲームには致命的で破壊不可能な小惑星もありますが、それらは含めません。 ルール ボットはJavaScriptで作成する必要があります。 ボットは、その決定を約10ミリ秒に制限する必要があります。ボットが原因で一貫した遅延に気付いた場合は、失格とし、修正できるようお知らせします。 ボットは次のものにアクセスできます。 …

30
ASCIIアートを拡大
この課題では、次のような複数行のASCIIアートを入力として使用する必要があります。 OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OO OOOOOOO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OOOOO OO OOO OO OO OO OOOOO OO OO OO OO OO OO OO OO OO OO OO OO OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO …

19
銀行口座のパスワードを解読してください!
前書き キーロガーがユーザーのパスワードを盗むのを防ぐために、特定の銀行口座システムでは次のセキュリティ対策が実装されています。特定の数字のみが入力されるように求められます。 たとえば、ターゲットのパスワードが89097であるとすると、システムは2桁目、4桁目、5桁目の入力を求めるプロンプトを表示する場合があります。 997 または、1桁目、3桁目、5桁目の入力を求めるプロンプトが表示される場合があります。 807 知っているのは、ターゲットが数字を順番に入力したということだけですが、実際のパスワードではそれらがどの位置に属しているのかわかりません。知っているのは2つの9があり、7の前に来る必要があることです。そして、8は0の前に、0は7の前に来ます。したがって、6つの可能なパスワードがあります。 80997 89097 89907 98097 98907 99807 ターゲットのコンピューターのキーロガーは、ここ数か月間パスワード入力を収集しているので、ハックしましょう! チャレンジ 3桁の入力のリストが与えられた場合、すべての入力に有効なすべての可能なパスワードを出力します。計算の複雑さを軽減し、可能な結果の量を低く抑えるために、パスワードは数字であり、サイズが5に固定されていることが保証されます。すべての入力の数字は順番に並んでいます。 2、3。 入出力の例 |----------------------|--------------------------------------------| | Input | Output | |----------------------|--------------------------------------------| | [320, 723, 730] | [37230, 72320, 73203, 73230] | | [374, 842] | [37842, 38742, 83742] | | [010, 103, 301] | [30103] | …
64 code-golf 

18
最小限のNetHack
NetHackは、プレイヤーがダンジョンの最下層からイェンダーの魔除けを取得しなければならないローグライクゲームです。一般にtelnetを介してプレイされるゲーム全体は、ASCIIグラフィックで表されます。ゲームは非常に挑戦的であり、成功するためには多くのゲームの仕組みの知識が必要です。 この課題のために、ダンジョン全体が単一のレベルであり、5×16文字のみであると仮定します。さらに、これは「安全な」ダンジョンであるか、プロトタイプのみを実装していると想定します。モンスター、空腹に関する懸念などはありません。実際、キャラクターとアミュレットとゲームの位置のみを追跡する必要があります。プレイヤーがアミュレットと同じ場所に到着すると効果的に終了します。 チャレンジ要件 5×16のダンジョン(シングルレベル)があります。 プレイヤーに開始場所(オプションでランダム)を与え、アミュレットにダンジョン内の別のランダム(プログラムが実行されるたびに異なる)開始広場を与えます。つまり、魔除けはプレイヤーと同じマスから始めることはできません。 プレーヤーを一度に1マスずつ移動する4つの入力キー(4つの基本方向)を受け入れます。他の入力の読み取り/処理が許可されます( 'enter'などを押す必要があるreadline()関数)。 ダンジョンの境界外への移動は許可されていません。たとえば、プレイヤーがダンジョンの右端にいる場合、右を押しても何も実行されません。 初期生成後および各移動後に、ゲームの状態を印刷します。これはコードゴルフであり、印刷はかなり面白くないので、状態の変化がないと仮定して、印刷関数と関数呼び出しの文字数を無視します。空のセルはピリオド(.)、アミュレットは二重引用符(")、文字はアットマーク()として表示する必要があります@。 プレイヤーがアミュレットを「発見」するとゲームは終了します(同じ広場に到着します) 勝ち これは、ゴルフの挑戦であり、今日から1週間の要件を満たす最短のコードが勝者と宣言されます。 例 基本的な要件とサンプル出力を示すC#(ungolfed)のソリューションの例を次に示します。 using System; namespace nh { class Program { static Random random = new Random(); // player x/y, amulet x/y static int px, py, ax, ay; static void Main(string[] args) { px = random.Next(0, 16); py = …
64 code-golf 

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