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

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

30
アッカーマン関数
アッカーマン関数は、原始再帰ではない、計算可能な合計関数の最も単純な例の1つであることで注目に値します。 A(m,n)2つの非負整数を取り込む定義を使用します。 A(0,n) = n+1 A(m,0) = A(m-1,1) A(m,n) = A(m-1,A(m,n-1)) 実装できます 入力として2つの整数を受け取り、整数を返す名前付き関数または匿名関数、または STDINで2つのスペースまたは改行で区切られた整数を取得し、結果をSTDOUTに出力するプログラム。 ライブラリのアッカーマン関数または超指数関数が存在する場合は使用できませんが、他のライブラリのその他の関数は使用できます。正規の累乗が許可されます。 関数は、A(m,n)m≤3およびn≤10の値を1分以内に検出できる必要があります。少なくとも理論的には、他の入力で終了する必要があります。無限のスタックスペース、ネイティブのBigint型、および任意の長い期間が与えられた場合、答えを返します。編集:言語の制限の深さがデフォルトの再帰の深さである場合は、文字コストなしで再設定できます。 最短の文字数での提出が勝ちです。 答えを確認するための値を次に示します。 A | n=0 1 2 3 4 5 6 7 8 9 10 -----+----------------------------------------------------------------- m=0 | 1 2 3 4 5 6 7 8 9 10 11 1 | 2 3 4 …

30
196アルゴリズムコードゴルフ
以下のためのショートプログラム書く196-アルゴリズムを。アルゴリズムは整数から始まり、回文に達するまでその逆を追加します。 例えば input = 5280 5280 + 0825 = 6105 6105 + 5016 = 11121 11121 + 12111 = 23232 output = 23232 入力 整数、これはLyrchrel番号ではありません(つまり、無限に継続するのではなく、最終的にこのアルゴリズムで回文を生成します) 出力 回文が届きました。

30
パスカルの三角形を生成する
パスカルの三角形は、最初の行の1から開始して生成されます。後続の行では、数値は、そのすぐ上の左右の2つの数値の合計によって決定されます。 デモンストレーションのために、Pascalの三角形の最初の5行は次のとおりです。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 チャレンジ 入力n(ただし、選択した言語で最も便利な場合)を指定すると、Pascalの三角形の最初のn行が生成されます。nは1から25までの整数であると仮定できます。各行と各番号の間には改行が必要ですが、それ以外に、好きなようにフォーマットできます。 これはcode-golfであるため、最短のソリューションが優先されます。 I / Oの例 > 1 1 > 9 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 …

15
ロックを解除します
3桁のコンビネーションロックで自転車をロックしました。今、あなたは乗車に行きたいので、次のプログラムの助けを借りてそれを解除する必要があります。 入力 第1パラメーター ロック状態のロックの数字の組み合わせ。2番目のパラメーター(= ロック解除状態の組み合わせ)とは異なる必要があります。(または、自転車が盗まれる可能性があります!) 範囲000..999。先行ゼロは省略できません。 2番目のパラメーター ロック解除状態のロックの数字の組み合わせ。この値が目標です。 範囲000..999。先行ゼロは省略できません。 出力 初期状態(常に1番目のパラメーター)と最後のステップ(常に2番目のパラメーター)を含む各「回転」後の組み合わせロックの各状態のリスト。 アルゴリズム ロック解除状態で正しい数字に到達するまで、最初の数字を1つずつ「回転」させます。ただし、ロック解除コード全体を理解しているため、ロック解除状態の数字に到達するために必要な回転量が最小になる方向に数字を回転させます。。同点の場合、好きな方向を選択できます。 正しい最初の桁に達したら、2番目から3番目まで同じ手順を開始します。 数字の順序は、円として理解することです。 ... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ... つまり、1から9までの最小回転量は 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 = …

15
1〜255の数字のBrainfuckを生成する
1から255までの数値に対して、配列のあるバイトに指定された数値と改行を生成するBFコードを出力するプログラムを作成します。 たとえば、出力の最初の4行は次のようになります(おそらくそうなります)。 + ++ +++ ++++ 勝者は最小source code + output(バイト単位)になります。 明確化と改訂: BFプログラムはラッピングセルを使用します。 出力BFプログラムは、数値を含むセルであるゼロ以外のセルのみで終了する必要があります。 プログラムは昇順で出力する必要があります。 0のプログラムの出力はオプションです。 負のデータポインターは使用できません。<最初のポインタでは何もしません。(スローする方が適切な場合はコメントを残してください)

11
私の配列にエコーがあります...私の配列にエコーがあります...私の配列
助けて!私のアレイのいくつかに迷惑なエコーがあるようで、それを取り除きたいです。これが発生すると、元の配列が中央のどこかで繰り返され、値が互いに加算されます。 たとえば、配列に[ 422, 375, 527, 375, 859, 451, 754, 451 ]は次のような自身のエコーが含まれます。 [ 422, 375, 527, 375, 859, 451, 754, 451 ] <-- array with echo (input) [ 422, 375, 105, 0, 754, 451 ] <-- original array (output) [ 422, 375, 105, 0, 754, 451 ] <-- echo of original …

15
原点に近い三角形の格子点
バックグラウンド 三角グリッドは写真の下三角格子の一例である辺の長さ1の正三角形と定期的に平面をタイリングすることにより形成されたグリッドです。 三角格子点三角格子を形成する三角形の頂点です。 原点は、三角格子点の一つである平面上の固定点です。 チャレンジ 非負の整数が与えられた場合n、原点からのユークリッド距離がより小さいか等しい三角形の格子点の数を見つけますn。 例 次の図は、(例としてn = 7、ポイントAを原点として60度の領域のみを示しています)の例です。 テストケース Input | Output --------------- 0 | 1 1 | 7 2 | 19 3 | 37 4 | 61 5 | 91 6 | 127 7 | 187 8 | 241 9 | 301 10 | 367 11 | …

18
電話番号(文字を含む)のロータリーダイヤルパルスをカウントする
祖父母の日、電話番号のダイヤルは次のようなロータリーダイヤルで行われました。 各数字をダイヤルするには、対応する穴に指を入れて指先まで引っ張り、離します。メカニズムにより、ダイヤルが静止位置に戻り、電話機は指定された回数だけ回路を切断および再接続し、カチッという音がします。 数字Nをダイヤルするには、10個のパルスであるN = 0を除き、そのような「パルス」をN 個必要とします。 回転式電話には、大きい数字(8、9、0)が小さい数字(1、2、3)よりもダイヤルに時間がかかるという特性があります。これは、初期のエリアコードマップを作成する際の重要な考慮事項であり、人口(および電話回線)の密度が高いニューヨーク市が212(5パルスのみ)だったのに対し、907(26パルス)はまばらに住んでいたアラスカに行った理由です。もちろん、タッチトーンダイヤルが一般的になったとき、これはすべて無関係になりました。 チャレンジ 電話番号を含む文字列(または文字のシーケンス)を入力として受け取り、その回転ダイヤルパルスの数を出力するプログラムまたは関数を、できる限り少ないバイト数で書き込みます。これらは次のようにカウントされます。 桁 桁1〜9は、そのパルス数としてカウントされます。 桁0は10パルスとしてカウントされます。 手紙 ダイヤルの2〜9の数字には、ラテンアルファベットの文字が関連付けられていることに注意してください。これらは元々は名前付き交換を対象としていましたが、後者は電話ワードやテキストメッセージ入力システムに再適用されました。 E.161文字の数字への割り当てを使用して、電話番号に文字を含めることをサポートする必要があります。 A、B、C = 2 D、E、F = 3 G、H、I = 4 J、K、L = 5 M、N、O = 6 P、Q、R、S = 7 T、U、V = 8 W、X、Y、Z = 9 入力は、大文字または小文字のいずれかにすでに大文字変換されていると仮定できます。 その他のキャラクター 文字とスペースをフォーマット区切り文字として任意に使用できるようにする必要があります()+-./。実装が簡単な場合は、この目的で英数字以外の文字を許可することを選択できます。 これらの文字は、パルスカウントには寄与しません。 サンプルコード Pythonの非ゴルフルックアップテーブルと関数: PULSES = { '1': 1, …
34 code-golf  number 

30
P Pr Pre Pref Prefi Prefix Prefixe Prefixes
いくつかの有限リストが与えられた場合、空のリストを含むすべてのプレフィックスのリストを長さの昇順で返します。 (基本的にHaskell関数を実装しますinits。) 詳細 入力リストには数字(またはより便利な場合は別のタイプ)が含まれます。 出力はリストのリストでなければなりません。 サブミッションは機能である必要はありますが、デフォルトのI / Oを使用できます。 すべての些細な解決策にCWの答えがあります。 例 [] -> [[]] [42] -> [[],[42]] [1,2,3,4] -> [[], [1], [1,2], [1,2,3], [1,2,3,4]] [4,3,2,1] -> [[], [4], [4,3], [4,3,2], [4,3,2,1]]

30
オートグラムプログラム
この文は、2つのa、2つのc、2つのd、28のe、5つのf、3つのg、8つのh、11つのi、3つのl、2つのm、13のn、9のo、2つのp、5のr、25を使用しますs、23個のt、6個のv、10個のw、2個のx、5個のy、1個のz。 そのような文はオートグラムと呼ばれます。タスクは、同様のプロパティを持つプログラムまたは関数を作成することです。入力としてバイトを受け取り、そのバイトがプログラムのソースコードに現れる回数を表す整数を出力します。入力がソースに表示されない場合、0を出力する必要があります。 プログラムは、直接または間接的に独自のソースコードを読み取ってはなりませんが、その代わりに、出力を提供するために必要なすべてのデータはハードコードされたクインスタイルでなければなりません。プログラムの長さは少なくとも1バイトでなければなりません。 これはcode-golfであるため、最短のエントリ(バイト単位)が優先されます。回答は受け付けませんので、お好きな言語で最短のソリューションを競ってください。 投稿に説明を含めることを強くお勧めします。 リーダーボード 以下は、総合スコアと言語ごとのリーダーボードです。 コードスニペットを表示 var QUESTION_ID=162408,OVERRIDE_USER=21034;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i; body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px} <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> …

30
上下、上下
チャレンジ: 正の整数入力nを指定すると、次のパターンに従うベクトルを作成します。 0 1 0 -1 -2 -1 0 1 2 3 2 1 0 -1 -2 -3 -4 -3 -2 -1 ... ±(n-1) ±n または、言葉で説明します:ベクトルは、0で始まり1、シーケンスの一部ではない最小の奇数の正の整数に達するまで増分し、それから最小の(大きさで)偶数の負の整数に達するまで減分しますシーケンスの一部ではありません。n到達するまでこのように継続します。シーケンスが奇数のn場合nは正で終了し、偶数のn場合nは負で終了します。 出力形式は柔軟です。 テストケース: n = 1 0 1 ----------- n = 2 0 1 0 -1 -2 ----------- n = 3 0 1 0 -1 …

30
繰り返した!階乗!
階乗の検索と混同しないでください! 前書き 整数の階乗はnnで計算できます != N × (N - 1 )× (N - 2 )× (。。。)× 2 × 1n!=n×(n−1)×(n−2)×(...)×2×1n!=n×(n−1)×(n−2)×(...)×2×1n!=n\times(n-1)\times(n-2)\times(...)\times2\times1 これは比較的簡単で、新しいことは何もありません。ただし、階乗は、n !のように二重階乗に 拡張できます。!= N × (N - 2 )× (N - 4 )× (。。。)× 4 × 2 偶数のため、及び N !!= N × (N - 2 )× (N - 4 )× (。。n!!=n×(n−2)×(n−4)×(...)×4×2n!!=n×(n−2)×(n−4)×(...)×4×2n!!=n\times(n-2)\times(n-4)\times(...)\times4\times2n!!=n×(n−2)×(n−4)×(...)×3×1n!!=n×(n−2)×(n−4)×(...)×3×1n!!=n\times(n-2)\times(n-4)\times(...)\times3\times1 奇数の場合。しかし、二重階乗に限定されません。たとえば、 …

11
いくつのページを削除しましたか?
先月、私は図書館からたくさんの本を借りました。それらはすべて、感情と陰謀を満載した良い本でした。残念ながら、ある時点で私は非常に怒り/悲しみ/失望したので、いくつかのページを引き裂きました。 今、図書館は私が各本で何ページを切り取ったかを知りたがっている。 あなたの目標は、ソートされたコンマ区切りの数字のリストを入力として取り、取り除いた可能性のある最小および最大のページ数を出力するプログラムを書くことです。各行は本を表し、各番号は本の欠落ページを表します。 入力例: 7,8,100,101,222,223 2,3,88,89,90,103,177 2,3,6,7,10,11 1 1,2 出力例: 4/5 5/6 3/6 1/1 1/2 4/5つまり、本のページ番号がどちら側から始まるかに応じて、4ページまたは5ページを切り取った可能性があります。6/7ページ、8/9ページ、100/101ページ、222/223ページ(4ページ)を切り捨てた可能性があります。あるいは、ページ7/8、ページ99/100、ページ101/102、ページ221/222、およびページ223/224(5ページ)を切り取ることができます。 本のページには常に表面と裏面があることに注意してください。また、ページ番号は本ごとに異なります。一部の書籍では、左側のページに偶数のページ番号があります。一部は右側のページにあります。すべての本は左から右に読みます。 バイト単位の最短コードが勝ちます。厳密なI / O形式は必要ありません。プログラムは、入力として1つ以上の本を取得できる必要があります。楽しむ。
34 code-golf 

20
アルファベットキャノン
キャノンボールが発射されるため、飛行の最初の瞬きでは、ツリートップで上昇しN、2回目の瞬きでは、ツリートップで上昇しN-1、軌道の最高点に到達します。その後、瞬きごとに1、2などの梢で落ち始め、地面に落ちます。同時に、砲弾は1つのツリートップ/瞬きの一定速度で水平方向に移動します。 あなたの仕事は、英語のアルファベットから連続した文字で軌跡を描くことです。文字が足りなくなった場合は、からやり直してください'A'。関数またはプログラムを作成します。入力は整数N(1≤N≤15)です。出力は、改行で区切られた文字列または文字列のリストなど、適切な形式の文字マトリックスにすることができます。文字はすべて小文字でもすべて大文字でもかまいません。余分な先頭と末尾のスペースが許可されます。標準的な抜け穴は禁止されています。コードは短いほど良いです。 in: 5 out: OP N Q M R L S K T J U I V H W G X F Y E Z D A C B B C A D in: 1 out: AB

21
掛けやすい数字
あなたの仕事は2つの数字を掛けるのが簡単かどうかを決定することです。これは、10を超える長い乗算では、乗算値と加算ステップの両方を見て、場所の値間でのキャリング(再グループ化)がないことを意味します。これは、乗算される各桁のペアが9以下で、各列の合計が9以下である場合に発生します。 例えば、331および1021乗算に簡単です: 331 x 1021 ------ + 331 662 0 331 ------ 337951 また、他の順序で乗算する場合も同じです(常にそうです)。 1021 x 331 ------ + 1021 3063 3063 ------ 337951 しかし、乗算は簡単431で1021はなく、示されている列間でキャリーが発生します。 431 x 1021 ------ + 431 862 0 431 ------ 440051 ^^^ また、加算ステップでキャリーが発生しなくても、get に乗算するとキャリーオーバーが発生するため、乗算は簡単12で16はありません。12 * 672 12 x 16 ---- + 72 12 ---- 192 …

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