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

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

4
ダンジョンクローラー
入力 ダンジョンの壁を表すバイナリマトリックスMMM ダンジョン内のプレイヤーの位置(x 、y)(x,y)(x,y)。 プレイヤーが現在向いている方向ddd(0 =北、1 =東、2 =南、3 =西) 出力 プレイヤーの視野内にある壁の擬似3D表現30 × 1030×1030\times 10文字のASCIIアートとして。 以下は、いくつかの可能な出力フレームと、それに対応するための対応するマップとコンパスです(ただし、マップとコンパスの描画は課題の一部ではありません)。 仕様 視野 プレーヤーには、AからMのラベルが付いた131313壁が視野にあります。以下は、プレーヤーに対する壁の位置(黄色)であり、考えられるすべての方向です。AAAMMM 壁を描く 以前に描画された部分が近い壁によって上書きされる可能性があるため、壁はこの正確な順序でAAAからMMMに描画されることになっています。もちろん、最終結果が同じである限り、異なる方法で実装できます。 :全体の出力は、7つの異なる文字で描かれている" "、"'"、"."、"|"、"-"、"_"および":"。 この課題の本体の壁の形状を詳細に説明すると長すぎるため、代わりに次のTIOリンクで提供されます。 オンラインでお試しください! 特定の壁の一部ではないキャラクターは"?"、これらの図ではa でマークされています。それらは、まったく描画されない「透明な」文字として扱われなければなりません。一方、壁内のすべてのスペースは「ソリッド」であり、以前にそこに描かれた可能性のある他の文字を上書きする必要があります。 ルール 入力について MMMxxxyyyddd 0インデックスまたは1インデックスの座標を使用できます。 方向には、選択した4つの異なる値を使用できます。 3×33×33\times 3 あなたは常に縁に周囲の壁があると仮定するかもしれません。 プレーヤーは空の広場にいることが保証されています。 入力は有効であることが保証されています。 出力について 説明したとおりに壁を描く必要があります。 ただし、出力形式も柔軟です。単一の文字列、文字列の配列、文字のマトリックスなどです。 前後の空白は、一貫している限り許容されます。 これはcode-golfです。 テストケース すべてのテストケースは、次のマトリックスを使用しています。 [ [ 1, 1, 1, 1, 1, …

12
よくリンクされた挑戦
私が退屈しているときに時々する活動は、一致するペアでいくつかの文字を書くことです。次に、これらのキャラクターをつなぐために線を描画します(決して上にならないように重ねます)。たとえば、と書くと、次のように線を引きます。a b c b a cabcbacabcbac または私は書くかもしれませんa b b c a cabbcacabbcac これらの線を描いたら、チャンクの周りに閉じたループを描いて、描いた線がループと交差しないようにします。たとえば、最初のループでは描画できるのはループ全体だけですが、2番目のループでは s(またはその他すべて)の周りにループを描画できますbbb しばらくこれをいじると、一部の文字列が描画され、閉じたループにすべての文字が含まれるか、文字が含まれないことがわかります(最初の例のように)。このような文字列をリンクされた文字列と呼びます。 一部の文字列は複数の方法で描画できることに注意してください。たとえば、は次の両方の方法で描画できます(3つ目の方法は含まれていません)。b b b bbbbbbbbb または これらの方法のいずれかを描画して、行を交差させずに文字の一部を含む閉じたループを作成できる場合、文字列はうまくリンクされていません。(したがって、はうまくリンクされていません)b b b bbbbbbbbb 仕事 あなたの仕事は、うまくリンクされた文字列を識別するプログラムを書くことです。入力はすべての文字が偶数回出現する文字列で構成され、出力は2つの異なる一貫した値のいずれかである必要があります。 また、あなたのプログラムがうまくリンクされた文字列でなければなりません意味 プログラムでは、すべての文字が偶数回表示されます。 渡されたときに、真理値を出力する必要があります。 プログラムは、印刷可能なASCIIまたは独自のプログラムからの文字で構成される任意の文字列に対して正しい出力を生成できる必要があります。各文字が偶数回表示されます。 回答は、バイト単位の長さとしてスコア付けされ、バイト数が少ないほどスコアが高くなります。 ヒント 文字列は、各文字がその部分文字列内で偶数回出現するように、連続した空でない厳密な部分文字列が存在する場合、適切にリンクされません。 テストケース abcbac -> True abbcac -> False bbbb -> False abacbc -> True abcbabcb -> True abcbca …

30
カーペットをレイアウトする
このSO質問に触発されました。 チャレンジ: 入力: 文字列sss キャラクターccc 出力: 文字列の最初の文字を中央に、外側に向かって、4方向すべてに文字列のひし形のASCIIアートを作成します。フィラーとしてのキャラクターを備えた、正方形のASCIIアートカーペットの中にあります。これはかなりあいまいに聞こえるかもしれないので、ここに例を示します。 入力: = 、 = 出力:sssstringccc. ..........g.......... ........g.n.g........ ......g.n.i.n.g...... ....g.n.i.r.i.n.g.... ..g.n.i.r.t.r.i.n.g.. g.n.i.r.t.s.t.r.i.n.g ..g.n.i.r.t.r.i.n.g.. ....g.n.i.r.i.n.g.... ......g.n.i.n.g...... ........g.n.g........ ..........g.......... チャレンジルール: 入力文字列は文字のリストでもあります 出力は、文字列行のリストまたは文字のマトリックスでもあります 入力文字列と文字は空でないことが保証されています 文字列には文字が含まれないことが保証されます 文字列と文字は両方とも印刷可能なASCIIのみです(ユニコード範囲[32,126]、スペース ''からチルダ '〜'まで) 一般的なルール: これはcode-golfであるため、バイト単位の最短回答が優先されます。 コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。 デフォルトのI / Oルールを使用した回答には標準ルールが適用されるため、STDIN / STDOUT、関数/メソッド、適切なパラメーターおよび戻り値型、完全なプログラムを使用できます。あなたの電話。 デフォルトの抜け穴は禁止されています。 可能であれば、コードのテストへのリンク(TIOなど)を追加してください。 また、回答の説明を追加することを強くお勧めします。 テストケース: 入力: = 、 = 出力:sssc =11111c =c=c=0 …

30
物理的な九九を印刷する
長方形はこの素晴らしい特性を持っています長方形は正確に文字で構成されています!n × mn×mn \times mn × mn×mn \times m A ..より興味深い特性は、乗法テーブルで長方形をきれいに配置できることです-たとえば、テーブル:3 × 33×33 \times 3 # ## ### # ## ### # ## ### # ## ### # ## ### # ## ### あなたの挑戦は、数()を与えられて、フォーマットされた乗算表を出力することです。nnnn > 1n>1 n > 1n × nn×nn \times n ルール 上または下の入力を使用できますnnn デフォルトのI / Oルールが適用されます ブロックを表すために任意の非空白文字を選択できます。他のすべての文字(改行は特別ですが)は空白と見なされます。選択した文字は入力ごとに異なる場合がありますが、入力全体で同じである必要があります テーブルが整列し、必要な出力の一部ではない選択された文字の出現がない限り、結果に不要な文字が含まれることがあります …

30
2D配列の周囲のゼロを削除する
これは、この質問の 2次元バージョンです。 負でない整数のみを含む空でない2次元の配列/行列が与えられた場合: ⎡⎣⎢⎢⎢⎢⎢⎢0000000000000100101000110⎤⎦⎥⎥⎥⎥⎥⎥[0000000010000010011100000] \begin{bmatrix} {\color{Red}0} & {\color{Red}0} & {\color{Red}0} & {\color{Red}0} & {\color{Red}0} \\ {\color{Red}0} & {\color{Red}0} & 0 & 1 & 0 \\ {\color{Red}0} & {\color{Red}0} & 0 & 0 & 1 \\ {\color{Red}0} & {\color{Red}0} & 1 & 1 & 1 \\ {\color{Red}0} & {\color{Red}0} & {\color{Red}0} …

30
ソウルメイトを探して
整数の空でない有限リストが与えられた場合、正確に2つの等しいエントリがあり、他のすべてのエントリが明確な場合は真実の値を出力し、そうでない場合は偽の値を出力します。 例 truthy: [1,1] [1,2,1] [1,6,3,4,4,7,9] falsey: [0] [1,1,1] [1,1,1,2] [1,1,2,2] [2,1,2,1,2] [1,2,3,4,5]

30
私は取るに足らない配列ですか?
無意味配列は連続する要素間の絶対差がより全て小さいか等しい正の整数の配列である1。 たとえば、次の配列は重要ではありません。 [1, 2, 3, 4, 3, 4, 5, 5, 5, 4] 対応する(絶対)違いは次のとおりです。 [1, 1, 1, 1, 1, 1, 0, 0, 1] これらはすべて1以下です。 あなたの仕事は、与えられた整数の配列が重要でないかどうかを判断することです。 配列には常に少なくとも2つの要素が含まれると想定できます。 標準の入力および出力ルールが適用されます。任意の妥当な形式で入力(および出力)を取得できます。 デフォルトの抜け穴は禁止されています。 真実/偽の値は明確で一貫している必要があります。 これはcode-golfであるため、バイト単位の最短回答が優先されます。 テストケース 入力->出力 [1、2、3、4、3、4、5、5、5、5、4]-> true [1、2、3、4、5、6、7、8、9、8]-> true [3、3、3、3、3、3、3、3]-> true [3、4、4、4、3、3、3、3、4、4、4]-> true [1、2、3、4]-> true [5、4、3、2]-> true [1、3、5、7、9、7、5、3、1]-> false [1、1、1、2、3、4、5、6、19]-> false [3、4、5、6、7、8、7、5]-> false [1、2、4、10、18、10、100]-> …

30
数字の合計の2倍で割り切れますか?
入力として正の整数が与えられた場合、タスクは、数値がその数字の合計の2倍で割り切れる場合は真実の値を出力し、そうでない場合は偽の値を出力します(OEIS A134516)。言い換えると: (sum_of_digits)*2 | number 真と偽の場合に真実/偽の値の代わりに、真/偽の場合に値の有限セットを指定し、それらが他の値を補完することができます。簡単な例0として、真の場合に使用し、偽の場合に他のすべての数値を使用することができます(必要に応じて、その逆も可能です)。 標準の入力および出力ルールが適用されます。デフォルトの抜け穴も適用されます。 入力は、整数またはその整数の文字列表現として受け取ることができます。 これはcode-golfなので、バイト単位の最短コードが勝ちです! 私はPPCGが初めてなので、可能であれば説明を投稿してください。 テストケース 入力-出力-(理由) 80-Truthy-(16で80を分割) 100-真実-(2は100を除算) 60-Truthy-(12は60で割る) 18-Truthy-(18は18を分割) 12-Truthy-(6分割12) 4-偽-(8は4を分割しません) 8-偽-(16は8を分割しません) 16-偽-(14は16を分割しません) 21-偽-(6は21を分割しません) 78-偽-(30は78を分割しません) 110-偽物-(4は110をしませんでした) 111-偽-(6は111を分割しません) 390-偽-(24は390を分割しない)

22
最適なベースは10です。到達しましょう。
入力: 0〜9の範囲の数字で構成される正の整数n。 チャレンジ: 場合dは整数で最上位桁であり、数値のベースであると仮定し、D + 1。たとえば、整数が1256の場合はbase-7であると想定し、10110の場合はbase-2(バイナリ)であると想定し、159の場合は10進数であると想定します。 さて、あなたのいずれか、1まで、次の手順を実行します。到達ベース-10の整数、または一桁の整数を達する:2。 整数をbase-(d + 1)からbase-10に変換します この新しい整数のベースを検索(再び、塩基(D + 1)dは新しい数の最上位桁です) ステップ1に進みます。 例: 入力がn = 413574であると仮定します。最高桁のd = 7であるため、これは8進数(8進数)です。これを10進数に変換して137084を取得します。最高桁のd = 8であるため、これはbase-9です。これを10進数に変換して83911を取得します。最高桁は9なので、これは10進数であり、停止します。出力は83911です。 入力がn = 13552であると仮定します。最高桁はd = 5なので、これはbase-6です。これを10進数に変換して2156を取得します。最高桁d = 6であるため、これはbase-7です。これを10進数に変換して776を取得します。最高桁はd = 7なので、これはbase-8です。これを10進数に変換して510を取得します。最高桁はd = 5なので、これはbase-6です。これを10進数に変換して186を取得します。最高桁は8なので、これは9進数です。これを10進数に変換して159を取得します。最高桁は9なので、これは10進数であり、停止します。出力は159とする。 入力がn = 17であると仮定します。これは、私たちに与えるだろう15、そして11、そして3を、どの我々は出力それは一桁だから。 テストケース: 5 5 17 3 999 999 87654321 (base-9 -> 42374116 in decimal -> …

30
最小限の移動
Stack Overflowでの質問に触発されました。ここのタイトルは完全に私のせいです。 チャレンジ 少なくとも2つのエントリを含む正の整数のリストが与えられた場合、それ自体を除くすべてのエントリの最小値で各数値を置き換えます。 テストケース [4 3 2 5] -> [2 2 3 2] [4 2 2 5] -> [2 2 2 2] [6 3 5 5 8] -> [3 5 3 3 3] [7 1] -> [1 7] [9 9] -> [9 9] [9 8 9] -> [8 9 …

6
失敗した城の検出
重力の興味深い側面の1つは、私が知る限り、空中に物を浮遊させることはできないということです。 しかし、ランダムキャッスルビルダーズ協会の全員がこの事実を知っているわけではないようです。 # # # # # # ### #### #### # # #### # # #### ### ############## ### ###### ###### ### ##### ##### ### ### `````````````````````````````` そしてこれは: # # # # # # ############## ### #### ### # # # # # # # # ### #### ### …

9
ファイルをコピーする-Windowsスタイル
この挑戦はxkcdに触発されました: チャレンジ: 大きなファイル(1ギガバイト)のコピーをシミュレートします。転送速度は、10 kB /秒から100 MB /秒の間で変化します。あなたの仕事は、ファイル転送の残り時間を出力することです。出力は次のようになります。 Time remaining: 03:12 (meaning it's 3 minutes and 12 seconds left) Time remaining: 123:12 (meaning it's 2 hours, 3 minutes and 12 seconds left) Time remaining: 02:03:12 (optional output, meaning the same as above) 先行ゼロは、分と時間(オプション)で表示する必要はありませんが、秒で表示する必要があります。秒のみを使用して残り時間を表示することはできません。 ファイル転送: 転送速度は10 MB /秒から始まります。 毎秒、転送レートが変更される可能性が30%あります 新しい転送速度は、範囲[10 kB/s, 100 …
40 code-golf 

22
周期表を印刷する
あなたの挑戦は、このテキストを印刷/出力/返送することです: _____ _____ | 1 | | 2 | | H | | He | |_____|_____ _____________________________|_____| | 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 | | Li | Be | | B | C | N | O | F …

30
豊富な整数!
過剰数は、その適切な約数の和が元の数よりも大きい任意の数です。たとえば、12の適切な除数は次のとおりです。 1, 2, 3, 4, 6 そして、これらの結果を合計すると16になります。16は12より大きいので、12は豊富です。これには「6」や「28」などの適切な除数の合計に等しい数など、「完全な数」は含まれないことに注意してください。 今日のあなたの仕事は、数字が豊富かどうかを判断するプログラムまたは関数を書くことです。あなたのプログラムは入力として単一の整数を取り、それが豊富であるかどうかに応じて真実/偽の値を出力する必要があります。入力は常に有効で0より大きいと想定できます。そのため、入力が不適切な場合、未定義の動作は問題ありません。 入力と出力は、たとえばSTDIN / STDOUT、ファイル、引数/戻り値などすべての妥当な形式で受け入れることができます。 参考までに、最大100個の豊富な数字を次に示します。 12, 18, 20, 24, 30, 36, 40, 42, 48, 54, 56, 60, 66, 70, 72, 78, 80, 84, 88, 90, 96, 100 さらに、A005101で詳細を確認できます。 これはcode-golfであるため、標準の抜け穴は拒否され、選択した言語で可能な限り最短のコードを記述しようとします。

7
共有(キャラクター)は思いやりです!
概要 次のタスクを検討してください。 正の整数n> 0を指定すると、その整数平方根を出力します。数の整数平方根Nの最大値であり、X 、X 2 ≤nは、通常、式で表さfloor(sqrt(n))。 例:25 -> 5、24 -> 4、40 -> 6、1 -> 1。 このタスクはそれ自体で十分簡単です。ただし、この課題では、25文字のみのセットを使用して、できるだけ多くの言語でこれを解決することがタスクです。 例 最初に、25バイトのセット(重複なし)を選択する必要があります。次のようになります(先頭のスペースに注意してください)。 ()*-.05:=>Mabdhilmnqrst| 次に、このセットの文字のみを使用して、できるだけ多くのテキストベースの(申し訳ありませんが、Piet)言語で問題の解決策を構築することが課題です。必要な回数だけ文字を使用できますが、セット外の文字を使用しないでください。 ソリューションは、完全なプログラムまたは関数のいずれかですが、スニペットではありません。たとえば、この文字セットを使用すると、次のことができます。 M -> (int) Math.sqrt(M) // Java (lambda expression) M => Math.sqrt(M)|0 // Javascript (unnamed function) lambda M: int(M**.5) // Python (lambda function) 3つの言語を使用したので、これは3のスコアを与えます。 回答に使用しているバイトのセットも含めてください。 ルール これはロゼッタストーンの挑戦です-あなたのスコアはあなたの提出物に含まれる言語の数です。最高のスコアが勝ちます。標準の抜け穴が適用されます。 この課題では、「言語」は明らかに異なるプログラミング言語としてカウントされます。同じ言語(Python 2、Python …

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