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

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

11
ビットフリップ耐性複合数
時には、プログラムを作成するときに、何らかの理由で暗号化などの素数を使用する必要があります。場合によっては、合成番号も使用する必要があると思います。場合によっては、少なくともここPPCGでは、プログラムが任意の変更に対処できる必要があります。また、興味深いPPCGの質問を作成するために便利に考案された状況では、おそらくあなたが使用している数字でさえ、腐敗に耐えなければならない… 定義 複合番号は、それが1 Aを超える2つのより小さな整数の積、すなわち、素数でない整数≥4 bitflip性複合数次のように定義されています。あなたはそれを書くならば、それは、のための複合正の整数です可能な最小ビット数のバイナリでは、その数値から任意の1ビットまたは2ビットを変更できますが、その数値はまだ合成されています。 例 たとえば、数値84を考え1010100ます。バイナリでは、それがです。以下は、それと2ビット以内に異なるすべての数値です。 0000100 4 2×2 0010000 16 4×4 0010100 20 4×5 0010101 21 3×7 0010110 22 2×11 0011100 28 4×7 0110100 52 4×13 1000000 64 8×8 1000100 68 4×17 1000101 69 3×23 1000110 70 7×10 1001100 76 4×19 1010000 80 8×10 1010001 81 9×9 1010010 …

12
n番目の分子
最初に分母、次に分子の順に並べることで、すべての有理数0 <r≤1のリストを作成できます。 1 1 1 2 1 3 1 2 3 4 1 5 1 2 3 4 5 - - - - - - - - - - - - - - - - - 1 2 3 3 4 4 5 5 5 5 6 6 7 7 …

2
最速のミニフラッククイン
ミニフラックはのサブセットである脳高射砲の言語、<>、<...>および[]操作が禁止されています。厳密に言えば、次の正規表現と一致してはなりません。 .*(<|>|\[]) Mini-Flakは、Brain-Flakの最小の既知のチューリング完全サブセットです。 少し前、私は作ることができたクワインの中でミニフラックが、宇宙の一生の間に実行するには遅すぎました。 それで、あなたへの私の挑戦は、より速いQuineを作ることです。 得点 コードをスコアリングするに@cyは、コードの最後にフラグを付け、そのフラグを使用してRubyインタープリターで実行します(オンラインで試すにはrubyインタープリターを使用し-dます)。スコアは次のようにSTDERRに出力されます。 @cy <score> これは、プログラムが終了するまでのサイクル数であり、実行間で同じです。各サイクルの実行にはほぼ同じ時間がかかるため、スコアはプログラムの実行にかかる時間と直接相関する必要があります。 Quineが長すぎてコンピューターで適切に実行できない場合は、手動でサイクル数を計算できます。 サイクル数の計算はそれほど難しくありません。サイクル数は、実行されるモナドの数の2倍に実行されるニラドの数を加えたものに相当します。これは、すべてのniladを単一の文字に置き換え、実行される文字の総数をカウントすることと同じです。 スコアリングの例 (()()()) モナドが1つ、ニラドが3つあるため、スコアは5です。 (()()()){({}[()])} ループには6モナドと2ニラドのスコア8が含まれるが、ループは3回実行されるため、スコアを3回カウントします。 1*5 + 3*8 = 29 必要条件 あなたのプログラムは... 少なくとも2バイトである -Aフラグを使用してBrain-Flakで実行されると、ソースコードを出力します 正規表現と一致しません .*(<|>|\[]) ヒント クレーン、高射砲のインタプリタは、より高速なRubyインタプリタより断定的であるが、いくつかの機能を欠いています。最初にCrane-Flakを使用してコードをテストし、それが機能することがわかったらルビーインタープリターでスコアを付けることをお勧めします。また、プログラムをTIOで実行しないことを強くお勧めします。TIOはデスクトップインタープリターよりも遅いだけでなく、約1分でタイムアウトします。TIOがタイムアウトする前にプログラムを実行するのに十分な低得点を獲得できた場合、非常に印象的です。 [(...)]{}と(...)[{}]と同じように動作する<...>が、制限されたソースの要件を壊しません この課題への取り組み方を知りたい場合は、Brain-FlakとMini-Flak Quines をチェックしてください。

30
一定の乱数のソースを使用して、0〜nの間の乱数を選択します
仕事 正の整数で考えるとn以下の2^30コードは、あなたが選択した任意の方法で入力として必要があり、指定された出力ランダムの間の整数0とn、包括的に。生成する数値は、ランダムに均一に選択する必要があります。つまり、0toの各値はn等しい確率で発生する必要があります(「規則と警告」を参照)。 ルールと警告 あなたのコードは、あなたの言語または標準ライブラリに組み込まれた、一様にランダムであると主張する任意の乱数ジェネレータが実際に一様であると仮定できます。つまり、使用しているランダムソースの品質を心配する必要はありません。しかしながら、 使用しているランダムソースが均一である場合、コードはから0まで均一なランダム整数を正しく出力することを確立する必要がありますn。 組み込みまたはライブラリのランダム関数を呼び出すときの引数は定数でなければなりません。つまり、入力値から完全に独立している必要があります。 コードは、終了が保証されているのではなく、確率1で終了する場合があります。 ノート randInt(0,n) 組み込み関数またはライブラリ関数への引数として入力を受け取るため、無効です。 rand()%nうではない一般的には一様乱数を与えます。betsegによって与えられた例として、場合intmax == 15やn = 10、あなたが取得する多くの可能性が高くなります0-5より6-10。 floor(randomfloat()*(n+1)) また、0と1の間の異なる浮動小数点値の有限数により、一般に均一な乱数を与えません。

21
これらの数字のみを含む最小のn桁の素数
n数字を含む最小の素数を生成する必要があり、リストに指定された数字のみが含まれますk。 例: 入力: 4 1 2 そのために4は、数字1を含む最小の素数を生成する必要があり、その素数には数字とのみが含まれている必要があります2。 出力: 2111 入力: 10 0 4 7 出力: 4000000007 入力: 6 5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5 出力: 115151 入力は常に指定した形式であることが保証でき、無効な入力(入力が1桁であるなどn、k。 入力に対するそのような解決策が存在しない場合、プログラムは次のいずれかを実行できます。 印刷する banana エラーを投げる 永遠に走る 他に何か これはcode-golfなので、最短のコードを目指してください。 入力は、指定した任意の形式にすることができます。たとえば、入力を次のいずれかにしたい場合は問題ありません。 …

2
任意の長方形を配置してスペースを埋める
これらの長方形は長方形のスペースを埋めることができますか? 長方形の束が与えられると、長方形のスペースを埋めるように配置できるかどうかを尋ねられます。 スペック 任意のm x n長方形の束が与えられた場合; 0 <= m, n <= 1000、穴や重なりのない長方形の領域を正確にカバーするように配置できるかどうかを判断します。長方形は回転できず、各長方形は一度しか配置できません。 入力 この入力は、2空間次元の何らかのリストを提供する限り、非常に柔軟です。たとえば、次の両方が有効です。 スペースで区切って、リターン 1 2 1 5 4 5 3 6 寸法表 [[1, 2], [1, 5], [4, 5], [3, 6]] 出力 true / false、0/1、T / F、True / Falseなどのあらゆる種類のtrue / false値。あまり明確でない出力メソッドを使用する場合は、回答で指定してください。 例 テストケース1 入力: 1 1 1 5 2 …

16
ベイビートークをデコード!
赤ちゃんが口を開くとき、彼らはただちらほらを吐いているだけではありません。彼らは実際、非常に先進的で大人に耐える暗号で話しています... ベビートーク暗号 赤ちゃんが話すとき、それは、gogooa gagooook aagaaoooy それぞれの単一スペースで区切られたセクションがキャラクターを表すように見えるかもしれません(したがって、上の例は3キャラクターを表します)。 セクションを解読するには、セクションに含まれるAsとOsの数を数える必要があります。ただし、他の母音に隣接するもののみをカウントします。たとえば、「gag」のAはカウントされませんが、「gaog」のAとOはカウントされます。 上記の例を数えると次のようになります。 Section | Num Os | Num As gogooa | 2 | 1 gagooook | 4 | 0 aagaaoooy | 3 | 4 次に、これらの値を使用して、入力をPolybius正方形のプレーンテキストに変換します。これは、英語のアルファベットを5x5で表したもので、「J」は省略されています(ベビートークでは、0カウント規則がテーブルに適用されることに注意してください)。 0 1 2 3 4 0 A B C D E 1 F G H I K 2 L …

19
ソート可能な年を見つける
2013年には興味深い特性がありました。ソートされたとき、数字は連続しています(0123)。このタイプの数値をソート可能な数値と呼びましょう。ソート後、10進数が連続する負でない整数です。残念ながら、これは2031年まで、その後2103年までは発生しません。あなたの課題は、標準的な方法で負でない整数が与えられたときに、次のソート可能な数値を出力または返すプログラムまたは関数を書くことです。 ルール 入力と出力は基数10でなければなりません。 出力は、任意の妥当な形式(数値リテラル、文字列リテラル、単一項目配列など)になります。 コードは、98764までのすべての入力に対して1分以内に適切な出力を生成する必要があります。 テストケース 0 -> 1 1 -> 2 9 -> 10 10 -> 12 11 -> 12 99 -> 102 233 -> 234 234 -> 243 243 -> 312 2016 -> 2031 2031 -> 2103 2103 -> 2130 2130 -> 2134 2134 -> 2143 9876 -> …

8
配列を視覚化する
任意の深さの配列を指定して、+-|各サブ配列の周囲の境界線でその内容を描画します。これらは、プラス、マイナス、および垂直パイプのASCII文字です。 たとえば、配列がの場合[1, 2, 3]、描画 +-----+ |1 2 3| +-----+ のようなネストされた配列の場合[[1, 2, 3], [4, 5], [6, 7, 8]]、draw +-----------------+ |+-----+---+-----+| ||1 2 3|4 5|6 7 8|| |+-----+---+-----+| +-----------------+ のような不規則な配列の場合[[[1, 2, 3], [4, 5]], [6, 7, 8]]、draw +-------------------+ |+-----------+-----+| ||+-----+---+|6 7 8|| |||1 2 3|4 5|| || ||+-----+---+| || |+-----------+-----+| +-------------------+ 描画後、より多くのスペースがあることに注意してください[6, …


26
整数のデジタル硬度
整数のデジタル硬さを見つけるには、そのバイナリ表現を取得し、先頭と末尾1がで始まるか終わるまで削除できる回数をカウントし0ます。削除されたビットの総数は、デジタル硬度です。 これは非常に冗長な説明です。実際の例で説明しましょう。 この例では、番号3167を使用します。バイナリでは、これは次のとおりです。 110001011111 (バイナリへの変換中に、先行ゼロを必ず削除する必要があることに注意してください) で始まったり終わったりしない0ため、1ペアのビットを削除します。 1 1000101111 1 そしてもう一つ: 11 00010111 11 しかし、最初は0であるため、もう1ペアを削除することはできません。合計で4ビットが削除されたため、4は3167のデジタル硬度です。 ただし、正のnに対して2 n -1(つまり、バイナリ表現のみを含む)として記述できる数値の場合、0には到達しないため、すべてのビットを削除できます。これは、硬度が単に整数のビット長であることを意味します。1 チャレンジ あなたの仕事は、負でない整数を与えられてn >= 0そのデジタル硬度を決定するプログラムまたは関数を書くことです。 I / Oを実行する完全なプログラム、または結果を返す関数を送信できます。送信はn、言語の標準整数範囲内の値に対して機能する必要があります。 テストケース これらのいずれかが正しくない場合、または追加するエッジケースを提案する場合は、私に通知してください。 0 -> 0 1 -> 1 8 -> 0 23 -> 2 31 -> 5 103 -> 4 127 -> 7 1877 -> 2 …

10
4ウェイ交差点ジェネレーター
以下は、4方向の交差点のASCIIアートです。 | | | | | | | | | | | | | -----+-----+----- | | - - -| |- - - | | -----+-----+----- | | | | | | | | | | | | | (水平道路の高さが3行で、垂直道路の幅が5列であることに注意してください。これは、四角形のフォントのために、審美的な理由からです。) あなたの課題は、このASCIIアートを作成することです。ただし、ご存知のとおり、すべての交差点にすべての方向に走行する道路があるわけではありません。この特定の交差点は行くがNESW、いくつかの交差点は行くかもしれない、例えばNW: | | | | | | | | | …

28
ASCIIテーブルをASCIIテーブルとして再作成します
コードゴルフをしている間、特定の文字のASCII値が何であるかを知りたいと思うでしょう。印刷可能なすべてのASCII文字をすばやく検索するための私のお気に入りのリソースの1つは、ASCIItable.comです。これには、印刷可能なASCII文字とその値だけでなく、印刷できない文字と拡張文字、および16進数、8進数、HTMLの値も表示する、本当に素晴らしい画像があります。 今日の課題は、そのASCIIテーブルをイメージではなくASCIIテーブルとして再作成することです。物事を簡単にするために、制御文字(32未満の文字)は使用せず、10進値と文字のみを表示します。言い換えれば、あなたの課題は、次のテキストを印刷または返すフルプログラムまたは関数を書くことです。 Dec Chr | Dec Chr | Dec Chr ---------------------------------- 32 Space | 64 @ | 96 ` 33 ! | 65 A | 97 a 34 " | 66 B | 98 b 35 # | 67 C | 99 c 36 $ | 68 D | 100 …

9
できるだけ早くパーマネントを計算します
課題は、行列のパーマネントを計算するために可能な限り速いコードを書くことです。 永久n行列のn行列A=( ai,j)は以下のように定義されます ここでS_nのすべての順列の集合を表します[1, n]。 例として(wikiから): この質問では、行列はすべて正方形で、値-1と1その中のみを持ちます。 例 入力: [[ 1 -1 -1 1] [-1 -1 -1 1] [-1 1 -1 1] [ 1 -1 -1 1]] 永久: -4 入力: [[-1 -1 -1 -1] [-1 1 -1 -1] [ 1 -1 -1 -1] [ 1 -1 1 -1]] 永久: 0 …

1
Android Lockパターンを把握する
友達が自分のパスワードをAndroidスマートフォンに入力しているのを見たとしましょう。彼らがどのようにパターンを作ったかは覚えていませんが、パターンがどのように見えるかは覚えています。あなたがあなたであるという懸念の友人であることは、彼らのパスワードがどれほど安全であるかを知りたいです。あなたの仕事は、特定のパターンを作成できるすべての方法を計算することです。 Androidパターンの仕組み パターンはノードの3x3グリッドに描かれます。パターンでは、画面から指を離さずに一連のノードにアクセスします。訪問する各ノードは、エッジによって前のノードに接続されます。留意すべき2つのルールがあります。 1つのノードに複数回アクセスすることはできません エッジは未訪問のノードを通過できません 通常、実行するのは非常に難しいため、実際のAndroidロックの組み合わせではあまり一般的ではありませんが、Knightのように移動することができます。つまり、一方の側から隣接していないコーナーに移動したり、反対側に移動したりすることができます。このような動きを採用したパターンの2つの例を次に示します。 これが実行されているアニメーションGifです。 パターンを解く 典型的なパターンは次のようになります。 このような単純なパターンでは、2つの方法でパターンを描画できます。2つのルーズエンドのいずれかから開始し、強調表示されたノードを介してもう一方に移動できます。これは多くのパターン、特に人間が通常使用するパターンに当てはまりますが、すべてのパターンに当てはまるわけではありません。 次のパターンを検討してください。 すぐに認識できる解決策が2つあります。左上から始まるもの: そして、下中央から始まるもの: ただし、線が選択されると、ポイントを通過することが許可されるため、上部中央から始まる追加のパターンがあります。 この特定のパターンには3つのソリューションがありますが、パターンには1〜4のソリューションがあります[要出典]。 それぞれの例を次に示します。 1。 2。 3。 4。 I / O ノードは、0から9までの整数、それらに相当する文字列、またはaからi(またはAからI)の文字として表すことができます。各ノードには、これらのセットのいずれかからの一意の表現が必要です。 ソリューションは、ノード表現を含む順序付けられたコンテナで表されます。ノードは、通過するのと同じ順序で並べる必要があります。 パターンは、ノードのペアの順序付けられていないコンテナで表されます。各ペアは、ペアの2つのポイントを接続するエッジを表します。パターン表現は一意ではありません。 パターン入力を標準入力メソッドを介して入力として受け取り、標準出力メソッドを介して同じパターンを作成するすべての可能なソリューションを出力します。 各入力には少なくとも1つのソリューションがあり、少なくとも4つのノードを接続すると想定できます。 希望する場合、または言語の選択により強制される場合は、順序付けられていないコンテナの代わりに順序付けされたコンテナを使用することを選択できます。 テストケース ノードを次のパターンで配置します。 0 1 2 3 4 5 6 7 8 ましょう{...}、順不同容器で[...]注文した容器であり、(...)ペアこと。 次の入力と出力は一致する必要があります {(1,4),(3,5),(5,8)} -> {[1,4,3,5,8]} {(1,4),(3,4),(5,4),(8,5)} -> {[1,4,3,5,8]} {(0,4),(4,5),(5,8),(7,8)} -> …

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