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

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

20
フィボナッチ数列Mod Kで不足している数値を見つける
このMath.SEの質問に触発されました。 バックグラウンド フィボナッチ数列(と呼ばれるF)を開始シーケンスである0, 1各番号(ようにF(n)(最初の二つの後))がその前2つ(の和であるがF(n) = F(n-1) + F(n-2))。 フィボナッチ数列mod K(と呼ばれるM)は、フィボナッチ数列mod K(M(n) = F(n) % K)です。 各値は前のペアによって決定されるため、フィボナッチ数列mod KはすべてのKに対して循環的であり、非負整数の可能なペアはK 2のみであり、両方ともKより小さいことが示されます。は、最初に繰り返される項のペアの後に循環します。最初に繰り返される項のペアが表示される前にフィボナッチ数列mod Kに表示されない数値。 K = 4の場合 0 1 1 2 3 1 0 1 ... K = 8の場合 0 1 1 2 3 5 0 5 5 2 7 1 0 1 ... K …

10
最小限のスパースルーラー
長さnの標準ルーラーには、位置0、1、...、n(いずれかの単位)に距離マークがあります。まばらな支配者は、これらのマークのサブセットを持っています。ルーラーは、位置pとqにp − q = kのマークがある場合、距離kを測定できます。 チャレンジ 正の整数nを指定すると、すべての距離1、2、...、nを測定できるように、長さnのスパースルーラーで必要なマークの最小数を出力します。 これはOEIS A046693です。 例として、入力6の出力は4です。つまり、0、1、4、6のマークが付いたルーラーは、1-0 = 1、6-4 = 2、4-1 = 3、4-0として機能します。 = 4、6-1 = 5、および6-0 = 6。 追加のルール アルゴリズムは、任意の大きなnに対して有効でなければなりません。ただし、プログラムがメモリ、時間、またはデータ型の制限によって制限されている場合は許容されます。 入力/出力は、任意の合理的な手段で取得/生成できます。 すべてのプログラミング言語でプログラムまたは機能が許可されます。標準的な抜け穴は禁止されています。 バイト単位の最短コードが優先されます。 テストケース 1 -> 2 2 -> 3 3 -> 3 4 -> 4 5 -> 4 6 -> 4 7 -> 5 8 …

9
カードゲームの手のパターン
カードのデッキは、SスーツとRランクのデカルト積です。すべてではありませんが、多くのカードゲームがとを使用S=4していR∊{6,8,13}ます。Hカードの手はデッキから配られます。その分布(別名「ハンドパターン」)は、各スーツから獲得したカードの数を記述する配列で、スーツの順序を無視します(つまり、マルチセットのようなものです)。分布を考えるとD満足len(D)=S、1≤sum(D)=H≤S×R、0≤D[i]≤R、D[i]≥D[i+1]、それが発生する確率を見つけます。 入力:整数Rと配列D。 出力:小数点以下5桁以上の確率。末尾のゼロはスキップされます。科学表記は大丈夫です。 抜け穴は禁止されています。最短勝。 テスト: R D probability 13 4 4 3 2 -> 0.2155117564516334148528314355068773 13 5 3 3 2 -> 0.1551684646451760586940386335649517 13 9 3 1 0 -> 0.0001004716813294328274372174524508 13 13 0 0 0 -> 0.0000000000062990780897964308603403 8 3 2 2 1 -> 0.4007096203759162602321667950144035 8 4 2 1 1 -> 0.1431105787056843786543452839337155 …

26
番号が与えられたら、その「集合合計」を印刷します
入力として数値を指定し、その総和を出力します 集合合計とは何ですか? 数13214、入力を考えます 左から始まる各桁をループして、その総和を取得することができます。 1 は、最初の数字を見て、合計に追加することを意味します。合計= 1 3 は、「最初の3桁」を見て、合計に追加することを意味します。sum= 1 + 132 2 は、「最初の2桁」を見て合計に加算することを意味します。sum= 1 + 132 + 13 1 は、最初の数字を見て、合計に加算することを意味します。合計= 1 + 132 + 13 + 1 4 は、「最初の4桁」を見て合計に加算することを意味します。合計= 1 + 132 + 13 + 1 + 1321 合計= 1468およびこれはあなたの出力です 特殊なケース: に遭遇した0場合、明らかに合計を同じに保ちます The number 1301 would have a sum …

8
リストをピックフラット化する
ネストされたリストを「ピッキング」するプロセスを検討してください。ピッキングは次のように定義されます。 引数がリストの場合、リストから要素をランダムに(均一に)取り出し、そこから選択します。 引数がリストではない場合、単にそれを返します。 Pythonでの実装例: import random def pick(obj): if isinstance(obj, list): return pick(random.choice(obj)) else: return obj 簡単にするために、ネストされたリストには整数またはさらにネストされたリストのみが含まれると仮定します。 任意のリストが与えられた場合、で区別できないフラット化されたバージョンを作成することができますpick。つまり、リストから選択すると、同じ確率で同じ結果が得られます。 たとえば、リストを「ピックフラット化」 [1, 2, [3, 4, 5]] リストを生成します [1, 1, 1, 2, 2, 2, 3, 4, 5] 。単純な平坦化が無効である理由は、サブリストの要素が選択される確率が低いためです。たとえば、リストで[1, [2, 3]]は1が2/4 = 1/2の確率で選択され、3と4は両方とも1/4チャンスそれぞれ。 また、シングルトンリストからの選択はその要素からの選択と同等であり、空のリストからの選択には意味がないことに注意してください。 チャレンジ 非負整数のネストされたリストを指定すると、非負整数のフラット化されたリストを返します。このリストから、同じ確率で同じ結果が得られます。 これはcode-golfなので、最短の有効な回答(バイト単位で測定)が勝ちます。 仕様書 入力は[2, 3, 4]、[2, 2, 2, 2, …

16
シンプルなマークダウンレンダリング
Stack Exchangeネットワーク上の投稿にヘッダーを作成する方法はいくつかあります。PPCGで最も一般的に使用される形式は次のようです1 # Level one header ## Level two header ### Level three header ハッシュマークの後のスペースに注意してください。また、末尾のハッシュマークは含まれないことに注意してください。 チャレンジ: (おそらく複数行の)文字列を入力として受け取り、次の形式で文字列を出力します。 ヘッダーがレベル1の場合、各文字を4 x 4回出力します ヘッダーがレベル2の場合、各文字を3 x 3回出力します ヘッダーがレベル3の場合、各文字を2 x 2回出力します 行がヘッダーでない場合は、そのまま出力します。 説明する: --- Level 1 --- # Hello --- Output--- HHHHeeeelllllllloooo HHHHeeeelllllllloooo HHHHeeeelllllllloooo HHHHeeeelllllllloooo --- Level 2 --- ## A B C def --- …

30
数字
三角形の数は、それらはまた、式で表すことができる1から始まる、連続する正の整数の和として表すことができる数でありn(n + 1) / 2、nいくつかの正の整数です。 数値の対応する数字は、次の方法で計算されます。 数字をその数字の配列に分割します。例えば 613 => [6 1 3] 配列内の各番号について、nth三角番号を計算します。[6 1 3] => [21 1 6] 結果の配列を合計します。 [21 1 6] => 28 あなたのタスクは、整数が与えられると、結果が1になるまでn繰り返しのn対応する数字を計算し、計算されたすべての値を出力します。値は任意の順序で出力でき、オプションで配列の先頭に元の番号を含めることができます。これはコードゴルフなので、最短のコードが優先されます。 テストケース 23 => 9 45 25 18 37 34 16 22 6 21 4 10 1 72 => 31 7 28 39 51 16 …
20 code-golf  math 

23
数値のBCD差を見つける
BCD差 整数nが与えられた場合、各10進数を4桁のバイナリ表現で置き換えることにより、BCD(バイナリコード10進数)に変換します。 234 -> 0 0 1 0 0 0 1 1 0 1 0 0 次に、他の再配置なしでこのリストで表現できる最大数と最小数を見つけるために、2進数のリストを回転させます。 max: 1 1 0 1 0 0 0 0 1 0 0 0 (the entire list rotated left 6 times) min: 0 0 0 0 1 0 0 0 1 1 0 1 …

30
エンディアンネスを交換する
おそらくご存知のように、(バイトアドレス指定可能な)ハードウェアメモリは、リトルエンディアンとビッグエンディアンの 2つのカテゴリに分類できます。リトルエンディアンのメモリでは、バイトは、小さい(最下位の)終わりで0から始まり、ビッグエンディアンでは逆に番号が付けられます。 おもしろい事実:これらの用語はジョナサン・スウィフトの本「ガリバー旅行記」に基づいており、そこではリリプーティアン王が市民に小さな端で卵を割るように命じた(したがって、リトルエンディアンは反逆者は大きな端で彼らの卵を割るだろう)。 スワップの仕組み 12648430次のように見えるビッグエンディアンのマシンで、メモリ内に符号なし整数(32ビット)があるとします。 addr: 0 1 2 3 memory: 00 C0 FF EE バイトオーダーを反転させ、私たちは、16進数の整数取得0xEEFFC000である4009738240小数では。 あなたのタスク 上記のように、10進数の符号なし32ビット整数を受け取り、エンディアンネスを交換するときに結果の整数を出力するプログラム/関数を作成します。 ルール 入力は常に次の範囲に0なります4294967295 出力は、STDOUTに出力するか(末尾の改行/スペースは問題ありません)、または返すことができます 入力と出力は10進数です 無効な入力の動作は未定義のままです テストケース 0 -> 0 1 -> 16777216 42 -> 704643072 128 -> 2147483648 12648430 -> 4009738240 16885952 -> 3232235777 704643072 -> 42 3735928559 -> 4022250974 4009738240 -> …

16
因子欠乏数
正の整数の場合 N&gt; 2N&gt;2N > 2 言い換えると、 ω (N)&lt; ω (N− 1 )ω(N)&lt;ω(N−1)\omega(N) < \omega(N - 1) そして ω (N)&lt; ω (N+ 1 )ω(N)&lt;ω(N+1)\omega(N) < \omega(N + 1)、ここで ω (N)ω(N)\omega(N) の一意の素因数の数です NNN. 仕事 次のI / O形式から選択できます。 整数を取る NNN そして出力 N番目N番目N^{\text{th}}因子が少ない数。これを選択した場合、NNN 0または1のインデックスを付けることができます。 正の整数を取る NNN そして最初の出力 NNN 要因の少ない数。 シーケンスを無期限に印刷します。 これらの抜け穴はデフォルトでは禁止されていることに注意しながら、任意のプログラミング言語で、任意の標準メソッドを介して入力を取得し、出力を提供できます。これはコードゴルフであるため、ルールに従った最短の提出が勝ちです。 競合する方法が異なるため、個別のテストケースは含めませんが、このシーケンスの最初の100の用語であるOEIS A101934を参照できます。 11, …

18
六角形の三角形
|/\文字で構成される六角形の無限のタイル張りを想定します。 / \ / \ / \ / \ | | | | | \ / \ / \ / \ / etc. | | | | \ / \ / \ / inputを指定n &gt; 0すると、以下の例に示すよう_に、六角形の中央にで固定されたタイルの三角形部分を出力します。 n=1 \_/ n=2 \/ \/ \_/ n=3 \ | / \/ \/ \_/ n=4 …

13
バイナリスクエアダイアゴナルシーケンス
バイナリ平方対角線シーケンスは次のように構成されています。 正の自然数のシーケンスを取ります。 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、... 各数値をバイナリに変換します: 1、10、11、100、101、110、111、1000、1001、1010、1011、1100、1101、1110、1111、10000、10001、... それらを連結します。 11011100101110111100010001010101111001101111011111000010001 ... で始まり、上記のシーケンスの要素で左から右、上から下に満たされるn=1辺の長さnが増加する正方形を生成します。11 0 1 11 0 0 1 0 1 1 1 01 1 1 1 0 0 0 1 0 0 1 1 0 1 0 10 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 …

20
最小公倍数を維持しながら2つの数値を互いに素数にする
2つの正の整数を考えるaとb、出力2つの正の整数cとdなるようにします。 c 分ける a d 分ける b cそしてd互いに素である 最小公倍数のcとdの最小公倍数と等しいaとしますb。 考えられる答えが複数ある場合は、そのうちの1つまたはすべてを出力できます。 テストケース: a b c d 12 18 4 9 18 12 9 4 5 7 5 7 3 6 1 6 or 3 2 9 9 9 1 or 1 9 6 15 2 15 or 6 5 1 1 …

22
チェッカーボードを構築する
このチャレンジでは、チェッカーのゲームの開始時に各ピースの座標と色を印刷します。 チェッカーボード上のすべての正方形(インデックス0〜7)にxとy(カンマ区切り)を入力し、その後にボードの上部(y = 0に近い)に「r」または「b」(赤または黒)を入力します)は赤で、下部は黒です。ピース間に改行が必要であり、スペースは必要ありません。 これはコードゴルフであるため、回答はバイト単位で記録され、バイト数は少ない方が良いです。 末尾の改行は許可されますが、必須ではありません。順序は正確に以下のものでなければなりません。 望ましい出力: 0,0r 0,2r 0,4r 0,6r 1,1r 1,3r 1,5r 1,7r 2,0r 2,2r 2,4r 2,6r 5,1b 5,3b 5,5b 5,7b 6,0b 6,2b 6,4b 6,6b 7,1b 7,3b 7,5b 7,7b

30
配列の変更を数える
今日のタスクは、整数の配列を受け取り、値が変化する回数を左から右に読み取ってカウントするプログラムまたは関数を作成することです。これは例を使用して簡単に表示できます。[1 1 1 2 2 5 5 5 5 17 3] =&gt; [1 1 1 **2** 2 **5** 5 5 5 **17** **3**] =&gt; 4 テストケース: Input | Output [] | 0 [0] | 0 [0 1] | 1 [0 0] | 0 [1 2 3 17] | 3 [1 …

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