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

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

30
AGMシリーズの穴1:算術幾何学的平均の計算
この質問は、このHNQに触発されました。 シリーズについて この質問は、AGMメソッドに関するシリーズの一部になりました。シリーズのこの最初の投稿は、実際に計算することについてですAGMます。これを他のコードゴルフチャレンジと同様に扱い、シリーズについてまったく心配することなく答えることができます。ただし、すべての課題にリーダーボードがあります。 算術-幾何平均とは 2つの数の算術幾何平均は、算術平均と幾何平均を繰り返して収束する数として定義されます。あなたの仕事は、いくつかのn反復の後にこの数を見つけることです。 明確化 あなたは3つの数字を取ります a, b, n妥当な形式のします。 以下のためnの反復、の算術と幾何平均を取るaとbしてにそれらを設定aし、b。 2つの数値aとbについて、算術平均はと定義され(a + b) / 2ます。 幾何平均はと定義され√(a * b)ます。 aそして、b互いに接近している必要があります。 次に、との両方aを出力しbます。 フロートの不正確さなどを心配する必要はありません。 これはコードゴルフなので、バイト単位の最短コードが勝ちです! テストケース [0, [24, 6]] -> [24, 6] [1, [24, 6]] -> [15.0, 12.0] [2, [24, 6]] -> [13.5, 13.416407864998739] [5, [24, 6]] -> [13.458171481725616, 13.458171481725616] [10, [100, …

3
助けてください、私は無限の工場に閉じ込められています!
この課題は、ザックトロニクスのゲームInfinifactoryに大まかに触発されています。 で表されるコンベアの長方形グリッドのトップダウンビューが表示され>v<^ます。スペースで表されるコンベアのないセルが存在する場合があります。以下に例を示します。 > <vv < v ^ >v v >v^^>vv^ ^>^ v > v<v >> >v v<^ この設定は、無限のスペースに暗黙的に囲まれています。 さらに、グリッドの左上隅にあるコンベヤー上に配置される長方形の貨物の寸法が与えられます。あなたの仕事は、貨物が静止するかどうか、またはループで移動するかどうかを把握することです。 もちろん、貨物は一度に複数のコンベヤーをカバーする可能性が高いため、各ステップで貨物の方向を把握するためのルールは次のとおりです。 反対側のコンベヤーは互いにキャンセルします。したがって、3x2の貨物が次のパッチのいずれかをカバーする場合(明確にするためにハイフンとパイプで概説)、結果は同じになります。 +---+ +---+ +---+ |>>^| | ^| |v^^| |^<<| |^ | |^^v| +---+ +---+ +---+ これらについても同じことが言えます。 +---+ +---+ +---+ |v^<| | | |><>| |>>>| |>> | |>><| +---+ +---+ +---+ …

30
リストを偶数インデックス部分と奇数インデックス部分に分けます
この質問に触発された: 偶数のインデックス番号が最初に表示され、奇数のインデックス番号が後に続くように、番号のリストを受け取り、並べ替えられたリストを出力する関数(または完全なプログラム)を作成します。数値自体の値は順序に影響を与えません-インデックスのみが影響します。すべてのインデックスはゼロベースです。 例えば: 入力: [0, 1, 2, 3, 4] 出力: [0, 2, 4, 1, 3] もう一つの例: 入力: [110, 22, 3330, 4444, 55555, 6] 出力: [110, 3330, 55555, 22, 4444, 6] あなたの言語が持っているリストに最も自然な表現を使用してください。複雑さに関する制限はありません(たとえば、一時リストの割り当ては問題ありません。インプレースで行う必要はありません)。 PS空のリストに対して機能するはずです(空の入力=>空の出力)。

30
数の約数を数える
前書き これは非常に簡単な課題です。単に数の約数を数えるだけです。以前にも同様の、より複雑な課題がありましたが、私はこれをエントリーレベルにしようと考えています。 チャレンジ 1つの厳密に正の整数が与えられた場合N、1 またはを含む約数を出力または返すプログラムまたは関数を作成しますN。 入力:1つの整数>0。数値は、言語のネイティブの数値型で表現できると仮定できます。 出力:1および数値自体を含む、正の整数除数の数。 提出はバイト単位で記録されます。あなたは見つけることがあり、このウェブサイトは、あなたのバイト数を生成するための合理的な方法を使用するかもしれませんが、便利。 これはcode-golfなので、最低スコアが勝ちです! 編集: FryAmTheEggmanの5バイトのPythの答えが勝者のようです!ただし、新しい回答を送信してください。短くできる場合は、受け入れられる答えを変更します。 テストケース ndiv(1) -> 1 ndiv(2) -> 2 ndiv(12) -> 6 ndiv(30) -> 8 ndiv(60) -> 12 ndiv(97) -> 2 ndiv(100) -> 9 リーダーボード これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 # Language Name, N bytes N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: # Ruby, <s>104</s> <s>101</s> 96 bytes ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。 # …

13
もっと頑張って、もっと良くする
このチャレンジでのあなたの目標は、ダフト・パンクのより強く、より良く、より速く、より強く歌詞を出力することです。具体的には、次のテキストを出力します。 Work It Make It Do It Makes Us Harder Better Faster Stronger More Than Hour Our Never Ever After Work Is Over Work It Make It Do It Makes Us Harder Better Faster Stronger More Than Hour Our Never Ever After Work Is Over Work It Harder Make It …

15
良さ、それはタブで覆われています!
スペースインデントユーザー、団結!私たちはすべての低タブユーザーと戦わなければなりません! あなたの使命(受け入れることを選択した場合)は、2つの引数を取るプログラムまたは関数を作成することです。 文字列:これは入力です。 正の整数:タブごとのスペースの数。 文字列のすべての行を調べて、インデントに使用されるすべてのタブを指定された数のスペースに置き換え、インデントに使用されないすべてのタブ(行の中央など)を1つのスペースに置き換える必要があります。 などの行\t \tabcは未定義の動作であることに注意してください。プログラムを複雑にするために、邪悪なタブのユーザーによって挿入されました。 Tabs Must Die Societyによると、悪のタブユーザーによる検出を避けるため、プログラムはできるだけ短くする必要があります。 例 \t ここでタブを表すために使用されます。 入力文字列: a \t\tb\tc d 入力番号: 4 出力: a b c d 中央の行は、タブごとに4つの8スペースでインデントされています(指定された数値は4だったため)。 入力文字列: \ta\t\tb 入力番号: 4 出力: a b 注:これはタブ拡張チャレンジの複製ではありません。非常に異なる入力形式とわずかに異なる要件が必要です。

5
ASCIIドラゴンの曲線
前書き ドラゴンの曲線は、特にジュラシックパーク小説のセクションのタイトルページに表示されるフラクタル曲線です。 この曲線についてのウィキペディアの記事で説明されているように、それは非常に簡単に紙のストリップを折り畳むプロセスとして記述することができます。 この曲線の生成の最初の数回の反復は次のようになります(画像についてはWikipediaの功績による)。 チャレンジ 入力として整数nが与えられる_と、シンボルと| |、_およびスペースのみを使用して図を出力する必要があります。曲線をプロットなどとして出力することはできません。 入力をプログラム引数として、STDINで、または関数パラメーターとして受け取ることができます。 入力は常に0以上の整数になります。プログラムは適切な入力値で動作するはずです。テストケースでは12が最高です。 最初の反復は次のようになります 反復0は _ 反復1は _| 反復2は |_ _| 最後の末尾の行は大丈夫です。曲線の右端の文字まで行を埋める以外に、後続のスペースは許可されません 通常の標準的な抜け穴の悪用はありません テストケース 入力 0 出力 _ 入力 3 出力 _ |_| |_ _| 入力 5 出力 _ _ |_|_| |_ _ _| _| |_|_|_ |_|_| |_ _| |_| 入力 10 出力 _ …

30
ミステリーストリングプリンター(強盗)
警官のスレッドはここで見つけることができます:ミステリーストリングプリンター(警官) あなたの挑戦 copsスレッドから送信を選択し、そのスレッドの回答から文字列を出力します。 選択する提出は安全ではありません(7日より新しいものでなければなりません)。 プログラム、関数、またはREPLスクリプトは、警官のスレッドと同じルールに従う必要があります。要約すると: プログラムは128文字以下である必要があります(警官の提出が短いプログラム長の範囲にある場合、プログラムもその長さの範囲にある必要があります。たとえば、警官のプログラムが≤32バイトの場合、プログラムは≤32バイトでなければなりません)。 プログラムは、実行されるたびに同じ出力を生成する必要があります。 暗号化機能はありません。 プログラムは入力を受け付けてはなりません。 標準的な抜け穴はありません。 すべての新規提出には同じ言語を使用する必要があります。このルールが作成される前からの提出は、たとえそうでなくても問題ありません。 得点 スコアリングは強盗でも同様に機能しますが、わずかに異なります。 ≤8バイトのプログラムをクラックすると、1ポイントが与えられます。 16バイト以下のプログラムをクラックすると、2ポイントが与えられます。≤32バイトは4ポイントなどを与えます。 追加の提出ごとに、長さに関係なく、+ 5ポイントを獲得します 各警官の提出は一度しかクラックできません。各提出をクラックした最初の人だけがポイントを獲得できます。 提出 各回答には、 警官の提出へのリンク。 あなたのプログラムとプログラミング言語。 また、ヘッダーの最後の数字として、警官のプログラムの長さ(2の累乗)を指定します。 さらに、回答へのリンクを使用して警官の提出についてコメントしてください。 リーダーボードを生成するスタックスニペットを次に示します。スニペットに問題がある場合は、コメントを残してください。すべての公開警官の提出を確認したい場合は、警官の課題のスニペットを参照してください。 コードスニペットを表示 /* Configuration */ var QUESTION_ID = 60329; // Obtain this from the url // It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page var …

2
ATMで現金をゴルフしてください
タスクは簡単です。私にいくつかの取得1000、500および100ノートを。 どうやって ?あなたが尋ねるかもしれません。心配しないでください。クレジットカードを受け入れるATMが近くにあるので、銀行を強奪する必要はありません。ただし、クレジット限度額はタスクに十分であるため、引き出しには注意する必要があります。 チャレンジ 数を考えると1000、500そして100ノートが必要な、少なくともそれらの多くのノートを取得するために必要な特定の引き出しを計算します。各引き出しで、ATMは次のルールに基づいて各メモを吐き出すことができます。 引き出し金額(A)は以下5000 の場合A%1000 == 0、ATMは1 500音、5 100音、休符を吐き出し1000ます それ以外の場合A%500 == 0、ATMは5つの100ノート、残りの1000ノートを吐き出します それ以外の場合A%1000 < 500、ATMはfloor(A/1000) 1000メモと休符を吐き出し100ます それ以外の場合A%1000 > 500、ATMはfloor(A/1000) 1000ノート、1 500および残りの100ノートを吐き出します 引き出し金額が等しい 5000 の場合A%1000 == 0、ATMは2つの500ノートと残りの1000ノートを吐き出します それ以外の場合、A%500 == 0ATMは1つの500メモと休符を吐き出し1000ます それ以外の場合A%1000 < 500、ATMはfloor(A/1000) 1000メモと休符を吐き出し100ます それ以外の場合A%1000 > 500、ATMはfloor(A/1000) 1000ノート、1 500および残りの100ノートを吐き出します 明確にするために、ここにすべての可能な金額まで引き出されたノートの完全な表があります7000(さらに引き出せますが、パターンはその後変更されません)。順序は<1000> <500> <100>次のとおりです。 100 => 0 0 1 2500 => …

20
私は完璧ですか(数字)?
これが私の最初の挑戦です! バックグラウンド 完全数は正の整数であり、それ自体を除くすべての約数の合計に等しくなります。 だから、6完璧な数があるため、あります1 + 2 + 3 = 6。 一方、12そうではありません1 + 2 + 3 + 4 + 6 = 16 != 12。 仕事 タスクは簡単です。プログラムを作成すると、n次のメッセージのいずれかが表示されます。 私は完璧な数でd1 + d2 + ... + dm = s == n はありませんd1 + d2 + ... + dm = s [<>] n どこ d1, ... …

9
買い物袋を運ぶのを手伝ってください
暖かい夏の夜だった... 私の愚かな車がスーパーマーケットから帰る道の途中で故障することを決めたとき。私はそれを傍観者に押し、家に帰ることにした。トランクを開けて、食料品や残りのものを取り出しました。そのとき、アイテムが均等に袋詰めされていないことに気づきました。いくつかのバッグにはもっと重いものがあり、他のバッグには軽いものがほとんどありませんでした。私が持ち運びしやすいように、すべてを2つのバッグにまとめて、それらの重量をできる限り近づけることにしました。 あなたの目標 両方のバッグの差ができるだけゼロに近くなるように、2つのショッピングバッグのアイテムを並べ替えるのを手伝います。 数学的に: WEIGHT LEFT HAND - WEIGHT RIGHT HAND ≈0 例 パンとピーナッツバターの2つのアイテムしかなく、パンの重量が250グラムで、ピーナッツバターが150グラムの場合、最良の方法は両手で別々に運ぶことです。 W LH - W RH = W (パン) - W (P.BUTTER) 250から150 = 100 他の可能性は次のとおりです。 W (パン、P.BUTTER) - W (空手) =(250 + 150) - 0 = 400 これは最初のケースよりも良くないため、最初のケースを使用する必要があります。 あなたのコードは ショッピングバッグ内のアイテムの重量を示す数値を入力します。単位は重要ではありませんが、同じである必要があります(理想的にはキログラムまたはグラム)。入力は1つずつ、または一度にすべて実行できます。必要に応じて、合計数を最大20アイテムに制限できます。 入力形式/タイプはユーザーが選択できますが、重み以外には何も表示されません。 任意の言語を使用できますが、標準ライブラリに固執します。 出力を表示します。繰り返しますが、形式は自由に選択できますが、投稿で形式を説明してください。つまり、どのアイテムが左手アイテムであり、どのアイテムが右手アイテムであるかをどのように判断できますか。 ポイント 最短のコードが優先されます。 …
26 code-golf  math 

18
はしごを組み立てる
前書き はしごを作りたいです。このために、私は廃品置き場から、穴の開いた2つの長いボードを清掃しまし​​た。これらの穴にステップを配置したいと思います。ただし、穴が均等に配置されていないため、ステップが少し不安定になり、それらに必要なロッドの量を見積もることが難しくなります。あなたの仕事は私のために計算をすることです。 入力 入力は、2つのボードを表す整数の配列として与えられる2ビットのベクトルです。A 0は、穴のない1オード(距離の任意の単位)1のセグメントを表し、aは、単一の穴のある1オードのセグメントを表します。配列の長さは異なり、1sの数も異なりますが、空にはなりません。 はしごを次のように構築します。まず、2つのボードを正確に1オード離して配置し、左端を揃えます。インデックスごとに、最初のボードのth穴と2番目のボードiのith穴の間の距離を測定し、iロッドを切断して、2つの穴の間に取り付けます。いずれかのボードの穴がなくなると停止します。 出力 出力は、ステップに必要なロッドの合計量であり、オードで測定されます。出力は、少なくとも6桁の有効数字まで正しいはずです。 例 入力[0,1,1,0,1,1,1,1,0,0]とを考慮してください[1,0,0,1,1,1,0,0,1]。結果のはしごは次のようになります。 このラダーのロッドの全長は7.06449510224598オードです。 ルール 関数または完全なプログラムのいずれかを作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース [0] [0] -> 0.0 [0] [1,0] -> 0.0 [1,0,0] [1,1,1,1,1] -> 1.0 [0,1,0,1] [1,0,0,1] -> 2.414213562373095 [0,1,1,0,1,1,1,1,0,0] [1,0,0,1,1,1,0,0,1] -> 7.06449510224598 [1,1,1,1,1] [0,0,1,1,0,1,0,0,1] -> 12.733433128760744 [0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0] [0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1] -> 20.38177416534678

8
すべての停止プログラムを出力します(並列インタープリターを作成します)
この課題の目標は、(最終的に)選択した言語で停止可能なすべてのプログラムを出力することです。最初はこれは不可能に思えるかもしれませんが、実行順序を非常に慎重に選択することでこれを実現できます。 以下は、これを説明するためのASCIIダイアグラムです。列は、考えられるすべてのプログラムの番号付けを表します(各プログラムは、有限のアルファベットからの有限数のシンボルです)。各行は、そのプログラムの実行における特異なステップを表します。Xその時間ステップにおいてそのプログラムによって実行される実行を表します。 step# p1 p2 p3 p4 p5 p6 1 X X X X X X 2 X X X X X 3 X X X X 4 X X X X 5 X X X 6 X X 7 X X 8 X X 9 X X ∞ X …

21
波の計算
私はしばらくこのサイトをスクロールしてきましたが、最近、いくつかの課題を実際に試すことに本当に興味を持ちました。既存のコードゴルフのトピックのいくつかを試してみようと思っていましたが、昨日はしばらくインターネットにアクセスできませんでしたが、その間に自分の挑戦を考えました。 あなたの仕事は、Floatsの配列aと整数を受け取るプログラムまたは関数を作成し、n各値aをその横にある2つのn時間の平均に設定することです。の値を増やして繰り返し使用nすると、波のような動きが生成されます。 詳細: に1つの項目しかないa場合、またはn0以下の場合、プログラムは元の配列を返す必要があります。 入力と出力は、視覚的に分離されている限り、任意の形式にすることができます。 各ステップについて: の最初のアイテムはa、それ自体と次のアイテムの平均になります。 の最後のアイテムはa、それ自体と前のアイテムの平均になります。 の他のアイテムaは、前のアイテムと次のアイテムの平均になります。 現在の配列ではなく、前のステップの配列から計算していることを確認してください! テストケース:注:入力/出力はこの形式である必要はありません! [0, 0, 1, 0, 0], 1 -> [0, 0.5, 0, 0.5, 0] [0, 0, 1, 0, 0], 2 -> [0.25, 0, 0.5, 0, 0.25] [0, 0, 1, 0, 0], 0 -> [0, 0, 1, 0, 0] [0, 0, 1, …

25
リストの範囲のホーム
この課題は、Pythonの範囲関数に似た整数のリストのリストを返すことです。ただし、連続する各数値はリストの深さでなければなりません。 ルール: プログラムまたは非匿名関数を作成します 結果を返すか印刷する必要があります 結果は、リスト(リスト)または配列(アレイ)で返される必要があります パラメータがゼロの場合、空のリストを返します これは、整数パラメーター0 <= n <70を処理できる必要があります。 (再帰的ソリューションはかなり速く爆発します) この関数は、1つのパラメーターのみで呼び出し可能でなければなりません。 その他の動作は未定義です。 これはコードゴルフなので、最短のコードが勝ちます。 呼び出し例: rangeList(6) > [0, [1, [2, [3, [4, [5]]]]]] テストケース: 0 => [] 1 => [0] 2 => [0, [1]] 6 => [0, [1, [2, [3, [4, [5]]]]]] 26 => [0, [1, [2, [3, [4, [5, …

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