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

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

6
旅する歯ブラシ
前書き 今日の課題はすべて歯についてです。具体的には、ある歯から別の歯へのブラッシングにかかる​​時間。あなたの課題は、2つの歯の位置を考えると、最初から2番目の歯まで磨くのに可能な最短時間で出力することです。 チャレンジ この課題では、平均的な成人の人間の口のレイアウトを使用します。 この図は、広く使用されているISO番号付けシステムを示しています。システムは口を4つの部分に分割し、それぞれに番号を割り当てます。右上(1)、左上(2)、左下(3)、右下(4)です。次に、各セクションの歯に口の中央から1〜8の番号を付けます。したがって、右上側の中央から4番目の歯(セクション1)は、歯番号14です。 1本の歯を磨くのに1単位時間かかると仮定しましょう。1つの歯から次の歯に横に移動するには、0単位の時間がかかります。歯からその真上または真下の歯まで交差することもできます。これにも1単位の時間がかかります。では、14番歯から31番歯までブラッシングするのにどのくらいかかりますか?上の図を見ると、7単位の時間がかかることがわかります。計算方法は次のとおりです。 Action : Unit of time Brushing tooth 14 : 1 unit Brushing tooth 13 : 1 unit Brushing tooth 12 : 1 unit Brushing tooth 11 : 1 unit Brushing tooth 21 : 1 unit Cross to bottom of mouth : 1 unit Brushing …
10 code-golf 

7
隣人は敵対的ですか?
前書き この課題の目的のために、私たちが定義する隣人の要素のEEE正方行列であAA(ようにE= A私、jE=Ai,jE=A_{i,j})のエントリがすべてのように に水平または垂直、斜めにすぐ隣接している(すなわちそれらはラップせずにを「囲みます」)。E EあAAEEE EEE pedantsのための近隣の、正式な定義のため matix(0インデックス)である: ここで n×nA N i 、あ私、jAi,jA_{i,\:j}n × nn×nn\times nあAAE i 、Ni,j={Aa,b∣(a,b)∈Ei,j∩([0,n)∩Z)2}Ni,j={Aa,b∣(a,b)∈Ei,j∩([0,n)∩Z)2}N_{i,\:j}=\{A_{a,\:b}\mid(a,b)\in E_{i,\:j}\:\cap\:([0,\:n)\:\cap\:\Bbb{Z})^2\}Ei,j={i−1,i,i+1}×{j−1,j,j+1} \ {i,j}Ei,j={i−1,i,i+1}×{j−1,j,j+1} \ {i,j}E_{i,\:j}=\{i-1,\:i,\:i+1\}\times \{j-1,\:j,\:j+1\} \text{ \\ } \{i,\:j\} インデックスの要素が、そのすべての隣接要素と互いに素である場合(つまり、あれば、敵意を持って生きているとしましょう)。悲しいことに、この貧弱な入り口は、近くの失礼な住民から砂糖を1杯も借りることができません...i,ji,ji,\:jgcd(Ai,j,n)=1∀n∈Ni,jgcd(Ai,j,n)=1∀n∈Ni,j\gcd(A_{i,\:j},\:n)=1\:\forall\:n\in N_{i,\:j} 仕事 十分なストーリー:正の整数の正方行列が与えられると、次のいずれかを出力します。MMM 隣接するが敵対的になるようにいくつかのインデックスを占めるすべてのエントリを示す要素(重複排除されているかどうかにかかわらず)のフラットリスト。M N i 、i,ji,ji,jMMMNi,jNi,jN_{i,\:j} 近傍が敵対的である位置に秒、それ以外の場合は秒のブール行列(と代わりに他の一貫した値を選択できます)。0 0 1111000000111 敵対的な地域を表すインデックスのペアのリスト。i,ji,ji,\:j Physicaのリファレンス実装 – I / OのPython構文もサポートします。これらの抜け穴はデフォルトで禁止されていることに注意しながら、標準的な方法と適切な形式で入力を取得し、出力を提供できます。これはコードゴルフなので、(すべての言語で)バイト単位の最短コードが優先されます! さらに、行列サイズを入力として使用することもできます。また、常に正方形であるため、行列をフラットリストとして使用することもできます。 例 次のマトリックスを考えてみましょう: ⎛⎝⎜642753102258143236⎞⎠⎟(641014272232535836)\left(\begin{matrix} 64 …

5
月相を教えてください!
チャレンジ 月の画像を入力として、月の位相を出力します。 月の満ち欠け プログラムには、これらの画像のいずれかがpng形式で提供され、指定されたとおりにフェーズを出力する必要があります。 new moon 16進ダンプ waxing crescent 16進ダンプ first quarter 16進ダンプ waxing gibbous 16進ダンプ full moon 16進ダンプ waning gibbous 16進ダンプ third quarter 16進ダンプ waning crescent 16進ダンプ 入力 入力は、240 px x 240 pxのpngファイルへのパスであり、上の画像の1つになります。 画像バイトは同じであることが保証されています。 勝利 最短コードの勝利

3
ASCII「スプラット」を出力する
ASCII卵を特定の方向に投げると、サイズがnの ASCIIスプラットになります。これは1つo(卵黄)で「始まり」、2からn までの「行」で指定された方向に続き*ます。*さんは、一つの『スペース』によって分離され、そしてoのおよびすべての『行』*さんは『スペース』の『行』によって分離されています。 スプラットの方向は、からの8つの方向のいずれかにすることができます。o次に例を示します。 1 2 3 4 o 5 6 7 8 ここ方向のサイズ4のASCIIのスプラットの例であり5、2そして3それぞれは 左側は実際のASCIIスプラットで、右側は同じスプラットですが、「スペース」の「行」が実際の「行」(つまり-、\または|方向に応じて)に置き換えられています。空間の「線」。 Size 4, direction 5 * | | |* * | |*| * * |*| |* o * o| |*| * * |*| |* * | |*| * | | |* Size 4, direction 2 * …

2
Modilar SNISPの停止問題を解決する
Befingeの停止問題を解決するという精神で、Modilar SNISPと呼ばれる別の2D言語を定義しましょう。Modilar SNISPには、次の6つの手順があります。 \ 命令ポインタを次のように指示します。 上から近づいた場合は右に進みます。 右から近づいたら上へ。 下から近づいた場合は左に進みます。 左から近づいたら下へ。 / 命令ポインタを次のように指示します。 上から近づいた場合は左へ。 左から近づいたら上へ。 下から近づいた場合は右に進みます。 右から近づいたら下がる。 ! 次の命令をスキップします。 @ IPの場所と方向を呼び出しスタックにプッシュします。 #呼び出しスタックからIPの場所と方向をポップして復元し、次の命令をスキップします。呼び出しスタックが空の場合、実行は停止します。 . 何もしません。 命令ポインタは、左上隅から右に向かって始まります。それがプレイフィールドを離れると、実行は停止します。 Modilar SNISPはPDAよりも強力ではありません。無制限のストレージの唯一のソースは有限のアルファベット(すべてのIP(場所、方向)ペアのセット)を持つスタック(呼び出しスタック)であるためです。停止の問題はPDAで決定できるため、この課題は常に可能です。 チャレンジ あなたの目標は、Modilar SNISPプログラムを表す文字のマトリックスを受け取り、停止するかどうかに応じて2つの異なる出力の1つを返すプログラムを作成することです。 これはcode-golfなので、有効な最短のプログラム(バイト単位)が優先されます。 仕様書 文字のマトリックスを取る方法は柔軟です。改行で区切られた文字列、文字列の配列、文字の配列の配列、2次元の文字の配列、幅を表す整数を持つ文字のフラットな配列などはすべて受け入れられます。テストケースでは、最初の選択肢を選択します。 入力行列は長方形で(短い行にパディングする必要がないため)、長さと幅がゼロでないと想定できます。 真実/偽物だけでなく、2つの異なる出力を選択できます。 あなたが入力行列が唯一の有効なコマンドで構成されることを前提とすることができます(\、/、!、@、#、および.)。 コマンドが「次の命令をスキップする」と言われた場合、スキップする次の命令があると想定できます。特に、(1)IPがプレイフィールドのエッジにあり、(2)IPがそのエッジに対して垂直に移動しているため、「次の命令」がプレイフィールドの外側にあるような状況では発生しません。 テストケース 次のスニペットは、言語でプログラムをテストするために使用できます。これは、ここで指定された実際の仕様よりも若干許容範囲が広いことに注意してください(たとえば.、no-ops 以外の文字を許可します)。 function htmlEscape(t){let i=document.createElement("span");return i.innerText=t,i.innerHTML}function tick(){snisp.tick(),snisp.update()}function run(){runButton.style.display="none",stopButton.style.display="",code.style.display="none",executionArea.style.display="",snisp.initialize(),intervalId=setInterval(tick,INTERVAL_MS)}function stop(){runButton.style.display="",stopButton.style.display="none",code.style.display="",executionArea.style.display="none",clearInterval(intervalId)}let TICKS_PER_SECOND=5,INTERVAL_MS=1e3/TICKS_PER_SECOND,runButton=document.getElementById("run-button"),stopButton=document.getElementById("stop-button"),code=document.getElementById("code"),executionArea=document.getElementById("execution-display"),intervalId,snisp={x:null,y:null,direction:null,callStack:null,stopped:null,playfield:null,padRows:function(){let t=Math.max(...this.playfield.map(t=>t.length));for(let i=0;i<this.playfield.length;i++)this.playfield[i]=this.playfield[i].padEnd(t,".")},initialize:function(){this.x=0,this.y=0,this.direction="right",this.callStack=[],this.stopped=!1,this.playfield=code.value.split("\n"),this.padRows(),this.update()},getCurrentChar:function(){let t=this.playfield[this.y];if(void 0!=t)return …

6
最短距離の合計を見つける
このタスクでは、コードは、整数XおよびYの2つの並べ替えられた配列を入力として受け取る必要があります。Xの各整数とYの最も近い数の間の絶対距離の合計を計算する必要があります。 例: X = (1 5,9) Y = (3,4,7) 距離は2 + 1 + 2です。 X = (1,2,3) Y = (0,8) 距離は1 + 2 + 3です。 コードは、都合のよい方法で入力を受け取ることができます。 主な制限は、コードが2つの配列の長さの合計で線形時間で実行される必要があることです。。(2つの整数の加算には一定の時間がかかると想定できます。)

5
2つのBrainfuckプログラムを作成する
2つのbrainfuckコードスニペットAとを指定して、s結果の入力で実行した場合と同じ動作をするBいくつかのbrainfuckコードCを出力します。に与えられたかのように、以下の仮定に一致するすべての入力に対して機能する必要があることに注意してください。BACA あなたは仮定することができます: 有限入力。 AとBの両方が停止します。 EOFは常に0または常に-1です。 細胞の残留を一貫して許可または禁止する 無制限のテープ(それ以外の場合、要件が不可能な場合があります) 一貫して8ビットのラッピングまたは無制限の整数 EOFを表すバイトを含むストリーム(AまたはBの入力または出力) コードAおよびBには、Cに表示される可能性のある文字を含めることができます。 +-[]<>,. 例(EOF = 0) A = ,[..,] B = ,[...,] C = ,[......,] A = >,[>,]<[.<] B = ,[...,] C = >>>>,[[-<+<+<+>>>]>>>,]<<<<[.<] A = >,[>,]<[.<] B = ,[...,] C = >,[>,]<[...<] A = ,. B = ,. C = ,>,[,]<. …

5
循環制限付き合計
チャレンジ N0以上の整数のタプルを想像して、Mそれを呼び出しましょうF。 合計での(M + 1) ** N可能性がありますF。 F次の不等式をすべて満たすそのようなsはいくつありますか(インデックスは1ベース)。 F[n] + F[n+1] <= M ために 1 <= n < N F[N] + F[1] <= M 2つの取るプログラムまたは機能書く正の整数を Nし、Mそして任意の便利な形で答えを出力します。 テストケース (N,M) => Answer (1,1) => 1 (2,1) => 3 (3,1) => 4 (4,1) => 7 (1,2) => 2 (2,2) => 6 (3,2) => …

4
信じられないトップ10の要素がこの配列にあります
AKA:配列からクリックベイトを生成します。 整数の配列が与えられた場合、その配置と長さに基づいて、価値のないクリックベイトを生成します。 要素数が20以下の場合、上位Xリストを作成できます。パラメータ:配列の長さ。 素数は有名人なので、2つが隣り合っているときはいつでも、ゴシップとして渡されます。パラメータ:2つの隣接する素数が配列に現れる順序で。 配列に2つ以上の数字が表示される場合、それは衝撃的で信じられないほどであり、誰もがそれについて聞く必要があります。複数の数字が2回表示される場合は、それぞれにニュース記事を作成します。一意の番号ごとに1回だけ印刷してください。パラメータ:総外観によって測定された数の出現。 並べ替えられた 単調に増加する順序で3つ以上の要素が表示され、その後突然減少した場合は、それらがどのように並べ替えられているかを説明し、次に何が起こるかについて説明します。これは、ストレートごとに1回だけ実行してください。パラメータ:ストレートの長さ。 これらは、使用する必要があるそれぞれのクリックベイトです。 The Top {{N}} Array Elements {{N1}} And {{N2}} Were Spotted Together, You Won't Believe What They Did These {{N}} Elements Will Blow Your Mind {{N}} Elements Sort Themselves, Find Out What Comes Next 覚えておいてください。あなたは安いメディア会社を代表しているので、これを搾り出し、考えられるすべてのタイトルを印刷する必要があります。同じタイトルが2つある場合は、両方を印刷します。 たとえば、この配列が与えられた場合… 1,2,3,4,2,1,1,5,6 これらすべてを任意の順序で出力する必要があります。 The Top 9 Array Elements …

2
孤独な島々
入力: 2つの異なる(オプション)値を含む2D配列。ルールを説明するときは0と1を使用します。入力フォーマットはもちろん柔軟です。 チャレンジ: ゼロは水であり、ゼロは島です。孤独を確実にするために、あなたの仕事はゼロの行と列を挿入することによってすべての島を水で囲むことです。水を無駄にしたくないので、追加する水の量を最小限に抑える必要があります。同じ量の水を追加する必要がある複数のソリューションがある場合は、行ではなく列を追加する必要があります。これをテストケースで示します。 出力: 新しく変更された2D配列。出力形式はもちろん柔軟です。 テストケース: 入力と出力はダッシュで区切られています。追加されたゼロは太字で示されています。テストケースをより便利な形式に変換する場合は、ここで回答の1つを使用してください。 1 --- 1 1 1 --- 1 0 1 1 1 1 1 --- 1 0 1 0 0 0 1 0 1 1 0 0 1 --- 1 0 0 0 0 1 ゼロの行ではなく、ゼロの列を追加したことに注意してください。これは、必要なゼロの数が等しく、列を優先する必要があるためです。 1 0 0 0 1 0 1 …

2
numpy、scipy、またはpylabでゴルフするためのヒント
pythonのためのヒントの包括的なリストすでにありますここでは、どのような私が求めているが、具体的使用に適用されますヒントになるよう、numpy、scipyまたはpylabライブラリを。 これらはnumpy、既にを使用しているコードを短縮する方法、またはこれらのライブラリを使用して一般的なPython操作を短縮する方法のいずれかです。 回答ごとに1つのヒントを入力してください。
10 code-golf  tips  python 

9
マルコフ過程の収束
チャレンジ xの行列がxの累乗に無限大に近づくときの制限がすべての有限値の行列に近づくような、左または右確率行列が与えられた場合、行列が収束する行列を返します。基本的には、結果が変化しなくなるまで、マトリックスを単独で乗算し続けます。 テストケース [[7/10, 4/10], [3/10, 6/10]] -> [[4/7, 4/7], [3/7, 3/7]] [[2/5, 4/5], [3/5, 1/5]] -> [[4/7, 4/7], [3/7, 3/7]] [[1/2, 1/2], [1/2, 1/2]] -> [[1/2, 1/2], [1/2, 1/2]] [[1/3, 2/3], [2/3, 1/3]] -> [[1/2, 1/2], [1/2, 1/2]] [[1/10, 2/10, 3/10], [4/10, 5/10, 6/10], [5/10, 3/10, 1/10]] -> [[27/130, …
10 code-golf  matrix 

26
加重平均-押し上げ傾向の問題
この配列が、過去28日間に毎日達成したプレスアップの数だとしましょう。 [ 20,20,20,30,30,30,30, 35,35,40,40,40,45,45, 50,50,50,50,50,50,50, 60,70,80,90,100,110,120 ] ご覧のように、先週は急激な上昇傾向にあり、これがこのデータの中で最も興味のある部分です。過去のデータが多いほど、「平均」でそのデータを取り上げる必要が少なくなります。 '腕立て伏せの数。 そのために、前週よりも各週の価値が高い「平均」を算出したいと思います。 この問題の一部ではなく、背景情報。 通常の平均: すべての値の合計/値の数 上記の場合: 1440/28 = 51.42857142857143 加重平均: アレイを7つの4つのグループに分割し、新しいアレイを起動します。 最初のグループを配列に追加します。 2番目のグループをアレイに2回追加します。 3番目のグループを3回配列に追加します。 4番目のグループを配列に4回追加します。 長さで新しい配列の全て、及び分割を合計新しいアレイ。 上記の場合: 配列をこれに変換します: [ 20,20,20,30,30,30,30, # first week once 35,35,40,40,40,45,45, 35,35,40,40,40,45,45, # second week twice 50,50,50,50,50,50,50, 50,50,50,50,50,50,50, 50,50,50,50,50,50,50, # third week thrice 60,70,80,90,100,110,120, 60,70,80,90,100,110,120, 60,70,80,90,100,110,120, 60,70,80,90,100,110,120 # …

6
自己検証三角チェッカーボードプログラム
チェッカーボードプログラムは、個々の文字の序数値が偶数から奇数に変化するプログラムで、ラインターミネーター(標準の行末)を除きます。 三角プログラムは、各行に前の行よりも1文字多い追加プログラムで、最初の行には1文字があります。空の入力を処理する必要はありません。 あなたの仕事は、与えられた入力がそれらの基準に準拠していることを検証し、プログラムが基準を満たしている場合は真実、それ以外の場合は偽の何かを出力/返すプログラムを構築することです。 プログラムもこれらの基準を満たしている必要があります。 有効なプログラムの例 G `e @u^ 5r{B ^ cB +$C VA01 ルール 文字のパリティが変化する限り、プログラムは奇数バイトまたは偶数バイトのどちらからでも開始できます。 プログラムは、奇数または偶数の文字で始まるプログラムを検証する必要があります。 Unicode文字の場合、基礎となるバイト値には交互のパリティが必要です。 入力には印刷可能な文字のみが含まれていると想定できます。プログラムに印刷できないものが含まれている場合でも、プログラム自体を検証できます。 プログラムには末尾に改行が1つ含まれる場合がありますが、検証前に削除されていると想定できるため、検証で許可する必要はありません。 標準の抜け穴は禁止されています。 各言語でのバイト単位の最短コードが優先されます。

4
平方根の桁ごとの合計の分数の継続
前書き あなたの仕事は、2の平方根と3の平方根の桁ごとの合計の継続分数表現で最初の1000項を生成することです。 つまり、次のリストを正確に作成します(ただし、出力形式は柔軟です)。 [2, 6, 1, 5, 7, 2, 4, 4, 1, 11, 68, 17, 1, 19, 5, 6, 1, 5, 3, 2, 1, 2, 3, 21, 1, 2, 1, 2, 2, 9, 8, 1, 1, 1, 1, 6, 2, 1, 4, 1, 1, 2, 3, 7, 1, 4, 1, …

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