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

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

12
三面三角形
このアイデアは、主にBIO 2017 q1からのものです。多くの人がそれを気に入っているようだったので、このチャレンジをBinary Sequencesチャレンジから投稿するアイデアを得ました。 また、これはサンドボックスに投稿せずに投稿した最初の課題です。誰も気に入っていない場合は削除します。 ルール 3進数(基数3)の一連の数字を取り込みます。これは、文字列、配列、または先行ゼロの数と一緒の数値として可能性があります。 三角形の各行について、最後の行に1桁しか表示されなくなるまで、以下の行が生成されます。他の2つの数字の下にある数字を見つけるために、数字は、上の2つの数字が等しい場合、その上の2つと同じになります。それ以外の場合は、どちらにも等しくない数字になります。以下に例を示します。 0 0 1 2 0 1 2 2 0 2 0 1 2 0 2 1 1 2 0 1 1 1 0 1 2 1 2 2 0 0 2 1 0 0 2 1 最後の行のみを返すことが期待されます。 コードを短くしてください。 テストケース 0 -> 0 …

3
ASCII鍵署名を描く
音符の入力が与えられると、高音部記号の対応する主キーのASCII図面を出力します。 すべての主要なキー(二重シャープまたは二重フラットを含まない)とそれらに対応するキーシグネチャは次のとおりです。 ウィキペディアのユーザーによる5分の1のデラックス4、プレーンビル、著作権CC BY-SA 3.0 入力がシャープのあるキーである場合、適切な数のシャープを使用して次のASCIIアートを描画します。 # -#------- # ----#---- # -------#- # --------- --------- そして、入力がフラットを持つキーの場合: --------- b ----b---- b -b------- b -----b--- b --------- 使用可能な入力の簡潔な概要と、使用するシャープまたはフラットの数は次のとおりです。 0 1 2 3 4 5 6 7 # C G D A E B F# C# b C F Bb Eb Ab Db …

13
ハフニアンのコードゴルフ
課題は、行列のハフニアンの codegolfを書くことです。2n行ごとの2n対称行列のハフニアンは、A次のように定義されます。 ここで、S 2nはから1までの整数のすべての順列のセット2n、つまりを表し[1, 2n]ます。 ウィキペディアのリンクでは隣接行列について説明していますが、コードは実際の値の対称入力行列に対して機能するはずです。 ハフニアンのアプリケーションに興味のある人のために、mathoverflowリンクでもう少し説明します。 コードは必要に応じて入力を受け取り、適切な形式で出力できますが、コードに入力を提供するための明確な指示を含む完全に機能する例を回答に含めてください。 入力行列は常に正方で、最大16 x 16です。空の行列または奇数次元の行列を処理できる必要はありません。 リファレンス実装 Xcoder氏のpythonコードの例を次に示します。 from itertools import permutations from math import factorial def hafnian(matrix): my_sum = 0 n = len(matrix) // 2 for sigma in permutations(range(n*2)): prod = 1 for j in range(n): prod *= matrix[sigma[2*j]][sigma[2*j+1]] my_sum += prod return my_sum …

30
HTMLでam * nテーブルを作成する
入力: 二十進整数mとnそれは、それぞれのテーブルの行と列の数を与えます。 mおよびn1以上。 出力: m行n列のHTMLのテーブル。 テーブルは、選択した最新のブラウザで表示可能である必要があります。ほとんどのブラウザは、タグが閉じられていなくてもすべてを適切に表示します。適切なインデントと間隔はオプションです。 各セルには少なくとも1つの(空白以外の)印刷可能な文字が必要です。 最初の行のセルは<th>タグを使用し、次の行のセルはタグを使用する必要があり<td>ます。 勝利条件: これはコードゴルフなので、各言語の最短ソースコードが優先されます。 入力例: 2 3 出力例: <table> <tr> <th>A</th> <th>A</th> <th>A</th> </tr> <tr> <td>A</td> <td>A</td> <td>A</td> </tr> </table> または: <table><tr><th>A<th>A<th>A<tr><td>A<td>A<td>A

15
いくつかのドミノを倒す!
インスピレーションを与えてくれたこの質問に感謝します この挑戦で、私たちはのストリングとしてドミノのラインを表すでしょう|、/そして\。入力としてドミノの文字列が与えられ、落ち着いたときにどのように見えるかを決定する必要があります。ドミノが倒れる方法のルールは次のとおりです |倒れたドミノの左にある立っているドミノは、\同様に左の倒れたドミノになります。 |倒れたドミノの右側にある立っているドミノも、/同様に倒れた右のドミノになります。 倒れたドミノが左倒れ\た/ドミノと右倒れたドミノの間にある場合、立ったままになります。 これらの規則は、配置が変更されなくなるまで繰り返し適用されます。 単一の入力がその結論に到達する方法の例を次に示します |||||||\/|||||||\||\|||/||||||\||||| ||||||\\//|||||\\|\\|||//||||\\||||| |||||\\\///|||\\\\\\|||///||\\\||||| ||||\\\\////|\\\\\\\|||////\\\\||||| |||\\\\\////|\\\\\\\|||////\\\\||||| ||\\\\\\////|\\\\\\\|||////\\\\||||| |\\\\\\\////|\\\\\\\|||////\\\\||||| \\\\\\\\////|\\\\\\\|||////\\\\||||| あなたの仕事は、入力の最終結果を見つけて出力するコードを書くことです。入力は常に有効で、少なくとも2文字が含まれていると想定できます。 これはコードゴルフであるため、回答はバイト単位で記録され、バイト数は少ない方が良いでしょう。 テストケース |||/|||| -> |||///// |||\|||| -> \\\\|||| |/||||\| -> |///\\\| ||/|||\| -> ||//|\\| ||\|||/| -> \\\|||//

29
数値からバイナリパスを出力する
nを満たす整数の場合n > 0、その値をバイナリ表現に基づいて右下がりのパスとして書き込みます。 ルール 最初の(最上位の)セットビットは常に左上隅にあります。 次のビットが設定されている場合(a 1)、描画された前の文字と同じ列の次の行に文字(「塗りつぶし」)を描画します。空白(「空」)を使用して塗りつぶしてみてください。ただし、常に同じ文字であれば、どの文字でも使用できます。 次のビットが設定されていない場合(a 0)、描画された前の文字のすぐ右側の同じ行に文字(「塗りつぶし」)を描画します。 コードは、少なくとも20の有効ビットを持つ数値をサポートする必要があります。 完全なプログラム、関数、ラムダなどを書きますが、スニペットは書きません。 先行スペース(または「空の」文字)/行は許可されません 任意の数の末尾のスペース(または「空の」文字)/行を許可 数値、文字列、ブール値の配列など、あらゆる種類の1D入力が受け入れられます。ビットの順序は変更しないでください。 あらゆる種類の視覚的な2D出力が受け入れられます。stdoutでは、文字列( "filled"と "empty"を表す2つの異なる値)で、必要に応じてマトリックスを出力することもできます。数字のリストを「見出しスペースなし」の規則と調和させるのは難しいようですが、それを使用する方法を見つけたら私はそれを受け入れます。注:文字列を印刷または返すことを選択した場合、使用する文字はコードポイント範囲[32-126]のASCII文字でなければなりません。 標準的な抜け穴は禁止されています。 これはcodegolfなので、最短のコードが優先されます。 例 入力:1 * 入力:2 ** 入力:3 * * 入力:4 *** 入力:5 ** * 入力:6 * ** 入力:7 * * * 入力:25 * *** * 入力:699050 ** ** ** ** ** ** …
22 code-golf  number 

3
修正された欠落番号
バックグラウンド: 私は昨晩この質問を最初に投稿し、その曖昧さに反発を受けました。それ以来、私は問題の言い回しだけでなく、その複雑さ(O(1)ではない)に関して多くの担当者に相談しました。このプログラミングの問題は、Amazonのインタビューの質問に対する悪スピンです。 質問: ランダムに連結された整数[0、250)の文字列(0〜250の排他的)を指定すると、シーケンスに1つの番号が欠落しています。あなたの仕事は、この足りない数を計算するプログラムを書くことです。シーケンスには、1つ以外に欠落している数値はありません。それが、この問題を非常に困難にし、おそらく計算上困難にするものです。 以下の例1や例2のように、この問題を小さな文字列で手作業で行うことは、明らかに非常に簡単です。逆に、3桁または4桁の数字が含まれる非常に大きなデータセットで欠落している数字を計算することは、非常に困難です。この問題の背後にある考え方は、このプロセスを実行するプログラムを構築することです。 重要な情報: 昨晩この問題を投稿したときにかなり混乱しているように思われたものの1つは、正確に欠落している数値とは何か、ということでした。欠落している数値は、上記で指定した範囲内の数値です。必ずしも数字ではありません。例3では、シーケンスに表示されているにもかかわらず、欠落している番号が9であることがわかります。DIGIT 9が一連の[0、30)に表示される場所は3つあります:「9」、「19」、および「29」。あなたの目的は、これらを区別し、9が欠落しているNUMBERであることを発見することです(例3の内部)。言い換えると、トリッキーな部分は、どの数字列が完全で、他の数字に属しているかを見つけることにあります。 入力: 入力は、0から249までの整数、または0から250までの整数(つまり、[0、250))を含む文字列Sです。前述のように、これらの整数はスクランブルされてランダムシーケンスが作成されます。区切り文字(「42、31、23、44」)やパディング0はありません(003076244029002)。問題は、例で説明されているとおりです。実際の問題には1つの解決策しかないことが保証されています。これらに対して複数のソリューションは許可されていません。 受賞基準: メモリ使用量が最速で最低の人が勝者になります。時間が結びつくという奇跡的なイベントでは、タイムブレーカーに使用されるメモリが少なくなります。可能であればBig Oをリストしてください! 例: 例1と2の範囲は[0、10) 例3と4の範囲は[0、30) (例1〜4はデモンストレーション用です。プログラムで処理する必要はありません。) 例5の範囲は[0、250) 1. 420137659 - Missing number => 8 2. 843216075 - Missing number => 9 3. 2112282526022911192312416102017731561427221884513 - Missing number => 9 4. 229272120623131992528240518810426223161211471711 - Missing number => 15 5. 11395591741893085201244471432361149120556162127165124233106210135320813701207315110246262072142253419410247129611737243218190203156364518617019864222241772384813041175126193134141008211877147192451101968789181153241861671712710899168232150138131195104411520078178584419739178522066640145139388863199146248518022492149187962968112157173132551631441367921221229161208324623423922615218321511111211121975723721911614865611197515810239015418422813742128176166949324015823124214033541416719143625021276351260183210916421672722015510117218224913320919223553222021036912321791591225112512304920418584216981883128105227213107223142169741601798025 - Missing …

15
自己完結型の数字のシーケンス
自己完結型の数値を正の整数として定義してみましょう。その数字は、それ自体に等しい長さのランで表示されます。つまり、10進数字d(0を除く)は、正確にdの長さの実行でのみ発生します。 仕事 次の3つの方法のいずれかを選択できます。 整数nを指定すると、n番目(0または1のインデックス付き)の自己完結型の数値を出力します。 整数nを指定すると、最初のn個の自己完結型の数値が出力されます。 シーケンスを無期限に印刷します。 例 133322は、3つの3の実行で3が表示され、1が単一であり、2の2の実行で2が発生するため、自己完結型の数値です。 一方、35553355はあるが、ので、ではありません5と3はそれぞれ5と3回発生し、彼らは隣接桁のランを形成しません。 44422があるため、自己完結型ではありません4が 3回のみ発生します。 12222333があるため、どちらかではありません2 4の実行に表示されて2の、そしてそれは、二つの2つの別々の実行として扱うことができない2さん。 当然のことながら、これはOEIS A140057であり、最初のいくつかの用語は次のとおりです。 1, 22, 122, 221, 333, 1221, 1333, 3331, 4444, 13331, 14444, 22122, 22333, 33322, 44441, 55555, 122122, 122333, 133322, 144441, 155555 これらの抜け穴はデフォルトでは禁止されていることに注意しながら、任意のプログラミング言語で標準メソッドのいずれかを使用して入力を取得し、出力を提供できます。これはコードゴルフなので、バイト単位の最短コード(すべての言語)が勝ちます。

22
水平ASCIIペットヘビの検証
最近、ASCIIペットのヘビの挑戦がいくつかありました(例えば、こちら) 0 0 0 0 0 000 00 0 00 000 0 0 000 0 0 0 00 0 000 この課題は、ランダムに生成された水平ペットスネーク(高さ5行、長さ30)を取得し、それを検証することです。 各列には1つしかありません 0 それぞれ0が0前後に「接続」されています(垂直方向に0または1行だけ間隔が空いています) 最終的な出力が可能trueか1蛇が有効である場合、またはfalseまたは0ヘビが無効な場合 編集-明確化 入力を想定します。 文字列です 「」、「0」、および「\ n」のみが含まれます 各行に正確に30文字あります 正確に5行あります すなわち、ヘビが接続されているかどうか、および浮遊チャーがないことを確認します。ヘビが印刷されている「キャンバス」を検証する必要はありません。

5
対称てんとう虫
前書き: てんとう虫について考えるとき、私たちは通常、黒い斑点を持つ赤または暗いオレンジ色のバグを考えます。ありますので、これは、本当の必要はありませんが、黒、赤/オレンジとてんとう虫発見、または全てのスポットなしにてんとう虫を、私たちは主にてんとう虫にこのアジアのてんとう虫のようなものを想像: 注意すべきもう一つのことは、てんとう虫のスポットがほぼ常に対称的であることです。そして、それがこの挑戦の出番です。 チャレンジ: 整数n(>= 0)が与えられた場合、対称スポットが両側で均等に分割された2つ以上のてんとう虫とともに、次のASCIIアートてんとう虫を1回または複数回出力します。 デフォルトのてんとう虫のレイアウトは次のとおりです。 _V_ /(@I@)\ / | \ | | | \ | / ''-!-'' の場合n=0、上記のテントウムシをそのまま出力します。 場合はn、ゼロよりも大きい場合、我々はどちらか小文字でアスキーアートのバグのスペースを埋めるo、または交換する|資本金の中心にO。目標はn、「空の」てんとう虫に変更を加えながら、対称的な出力(てんとう虫ごと)を生成し、できるだけ少ないてんとう虫を出力することです。 の有効な出力n=1は次のとおりです。 _V_ /(@I@)\ / O \ | | | \ | / ''-!-'' _V_ /(@I@)\ / | \ | O | \ | / ''-!-'' _V_ /(@I@)\ / | …

24
パレート分布をサンプリングする
パレート分布は、自然の中で多くのことをアップしてくる確率分布です。無限平均など、多くの特別なプロパティがあります。この課題では、この分布からサンプリングした数値を出力します。 パレート分布は、すべて1以上のx確率で1/x、以上であると定義されていますx。 したがって、この分布からサンプリングされた数値は、確率1で1以上、確率1で2以上、確率1/2で3以上、確率1/3で3以上、以上です11.4の確率で正確に1 / 11.4など。 この分布をサンプリングするので、プログラムまたは関数は入力を受け取らず、上記の確率で乱数を出力します。ただし、浮動小数点インプレッションのためにプログラムが上記の確率と完全に一致しない場合は、問題ありません。詳細については、チャレンジの下部をご覧ください。 (これは正確にはアルファ1および下限1のパレート分布と呼ばれます) 以下は、この分布からの10の例です。 1.1540029602790338 52.86156818209856 3.003306506971116 1.4875532217142287 1.3604286212876546 57.5263129600285 1.3139866916055676 20.25125817471419 2.8105749663695208 1.1528212409680156 それらのうちの5つが2未満であり、5が2を超えていることに注意してください。これは平均的な結果であるため、もちろんそれよりも高い場合も低い場合もあります。 答えは、浮動小数点型、実数型、または使用する他のものの限界まで正しい必要がありますが、少なくとも3桁の10進精度で数値を表現でき、最大1,000,000の数値を表現できる必要があります。何か問題がないかわからない場合は、お気軽にお問い合わせください。 これはコードゴルフです。 不正確さに関する詳細: 各範囲のために[a, b]、1 <= a < b試料は、その範囲内に入るであろう理想的な確率ということ、です1/a - 1/b。あなたのプログラムがその範囲で番号を生成確率はでなければなりません0.001の1/a - 1/b。Xがプログラムの出力である場合、が必要です|P(a <= X <= b) - (1/a - 1/b)| < 0.001。 で上記の規則を適用することにより、そのノートa=1とb十分に大きい、それはよりプログラムの必須出力数より大きいている場合であるか、または少なくとも確率0.999と1に等しいです。それ以外の時間は、クラッシュしInfinityたり、出力したり、他のことをしたりします。 フォーム1/1-xorの既存の提出物が1/xどこにxあるか、[0, 1)または(0, 1)orのランダムなフロートが[0, 1]すべてこの要件を満たすことは確かです。

10
フィボナッチのようなシーケンスの最小の初期数
正の整数入力Nが与えられると、2つの非負の数aとbを出力します。ここでa <bであり、数Nが繰り返し関係シーケンスの一部となる可能な最小の平均値を持ちます。 f(0) = a f(1) = b f(n) = f(n-2)+f(n-1) 場合には、平均以上の解決策があるとbが、その後、最小限であるあなたが出力すべき最低で1 B。 Nは、言語/システムの整数の代表的な範囲内にあると仮定できます。 テストケース N = 1 a = 0, b = 1 N = 15 a = 0, b = 3 N = 21 a = 0, b = 1 N = 27 a = 0, b = …

6
ユニバーサル整数シーケンスを作成する
定義 すべての有限整数シーケンスが連続したサブシーケンスとして含まれている場合、(無限)整数シーケンスをユニバーサルと呼びましょう。 換言すれば、整数配列は(1、2、...) 、各有限の整数シーケンスの場合にのみ場合に普遍的である(B 1、...、B N)、オフセットが存在するKように(K + 1が、…、a k + n)=(b 1、…、b n)。 たとえば、次の理由から、正の素数のシーケンスは普遍的ではありません。 負の整数、1、または合成数は含まれません。 3が含まれていますが、連続したサブシーケンス( 3、3、3)は含まれていません。 2と5が含まれていますが、連続したサブシーケンス( 2、5)は含まれていません。 それは連続したサブシーケンスが含まれているが(7、11、13) 、それは連続サブ配列が含まれていない(13、11、7) 。 仕事 選んで任意の単一のユニバーサル整数列を(1、2、...)と、以下の規則に遵守し、お好みのプログラミング言語でそれを実装。 完全なプログラムまたは機能を送信できます。 I / Oには3つのオプションがあります。 何も入力せずに、シーケンス全体を印刷または返す。 インデックス・テイクのnを入力し、印刷として、あるいは返すnと。 入力としてインデックスnを取得し、出力または出力(a 1、…、a n)します。 I / Oオプション2および3の場合、必要に応じて0ベースのインデックスを使用できます。 送信は確定的である必要があります。同じ入力で複数回実行する場合、同じ出力を生成する必要があります。 さらに、すぐに明らかでない限り、選択したシーケンスが普遍的であることを証明してください。あなたの証明は証明されていない推測に依存しないかもしれません。 標準のコードゴルフ規則が適用されます。バイト単位の最短コードが勝つように!

7
簡略化されたGoodsteinシーケンスを出力する
次のように記述されている場合、数値はbase-b簡略化されたGoodstein形式です。 b + b + ... + b + c, 0 < c ≤ b 番号の簡略化されたグッドシュタインシーケンスは、番号をベース1の簡略化されたグッドシュタイン形式で記述し、すべての1を2に置き換えて1を減算することから始まります。など、0に達するまで。 あなたのプログラムは、正整数の入力を受け取り、そのGoodsteinシーケンスを出力/印刷して終了します。プログラムは100未満の数値を処理する必要がありますが、妥当な時間内に終了しない場合があります。 たとえば、入力として3を指定すると、プログラムは出力するはずです(右側は単なる説明です) 1 + 1 + 1 | 3 = 1 + 1 + 1 2 + 2 + 1 | Change 1's to 2's, then subtract 1. (2 + 2 + 2 - …

9
電気グリッドを構築する
チャレンジ N個の都市が一直線に並んでいます。i番目の都市はA[i]、起点の右側に数キロメートルあります。2つの都市が同じ場所にあることはありません。 いくつかの発電所を備えた送電網を構築します。発電所は都市内に建設する必要があります。ただし、K発電所の建設は(<N)のみ許可されているため、発電所のない都市がいくつかあります。発電所のない都市ごとに、その都市と発電所がある最も近い都市との間にケーブルを構築する必要があります。 3時位置の都市がある場合たとえば、0, 1, 2で、そして唯一の都市を0発電所を持って、次の2本のケーブルから1構築する必要がある2の0から(2キロ)と他の1へ03キロの合計の長さを持っている(1キロ)、 。 与えられたK都市の位置(A)、あなたは、グリッドを構築するために必要なケーブルの最小キロを計算する必要があります。 テストケースの例 K = 1, A = [0, 2, 4, 6, 8] : 12 # build power plant in the city at position 4, total length = 4 + 2 + 0 + 2 + 4 = 12 K = 3, A = …

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