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

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

6
ASCIIケイリーグラフ
私が定式化している別の挑戦のためにいくつかの研究をしている間、私はケイリーのグラフ、特にこれに出会いました。私はアスキーアートチャレンジのトップ ライターの1人なので、このためにASCIIアートチャレンジをする必要がありました。 あなたの課題は、次のように2つのジェネレーターでフリーグループのケイリーグラフのこのASCIIアート描写を作成することです。 + +++ + | + ++-+-++ + | + + | + +++ | +++ + | | | + ++-+----+----+-++ + | | | + +++ | +++ + | + + | + +++ | +++ + | + | + | + ++-+-++ | …

30
番号はどれくらいですか?
チャレンジ Q範囲内の整数を指定すると、-(2^100) ≤ Q ≤ 2^100その数値の桁数(10を底とする)が出力されます。 ルール はい、数字を文字列として取り、その長さを見つけることができます。 すべての数学関数が許可されています。 任意の基数で入力を取得できますが、出力は基数10の数値の長さでなければなりません。 負の数のマイナス記号をカウントしないでください。数値に小数点はありません。 ゼロには1桁またはゼロ桁を使用できます。 入力は常に有効な整数であると仮定します。 例 Input > Output -45 > 2 12548026 > 8 33107638153846291829 > 20 -20000 > 5 0 > 1 or 0 勝ち バイト単位の最短コードが優先されます。

11
三角マンハッタン距離
通常のグリッドのマンハッタン距離は、あるセルから別のセルに到達するために必要な直交ステップの数です。直交ステップは、グリッドセルの端を通るステップです(コーナーとは対照的に、チェビシェフ距離を与えます)。 他のグリッド、たとえば三角形のグリッドで同様の距離を定義できます。次のインデックススキームを使用して、グリッド内の個々のセルをアドレス指定できます。各セルにはx,yペアが含まれています。 ____________________________________... /\ /\ /\ /\ /\ / \ 1,0/ \ 3,0/ \ 5,0/ \ 7,0/ \ / 0,0\ / 2,0\ / 4,0\ / 6,0\ / 8,0\ /______\/______\/______\/______\/______\... \ /\ /\ /\ /\ / \ 0,1/ \ 2,1/ \ 4,1/ \ 6,1/ \ 8,1/ \ / 1,1\ / 3,1\ …

3
ゲームオブライフarrowlits
バックグラウンド この挑戦はapsillersに敬意を表しており、彼は挑戦でBest of PPCG 2016の見た目ほど簡単ではないカテゴリを獲得しました。 おめでとうございます! 「自己紹介」ページで、このユーザーはGame of Lifeセルラオートマトン用の本当にすてきなシミュレータを持っています。(真剣に、それをチェックしてみてください。)一方、aspillaは「arrowslit」のスペイン語です。これらの事実に照らして、この課題はGame of Lifeの矢じりについてです。 ゲームオブライフarrowlits GoLでは、矢印をグライダーで表し、壁を一連のブロックで表します。単一のグライダーが上から壁に近づき、壁の隙間を通過しようとします(矢印が点灯)。あなたの仕事は、グライダーが矢印に照らされているか、壁に衝突するかを確認することです。 入力 入力は、GoL構成を表すビットのグリッドです。任意の妥当な形式(2つのdistict印刷可能なASCII文字の複数行文字列、文字列のリスト、整数の2D配列、ブール値の2D配列など)で使用できます。明確にするために、文字の複数行の文字列を使用します.#に、以下します。 入力には、いくつかのプロパティがあることが保証されています。最初は、その高さは2N一部のN≥6 、その幅が少なくともある2N + 2。入力はすべて.sになりますが、最上部の3行のどこかがグライダーであり、中央の2行にブロックの壁があります。グライダーは南西または南東に向かっており、その位置は、壁が取り外された場合、下端に到達する前にサイドエッジを通過しない(ただし、グリッドのコーナーに到達する)ような位置です。グライダーは、最初に少なくとも1ステップ.s だけ左右の端から分離されます。どのフェーズでもかまいません。 壁は、1列の.sで区切られたブロックで構成されますが、1つの場所を除き、少なくとも2列の.s で区切られます。グライダーのように、左端と右端のブロックも、.sの1ステップだけエッジから分離されています。常に左端に少なくとも1つのブロックがあり、右端に1つのブロックがあります。 有効な入力グリッドの例を次に示します。 ....#...................... ..#.#...................... ...##...................... ........................... ........................... ........................... .##.##............##.##.##. .##.##............##.##.##. ........................... ........................... ........................... ........................... ........................... ........................... 出力 述べたように、あなたの仕事は、グライダーが壁に衝突するか、南端に到達するかを判断することです。この課題の目的上、シミュレーションの後半で何が起こっても、構成が単一のグライダーとブロックの壁で構成されなくなった場合、クラッシュが発生します。次の図は、南東のグライダーが2つの異なるフェーズでクラッシュすることなく通過できる最小のギャップを示しています(南西のグライダーの状態は対称的です)。 ...#........... .#.#........... ..##........... ............... ............... ##...........## ##...........## ...#........... ....#.......... ..###.......... ............... …

30
マイナス、プラス、タイムズ、べき乗?
これは、少し前にチャットルームThe Ninteenth Byteに投稿したCMC(チャットミニチャレンジ)です。 チャレンジ xの最後の2ビットに応じて正の整数を与えx、次の操作を行います。 x & 3 == 0: 0 x & 3 == 1: x + x x & 3 == 2: x * x x & 3 == 3: x ^ x (exponentiation) 入出力 Single Integer -> Single Integer 出力では末尾の改行が許可されます。他の空白は許可されません。 テストケース input output 1 2 2 4 …
26 code-golf  math 

11
Anagram Quines(警官のスレッド)
これは警官と強盗の挑戦です。強盗のスレッドはこちらにあります あなたの挑戦は、ソースコードのアナグラムを出力するが、元のソースコード自体は出力しないプログラムを書くことです。 たとえば、次のPythonプログラムは、 print`'print*2``'*2` プリント 'print*2``print*2``' 元のソースと同じ文字をすべて持っていますが、順序は異なります。 そのようなプログラムを見つけたら、それを生成するプログラムを省略した回答としてプログラムの出力を含めます。ご想像のとおり、強盗はあなたが隠したプログラム、または仕様に合ったプログラムを見つけようとします。あなたの目標は、強盗がクラックできない最短のプログラムを作成することです。 ルール 警官と強盗のほとんどの課題と同様に、回答が1週間クラックされない場合は、回答に目的のソリューションを追加し、安全とマークすることができます。いったん安全になったら、強盗によって答えを解読することはできません。 意図したソリューションの言語を含める必要はありませんが、言語を含めない場合、強盗はチャレンジより前の言語でそれをクラックできますが、言語を指定すると、提供された言語でのみクラックする可能性があります。 Quinesの標準ルールが適用されます。

11
この数値は正確な-2の累乗ですか:(非常に)ハードモード
これは最近の課題のバージョンです。この数値は-2の整数乗ですか?問題の興味深い性質を強調し、課題をより困難にするために設計されたさまざまな基準を使用します。ここで考慮します。 リンクされた質問でTobyが素晴らしく述べた挑戦は、次のとおりです。 整数が2の正確なべき乗であるかどうかを判断する賢い方法があります。それはもはや興味深い問題ではないので、与えられた整数が-2の正確なべき乗であるかどうかを判断しましょう。例えば: -2 => yes: (-2)¹ -1 => no 0 => no 1 => yes: (-2)⁰ 2 => no 3 => no 4 => yes: (-2)² ルール: 整数は、64ビット、符号付き、2の補数です。これは、使用できる唯一のデータ型です。 次の操作のみを使用できます。これらはそれぞれ1つの操作としてカウントされます。 n << k、n >> k:左/右シフトnによってkビット。符号ビットは右シフトで拡張されます。 n >>> k:右シフトしますが、符号ビットを拡張しません。0がシフトインされます。 a & b、a | b、a ^ b:ビット単位のAND、OR、XOR。 a + b、a - b、a …

18
配列を短縮する
ゴール: 文字列の配列を指定して、各文字列の短縮バージョンを作成します。 仕様: このチャレンジでは、略語は文字列の最初のN文字です。文字列の場合abc:a、ab、およびabcすべての有効な略語があり、一方でbc、とacはありません。 文字列の配列が与えられた場合、入力と略語が与えられた場合に、略語が参照している入力の項目を判別できるように、略語の最短セットを見つけたいと思います。 例: 入力: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] 最初の文字列から文字列を処理します。 月曜日はの文字列のみMであるため、可能な限り短い省略形はMです。 火曜日はで始まりますがT、木曜日もそうです。これは、文字列を試すことを意味しますTU。それで始まる文字列は他にないため、を使用しますTU。 水曜日はW、木曜日はTh、金曜日はFです。 その他の例: Input: "one,two,three,four,five,six,seven" Output: "o,tw,th,fo,fi,si,se" Input: "red,orange,yellow,green,blue,purple" Output: "r,o,y,g,b,p" Input: "a,ab,abc" Output: Not valid! No abbreviation for `a` that doesn't apply to the other items. ノート: 合理的な方法で入力と出力を行います。 入力は常に文字列の有効な配列であると想定できます。 最後のテストケースとは異なり、常に解決策があると想定できます。 文字列は、印刷可能なASCII(またはエンコード内の印刷可能な文字)のみで構成されます これはコードゴルフであるため、最少バイトが勝ちます!
26 code-golf  string 

25
ピジョンホールの原理とコードゴルフ
鳩の巣原理と述べています N > Mの場合、N個のアイテムをM個のボックスに入れる場合、少なくとも1つのボックスに複数のアイテムを含める必要があります。 多くの人にとって、この原則は他の数学的発表と比較して特別な地位にあります。EWダイクストラが書いたように、 それはいくつかの神秘に囲まれています。それを使用する証明は、しばしば特別なもの、特に独創的なものと見なされます。 チャレンジ この課題の目的は、ASCIIアート表現を使用して鳩の巣の原理を説明することです。具体的には: 入力N(アイテムの数)およびM(ボックスの数)として、N非負とM正を取ります。Nより小さい場合がありますM(その場合、原則が適用されない場合でも)。 ボックスへのアイテムの可能な割り当ての1つをランダムに選択します。各割り当てには、選択される確率がゼロ以外である必要があります。 次のように、割り当てのASCIIアート表現を作成します。 M行があり、それぞれがボックスに対応しています。 各行は、などの非空白文字で始まり|ます。 その文字に続いて、などの別の非空白文字が続き#、そのボックス内のアイテムの数だけ繰り返されます。 たとえばN = 8、考慮してくださいM = 5。ボックスへのアイテムの選択assigmentである場合に4、1、0、3、0、表現であります |#### |# | |### | 同じプログラムの異なる実行(異なる割り当てをもたらす)は、 |# |## |# |# |### 表現に関してある程度の柔軟性があります。下記参照。 特定のルール コードはおよびの値に対して理論的に実行する必要がNありMます。実際には、メモリサイズまたはデータ型の制限によって制限される場合があります。 出力を観察するだけでは、すべての割り当てにゼロ以外の確率があるかどうかを判断するのに十分ではないため、各サブミッションでは、コードがどのようにそれを達成するかを説明する必要があります。 次の表現バリエーションが許可されます。 異なる非空白文字の任意のペアを選択できます。これらは、プログラムの実行全体で一貫している必要があります。 リプレゼンテーションの90度回転は許容されます。繰り返しますが、選択は一貫している必要があります。 末尾または先頭の空白は許可されます。 異なる表現形式と、のための一例としてN = 15、M = 6プログラムの2つの実行の結果は、可能性が VVVVVV @@@@@@ @@ @@@ @ @@ @ …

24
整数がキューに加わるとき
前書き キューは、要素は抽象データ型である前部に添加(エンキュー)及び背面から除去(デキュー)。これは、FIFO(先入れ先出し)原理とも呼ばれます。 例で最もよく示されています。 チャレンジ 所与の非空含む配列正の整数と示す要素デキュー(元素を除去する)、出力キューの最終的なリストを。 Xこの例でデキューを示しているとしましょう。次のリストを見てみましょう。 [45, X, X, 37, 20, X, 97, X, 85] これは、次のキュー擬似コードに変換できます。 Queue Enqueue 45 -> 45 Dequeue -> Dequeue -> (dequeue on an empty queue is a no-op) Enqueue 37 -> 37 Enqueue 20 -> 20 37 Dequeue -> 20 Enqueue 97 -> 97 20 …

28
ボートをRowいで
誰もがおそらく音楽的なラウンドである次の歌に精通しているでしょう: バックグラウンド 少数の友人とこの4人用バージョンを歌おうとして失敗したことを思い出す人は少ないでしょう。異なる調和のとれたピッチで曲の歌詞をオフセットすることは、「ラウンド」を歌うこととして知られています。それは、静的出力を使用して今日シミュレートするためにここにいることです。以下は誰かが実際に作品を演奏している例です(オーディオ/ビデオへのリンク、音がします)。 チャレンジ この課題は、次のように正確にテキストを出力することです。 Row, row, row your boat, |-----------------------------------|-----------------------------------|----------------------------------- Gently down the stream. |Row, row, row your boat, |-----------------------------------|----------------------------------- Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat, |----------------------------------- Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your …

3
バブルを配置する
math.stackexchangeで尋ねられた質問からコピーされたチャレンジに注意してください。 最近、私は泡を吹く技術をかなり習得しました。最初は次のように泡を吹きます: しかし、その後、物事は奇妙になり始めました: しばらくして、かなり奇妙な泡を吹いていました。 数百個、場合によっては数千個のそのような泡を吹き飛ばした後、私の額は次の質問で突然しわになりました。たとえば、n = 1の場合、配置は1つだけです。n = 2の場合、2つの配置があります。n = 3の場合、4つの配置があります。n = 4の場合、9つの配置があります。 4つのバブルの9つの配置を次に示します。 これらすべての素晴らしい泡を吹き飛ばした後、私は彼らとのアレンジメントを数える喜びをあなたと共有すべきだと決めました。あなたの仕事は次のとおりです。 ゴール nバブルを配置できる方法の数を数えるプログラム、関数、または同様のものを作成します。 入力 n、泡の数。n> 0 出力 これらのバブルを配置できる方法の数。 受賞基準 あなたのコードの周りにバブルを吹き込むことができれば、本当にクールだろう。コードを小さくすればするほど簡単になります。したがって、最小バイト数でコードを作成した人がコンテストに勝ちます。 追加情報 OEIS

10
シンボリック行列乗算
行列の乗算を説明する方法はたくさんあります。ここのほとんどの人はそれに精通していると思うので、私は単一の図に固執します(そして図は非常に記述的です)。より詳細な情報が必要な場合は、ウィキペディアの記事、またはWolframMathWorldの説明をご覧になることをお勧めします。 簡単な説明: あなたは二つの行列、持っていると仮定AとB、Aが 3行2であり、Bは 2行3です。これらに対してAB、BAのいずれかの行列に行列乗算を実行すると、以下の結果が得られます。 チャレンジ: 言語にシンボリック行列乗算を実装します。入力として2つのマトリックスを使用します。ここで、マトリックス内の各要素は非空白ASCII文字(コードポイント33〜126)で表されます。これらの行列の積を出力する必要があります。 出力に関する規則: 2つのエントリの製品には、間に記号を入れてはなりません。それはだab、ではないa*b、a·b、times(a,b)または類似した何か。でaaはありませんa^2。 用語の合計には、間にスペース(ASCIIコードポイント32)が必要です。それa bはa+b、ではなく、plus(a,b)または類似したものです。 これら2つのルールの理論的根拠は次のとおりです。すべての非空白文字は行列内の記号として許可されているため、数学記号として使用するのは面倒です。だから、あなたが普通に書くことができるものはそうa*b+c*dなりますab cd。 条件の順序を選択できます。ab cd、dc abおよびcd ba数学的に同じことを話しているので、あなたもここに順序を選択することができます。数学的に正しい限り、順序は一貫している必要はありません。 マトリックスのフォーマットに関する規則: マトリックスは、行間に区切り文字のない単一の文字列を除き、任意の形式で入力できます(これは、出力が完全に台無しになるためです)。両方の行列は同じ形式で入力する必要があります。以下の例はすべて、マトリックスを入力および出力する有効な方法です。 "ab;cd" <- This will look awful, but it's still accepted. "a,b\nc,d" [[a,b],[c,d]] [a, b] [c, d] これにより面倒に見える多くのフォーマットが可能になることは承知していますが、課題は出力のフォーマットではなく行列の乗算です。 一般的なルール: 有効な入力を想定することができます。行列の乗算は、指定された次元で常に可能です。 マトリックスは2つしかありません。 行列が空でないと仮定することができます 組み込み関数が受け入れられます(ただし、書式設定の要件のため、おそらく少し面倒です)。 もちろん、必要に応じて(\'ではなく')入力にエスケープ文字を使用できます。 標準の入出力方法はすべてOKです。 テストケース: 2つの入力行列は、間に空の行が表示されています。出力はの後に表示されOutput:ます。2つの出力マトリックスがある場合、受け入れられる他の出力を表示するだけです。 テストケース#1 Inputs: [a] [b] Output: …

8
中かっこを右中かっこに変換(悲しい中かっこ)
右中括弧は、中括弧とセミコロンがすべてaaファイルの右側の単一ポイントに揃えられるコードブラケットのスタイルです。 一般的に、これはいくつかの理由で悪い習慣と考えられています。 チャレンジ 任意の方法で複数行の文字列を取得し、そのブレーススタイルを右手ブレースに変換します。 この課題では、Javaコードでのみ動作する必要がありますが、理論的にはブレースとセミコロンを使用するコードで動作するはずです。 すべての{};文字を連続して取得する必要がありますが、それらの間に空白を入れてください。例えば。}}、; } }\n\t\t}、および空白を使用してファイルの右側にそれらを並べます。 例えば: a { b; {c になるはずです a { b ;{ c または、より抽象的に、すべての左から任意のすべての空白をプッシュします {};右へ、。 それ以外の場合は、行のインデントを保持する必要があります。移動後の空白のみを含む行{};オプションで削除できます。 例えば: a{ b{ c; } } d; どちらかになります a { b { c;}} d ; または a { b { c;}} d ; 右に押すと、すべての {};文字が最も長い行よりも短くない位置に揃えられます。それ以降のスペースは許容されます。 したがって、以下はすべて受け入れられます。 a { …

6
ゲームボーイでの効率的な入力
多くの古いGame Boyゲームでは、ユーザーからの文字列入力が必要になることがよくありました。しかし、キーボードはありませんでした。これは、次のような「キーボード画面」をユーザーに提示することで処理されました。 「文字ポインタ」は、ユーザが各所望の文字に移動なる文字Aで始まるであろうD-パッドの4つのボタン(UP、DOWN、LEFTおよびRIGHT)を押しBUTTON A、最終的な文字列に追加します。 ご注意ください: グリッドが回り込むのでUP、文字Aを押しながら押すとTに移動します。 「文字ポインタ」は、文字を追加した後もそのままになります チャレンジ 上記のキーボードには、大文字と小文字を変更するオプションがあり、不規則な形状です。そのため、簡単にするために、この課題では次のキーボードを使用します(右下はASCII文字32、スペースです)。 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z . このようなキーボードでの入力は非常に遅いため、これを簡単にするために、与えられた文字列を入力するための最速の方法をユーザーに伝えるプログラムを書くことがタスクです。最速の方法が複数ある場合、表示する必要があるのは1つだけです。 出力キーは次のとおりです。 > ために RIGHT < ために LEFT ^ ために UP v ために DOWN …

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