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

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

6
Quandle QuandaryエピソードI:有限カンドルの識別
与えられた行列がカンドルを表すかどうかを判断するプログラムを作成します。quandleは以下の公理に従う単一(非可換、非会合)操作◃を備えたセットです。 操作は閉じられます。つまり、a◃b = cは、セットの要素である場合a、常にセットのb要素です。 操作は、自己分散型です(a◃b)◃c = (a◃c)◃(b◃c)。 操作は右割り可能です:aおよびの任意のペアに対して、次のようなb単一の一意性cがあります。c◃a = b 操作はべき等です: a◃a = a 有限のカンドルは正方行列として表すことができます。以下は、5次カンドル(source)の例です。 0 0 1 1 1 1 1 0 0 0 3 4 2 4 3 4 2 4 3 2 2 3 3 2 4 n番目の行とm番目の列(0から始まる)にある値は、n◃mの値です。たとえば、このカンドルでは、4◃1 = 3。この行列から、カンドルプロパティの一部を簡単に確認できます。 この5x5マトリックスには値0〜4のみが表示されるため、閉じられます。 行列の対角が0 1 2 3 4であるため、べき等です。 列に重複値が含まれていないため、右分割可能です。(行は可能であり、通常はそうなります。) …

3
ラフティングの問題(ナップザックバリアント)
私からの最初のパズル、改善の提案を喜んで受け取った! シナリオは次のとおりです。あなたは急流ラフティング会社のマネージャーとして働いています。毎朝、予約のリストが表示され、ラフトロードに並べ替える必要があります。選択した言語でこれを行うプログラムまたは関数を作成します。 各ラフトには最大数のnクライアントが収容され、各予約は1 n人以上のグループ(包括的)です。次のルールを順守する必要があります。 グループを分割することはできません。一緒に予約した場合、全員が同じラフトにいなければなりません。 いかだの数は最小限に抑える必要があります。 上記の2つの規則に従って、グループはいかだの間で可能な限り均等に広げられなければなりません。 入力。 番号n(これは正の整数であると想定できます)、およびすべての予約のサイズ。言語がそのようなことをサポートしている場合、これは配列、リスト、または同様のデータ構造になります。これらはすべて1〜の正の整数になりnます。予約の順序は定義されておらず、重要でもありません。 出力。 いかだ積み荷にグループ化された予約番号のリスト。次のように、グループ化を明確に示す必要があります。 リスト、または配列の配列。 いかだごとのコンマ区切りリスト。各ラフト間の改行。 3番目のルールをどのように実装するかはユーザー次第ですが、これには、いかだの平均占有率を見つけ、それから可能な限り逸脱を最小限に抑えることが含まれます。ここにいくつかのテストケースがあります。 n Bookings Output 6 [2,5] [5],[2] 4 [1,1,1,1,1] [1,1,1],[1,1] 6 [2,3,2] [2,2],[3] 6 [2,3,2,3] [2,3],[2,3] 6 [2,3,2,3,2] [2,2,2],[3,3] 12 [10,8,6,4,2] [10],[8,2],[6,4] 6 [4,4,4] [4],[4],[4] 12 [12,7,6,6] [12],[7],[6,6] 標準ルールが適用され、最短のコードが優先されます。楽しむ! 編集済み; 3番目のルールを可能な限り均等に定義するための提案された方法。 いかだの数rが決定されると(2番目の規則に従い)、a予約を合計し、で割ることで平均占有率を計算できますr。各ラフトについて、を使用して平均占有率からの偏差を見つけることができますd(x) = abs(n(x)-a)。ここn(x)で、は各ラフトとの人数です1 <= x <= …

16
私はあなたにN番目の順列を与えます、あなたは私にNを与えます
入力:大文字のシーケンス(ASCII [65; 90])。これは、その文字のマルチセットのN番目 *辞書編集順列です。 *順列は0または1から番号が付けられます 出力: 10を底とする整数N ルールズ 重複する可能性があります (これが、このチャレンジとこのチャレンジの違いです ) 文字はASCII値の順に並べられます 未満または1に等しい長さの入力の場合、入力は、最初の順列であり、結果は0、または1それぞれ 最初の順列では、左端の文字の値が最も低く、右端の文字の値が最も高く、最初と最後の文字の間の文字シーケンスは、その文字のマルチセットの最初の順列です(再帰定義!) 最短エントリーが勝ちます 例 入力AABは出力を生成します0 入力ABAは出力を生成します1 入力BAAは出力を生成します2 入力ZZZは出力を生成します0 入力DCBAは出力を生成します23 編集 すべての順列を生成せずに入力を検索するソリューションを思い付くことができる人への追加の名誉。それはいくつかの挑戦です。

19
Steamユーザーの評判はどのくらいですか?[閉まっている]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 2年前に閉店。 前書き 蒸気に精通していない人-または少なくともこの特定の側面: 多くの場合、人々のプロフィールには、「+ rep _____」または「-rep _____」のいずれかのコメントが残されています。これらは、いくつかの理由で、コミュニティの誰かが良い評判か悪い評判かを示す非公式の手段です。このようなコメントは次のようになります。 +良い選手を代表する +担当者役立つ -repハッカー -rep詐欺師 仕事 プログラムは、合意に基づいた方法で入力を取得する必要があります。入力は、オプションの改行(\n)を含む文字列で構成されます。各行の先頭、'+rep 'または'-rep '存在する可能性があります。残りの行は破棄できます。行が'+rep 'またはで始まらない場合'-rep '(末尾のスペースに注意してください)、行は無視されます。 その後、プログラムは合計評価スコアを保持する必要があります。で始まり0、このスコアはで始まるすべての行で増加し、で始まるすべての行で'+rep '減少し'-rep 'ます。 この結果は、合意された方法で出力する必要があります。 テストケース Input: +rep fast trade +rep nice person -rep too good Output: 1 Input: -rep hacker -rep scammer -rep was mean Output: -3 Input: first i don't …

4
多項式を局所的に反転する
チャレンジ 多項式所定のp順序の実際の係数を有する1と程度n、別の多項式を見つけるq高々度にnなるように(p∘q)(X) = p(q(X)) ≡ X mod X^(n+1)、換言すれば、その結果p(q(X)) = X + h(X)ここhで任意の多項式ですord(h) ≥ n+1。多項式qはによって一意に決定されpます。 多項式のためにp(X) = a(n)*X^n + a(n+1)*X^(n+1) + ... + a(m)*X^mどこn <= mとa(n) ≠ 0、a(m) ≠ 0我々が言うnでオーダーのpとmある程度のp。 単純化:にp整数係数があると仮定できますa(1)=1(そしてp(X) = X + [some integral polynomial of order 2])。この場合q、積分係数もあります。 この単純化の目的は、浮動小数点数の問題を回避することです。ただし、説明のために非整数の例があります。 例 テイラー級数を考えるexp(x)-1 = x + x^2/2 + x^3/6 + x^4/24 …

9
バイナリツリーを列挙する
二分木 二分木は、3つのタイプのノードを持つツリーです。 子を持たないターミナルノード それぞれが1つの子を持つ単項ノード それぞれ2つの子を持つバイナリノード BNF(Backus–Naur形式)で与えられる次の文法でそれらを表現できます。 <e> ::= <terminal> | <unary> | <binary> <terminal> ::= "0" <unary> ::= "(1" <e> ")" <binary> ::= "(2" <e> " " <e> ")" この文法では、ノードは事前順序で指定され、各ノードは、子の数である数字で表されます。 モッツキン数 Motzkin番号(OEIS)(Wikipedia)には多くの解釈がありますが、1つの解釈は、nth Motzkin番号はnノードを持つ別個の二分木の数であるということです。Motzkin番号の表が始まります N Motzkin number M(N) 1 1 2 1 3 2 4 4 5 9 6 21 7 …

8
アルファベットを導く
アルファベットを導く 方向の配列を指定すると、方向は次のように定義されます。 NW N NE W . E SW S SE または、インデックスとして(上記の文字列の代わりにこれらのインデックスをルートに使用できます): 0 1 2 3 . 4 5 6 7 どちらの形式を選択してもかまいませんが、チャレンジでは両方をサポートする必要はありません。Aで始まる、描かれたパスを表す対応するアルファベット文字列を生成します。方向の数が25を超えることは決してZありません。言語の制限によりこれらの形式が機能しない理由を説明できない限り、他の入力形式は受け入れられません。これは、冗長な例を使用して説明する方が簡単です。 それでは、簡単な例を見てみましょう。 [E,SE,N,S,S,S,NW,W,N] or [4,7,1,6,6,6,0,3,1] 常にAで始まります。 A Bに東に行きます。 A-B 南東にCに行きます。 A-B \ C Dに北上します。 A-B D \| C 南に戻ってEに戻り、Cを上書きします。 A-B D \| E FとGの両方まで南に2サイクル進みます。 A-B D \| E | …

9
Cantorセット内ですか?
チャレンジ この課題では、特定の番号がカンターセットに含まれているかどうかを判断する必要があります。最初に、Cantorセットを定義しましょう。 最初に、0〜1の数字から始めます。この範囲外の数字は、Cantorセットには含まれません。ここで、数字を3つの等しい部分に分割しましょう:[0,1 / 3]、[1 / 3,2 / 3]、[2/3、1]。最初と最後の部分の範囲内にない数値は、カンターセットに含まれません。ここで、セグメント[0,1 / 3]および[2/3、1]に対してこのプロセスを繰り返します。それから残り物を繰り返します。あなたはこれを永遠にやり続けます。最終的に、残りのすべての番号はカンターセットに含まれます。以下に、最初の6つの反復の図を示します。 入力 2つの整数xとy。 0 < y < 2^15 0 <= x <= y 最大公約数xとyしない限り、1ですx == 0。 出力 x/yCantorセットにある場合は真実です。カントールセットにない 場合x/yは偽。 例 次に、Cantorセットに含まれる数値の例を見てみましょう。 1/3 -> true それは境界上にあり、境界は削除されません。 1/4 -> true 1/4セグメントの中央の3分の1にあることはありませんが、どちらの境界にもあることはありません。そのパスをたどると、実際にはセクションの最初と最後の3分の1にあることがわかります。 1/13 -> true 1/13 最初のセクション、最初のセクション、最後のセクションを交互に切り替えます。 1/5 -> false 1/5 上の図の3行目の1/9から2/9までの最初の空のブロックに分類されます。 その他のテストケース: …

17
ランダムピクセルポッキング
あなたのタスクは簡単です:黒の16px * 8pxの長方形(幅と高さ)のランダムなピクセルを白いピクセルに置き換えるプログラムを作成します。 穴は一様にランダムである必要があり、白いピクセルが挿入された16ピクセルx 8ピクセルの画像を出力する必要があります。 列ごとに1ピクセルのみを置換(合計16置換ピクセル) 入力は一切行わず、コンピューター上の他の場所に保存されている画像に依存することはできません。 これはコードゴルフなので、バイト数が最も短いプログラムが勝ちます!

3
ピエト(モンドリアン)のパズル
詳細については、このビデオをご覧になり、関連するシーケンスについてはA276523をご覧ください。 モンドリアンパズル(整数用n)は次のとおりです。 一致しない長方形をn*n正方形のグリッドに合わせます。最大の長方形と最小の長方形で可能な最小の違いは何ですか? 以下のために6、のための最適な違いがM(6)ある5、としてのように証明することができます。 ___________ | |S|_______| | | | L | | |_|_______| | | | | | |_____|___| |_|_________| (fig. I) 最大の長方形(L)の面積は2 * 4 = 8で、最小の長方形(S)の面積は1 * 3 = 3です。したがって、違いは8 - 3 = 5です。 現在、最適な解決策n > 44が見つかっていないことに注意してください。 あなたの仕事は、整数を与えられた(最適でない)ソリューションを含むモンドリアングリッドを生成するプログラムを作成することnです。 100〜150の数値でテストされます。各テストのスコアは、最大の長方形と最小の長方形の差になります。合計スコアは、100〜150のすべてのテストのスコアの合計です。 次のように出力を提示する必要があります。 {number} {grid} ここで、numberスコア(最大と最小の差)であり、gridいずれかです。 複数行の文字列、または 二次元リスト。 グリッドは、長方形の開始位置と終了位置を明確に表示する必要があります。 ルール: あなたのプログラムはあなたの答えの範囲内に収まらなければなりません。 …

7
テンキーの単語検索
1から999までの整数が与えられた場合、標準の数字パッドの 3〜3桁の数字1〜9の任意の場所で水平方向、垂直方向、または斜め方向に前方または後方に現れる場合、真理値を出力します。 789 456 123 数値が表示されない場合は、偽の値を出力します。 真実を出力するために必要な正確な65の数値は次のとおりです。 1 2 3 4 5 6 7 8 9 12 14 15 21 23 24 25 26 32 35 36 41 42 45 47 48 51 52 53 54 56 57 58 59 62 63 65 68 69 74 75 78 84 85 …

3
ジャガイモの皮をむく
これはジャガイモです: @@ @@@@ @@@@@@ @@@@@@ @@@@ @@ より一般的には、サイズNのジャガイモは次の形状として定義されます。 Nが偶数の場合、2個の中央@記号、4個の中央@記号、6 @個の中央@記号が、N個までの中央記号まで続きます。次に、N個の中央@記号に続いてN-2個の中央@記号が2まで続きます 。Nが奇数の場合、サイズNポテトは上記と同じ方法で生成されますが@、2個ではなく1個の記号で始まります。。 ジャガイモの皮をむくには、右上隅から開始@し、反時計回りに1ステップずつ標識を外します。たとえば、サイズ3のジャガイモの皮は次のようになります。 @ @@@ @@@ @ ​ @@@ @@@ @ ​ @@ @@@ @ ​ @@ @@ @ ​ @@ @@ ​ ​ @@ @ ​ ​ @ @ ​ ​ ​ @ ​ チャレンジ 整数入力が与えられると、そのサイズのジャガイモの皮をむくすべてのステップを表示するプログラムを書きます。 末尾の空白/改行は許可されます。 得点 これはcode-golfです。バイト単位の最短コードが優先されます。 サンプルテストケース …

7
ランダムな非減少シーケンスをサンプリングする
入力:コードに便利な任意の形式で指定された2つの整数nおよびk 出力 1〜nの範囲にあるk個の整数のランダムで減少しないシーケンス。サンプルは、1〜nの範囲の整数を持つk個の整数のすべての非減少シーケンスから均一に選択する必要があります。 出力は、便利な任意の妥当な形式にすることができます。 お気に入りのライブラリ/言語が提供する擬似ランダムジェネレータを使用できます。 整数n、k> 0と仮定できます。 例 n、k = 2と言います。非減少シーケンスは 1,1 1,2 2,2 各シーケンスには、出力される確率の1/3が必要です。 制限 コードは、k = 20およびn = 100の場合、数秒以内に実行する必要があります。 動作しないもの 1からnの範囲の各整数をランダムにサンプリングし、リストを並べ替えるだけでは、均一な分布は得られません。

13
ジッパー掛け算
前書き 新しい算術演算を定義しましょう。これをジッパー乗算と呼びます。。2つの非負整数をジッパー乗算するには、長さを一致させるために先行ゼロを追加し、対応する10桁の数字を乗算し、結果に先行ゼロを追加して2桁の数字を取得し、それらを連結し、最後に先行ゼロをドロップします。 A = 1276およびB = 933024の例を次に示します。 1. Add leading zeros A = 001276 B = 933024 2. Multiply digit-wise A = 0 0 1 2 7 6 B = 9 9 3 0 2 4 -> 0 0 3 0 14 24 3. Pad to 2 digits -> 00 …

11
エミプスを見つけよう!
エマープがある非パリンドローム、反転したときに、また、素数であるプライム。 基数10のEmirpsのリストは、OEISにあります。最初の6つは次のとおりです。 13, 17, 31, 37, 71, 73 ただし、反転ルールのため、emirpsは各ベースで異なります。たとえば、最初の6つのバイナリemirpsは次のとおりです。 Bin | 1011, 1101, 10111, 11101, 101001, 100101 Dec | (11 , 13 , 23 , 29 , 37 , 41 ) ...また、16進数では次のとおりです。 Hex | 17, 1F, 35, 3B, 3D, 53 Dec | (23, 31, 53, 59, 61, 83) おもしろ情報:すべての数字が回文であるため、単項にエミールはありません。 チャレンジ …

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