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

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

2
論理システムの修正
論理ステートメントのセットが提供されます。あなたの課題は、他のものと矛盾するものを削除することですが、最適な方法で(つまり、最小限のステートメントを削除することです)。 チャレンジ ステートメントのリストを入力として受け取り、ソリューションがあるように最小限のステートメントを削除して残りを出力するプログラムまたは関数を作成します。 論理 ステートメントは、変数 A-Zとそれらの間の演算子で構成されます。 5つの演算子があります:-(not)、v(or)、^(and)、->(if)、および<->(iff)。 真理値表: A | B | -A | AvB | A^B | A->B | A<->B 0 | 0 | 1 | 0 | 0 | 1 | 1 0 | 1 | 1 | 1 | 0 | 1 | 0 1 | 0 …
16 code-golf 

3
ダイナミックASCIIエンコーダー!
前書き 一部のASCII文字は最近非常に高価です... お金を節約するために、高価な文字を安価な文字を使用してエンコードするプログラムを作成することにしました。 ただし、キャラクターの価格は頻繁に変更されるため、別のキャラクターをエンコードまたはデコードする必要があるたびにプログラムを変更する必要はありません。より動的なソリューションが必要になります。 チャレンジ あなたの仕事は、エンコーダーとデコーダーの 2つのプログラムを書くことです。 エンコーダは、 5つの安価な文字のリスト、および単一の高価な文字を受け入れる必要があります。 安価な文字で構成される単一の文字列を出力し、高価な文字をエンコードする必要があります。 この文字列 は、安価に保つために4文字より長くすることはできません。ただし、エンコードで安価な文字をすべて使用する必要はなく、エンコードの長さは異なる場合があります。 デコーダは、エンコーダによって出力された文字列、および出力高価な文字を受け入れなければなりません。 デコーダは、エンコードされた文字列以外の入力を受け付けません。入力の任意の(有効な)組み合わせに対して、エンコーダの出力から変更せずに動作する必要があります。言い換えれば、デコーダプログラム は、どの文字が高価であるか、または安価であるかを知りません。 得点 最短の組み合わせコードが勝ちます! ノート すべての文字は、大文字[A-Z]、小文字[a-z]、または数字のいずれかになります[0-9]。 安価な文字のリストには重複が含まれません。安価で高価なキャラクターはありません。 エンコーダーとデコーダーを同じ言語で記述する必要はありませんが、可能です。プログラムまたは関数を作成できます。 入力および出力は、言語に適した任意の形式である場合があります。 2つのプログラムは、変数またはデータを共有できません。 概要 いくつかの安価な文字と高価な文字の入力がエンコーダに与えられます。 エンコーダーは、安価な文字列を出力し、高価な文字をエンコードします。 デコーダーにはエンコーダーの出力が与えられ、高価な文字が出力されます。 例 入力: a, b, c, d, e f エンコーダーの可能性: a eeee caec デコーダ: f 入力: a, b, c, d, e h エンコーダーの可能性: bc …
16 code-golf 

3
ループとループとループ
チャレンジ ASCIIアートの入力(最終的にループする可能性のあるパスを指示する)が与えられると、ループの長さ(ある場合)およびループのいずれかにある「テール」の長さを出力する関数を作成します。以下のフォーム。 入力 入力を関数に渡す必要があります。以下は、単純な入力の例です。 # --> # --> # ^ | | | | v # <-- # 上記のブロックは次のように視覚化できます 「尾」は1つのアイテムで、ループは4つの長さです。 より難しいもの: # --> # --> # ^ | | | | v # --> # <-- # # --> # ^ ^ | | | | | | v # …

2
鶏はどのように道路を横断しましたか?
ガチャガチャ。鶏が道路を横断した理由は誰にもわかりません。反対側には見栄えの良い雄鶏がいたかもしれません。しかし、私たちはその方法を理解できます。この(または任意の)「道路」を横切る左から右へのプログラムを作成します。 1356 | 1738 3822 | 1424 3527 3718 9809 | 5926 0261 | 1947 7188 4717 6624 | 9836 4055 | 9164 2636 4927 5926 | 1964 3144 | 8254 プログラムは「交差」し、左から右に移動します。あなたが好きな一番左の列の任意の番号から始めます。そこから、右側の隣接するキャラクターに移動できます。左上隅の1で開始した場合は、3または8に移動できます。開始番号を含む、移動したすべての番号が合計に加算されます。スペースは合計に追加されません。「|」右側に移動するのではなく、強制的に上下に移動します。(このキャラクターで前進することはできません)あなたの目標は、可能な限り最小の金額で反対側に到達することです。プログラムは最後に合計を印刷する必要があり、すべての道を解決できなければなりません。道路への入力も可能ですが、必須ではありません。プログラムは、パスと合計の両方を印刷する必要があります。最少バイトのコードが勝ちます。 明確にするために、垂直バー上にいる場合を除き、診断的に移動できます。垂直バーにいるときのみ上下に移動できます。 道路をより明確に指定するために、基本的には文字列(または列や行の配列)を文字のルールに従いますが、文字は何もありません道路。任意の数字、スペース、バー( "|")、または改行を使用できます。ProgrammerDanの答えのように、道路が酔っ払った男によって舗装された場合、それはまだ有効な道路であり、プログラムはそのような道路を解決できる必要があります。反対側に到達することが不可能な場合、道路とはみなされません(たとえば、バーの直線から抜け出す方法がありません)。 プログラムは、道路が無効かどうかを判断する必要はありません。 キー: 任意の数字-合計に数字を追加し、前進します。 スペース-前進します。合計には何も追加されません。 「|」-上下に移動しても、合計には何も追加されません。 編集:提案されたソリューションの例。私は恐ろしく大きなものを作ることはできません。ATMのためにそれを解決するIDEに乗ることはできません。 この小さな道を進みます。 9191 | 8282 1919 | 2727 5555 5555 …

17
自己切断プログラム
簡単に言えば、あなたの目標は、ソースのすべての文字が元の文字と異なるまで、独自のソースコードを変更する完全なプログラムを作成することです。 投稿に開始ソースと終了ソース、および説明を含めてください。例えば、あなたのプログラムが何を(他に)、あなたが使用した言語、あなたの戦略などを記述してください。 ルール 変更が完了した後、プログラムを停止する必要があります。 新しいプログラムを印刷したり、新しいファイルを書き込んだりするのではなく、現在実行中のソースコード(インタープリターに渡したファイルである必要はなく、命令を変更する必要はありません)を実際に変更する必要があります。 標準の抜け穴は許可されていません。 最短のプログラムが勝ちます。 言語が独自のファイルを変更して新しいコンパイラプロセスを実行できるが、独自の(現在実行中の)ソースコードを変更できない場合は、代わりに+ 20%バイトのペナルティで切り上げてそのようなプログラムを記述できます。実際の自己修正言語には利点があります。 編集:プログラムがエラーで停止した場合は、そのように指定してください(そして、エラーの内容を伝えてください)。

11
バナッハ・タルスキのパラドックス
Banach–Tarskiパラドックスは、3次元空間でボールが与えられると、ボールを有限数のポイントサブセットに分解できると述べています。これらのばらばらのポイントのセットは、最初のボールの2つのコピーを作成するために再構築できます。理論的には、2つの同一のボールがあります。 再アセンブリのプロセスは、前述のポイントサブセットを移動して回転させるだけで、空間形状は変更されません。これは、わずか5つの互いに素なサブセットで実行できます。 互いに素な集合には、定義上、共通の要素はありません。ここで、A及びBイニシャルボールの任意の2点のサブセットとの間の共通要素であるAとB空集合です。これは次の式で示されます。 以下の非結合セットの場合、共通メンバーは空のセットを形成します。 チャレンジ 入力ASCII「ボール」を取り、複製「ボール」を出力できるプログラムを作成します。 入力 入力ボールの例を次に示します。 ########## ###@%$*.&.%%!### ##!$,%&?,?*?.*@!## ##&**!,$%$@@?@*@&&## #@&$?@!%$*%,.?@?.@&@,# #,..,.$&*?!$$@%%,**&&# ##.!?@*.%?!*&$!%&?## ##!&?$?&.!,?!&!%## ###,@$*&@*,%*### ########## 各球体はポンド記号(#)で囲まれており、次の文字で満たされています.,?*&$@!%。すべての入力は22x10文字(幅と高さ)です。 複製を作成する まず、ボール内の各ポイントには、のインデックスに基づいて番号付きのポイントが与えられ.,?*&$@!%ます。番号が付けられた上記の例を次に示します。 ########## ###7964151998### ##86295323431478## ##5448269677374755## #75637896492137317572# #21121654386679924455# ##1837419384568953## ##85363518238589## ###2764574294### ########## 次に、各ポイントが1つ上にシフトされます(9つが1つに移動します)。 ########## ###8175262119### ##97316434542589## ##6559371788485866## #86748917513248428683# #32232765497781135566# ##2948521495679164## ##96474629349691## ###3875685315### ########## 最後に、新しいポイント値はそれぞれ対応する文字に変換されます。 ########## ###!.@&,$,..%### ##%@?.$*?*&*,&!%## ##$&&%?@.@!!*!&!$$## #!$@*!%.@&.?,*!*,!$!?# #?,,?,@$&*%@@!..?&&$$# ##,%*!&,.*%&$@%.$*## …

2
ポケットには何が入っていますか?
概要:で囲まれた文字を検索しMYPOCKETます。 入力例 MYPHEIF YFOCKVH MBNDEIF TEUFTMY ESNDUWP KBOVUVO CENWFKC OPYMTEB 出力例 F BND EUF SNDUW BOVUV ENWF え?どのようにして出力として取得しましたか?「ポケット」は見にくい場合があります。これにより、明確になります。 MYP HEIF Y F OCK VH M BND E IF T EUF TMY E SNDUW P K BOVUV O C ENWF KC OPYMTE B 太字の文字は、MYPOCKET繰り返し繰り返される文字列で構成される、互いに直交する文字の輪を示します。プログラムは、そのリング内にある文字を出力する必要があります。 ノート: 「ポケット」は1つだけです。 行の後の新しい行またはスペースは許可されます。 グリッドの残りの部分にもからの文字が含まれている場合がありますMYPOCKETが、リングの形状があいまいになるような方法ではありません。 M右上の隅に常にではありません。 「ポケット」は時計回りまたは反時計回りに移動できます。 「ポケット」は斜め方向に移動しません。つまり、各文字は左、右、上、または下につながっています。 …
16 code-golf 

1
私たちは奇妙なパズル、私たち英国人が大好きです
イギリスの数紙の新聞にはHidatoとして知られているゲームがあります。数独にやや似ていますが、ラインとブロックに1-9を置く代わりに、番号を配置01して、一番上まで順番に接続するので、すべて水平、斜め、または垂直に触れます。 入力には\n、スペースで区切られたブロックを含む、で区切られた複数の行が含まれます。これは、2文字の幅と想定できます。各ブロックは、数字、塗りつぶされる空白スペース(で示される--)、または数字を入れることができない壁(XX)になります。 出力は、番号が提供された空のブロックであるにもかかわらず、提供されたものと一致する必要があります。ユニークな、または溶液の存在すら存在しないかもしれないことに注意してくださいいくつかは非常に数独のように、その曖昧さに起因する複数得て、そしていくつかは、文字通り解けないかもしれ、あなたが与える必要があり、その場合には- falseyの出力を、あなた入力は以下のようにフォーマットされていると想定できます。 標準ヘッダーを使用しますLanguage: XX bytes。ハッピーゴルフ! 例 入力01 XX 03、01 -- 04、01 --、などは、すべての戻り何かべきfalsey。 入力: 01 -- -- -- XX 05 出力: 01 03 04 02 XX 05 入力: -- 33 35 -- -- XX XX XX -- -- 24 22 -- XX XX XX -- -- -- 21 -- …

3
ピラミッドを構築
キューブからピラミッドを構築する必要があります。キューブは2つの角度から表示できます。 _____ _____ /\ \ / /\ / \____\ /____/ \ \ / / \ \ / \/____/ \____\/ これは、2つの可能な角度からの2サイズのキューブの例です。キューブの高さは$sizeスラッシュ(またはバックスラッシュ)で、キューブの幅は2 * $sizeアンダースコアです。最上位の幅には、追加のアンダースコア文字を含める必要があります。 入力は、数字(キューブのサイズ)、スラッシュまたはバックスラッシュ(方向/角度を示す)、および別の数字(ピラミッドの高さ)を含む文字列として提供されます。 例: 入力: 1/1 出力: ___ /\__\ \/__/ 入力: 1\1 出力: ___ /__/\ \__\/ 入力: 2/1 出力: _____ /\ \ / \____\ \ / / \/____/ 入力: 1/2 …

4
アスキーアートアーチェリーの矢
正の整数を取り込んで、入力に応じてスケーリングされたアーチェリーの矢の ASCIIアート描写を印刷または返すプログラムまたは関数を作成します。 入力が1出力の場合 /\ / \ \__/ || || || || || || || || /||\ / || \ / || \ // \\ / \ 入力が2出力の場合 /\ / \ / \ / \ \ / \____/ | | | | | | | | | | | | | …

30
最小入力からの出力を最大化する
明らかに、コードゴルフは、最小限のコードを最大限に活用することです。実際の出力が本当に重要なのは誰ですか? 一方で、私たちが持っていた最高の入力から出力への挑戦比率を、これがためのコールで最も有限と決定論与えられた符号長で出力。皮肉なことに、この課題はcode-golfではありません。 ルール: 3つの独立したスニペットを作成します(完全なプログラム/機能ではありません)。 スニペットは同じ言語である必要があります。 スコアは、出力されたバイトの総数です。 出力は、結果、STDOUTなどの形式になります。 スニペットによりエラーが発生することはありません。 スニペットは、さまざまな形式の出力を引き起こす可能性があります。 末尾の改行文字はカウントされません。 最初のスニペットは1バイト、または少なくとも1バイトの出力を生成する最小長でなければなりません。 2番目のスニペットは、それより1バイト長くする必要があります。 3番目のスニペットは、最初のスニペットよりも2バイト長くする必要があります。

1
D * mn明白な打ち切りを書く
検閲は、インターウェブで使用される一般的なツールです。しかし、彼らはしばしば言葉を検閲しすぎており、したがって、呪いは読者にとって曖昧になっています。そして、時々彼らは十分に検閲しないので、言葉はまだ不快なままです。あなたの仕事はそれを修正することです。 あなたのタスク 2つのリストと1つの文字列を受け取るプログラム/関数/なんでも書きます。最初のリストは、次のようなあなたの言語のすべての単語の辞書になります["hello", "goodbye", "belgium", "offensive", "jumping", "hypercool"]。次は、言語のすべての不快な単語を含む最初のリストのサブセットです["belgium", "offensive"]。これらのリストの単語には、アルファベットの小文字のみが含まれることが保証されています。 文字列は、検閲する必要があるフレーズです。それは、スペースで区切られた辞書の単語で構成されます:"Goodbye offensive belgium" 戻り値は、そのフレーズが打ち切られます。ただし、特定の方法で検閲する必要があります。具体的には、不快なリストの各単語について、メイン辞書で完全に明確なままで、できるだけ多くの文字を検閲する必要があります。したがって、ここでは次のようになりますGoodbye o******** b******。 明確化 コードは大文字と小文字を区別せずに単語を解釈する必要がありますが、最初の大文字で返します。 最適な回答が複数ある場合は、いずれかを選択してください。 明確な検閲が不可能な場合は、他の可能な解釈の数が最も少ない単一の文字を検閲します(複数の可能性がある場合は、再度選択します)。 テストケース ["hello", "goodbye", "belgium", "offensive", "jumping", "hypercool"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye o******** b******" ["word"] ["word"] "word" -> "****" ["hot", "hat", "bat", "had"] ["hat"] "hat" -> "*at" or "h*t" …

3
Python Importを使用したゴルフ
Pythonでインラインのシングルユースインポートを使用するのが有益な場合 例えば: __import__("x").doSomething() 上記は下よりも短くなっていますか? import x x.doSomething() または from x import* doSomething()
16 code-golf  tips  python 

4
高次元の格子状グラフで最大の独立集合を見つける
指定された正の整数について、n長さのすべてのバイナリ文字列を考慮します2n-1。与えられた文字列について、の長さの各部分文字列内のs の数のカウントを含む長さの配列をしSましょう。たとえば、if およびthen です。のカウント配列を呼び出します。Ln1nSn=3S = 01010L=[1,2,1]LS 同じカウントの2つの文字列が一致し、それぞれのカウント配列がプロパティthat およびfor all を持っている場合に一致するS1と言います。S2L1L2L1[i] <= 2*L2[i]L2[i] <= 2*L1[i]i 仕事 増加のためnで始まるn=1、タスクは、長さの各文字列の最大セットのサイズを見つけることです2n-1何の2つの文字列が一致しないように。 コードは、値ごとに1つの数値を出力する必要がありますn。 スコア あなたのスコアは、n他の誰もあなたの答えのいずれに対してもより高い正解を投稿していない最高です。明らかに、すべての最適な回答があれば、n投稿した最高のスコアが得られます。ただし、あなたの答えが最適でなくても、他の誰もそれを打つことができなければ、あなたはまだスコアを得ることができます。 回答例 以下のためにn=1,2,3,4私が取得します2,4,10,16。 言語とライブラリ 使用可能な任意の言語とライブラリを使用できます。可能であれば、コードを実行できるとよいので、可能であればLinuxでコードを実行/コンパイルする方法の完全な説明を含めてください。 主要なエントリー 5 Mathematicaの MartinBüttnerによる C ++の Reto Koradiによる6。値は2, 4, 10, 16, 31, 47, 75, 111, 164, 232, 328, 445, 606, 814, 1086です。最初の5つは最適であることが知られています。 Javaの Peter Taylorによる7。値は 2, 4, …

2
Prime Nerd Sniping Pattern
一年で一番長い日-余分な時間を無駄にするものがあります... 概要 これは人気コンテストでもグラフィック出力チャレンジでもないことに注意してください。65,536個のゼロと1の文字列を出力するだけです。質問の下部にあるスタックスニペットは、これを256 x 256の白黒画像として表示し、公式スコアを計算します。その後、画像を保存し、コードと一緒に回答にアップロードできます(文字列出力が30,000文字のStack Exchange回答に収まらないため)。 得点 画像のスコアは、個々のピクセルのスコアの合計です。個々の画素のスコアは、それぞれについてサブスコアの合計である非直交、プライム距離である画素反対色獲得される画素。このような各画素についてサブスコアは、1/pここでp素数の距離です。 この質問の文脈では、用語には次の定義があります。 非直交:ピクセルは、同じ行になく、同じ列にない場合、スコアリングされるピクセルに非直交です。 素数距離:ピクセルは、正確に素数であるユークリッド距離で区切られている場合、スコアリングされるピクセルから素数距離にあります。特に、距離はトロイダルに測定された最小距離です。左上のピクセルはsqrt(2)右下のピクセルからの距離です(4つのエッジすべてがラップします)。 反対の色:値が1になった場合、ピクセルはスコアリングされるピクセルと反対の色です。つまり、最初のピクセルが0で2番目のピクセルが1であるか、最初のピクセルが1で2番目のピクセルが0です。 Stack Snippetには、画像のスコアリング方法を示すサンプルコードが含まれていますが、最適化や効率的なアプローチは含まれておらず、最終画像のスコアリングが一貫して行われるようにコードを修正するだけです。 コードに誤りがある場合は、コメントまたはチャットでお知らせください。 JavaScriptは、この特定の課題に答えるのに必ずしも最適な言語であるとは限りません。スニペットコードは、より高速なアプローチに関する手がかりを意図的に与えていないことに注意してください。既存の回答ですでに実証されている効率のみが導入されます。 可視化 スコアリングピクセル スコアリングピクセルの分布の直感的な感覚のために、ここ(紫色)は256 x 256の画像のピクセル(128、128)の非直交プライムピクセルです。 ランダム画像 これは、Python 3の回答例からランダムに生成された画像です。138,267.64のスコアがあり、勝つために何かを与えます。 入力 コードは入力を必要としません。 出力 コードは、黒と白の256 x 256画像のピクセルを表す65,536個の0と1の文字列を出力する必要があります。数字は、区切り文字のない連続した文字列でなければなりません。ファイルに出力すると、コピーと貼り付けが簡単になりますが、これはユーザー次第です。 コードは、文字列をコピーしてStack Snippetに貼り付けることができる限り、他の有用な情報も出力する場合があります。たとえば、最高の文字列をファイルに出力し、最高のスコアを定期的にSTDOUTに出力して、ユーザーが検索を停止するタイミングを選択できるようにすることができます。 スタックスニペット Sp3000が指摘したように、スニペットはスコアを計算するのに10分かかっていましたが、意図的に非効率的なリファレンス実装であっても、少し遅すぎます。Sp3000で提案されているスコアリングのピクセルオフセットの事前計算の改善を編集しましたが、スコアの計算には数秒かかります。 コードスニペットを表示 canvas = document.getElementById('canvas') ctx = canvas.getContext('2d') scoreArea = document.getElementById('scoreArea') pastedData = document.getElementById('pastedData') timeout = 0 …

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