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

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

13
Intel 8086 CPUをエミュレートする
注:いくつかの回答が届きました。新しい回答も投票することを検討してください。 happy5214のCommon Lisp luser droogからのC NeatMonsterのJava cremppのJavascript マイクCのC Darius GoadのC ++ luser droogからの追記 JoeFishのC ++ 完全に主観的なJavascript RichTXのC Dave CのC ++ JBのHaskell jaからのPython 8086は、 Intelの最初のx86マイクロプロセッサです。あなたの仕事は、そのためのエミュレータを書くことです。これは比較的進んでいるので、私はそれをリッテに制限したい: 次のオペコードのみを実装する必要があります。 mov、push、pop、xchg add、adc、sub、sbb、cmp、および、またはxor inc、dec call、ret、jmp jb、jz、jbe、js、jnb、jnz、jnbe、jns stc、clc hlt、nop この結果、キャリー、ゼロ、サインのフラグを計算するだけで済みます。 セグメントを実装しないでください。と仮定しcs = ds = ss = 0ます。 プレフィックスなし 種類の割り込みやポートIO 文字列関数なし 2バイトのオペコードなし(0F ..) 浮動小数点演算なし (明らかに)32ビットのもの、sse、mmxなどはありません... 1979年にまだ発明されていないもの サイクルをカウントしたり、タイミングを計ったりする必要はありません。 で開始ip …

16
私のスワイプパターンは合法ですか?
ほとんどのAndroidスマートフォンでは、ユーザーはスワイプパターンを使用してスマートフォンを開くことができます。 特定のパターンは正当であり、他のパターンは不可能です。入力スワイプパターンが与えられると、与えられた入力パターンが正当かどうかを示す真実または偽を返します。 入力 グリッドには、行ごとに1〜9のラベルが付けられます。 1 2 3 4 5 6 7 8 9 入力は、最初から最後にアクセスしたノードで構成される数です。たとえば、上記のスワイプパターンは12357です。 入力は、10進数、文字列、または数字のリストにすることができます。ノード0がないため、0は含まれません。 修正:多くの言語が0からインデックスを作成するため、0-8のインデックス作成が許可されます。0-8を使用する場合は、回答の冒頭にその旨を示し、テストケースを適宜調整する必要があります。 ルール すべてのノードは最初は未訪問として開始され、一度だけアクセスできます。ノードに複数回アクセスするパターンは偽物です。 真実のパターンには少なくとも1つのスワイプが含まれている必要があるため、少なくとも2つのノードが必要です。 訪問されていないノードを別のノードに沿って直接スキップすることはできません。たとえば、2は未訪問で直接並んでいるため、13は偽です。 訪問したノードのみをスキップできます。42631はこの例です。 そうしないと、線が交差する場合があります。たとえば、1524は真実です。 ノード幅は重要ではなく、実際の問題(指の太さなど)を無視します。そのため、実際には達成するのが少し難しいかもしれませんが、16は真実です。 テストケース 1 -> false 12 -> true 13 -> false 16 -> true 31 -> false 33 -> false 137 -> false 582 -> true 519 -> …

30
どれくらい高く数えられますか?
チャレンジ: あなたの仕事は、できる限り多くのプログラム/関数/スニペットを書くことです。それぞれが整数を出力/印刷/返します。最初のプログラムはinteger 1、2番目のプログラムなどを出力する必要があります2。 プログラム間で文字を再利用することはできません。したがって、最初のプログラムが:の場合、x==xその文字xを=他のプログラムで再び使用することはできません。注:1つのプログラムで同じ文字を何度も使用できます。 得点: 勝者は最高の数を数える提出物になります。同点の場合、勝者は合計で最も少ないバイト数を使用した提出物になります。 ルール: すべての整数に単一の言語のみを使用できます スニペットは許可されています! 公平に保つには、選択した言語の1バイトを使用してすべての文字をエンコードする必要があります。 出力は10進数でなければなりません。科学表記または他の形式で出力することはできません。小数点の後ろに表示されるすべての数字がである限り、フロートの出力は問題ありません0。だから、4.000受け入れられます。出力に表示されない限り、FPAによる不正確さは受け入れられます。 ans =、先頭と末尾のスペース、改行などが許可されます。 正しい出力がSTDOUTに返される限り、STDERRは無視できます。 STDOUTが空の場合のみ、整数をSTDERRに出力することを選択できます。 シンボルに依存しない言語(Lenguageなど)は許可されません 大文字と小文字は区別されa != Aます。 プログラムは独立している必要があります 空白は再利用できません 出力にはASCII数字を使用する必要があります 説明をお勧めします!

4
ハイパープログラミング:N + N、N×N、N ^ Nをすべて1つに
1から9までの数Nを取り込むプログラムを作成します。そのネイティブで出力すべきN + NEG出力プログラムを形成する2Nであれば1、4Nの場合2、6Nであれば3、というように。 あなたのプログラム内のすべての文字が所定の位置に複製された場合、それは(1から9までまだ)Nを取り込みプログラムと出力N×NEG出力する必要があります1Nである場合は1、4Nである場合は2、9Nであれば3、というように。 あなたのプログラム内のすべての文字が所定の位置に三重されている場合、それは(まだ1から9まで)Nを取り込んでプログラムする必要がありますし、出力N ^ NEG出力1Nがある場合1、4Nである場合は2、27Nである場合は3、387420489Nである場合は9、等 10 ^ 10は多くの言語の通常の整数範囲外であるため、9を超える数値は必要ありません。 例 初期プログラムが My_Program! Exit(); 次に、Nを取り込み、N + Nを出力できる必要があります。 さらに、プログラム MMyy__PPrrooggrraamm!! EExxiitt(());; Nを取り込み、N×Nを出力する必要があります。 最後に、プログラム MMMyyy___PPPrrrooogggrrraaammm!!! EEExxxiiittt((()));;; Nを取り込んでN ^ Nを出力します。 4倍文字以上のプログラムは必要ありません。 ルール 入力および出力は、通常のフォーマットされた10進数である必要があります。コードを見せるために別のベースを使用して回答することもできますが、その場合、回答は非競争的です。 Windowsユーザーは\r\n1つの文字として扱う\r\r\n\nかもしれません。なぜなら、そのようなものは意味をなさないか、おそらくは機能しないからです。 最短のネイティブプログラム(N + Nの1つ)がバイト単位で勝ちます。

30
穴居人デュエル(または:私は鋭い棒であなたを突く)
穴居人は怒っています。他の穴居人はスティックを取るが、スティックは私のためだった。穴居人の戦い! 説明 穴居人は他の穴居人を刺すために鋭い棒を必要とします。他の穴居人も鋭い棒で刺そうとします。穴居人は、棒を研いだり、棒で突いたり、つまらない棒をブロックしたりできます。 穴居人が鋭い棒で他の穴居人を突くと、他の穴居人が逃げ出し、私が勝利します。しかし、他の穴居人が私が突っ込んでいるときに賢くブロックした場合、私のスティックが鈍くなるので何も起こらず、私は再び研ぐ必要があります。 穴居人怠け者。また、穴居人のダム。穴居人は何をすべきか分からないので、穴居人は何をすべきかを穴居人に伝えるために派手なテクノコンピュータープログラムが必要です。 入力 プログラムの入力は、発生したイベントの履歴になります。ここでSは、シャープ(つまり、穴居人がスティックを研いだ)をP表し、ポークをB表し、ブロックを表します。入力は両側(あなたと相手)の履歴であるため、あなたと相手の動きはコンマ(,)で区切られます。 入力例: SPB,SBB これは、プレイヤーがスティックをシャープにした後、突いてブロックした後、対戦相手がシャープになってからブロックし、再びブロックしたことを意味します。 1ターン目には何も入力されません。 出力 出力は入力に非常に似ています(穴居人はあまり賢くないため)。プログラムはS、シャープ、Pポケ、およびBブロックのために出力する必要があります。出力の最初の文字のみが考慮され、その他の入力はB(ブロック)コマンドとして扱われます。 S:シャープ 削ると、穴居人のスティックの切れ味が1つ上がり、スティックが1本余分に突く。突くたびにスティックの切れ味が1減り、スティックの切れ味が0の場合は、くすみすぎて突き抜けません。シャープネスは0から始まります。シャープネスが5に達すると、スティックは剣になります。(下記参照。) シャープニング中に相手が突く(そしてシャープネスが0より大きい)場合、相手が勝ちます! P: ポーク 突くと、穴居人のスティックの切れ味が1下がり、相手を突く!相手が研ぎ澄ましている場合、あなたは勝ちます!相手が突っ込んでいる場合、スティックは相手のスティックにぶつかり、両方が鈍くなります(「シャープネスユニット」1つ分)。相手がブロックしている場合、スティックが鈍くなる以外は何も起こりません。 スティックの切れ味が5以上のときに突くと、スティックが剣になり、常に勝ちます!(対戦相手も剣を持っていて、選択Pした場合を除き、その場合、両者は鈍くなり、鋭さが5を下回るとスティックに戻る可能性があります。) 0のシャープネスで突くことはできません。その場合、何も起こりません。 B:ブロック ブロックすると、相手が突くときは何も起こりません。相手が突っ込んでいない場合、ブロックは何もしません。 ブロッキングは、剣を持っていても保護しません! ルールと制約 追加のルールは次のとおりです。 データを保存したい場合、プログラムは独自のフォルダーでファイルを読み書きできます(盗むことはできません!)が、その外部にアクセスすることはできません(そして穴居人は荒野でインターネットに接続できません)。 ファイルに関する重要な注意:ファイルを保存する場合は、必ずディレクトリに保存してくださいplayers/YourBotsName/somefile.foo!プログラムの現在の作業ディレクトリは、プログラムのものではありません! 穴居人は公平です。あるプログラムは別のプログラムに固有のコードを持つことはできず、プログラムは互いに助け合うことはできません。(複数のプログラムが存在する場合がありますが、それらは互いに相互作用することはできません。) 穴居人の裁判官は患者ではありません。穴居人が勝者を決定するためにそれぞれ100ターン以上かかると、裁判官は退屈し、両方の穴居人が負けます。 プログラムがルールに違反するか、仕様に準拠していない場合、プログラムは失格となり、から削除されplayerlist.txt、すべての決闘は最初から再開されます。あなたのプログラムが失格の場合、穴居人のリーダー(私!)があなたのプログラムの投稿にコメントし、その理由を説明します。ルールに違反していない場合、プログラムはリーダーボードに追加されます。(あなたのプログラムがリーダーボードにない場合、あなたの投稿に説明的なコメントはなく、あなたは以下の「最終更新」時間の前にあなたのプログラムを投稿しました、穴居人のリーダーに伝えてください!たぶん彼はそれを忘れました。) 投稿に以下を含めてください: 名前。 あなたのプログラム(例:実行するシェルコマンドjava MyBot.java、ruby MyBot.rb、python3 MyBot.py、など)。 注:入力はコマンドライン引数としてこれに追加されます。 穴居人はUbuntu 14.04を使用しているため、コードが(自由に)動作することを確認してください。 選択した言語のバージョンによってコードの動作が異なる場合は、バージョン番号。 あなたのコード(明らかに)。 必要に応じて、コードをコンパイルする方法。 コントローラーコード/テスト、サンプルボット 穴居人のリーダーは、制御コードをC ++ で作成し、Githubリポジトリに投稿しました。そこでプログラムを実行およびテストできます。 非常に単純なプログラム(1行!)も以下の回答に掲載されています。 スコアリングとリーダーボード スコアリングは簡単です。穴居人が勝つとポイントが得られます。他のすべての穴居人との3つの決闘の後、最もポイントを持つ穴居人が新しい穴居人のリーダーになります! …


30
真理機を実装する
真実マシンは、(クレジットに行くこの男、それを考え出すために)言語のI / Oおよび制御フローを示すために設計された非常に単純なプログラムです。真理値マシンの機能は次のとおりです。 STDINから数値(0または1)を取得します。 その数が0の場合、0を出力して終了します。 その数が1の場合、1を永久に出力します。 チャレンジ 上記のように、選択した言語で真理マシンを記述します。真理値マシンは、これらのルールに従う完全なプログラムでなければなりません。 STDINまたは許容可能な代替から入力を取得します 言語がSTDINから入力を取得できない場合、ハードコードされた変数またはプログラム内の適切な同等物から入力を取得できます。 STDOUTまたは許容可能な代替に出力する必要があります ご使用の言語が文字を出力できない場合、0または1バイトまたは単項I / Oは受け入れ可能です。 入力がの場合、1継続的に1sを出力し、プログラムが強制終了またはメモリ不足になった場合にのみ停止する必要があります 出力のみをしなければならないのいずれか0一方又は無改行やスペース、または無限に続く1それぞれとの1一つまたは無改行またはスペースのいずれかが続きます。抑制できない言語のインタープリターの一定の出力(挨拶、ANSIカラーコード、インデントなど)を除き、他の出力は生成できません。改行またはスペースの使用方法は一貫している必要があります。たとえば、1すべて1のsの後に改行が必要な後に改行を使用して出力することを選択した場合などです。 あなたの言語がその入力で終了できない可能性がある場合にのみ0、コードが何も出力されない無限ループに入ることが許容されます。 これはカタログであるため、このチャレンジの後に作成された言語は競合できます。提出物をテストできるようにインタープリターが必要であることに注意してください。以前に未実装の言語用にこのインタープリターを自分で作成することは許可されています(推奨されます)。それ以外は、コードゴルフのすべての標準ルールに従わなければなりません。ほとんどの言語での提出物は、適切な既存のエンコーディング(通常はUTF-8)でバイト単位で記録されます。 カタログ この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からカタログを生成します。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 ## Language Name, N bytes N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: ## Ruby, <s>104</s> <s>101</s> 96 bytes ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。 ## Perl, 43 + 2 (-p flag) = 45 bytes 言語名をリンクにして、スニペットに表示することもできます。 ## [><>](http://esolangs.org/wiki/Fish), 121 bytes コードスニペットを表示 …
148 code-golf 

30
1、2、フィズ、4、バズ
前書き 標準プログラミング演習用の最短ソリューションのカタログを収集するための最近の取り組みで、PPCGの最初のバニラFizzBu​​zzチャレンジがここにあります。他のカタログの課題を見たい場合は、「Hello World!」があります。そして「この数は素数であります?」。 チャレンジ 1から100までの10進数を出力するプログラムを作成します。しかし、3の倍数の場合は数字ではなく「フィズ」、5の倍数の場合は「バズ」が印刷されます。3と5の両方の倍数である数字の場合、「FizzBu​​zz」と印刷します。 出力 出力は、改行(\nまたは\r\n)で区切られた数字(およびFizzes、Buzzes、FizzBu​​zzes)のリストになります。末尾の改行は使用できますが、先頭の改行は使用できません。改行の選択とは別に、出力は次のようになります。 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 …

25
合法的にスラックオフするための最短コード
私は開発者であり、自分の仕事をする気はありません。私はXKCDから、あなたのコードがコンパイルされていることを怠ることの最良の言い訳であることを知っています。このため、永久にコンパイルできるコードが必要だと思います!そして、私は怠け者であり、あまり入力する必要がないので、これは可能な限り短いコードで行わなければなりません。 したがって、あなたのタスクは、構文的には有効であるが、コンパイラーが無限ループに入るプログラムを作成することです。 仕様書 もちろん、コンパイラーを備えた言語を使用する必要があります。 各ソリューションで使用される実装を指定します。 これはcode-golfであるため、最短の有効なソリューション(バイト単位)が優先されます。 コンパイラは、メモリまたはスタック領域が不足することで終了する場合があります。

30
スタックオーバーフローを生成する最も奇妙な方法[終了]
プログラマーとして、明らかな再帰によるスタックオーバーフローのエラーを確実に知っています。しかし、間違いなく、お気に入りの言語にそのエラーを吐き出す奇妙で珍しい方法がたくさんあります。 目的: エラー出力にはっきりと見えるスタックオーバーフローを引き起こす必要があります。 明らかな再帰を使用することはできません。 無効なプログラムの例: // Invalid, direct obvious recursion. methodA(){ methodA(); } // Invalid, indirect, but obvious recursion. methodA(){ methodB(); } methodB(){ methodA(); } これは人気コンテストとして最も創造的な方法が最適です。つまり、次のような明白な答えを退屈させないでください。 throw new StackOverflowError(); // Valid, but very boring and downvote-deserving. 今は回答を受け入れましたが、さらに回答を追加しても大丈夫です:)

1
「ノット」または「ノット」?
もつれた文字列のASCIIアート表現を処理し、それを単純なループに解くことができるかどうかを決定するプログラムを作成します。もつれは、文字-を使用し|て表され、水平および垂直セグメント+を表し、角を表します。文字列がそれ自体を通過する場所は、次のように表されます。 | | ------- ---|--- | | (Horizontal segment on top) (Vertical segment on top) ストリングの両端は互いに接続されています。ゆるい終わりはありません。 プログラムが文字列を単純なループに解くことができないと判断した場合、wordを出力する必要がありますKNOT。それ以外の場合は、wordを出力する必要がありますNOT。 これはコードとゴルフの挑戦なので、最短の有効な回答(ソースコードのバイト数で測定)が勝ちます。 制限 ASCII入力は、最大25行の80文字で構成されます。すべての行に同じ長さのスペースが埋め込まれていると想定できます。 例 入力: +-------+ +-------+ | | | | | +---|----+ +-------+ | | | | | | +-------|------------|---+ | | | | +---+ +---+ 出力: KNOT 入力: +----------+ | | …

30
ソースコードを解読する
注:この課題は、現在、新しい警官の提出に限定されています。これは、チャレンジに興味のある強盗がもういないため、クラックされないままの投稿を誰も投稿できないようにするためです。 この警官と強盗のゲームでは、各警官は単一の出力を与える簡単なプログラムを作成します。その後、プログラムについて4つのことを公開します。 言語 プログラムの長さ 希望する出力 ソースコードのスクランブルアップバージョン その後、強盗はソースコードを解読して、プログラムが元のように機能するようにする必要があります。 警官のルール 強盗が再作成しようとする単純なプログラムを作成する必要があります。 元のプログラムには単純な機能が必要です。実行時に、単一の文字列/数字を出力して停止します。いつ/どこで実行されても同じ出力が得られ、追加のライブラリやインターネットに依存するべきではありません。 プログラムと出力には、印刷可能なASCII(改行とスペースが使用可能)を使用する必要があります。出力の長さは100文字を超えてはならず、プログラムは適切なマシンで実行するのに約5秒未満かかります。また、プログラムでハッシュ(または他の暗号化機能)を使用することもできません。 次に、ソースコードのスクランブルバージョンと必要な出力を提供します。文字が保存されている限り、好きなようにソースコードをスクランブルできます。 あなたのスコアは、クラックされていないあなたが提出した最短のプログラムです。1週間後、クラックのない提出物は無効になります。この免除を主張するには、答えを編集して正しい答えを表示する必要があります。(明確化:あなたが答えを明らかにするまで、あなたは免疫がなく、まだクラックされる可能性があります。)最低スコアが勝ちます。 警官の簡単な回答例 Perl、20 ellir"lnto Wo d";prH Hello World または... Perl、15 *3i)xp3rn3*x3t( 272727 強盗ルール 強盗は、ここにある別のスレッドに回答としてクラッキングの試みを投稿します。 各提出物をクラックする試みが1回あります。クラッキングの試みは、ソースコードのスクランブルされていないバージョンになります。推測が説明(同じ文字、出力、そしてもちろん言語)と一致し、あなたが最初の正しい推測である場合、あなたはポイントを獲得します。プログラムがオリジナルと完全に一致する必要はなく、単に同じ文字を使用し、同じ機能を持っていることに注意することが重要です。これは、複数の正解がある可能性があることを意味します。 最も多くのポイント(成功したクラック)を持つ強盗が勝ちます。 簡単な強盗回答の例 あなたのプログラムはでしたprint "Hello World";。(ただし、機能print"Hello World" ;する場合もあります。) あなたのプログラムは print(3**3x3)x3 安全な提出 ASP / ASP.Net、14(ジェイミーバーカー) Befunge-98、15(FireFly) GolfScript、16(ピーターテイラー) CJam、19(DLosc) GolfScript、20(user23013) Perl、21(primo) Python、23(mbomb007) ルビー、27(歴史家) SAS、28(ConMan) ルビー、29(歴史家) Python、30(mbomb007) …

30
Cでのゴルフのヒント
Cでゴルフをするための一般的なヒントは何ですか?私は、少なくともCに特有のゴルフ問題全般のコーディングに適用できるアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。回答ごとに1つのヒントを投稿してください。また、ヒントがC89および/またはC99に適用される場合、および特定のコンパイラでのみ機能する場合も含めてください。
137 code-golf  tips  c 

27
Google Overlordをなだめる:「G」ロゴを描く
正の整数Nを取り込んで、この*構成に従ってGoogleの「G」ロゴのN×Nピクセルの画像を出力するプログラムまたは関数を作成します。 たとえば、Nが400の場合、正しいサイズと色で400×400ピクセルのロゴを出力する必要があります。 Nの大きさに関係なく、正確に見えるはずです。たとえば、N = 13です。 コードをインターネットに接続する必要はありません。たとえば、外部でホストされているsvgのスケーリングは許可されていません。(ただし、コードでエンコードされたsvgのスケーリングは問題ありません。) アンチエイリアシングが使用される場合とされない場合があります。それはあなた次第です。 「G」の水平バーが画像の右端まで完全に伸びていないことに注意してください。円は、通常、切断される前に右端で内側に湾曲します。 バイト単位の最短コードが優先されます。 *ロゴの作成は、この課題のために簡素化されています。正しい構造はこことここで見ることができます。

30
最短エラーメッセージ
チャレンジ コンパイルまたは実行すると、プログラム自体よりも致命的なエラーメッセージが生成される最短のプログラムを作成します。エラーメッセージは、Pythonなどのプログラム自体によって生成されない場合がありますraise。有効な回答には、コードとエラーメッセージの両方を含める必要があります。最短有効回答が勝ちます。 エラーメッセージはエラーメッセージとしてカウントされません。 例(Lua) コード(46バイト): [ --aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa エラー(45バイト): [string "[..."]:1: unexpected symbol near '['

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