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

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

30
ノアの整数リスト
前書き: 聞いたことがあると思いますが、ここで非常に簡単な要約を示します。ノアは、大洪水時に箱舟に救うために、地球上のあらゆる種類の動物、オスとメスの2種を集めました。聖書からの実際の引用は次のとおりです。 創世記7:2-3 あらゆる種類のきれいな動物7匹、オスとその仲間、あらゆる種類の汚れた動物2匹、オスとその仲間、空にあるあらゆる種類の鳥7匹、雄と雌、地球の表面に子孫を保存します。 ソース しかし、この挑戦​​のために、私たちはきれいな/汚れた部分と彼が各動物の7つを取った部分を無視します。この課題は、この部分についてのみです。 あらゆる種類の汚れた動物のうち2 匹、オスとその仲間 チャレンジ: 入力: 正の整数のリストが(ランダムな順序で)与えられます。 出力: 「ノアのリスト」であるかどうかを示す2つの異なる値。これは必要ないする必要がtruthy / falseyのようにも可能性があり、値0/ 1のJava / C#で、または'A'/ 'B'いくつかの例を与えるために、任意の言語で。 リストはいつ「ノアのリスト」ですか?リスト内の整数が正確に2つある場合。 チャレンジルール: I / Oは柔軟です。入力は、整数/浮動小数点数/文字列のリスト/配列/ストリーム、またはSTDINから1つずつ読み取ることができます。出力は、関数またはSTDOUT /ファイルへの出力から返される2つの異なる値です。 入力リスト内の整数をランダムな順序であり、その範囲内で陽性であることが保証されている1≤n≤1000001≤n≤1000001\leq n\leq100000。 入力リストは空でないことが保証されています。 2を超える整数(2、4、6、8など)が存在することは誤りです。つまりは、[6,4,4,6,4,7,4,7]あなたはまだこのような同等のペアを作成することができますが、falseyです[[4,4],[4,4],[6,6],[7,7]]。 一般的なルール: これはcode-golfであるため、バイト単位の最短回答が優先されます。 コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。 デフォルトのI / Oルールを使用した回答には標準ルールが適用されるため、STDIN / STDOUT、関数/メソッド、適切なパラメーターおよび戻り値型、完全なプログラムを使用できます。あなたの電話。 デフォルトの抜け穴は禁止されています。 可能であれば、コードのテスト(TIOなど)へのリンクを追加してください。 また、回答の説明を追加することを強くお勧めします。 テストケース: Truthy: [7,13,9,2,10,2,4,10,7,13,4,9] [1,2,3,1,2,3] [10,100,1000,1,100,10,1000,1] [123,123] [8,22,57189,492,22,57188,8,492,57188,57189,1,1] Falsey: [6,4,4,6,4,7,4,7] [2,2,2,2,2,2] …

2
ノノグラムラインのブルートフォース解法
バックグラウンド PiogramまたはGriddlersとも呼ばれるNonogramは、各行の連続した色付きセルの数を使用して、2Dグリッド上の各セルを色付けするか空白のままにするかを決定するパズルです。 以下は、ソリューションを使用したNonogramパズルの例です。 問題は、一部の市販のNonogramゲーム/モバイルアプリには、手で解決できないパズルがある(たとえば、複数のソリューションがある、または深いバックトラッキングが必要)ことです。ただし、それらはプレイヤーにいくつかの命を提供します。正解が空白のセルを着色しようとすると、1つの命が失われます。だから今、それらの厄介な「パズル」をブルートフォースする時です! タスクを単純化するために、その手がかりと他の何もない1行だけを想像してください。 3 7 | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [3,7]手がかりであり、ラインの長さは、15個の細胞です。複数の可能な解決策があるため、この線を完全に解決する(つまり、すべての色の付いたセルを決定する)ために、いくつかの命を危険にさらす必要があります。 チャレンジ 手がかり(正の整数のリスト)と行の長さのある行が与えられた場合、最適な戦略で行を総当たり攻撃すると仮定して、失う命の最大数を見つけます。 色付きのセルを常に推測することに注意してください。実際のゲームでは、空のセル(正しいか間違っているか)を推測してもあなたの生活には影響しません。そのため、パズルをそのように「解決」することはできません。 また、入力は常に有効な非グラム行を表すと想定できるため、などのことを心配する必要はありません[6], 5。 説明 最初にいくつかのより簡単な例を見てみましょう。 [1,2], 5 この行にOは、正確に3つの可能性があります(色付きのセル、.空のセル): O . O O . O . . O O . O . O O セル0(左からの0から始まるインデックス)を着色しようとすると、次のいずれかが発生します。 …

25
数独ボードを出力する
今日の課題は簡単です。入力を行わずに、有効な数独ボードを出力します。 あなたが数独に不慣れな場合、ウィキペディアは有効なボードがどのように見えるべきかを説明しています: 目的は、グリッドを構成する各列、各行、および9つの3×3サブグリッド(「ボックス」、「ブロック」、または「リージョン」とも呼ばれる)のそれぞれに、 1から9までのすべての数字。 さあ、ここに… 6,670,903,752,021,072,936,960の異なる有効な数独ボードがあります。それらのいくつかは、圧縮して、より少ないバイトで出力するのが非常に難しいかもしれません。他の方が簡単かもしれません。この課題の一部は、どのボードが最も圧縮性が高く、最小バイトで出力できるかを把握することです。 提出するたびに毎回同じ掲示板を出力する必要はありません。ただし、複数の出力が可能な場合は、可能なすべての出力が有効なボードであることを証明する必要があります。 あなたは使うことができ、このスクリプト(マジックタコ壺のおかげで)、またはこれらの答えのいずれかを特定のグリッドが有効なソリューションであるかどうかを検証します。[1]有効なボードの場合はを出力し、無効なボードの場合はその他を出力します。 回答が明らかに2次元である限り、どの形式で回答を出力するかについてはあまり気にしません。たとえば、9x9行列、9個の3x3行列、文字列、文字列の配列、9桁の整数の配列、またはセパレータ付きの9つの9桁の数字を出力できます。1次元で81桁を出力することは許可されません。特定の出力形式について知りたい場合は、コメントでお気軽にお問い合わせください。 いつものように、これはcode-golfなので、選択した言語で思い付くことができる最短の答えを書いてください!

11
これはパスカルの行列ですか?
でパスカルの三角形各番号はゼロとして空のスポットを治療する、直接上記2つの数の合計です。 三角形を回転させることで、Pascalの行列と呼ぶさまざまなサイズと回転の正方行列を切り取ることができます。これらの行列は常に上位を含む必要があることに注意してください。ここではいくつかの例を示します。111 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 6 3 1 3 2 1 1 1 1 1 5 15 35 70 1 4 10 20 35 1 3 6 10 15 1 2 3 4 5 1 1 1 …

4
この部屋はどれくらい明るくなっていますか?🔥pt。1
この質問に関連しています。 部屋は、 2次元座標の順序付けられたリストとして表現(必ずしも凸ではない)の非交差多角形であると定義されます。十分に明るい電球が部屋の中の特定のポイントに置かれ、あらゆる方向に光を放射します。あなたの仕事は、部屋の照明エリア全体を見つけることです。合理的な形式で入力を行うことができます。ポリゴン/部屋の点と光源の座標は有理数です。時計回りまたは反時計回りに撮影できますが、どちらの形式でも構いません。問題のテストケースは反時計回りに与えられます。 次の図は、紫のドットが光源を表し、影付きの領域が照らされた領域を表す2つの部屋の例を示しています。 テストケース: (1/2, 18) (1,3) (5,1/2) (7,5) (12,7) (16,3) (15,11) (8,19) (3,7) Light source located at (5,8) Answer: 815523/6710 ≈ 121.538 以下に、そのテストケースのソリューションを図で示します。元のポリゴン上にないソリューションを定義する2つのポイントは、(55 / 61、363 / 61)と(856 / 55、357 / 55)です。 この式は、面積の計算に役立つ場合があります。 これはcode-golfであるため、バイト単位の最短コードが優先されます。

14
私の映画はどれほどイライラしますか?
両親はホームシアターデバイスを持っています。リモートが壊れているため、メニュー内を右にナビゲートするのが非常に難しくなります。ほとんどの場合は動作しませんが、動作すると非常に速く右に移動します。 これは明らかにイライラしますが、次のようなキーボードの操作が必要な映画のタイトルを入力する場合は、最もイライラします。 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 2 3 4 5 6 7 8 9 0 あなたの仕事は、入力として映画のタイトルを取得し、その映画のタイトルを入力することの「イライラ」を計算することです。特定の文字列のフラストレーション数は、その前の文字から右に移動する必要がある文字の数です。それらがどれだけ正しいかは気にしません。なぜなら、右に移動し始めるとすぐに行の終わりに移動するからです。また、上、下、左への移動は簡単なので気にしません。 たとえば、入力したい場合 keyboard k無料で始めます。 e上にあるkので、正しく移動する必要はありません。 y ずっと左にあるので、右に移動する必要はありません。 b ただし、右の次の列にあるので、それに到達するには右に移動する必要があります。 o 次の列にありますので、右に移動しなければなりません。 a …
25 code-golf  string 

15
任意の間隔ルーラー
長さと間隔のリストを取得し、線描画文字を使用して各間隔の長い目盛りでその長さのルーラーを出力するプログラムを作成します ┌ ┬ ┐ │ ╵ 出力の最初の行は0のためのダニで始めるべき┌との長さのためにダニを有すると端┐と、┬の間のすべての文字のために使用されています。lengthこの最初の行には、合計+ 1個の線画文字が含まれます。 入力間隔を使用╵し│て、入力間隔に基づいて、半角刻みでティックを垂直方向に長くする必要があります。 間隔は、その前の間隔に対して、最小から最大の順にリストされます。詳しく説明するには: 最初の間隔は、2番目に小さい間隔(最小間隔は1)にある基本ティック(最初の行-ティックごとに1文字)の数を示します。たとえば、[3]は3文字ごとに半角だけ長くなります。 2番目以降の間隔は、次に小さい間隔に基づいています。たとえば、[3、5]は15文字ごとに完全な文字だけ伸び、[3、5、2]は30文字ごとに1文字半ずつ伸びます。 サブ間隔1は有効であり、事実上、最後の間隔行がハーフ文字ではなくフル文字だけ延長されることを意味します。 サンプルテストケースは、これがどのように機能するかを明確にするのに役立ちます。 例/テストケース 3、[]: ┌┬┬┐ 9、[3]: ┌┬┬┬┬┬┬┬┬┐ ╵ ╵ ╵ ╵ 30、[5、2]: ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ │ ╵ │ ╵ │ ╵ │ 32、[4、2、2、2]: ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ │ ╵ │ ╵ │ ╵ │ ╵ │ │ ╵ │ 48、[5、3、2] ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ │ ╵ …

16
怪しげに幸せなレニーの顔の暴徒を作る(͡°͜ʖ͡°)
私はRedditの奇妙なスレッドを通り抜けていましたが、これに遭遇しました: (͡°(͡°͜ʖ(͡°͜ʖ͡°)ʖ͡°)͡°) やや不審に笑っている人々のグループを表している。 (ただし、以下の課題では、課題の作成中に右目左のスペースが何らかの形で削除されました。仕様に注意してください)。 あなたの目標はn、次のルールで笑顔のレニーの顔のグループを作成することです。 深さ1では、顔全体(( ͡° ͜ʖ ͡°))が表示されます。 深さ2では、半分の面が表示されます。左側には、顔の半分を少し上回ります(( ͡° ͜ʖ)。ただし、右側には右側が表示され、口は省略されています(ʖ ͡°)) どれより深く、そして唯一の頭と目の側面が示され(されている( ͡°と͡°)。頭の目と左側の間にスペースはありませんが、外見にもかかわらず、そこにある、右側にはスペース。間隔が原因で͡どの文字物事を少し混乱させる。 入力: n、表示する顔の深さのレイヤー数を示します。 nは常に範囲内にあります0 <= n <= 500。この範囲外のものを処理する必要はありません。 n0が面を持たない代わりに1つの面を意味するように、1でオフセットすることができます。ただし、-1を処理する必要があります。 出力: 文字列、文字配列、またはリモートで比較可能なもの(Python / Javascriptの1文字の文字列のリストなど)。直接印刷することもできます。末尾の空白は問題ありません。 完全なプログラムまたは機能を送信できます。 どのキャラクターが関係しているかを見るのは難しいので、Pythonでレイアウトされています。 >> [ord(c) for c in '( ͡° ͜ʖ ͡°)'] [40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41] >> …

16
重複しない行列和
重複しない行列和 長さnのk個の配列が与えられた場合、各配列の1つの要素を使用して可能な最大合計を出力し、2つの要素が同じインデックスにないようにします。k <= nであることが保証されています。 入力 整数の空でない配列の空でないリスト。 出力 最大合計を表す整数。 例 Input -> Output [[1]] -> 1 [[1, 3], [1, 3]] -> 4 [[1, 4, 2], [5, 6, 1]] -> 9 [[-2, -21],[18, 2]] -> 0 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> 15 [[1, 2, 3, 4], [5, …

5
方向変換器で作られたパスを描く
この課題はグリッド上で行われます。 +----------+ | | | | | | | | | | | | | | | | | | +----------+ これは10 x 10ですが、任意の長方形にすることができます。 このグリッドには4つの方向があります。上、下、左、右。 タスクは、大文字の方向の初期で始まるパスを描くことです。この例では、Uから直接上に移動します。 +----------+ | | | | | | | | | | | | | | | | | U | +----------+ パスは上に移動し、壁にぶつかるまでアスタリスク(*)で終わるフルストップ文字(。)で構成されます。 +----------+ | …
25 code-golf 

28
メタシーケンスにする
バックグラウンド この課題の場合、「メタシーケンス」は、数字自体だけでなく増分も増加する数字のシーケンスとして定義され、増分は値の増加などによって増加します。 たとえば、ティア3メタシーケンスは次のように始まります。 1 2 4 8 15 26 42 64 93 130 176 なぜなら: 1 2 3 4 5 6 7 8 9 >-| ↓+↑ = 7 | Increases by the amount above each time 1 2 4 7 11 16 22 29 37 46 >-| <-| | Increases …

8
爆発する数字
サンドボックス(削除済み) 9の行列を次のように定義してみましょう: N= ⎡⎣⎢999999999⎤⎦⎥N=[999999999] N = \begin{bmatrix} 9&9&9\\9&9&9\\9&9&9 \end{bmatrix} 爆発する数を位置(x 、 y)(バツ、y)(x,y)数として定義します。これは、すべての隣接する隣人(それ自体を含む)の間で等しい整数に分解でき、各部分の絶対値は0より大きいです。 前マトリックスから、位置番号を爆発することができます(1 、1 )(1、1)(1,1)(0インデックス付き) N=⎡⎣⎢999999999⎤⎦⎥N=[999999999] N = \begin{bmatrix} 9&9&9\\9&\color{red}9&9\\9&9&9 \end{bmatrix} N=⎡⎣⎢9+19+19+19+10+19+19+19+19+1⎤⎦⎥N=[9+19+19+19+10+19+19+19+19+1] N = \begin{bmatrix} 9+\color{red}1&9+\color{red}1&9+\color{red}1\\9+\color{red}1&\color{blue}0+\color{red}1&9+\color{red}1\\9+\color{red}1&9+\color{red}1&9+\color{red}1 \end{bmatrix} N=⎡⎣⎢10101010110101010⎤⎦⎥N=[10101010110101010] N = \begin{bmatrix} 10&10&10\\10&\color{red}1&10\\10&10&10 \end{bmatrix} 場合によっては、結果を1より大きい有理数に分解します。これは、数値を爆発させるときに避ける必要があるものです。この場合、残りは展開された番号に割り当てられます。 それを実証するために、以前のマトリックスで作業を続けましょう。我々は位置の数を爆発する。この時間(0,0)(0,0)(0,0) N=⎡⎣⎢10101010110101010⎤⎦⎥N=[10101010110101010] N = \begin{bmatrix} \color{red}{10}&10&10\\10&1&10\\10&10&10 \end{bmatrix} ここには、3つのネイバーと番号自体があります。ここで式のようなものである10/410/410/4私たちに与える2をそれぞれのための2余りなど。 N= ⎡⎣⎢2 + 210 + 21010 + 21 …
25 code-golf  matrix 

30
拡大する矢印を描く
この課題は、成長する一連のASCIIアート矢印を印刷することです。パターンを言葉で説明しますが、このシリーズの始まりがどのように見えるかを見る方が簡単かもしれません。 > < -> <- --> <-- ---> <--- ----> <---- -----> <----- ------> <------ ... 長さnの矢印には、矢印(<または>)とn-1ダッシュ(-)が含まれます。右向きの矢印には最初にダッシュがあり、次にがあり>ます。左向きの矢印はで始まり、<その後にダッシュが続きます。シリーズは、n右向きの長さの矢印とそれに続く左向きの長さnの長さで構成され、nは1から無限大です。 チャレンジを完了するには、1つの入力(整数i >= 1)を受け取り、最初のi矢印を出力するプログラムまたは関数を作成します。矢印は、左右のペアではなく個別のものi=3です。したがって、出力する必要があります。 > < -> 文字列のリストを返すか、次々にそれらを印刷できます。印刷する場合、矢印は一貫した区切り記号で区切る必要があります。区切り記号は、例のように改行である必要はありません。 これはcode-golfであるため、最小バイトが勝ちます。

30
プログラマーが言うように:怠け者になろう
ストーリー 9gagからこの投稿を見ましたか?たぶん、あなたはあなた自身の文章を作る感覚を得た。しかし、その後、30分で脚本をゴルフするだけでよいことに気づき、それに時間をかける必要はありません。 提出 以下に説明するように、プログラムは入力文字列を取得し、引用符を追加して返します。標準的な抜け穴は禁止されています。行のリストとしての出力が許可されます。出力を中断しない末尾のスペースと空の行は許可されます。 入力の規則 入力には、印刷可能なASCII文字のみが含まれます。 入力にはスペースを含めることができます。言葉は彼らによって決定されます。 スペースの後に別のスペースが続かないことが保証されています。 入力がない場合や空の文字列の場合は関係ありません。 出力のルール 1つの単語が指定されている場合、プログラムは引用符で囲まれた文字列を返す必要があります。 入力文字列に2つ以上の単語がある場合、最初の入力が最初に返されますが、最初の単語は引用符で囲まれています。次に、次の行で、最初の入力を返しますが、2番目の単語を引用符で囲みます。残りの単語についても同様です。 一般に、プログラムは入力に含まれる単語と同じ数の行を返さなければなりません。 例: test -> "test" This is codegolf -> "This" is codegolf This "is" codegolf This is "codegolf" This is a significantly longer, but not the longest testcase -> "This" is a significantly longer, but not the longest …
25 code-golf  string 

6
プライム封じ込め番号(スピード版)
これはシーケンスA054261です nnn素数封じ込め番号番目は、第含ま最小数であるnnnのサブストリングとして素数を。たとえば、番号235235235は、サブストリングとして最初の3つの素数を含む最小の番号であり、3番目の素数格納番号になります。 最初の4つの素数封じ込め番号があることを把握することは簡単です222、232323、235235235および235723572357、しかし、それはより面白いです。次の素数は11であるため、次の素数包含番号は235711235711235711でが、プロパティで最小の数として定義されているため、112357112357112357です。 ただし、11を超えると実際の課題が発生します。次の主な包含番号は113257113257113257です。この番号では、部分文字列11と 13が重複していることに注意してください。番号3も番号と重複しています13。 次の番号は、その前にある番号のすべての基準を満たし、さらに1つのサブストリングを持つ必要があるため、このシーケンスが増加していることを証明するのは簡単です。ただし、n=10との結果が示すように、シーケンスは厳密には増加していませんn=11。 チャレンジ あなたの目標は、できるだけ多くの素数の収容番号を見つけることです。プログラムは、2から始まり上に向かって、順序付けられた形式で出力する必要があります。 ルール あなたは許可されていますハードコード素数に。 素数包含番号をハードコーディングすることはできません(2唯一の例外)、またはチャレンジを簡単にするマジック番号。どうぞよろしくお願いします。 任意の言語を使用できます。コードを実行する環境を準備するためのコマンドのリストを含めてください。 CPUとGPUの両方を自由に使用でき、マルチスレッドを使用できます。 得点 公式の採点は私のラップトップ(dell XPS 9560)から行われます。あなたの目標は、5分以内にできるだけ多くの素数の包含番号を生成することです。 スペック 2.8GHz Intel Core i7-7700HQ(3.8GHzブースト)4コア、8スレッド。 16GB 2400MHz DDR4 RAM NVIDIA GTX 1050 Linux Mint 18.3 64-ビット これまでに見つかった数字と、最後に追加された素数: 1 => 2 ( 2) 2 => 23 ( 3) 3 => 235 ( 5) 4 …

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