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

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

12
素数指数を隣接するものと交換する
(ビットを隣人と交換することについての私の質問に続きます。) 仕事 正の整数x =(2 a ・3 b)・(5 c ・7 d)・(11 e ・13 f)・…が与えられた場合、この素因数分解の指数を連続する素数ペアごとに交換して得られた整数を出力します。y =(2 b ・3 a)・(5 d ・7 c)・(11 f ・13 e)・… OEISのA061898。これはcode-golfなので、最短のプログラム(バイト単位)が勝ちです! テストケース 1 -> 1 2 -> 3 3 -> 2 10 -> 21 37 -> 31 360 -> 756 12345 -> 11578 67895678 -> 125630871
13 code-golf  primes 

3
私は何人の14ersに登りましたか?
登山の用語では、「14er」は14,000フィート以上の標高を持つ山です。ただし、別の違いがあります。ピークが14erとしてカウントされるためには、300フィート以上の「地理的突出」も必要です。つまり、ある14erから別の14erに移動するには、少なくとも 300フィート下がってから再び上昇する必要があります。この例を見てください。ライン1は14,000フィートとしてカウントされ、各ラインは100フィートとしてカウントされます。 /\__/\ / \ / \ 現在、これらのピークの両方には、カウントするのに十分な標高がありますが、2つの別個のピークとしてカウントするのに十分な標高の低下はありません。したがって、これらの1つは14erとしてカウントされ、もう1つは単に「部分的なピーク」です。次に、2つのピークが2つの別個の14erとしてカウントされる例を示します。 /\ /\ / \ / \ / \/ \ / \ また、2人の14erの間で減少の部分的なピークがあります。最後の山脈のわずかに変更されたバージョンは次のとおりです。 /\ /\ / \/\ / \ / \/ \ / \ この山岳地帯は2つの14erとしてもカウントされます。 山岳地帯のascii-art表現を取るプログラムまたは関数を作成し、14人の人がその範囲内にいることを返す必要があります。入力は、2Dの文字配列、改行を含む文字列、またはその他の区切り文字を含む文字列など、最も便利な形式で入力できます。すべての入力には文字のみが含まれ、/\_各行の長さは同じであると仮定できます(末尾のスペースを含む)。また、山脈はa /またはaで左下隅から始まると仮定することもでき_ます。 山の最後のセクションが一番下の行にない場合、山はその後しか減少しないと仮定できます。たとえば / / / 単一の14erとしてカウントされます。 無効な山脈を処理する必要はありません。 サンプルI / Oは次のとおりです。 /\___/\_ / \ /\ / \ / …

8
マトリックス三角法
前書き 二つの最も一般的な三角関数、sine及びcosine(又はsinおよびcos短いため)は、行列値の関数であるように拡張することができます。マトリックス値のアナログを計算する1つの方法は次のとおりです。 次の2つの重要な三角関数を検討してください。 これらのIDを使用して、我々はのために以下の式を導くことができるsinとcos: 行列の指数はすべての正方行列に存在し、次式で与えられます。 ここで、A 0は恒等行列であり、Iと同じ寸法とA。行列指数を使用すると、これらの2つの三角関数(および他のすべての三角関数)は、行列の関数として評価できます。 チャレンジ 正方行列Aが与えられ、sin(A)との値を出力しますcos(A)。 ルール 入力および出力は、便利で合理的な形式(2D配列、言語のマトリックス形式など)になります。 1つのプログラム、2つの独立したプログラム、1つの関数、または2つの関数を作成できます。2つの関数を記述する場合、それらの間でコードを共有できます(インポート関数やヘルパー関数など)。 入力行列の値は常に整数です。 浮動小数点の不正確さの結果として、ソリューションに精度の問題がある場合があります。言語に魔法のような無限精度の値がある場合、ソリューションは完全に機能するはずです(無限の時間やメモリを必要とするという事実を無視して)。ただし、それらの魔法の無限精度の値は存在しないため、精度の制限に起因する不正確さは許容されます。この規則は、出力に特定の精度を要求することに起因する複雑さを回避するために設けられています。 マトリックス引数の三角関数(双曲線三角関数を含む)を計算する組み込み関数は使用できません。他の行列組み込み関数(乗算、べき乗、対角化、分解、行列指数など)が許可されています。 テストケース フォーマット: A -> sin(A), cos(A) [[0]] -> [[0]], [[1]] [[0, 2], [3, 5]] -> [[-0.761177343863758, 0.160587281888277], [0.240880922832416, -0.359709139143065]], [[0.600283445979886, 0.119962280223493], [0.179943420335240, 0.900189146538619]] [[1, 0, 1], [0, 0, 0], [0, 1, 0]] -> [[0.841470984807897, -0.158529015192103, …

8
ローマ数字に変換!
あなたの仕事は、与えられた正の整数をアラビア数字からローマ数字に変換することです。 4000を数えると事態は難しくなります。 ローマ人は、シンボルの上に線を追加して、そのシンボルをで乗算することでこれを行いました1 000。ただし、上線はASCIIでは正確に表示できません。また、シンボルを乗算する二重上線があり1 000 000、次にシンボルを乗算する三重上線1 000 000 000などがあります... そのため、括弧を使用して上線を置き換えることにしました。 シンボルは括弧内に個別に配置できます。たとえば、(VI)と(V)(I)は両方ともの有効な表現です6 000。(V)M6000の有効な表現でもあります。 (I)はを表す有効な方法です1 000。 テストケース Input: 1 Output: I Input: 2 Output: II Input: 3 Output: III Input: 4 Output: IV Input: 15 Output: XV Input: 40 Output: XL Input: 60 Output: LX Input: 67 Output: LXVII Input: 400 Output: …

13
フィボナッチ製品
正のフィボナッチ数の一意の合計として、0より大きい数を分解できます。この質問では、可能な最大の正のフィボナッチ数を繰り返し減算することでこれを行います。例えば: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 ここで、フィボナッチ積を上記と同じリストと呼びますが、加算は乗算に置き換えられます。たとえば、f(100) = 89 * 8 * 3 = 2136。 正の整数nを指定して、その数のフィボナッチ積を返すプログラムまたは関数を作成します。 テストケース: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

21
配列を実行する
「配列をウォークスルーする」というイディオムをよく耳にしますが、これは「次の配列に関数をマッピングする」という意味です。しかし、私はそれを行う必要があります(今!)ので、アレイを実行してほしいです。 どうやって走るの? あなたの後ろにオオカミの野生のパックがあると想像してください 配列を実行することは、要素をスキップできることを除いて、配列をたどることに似ています。はい、それは時々乱雑ですが、(一般的に)動作します。「どの要素がスキップされますか?」と尋ねることができます。さて、これはランダムに行われます。アレイを実行してみましょう! Letをe現在の要素にします。 でrandomランダムフロートを生成しましょう[0,1)。の場合random() < 0.5、次の要素に進み、ステップ1に進みます(スキップして残りの(理想的に)等しいチャンスである限り、他の手段で数値を生成できます。たとえば、 2メンバーで設定し、結果に基づいてアクションを実行します。) そうしないと、機能を実行するfにはe。 目的 いずれかの配列/リスト/文字列Aと数値Kを指定すると、Kアクセスされた各メンバーに追加して配列を実行します。この配列を出力/返します。Aには非負の整数のみが含まれ、非負の整数Kのみになります。これはcode-golfであるため、バイト単位の最短プログラムが優先されます。 テストケース(例) K, A => possible K' [1, 2, 3, 4], 0 => [1, 2, 3, 4] [1, 2, 3, 4], 1 => [1, 3, 3, 5] [0, 0, 0, 0], 2 => [2, 0, 0, 2]

5
円錐曲線を特定する
2次元平面上の5つの異なる点が与えられた場合、点によって形成される円錐曲線のタイプを決定します。出力は、のいずれかでなければならないcircle、hyperbola、ellipse、またはparabola。 ルール ポイントは一般に線形の位置にあり、3つのポイントが同一線上にないことを意味します。したがって、それらを通過する円錐は一意になります。 5点の座標は、-10〜10の10進数です。 decimal / float値の精度は、言語のネイティブfloat / decimal型の精度である必要があります。言語/データ型が任意精度の場合、小数点以下12桁を必要な最大精度として使用し、ゼロに丸めます(例:)1.0000000000005 == 1.000000000000。 出力の大文字小文字は関係ありません。 ellipse円錐セクションが実際に円である場合の出力は許可されていません。すべての円は楕円ですが、最も具体的な円を出力する必要があります。 浮動小数点の不正確さと精度について: 浮動小数点の不正確さの問題が邪魔にならないように、これをできる限り単純にしようとしています。目標は、データ型がfloat / doubleではなく「魔法の無限精度値」であった場合、すべてが完全に機能することです。しかし、「魔法の無限精度の値」は存在しないため、値が無限精度であると想定するコードを記述し、浮動小数点の不正確さの結果として生じる問題はバグではなく機能です。 テストケース (0, 0), (1, 5), (2, 3), (4, 8), (9, 2) => hyperbola (1.2, 5.3), (4.1, 5.6), (9.1, 2.5), (0, 1), (4.2, 0) => ellipse (5, 0), (4, 3), (3, 4), (0, 5), …
13 code-golf  math 

13
中間の分数
中間の分数 チャレンジ: 少なくとも3つの入力を受け取るコードを作成する必要があります。2つの整数と「分数表現」-分数の増分を表す言語に適したタイプ)。文字列を選択した場合、入力は「1/4」になるか、2つの追加整数入力またはタプルまたはw / eを選択できます。 入力はどこでも合理的(STDIN、関数の引数、ファイルからなど)である可能性があり、出力(STDOUT、関数の戻り値、ファイルへなど)も可能です ルール: 入力「分数」は常に1未満の有効な分数です。例「1/4」 2番目の入力整数は、常に最初の整数よりも高い値になります。つまり、最初の入力整数は常に2番目の入力整数よりも低い値になります。 入力整数は負の値にすることができます。 出力される端数は可能な限り減らす必要があります(簡略化) コードは、入力分数の増分で2つの数値の間のすべての「分数ステップ」を出力する必要があります。 コードは、ここに記載されているプログラムまたは関数でなければなりません 例1: 入力: -2,3,"1/2" 出力: -2 -3/2 -1 -1/2 0 1/2 1 3/2 2 5/2 3 例2: 入力: 1,2,"2/3" 出力: 1 5/3 2 または 1 4/3 2 注:カウントはどちらの方向からでも開始できます(@Megoに感謝) これはcode-golfであるため、バイト単位の最短回答が優先されます。

3
箱にらせんを描く
この幾何学的ならせんは複雑に見えますが、描くのはかなり簡単です。次のボックスを使用してください。 ボックスの角と次の角の上の設定距離を反時計回りに直線で引きます。 このパターンを内側に向けて、常に次の行の角から設定距離だけ離れたままにします。ここにさらにいくつかの行があります。 ご覧のとおり、パターンが継続すると、スパイラルが中心に近づき、描画するボックスが回転し始めます。角度に関係なく、距離は一定のままであることに注意してください。 チャレンジ インスピレーション(また、このコンセプト<3を紹介してくれた素晴らしい人にも感謝します) 1から25までの数値(おそらく小数)入力が与えられたら、このパターンを使用するディスクに画像を書き込むか、画面に出力を表示します。各コーナーからの距離は、ボックスの最初の辺の距離を入力で割ったものです。指定したコーナーからの距離が次の辺の長さより長くなるまで、パターンを内側に向けて続けます。 ルール このスパイラル作成にはビルトインを使用できませんが、画像処理ビルトインを使用できます。 ディスクに書き込む場合、.jpg、.gif、.tiff、.pbm、.ppm、および.pngのいずれかの画像を出力する必要があります。 最初の辺の長さは少なくとも500ピクセルでなければなりません。 最初のコーナーは、どちらを選択してもかまいません。 いつものように、標準の抜け穴は許可されていません。

6
与えられた長さのマジックナンバー
プログラムは(n説明のために)入力を受け取り、n繰り返し桁のない数字の長さのすべての順列を出力する必要があります。ここで、インデックスの前後の各数字は、数字の位置で割り切れます。 ここでマジックナンバーについて読むことができます。 ルール: 1 <= n <= 10 数字を繰り返すことはできません 先頭の0が存在する必要があります(該当する場合) 介して第1 x(1等の最初の文字で始まる)番号の桁目で割り切れなければならないx、すなわちで、30685、31で割り切れる、302で割り切れるが、3063で割り切れる、30684で割り切れる、及び306855によってdivislbeあります。 プログラムは、整数を入力として(コマンドラインから、関数の引数などとして)受け取り、ルールを満たすすべての順列を出力する必要があります。 出力は1つ以上の空白文字で区切る必要があります 順列はゼロで始まる場合があります(したがって、技術的には魔法の数字ではありません)。 出力の順序は関係ありません 予期しない入力を処理する必要はありません バイト単位の最小文字が勝ちます 例 与えられた1: 0 1 2 3 4 5 6 7 8 9 与えられた2: 02 04 06 08 10 12 14 16 18 20 24 26 28 30 32 34 36 38 40 …

1
反復移動平均
リストがある場合、リストを言うと、リスト[9, 2, 4, 4, 5, 5, 7]全体で移動平均を行うことができます。 たとえば、3つの要素のウィンドウを取得し、各要素を次のようなウィンドウに置き換え[[9], [9, 2], [9, 2, 4], [2, 4, 4], [4, 4, 5], [4, 5, 5], [5, 5, 7]]ます[9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]。 これまでのところ非常に簡単です。しかし、これについて気づくことができることの1つは、移動平均を取ることでリストを「滑らかにする」ことです。だから、これは疑問を投げかけます:リストを「十分に滑らかにする」ために移動平均を取る必要があるのは何回ですか? あなたのタスク 浮動小数点数のリスト、整数ウィンドウサイズ、および浮動小数点数を指定すると、その浮動小数点数より小さい標準偏差を得るために移動平均を取る必要がある回数を出力します。知らない人のために、標準偏差は、一連のデータがどれだけ滑らかでないかを測定し、次の式で計算できます。 たとえば、前のリストとの最大stddevを使用すると、次のような反復が.5得られ8ます。 [9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667] [9.0, 7.25, 6.5, 4.6111111111111116, 4.2222222222222223, 4.1111111111111107, 4.8888888888888893] [9.0, …

11
ダブルデューティー・クイン:quine!dlroW、olleH
実行時に独自のソースコードを出力するプログラムを作成します。簡単そうですね。 キャッチは、ソースコードが逆になったときに、プログラムが「Hello、World!」を出力する必要があることです。正確に、引用符なし。 これはコードゴルフであるため、バイト数が最も少なくなります。 編集:あなたの馬は適切な馬でなければなりません。

6
トーナメントの王は誰ですか?
バックグラウンド ラウンドロビントーナメントを考えてみましょう。各トーナメントでは、各競技者が他のすべての競技者に対して1つのゲームをプレイします。引き分けがないので、すべてのゲームには勝者と敗者がいます。競技者Aは、ある王他のすべての競技者のためならば、トーナメントのB、どちらかのAはビートBを、またはAは別の競技者破っC順番にビートBを。すべてのトーナメントには少なくとも1人のキングがいることを示すことができます(ただし、複数のトーナメントがある場合もあります)。このチャレンジでは、あなたの仕事は、与えられたトーナメントの王を見つけることです。 入出力 入力はN × Nブール行列Tであり、オプションN ≥ 2で参加者の数です。各エントリT[i][j]は、競技者iとの間のゲームの結果を表し、j値1は勝者を表し、i0は勝者を表しjます。なおT[i][j] == 1-T[j][i]場合i != j。の対角線はT0 で構成されます。 出力はT、0ベースまたは1ベースのインデックスを使用して、トーナメントを代表するトーナメントのキングリストになります。王の順序は関係ありませんが、重複するべきではありません。 入力と出力の両方を適切な形式で取得できます。 ルールとスコアリング 完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース これらのテストケースでは、0ベースのインデックスを使用します。1ベースのインデックス付けの場合、各出力値をインクリメントします。 2 [[0,0],[1,0]] -> [1] 3 [[0,1,0],[0,0,0],[1,1,0]] -> [2] 3 [[0,1,0],[0,0,1],[1,0,0]] -> [0,1,2] 4 [[0,1,1,1],[0,0,1,0],[0,0,0,0],[0,1,1,0]] -> [0] 4 [[0,1,1,0],[0,0,1,0],[0,0,0,1],[1,1,0,0]] -> [0,2,3] 5 [[0,1,0,0,1],[0,0,0,0,1],[1,1,0,0,0],[1,1,1,0,1],[0,0,1,0,0]] -> [3] 5 [[0,1,0,1,0],[0,0,1,1,1],[1,0,0,0,0],[0,0,1,0,1],[1,0,1,0,0]] -> [0,1,4] 5 [[0,0,0,0,0],[1,0,1,1,0],[1,0,0,0,1],[1,0,1,0,1],[1,1,0,0,0]] -> …

13
長方形の反対側の角に行く最適なソリューション
あなたの仕事は、長方形の左下隅から正反対の右上隅までの最適な移動数を見つけるプログラムを作成することです。 プログラムは、入力を順序付けられたペアとして受け入れます(width, height)。これらは、作業する長方形の寸法になります。プログラムは、ソリューションのASCIIアートを作成し(.空の正方形および#ソリューションの一部、X開始正方形に使用)、エンドポイントに到達するために必要な移動の数をカウントします。斜めの動きは許可されていません。複数のソリューションがある場合は、1つを選択して出力します。 バイト単位の最短プログラムが優先されます。 例 入力: (4, 5) 出力: ..## ..#. .##. .#.. X#.. 移動回数:7

11
秘書の問題を解決する
秘書の問題は、これと述べた有名な問題です。 新しい秘書が必要です N人の応募者がいて、一度に1人ずつ面接できます 面接後に各応募者を採点できます。あなたのスコアリングシステムは、2人の志願者に同じスコアを与えることはありません 応募者に面接した後、すぐに「はい」または「いいえ」を提出する必要があります 最高得点の応募者が欲しい 解決策は、最初のfloor(N/e)応募者にインタビューし、それまでの応募者全員よりも高いスコアを持つ最初の応募者を受け入れることです。申請者のいずれもより高い場合、最後の申請者を返します。おもしろいことに、これは1/e時間の上位の申請者にパーセントを与えます。 オイラーの番号をe指します。の値を取得するにはeは、組み込みのを使用するlogか、少なくとも5つの小数点にハードコードします。 入力: 以下の一意の非負整数の空でない配列 2^31-1。 出力: 選択された候補を表す整数。アルゴリズムを明確にするために: 最初の最大要素を見つける floor(N/e)配列の要素で。 残りの要素を反復処理し、手順1で見つかった最大値よりも大きい最初の要素を返します。 いずれの要素も高ければ、最後の要素を返します。 たとえば、配列が[2,7,4,3,9,20]であったN = 6としfloor(N/e) = 2ます。配列の最初の2つの要素は[2,7]です。の最大値は[2,7]です7。残りの要素は[4,3,9,20]です。大きい最初の要素7である9私たちが戻るので、9。 テストケース: [0] => 0 [100] => 100 [100, 45] => 100 [0, 1] => 0 [45, 100] => 45 [1, 4, 5] => 4 [1, 5, 4] => …

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