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

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

13
ビットウィービングの視覚化
難解なプログラミング言語の悪には、「織り」と呼ばれるバイト値に対する興味深い操作があります。基本的には、バイトの8ビットの順列です(パターンが対称であるため、どちらの端からカウントを開始してもかまいません)。 ビット0はビット2に移動します ビット1はビット0に移動します ビット2はビット4に移動します ビット3はビット1に移動します ビット4はビット6に移動します ビット5はビット3に移動します ビット6はビット7に移動します ビット7はビット5に移動します 便宜上、置換のその他の2つの表現を示します。サイクルとして: (02467531) そして、マッピングのペアのリストとして: [[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]] あなたの仕事は、ボックス描画文字を使用して、この順列を視覚化することで─、│、┌、┐、└、┘、┼(Unicodeコードポイント:U + 2500、U + 2502、U + 250C、U + 2510、U + 2514、U + 2518、U + 253C)。この視覚化は、次の制約を満たす必要があります。 最初と最後の行は正確に次のとおりです。 0 1 2 3 4 5 6 7 それらの間で、ボックス描画文字に合うように、それぞれ最大15文字の行を使用できます(少なくとも4行必要です)。行は、最初の行の1つの数字の下で垂直に始まり、最後の行の対応する数字の上で垂直に終わる必要があります。8本の線を接続する必要があります。また、クロスするのはビアのみです┼(これは常にクロスであり、2本のラインが接触することはありません)。ラインの正確なパスはあなた次第です(そして、特にゴルフに適したレイアウトを見つけることがこの課題の中心です)。有効な出力は次のとおりです。 0 1 2 3 4 …

4
幸せなエンダー問題
ハッピーエンドの問題は、(実際の定理)の状態 一般的な位置にある平面内の5つのポイントのセットには、凸状の四角形の頂点を形成する4つのポイントのサブセットがあります。 この問題は、最初に問題に取り組んだ2人の数学者、エステルクラインとジョージセケレスが婚約し、その後結婚したときに、ポール・エルデスによってそのように命名されました。 明確化: ここでの一般的な位置とは、3つのポイントが同一線上にないことを意味します。 4つの頂点によって形成される四角形は、ポイントの順序に関係なく、常に交差していないと見なされます。例えば、4点所与[1 1]、[1 2]、[2 1]、[2 2]意図四辺形は、正方形ではなく、ボウタイです。 内角が180度を超えない場合、交差しない四角形は凸状になります。または同等に両方の対角線が四角形の内側にある場合。 チャレンジ 正の整数座標を持つ5つのポイントが与えられた場合、凸四辺形を形成するこれらのポイントのうち4つを出力します。 ルール 複数のソリューションがある場合(つまり、4ポイントのセットが複数ある場合)、それらの1つまたはすべてを一貫して出力することを選択できます。 入力形式と出力形式は通常どおり柔軟です(配列、リスト、リストのリスト、適切な区切り文字のある文字列など)。 コードゴルフ、最少バイトが勝ちます。 テストケース 入力: [6 8] [1 10] [6 6] [5 9] [8 10] 可能な出力は1つだけです。 [6 8] [1 10] [6 6] [5 9] 入力: [3 8] [7 5] [6 9] [7 8] [5 1] 5つの解決策があります。 …

20
図と地面
ソース:ウィキペディア この課題では、上記の画像の図と背景に似た2つのプログラムを作成し、一方が印刷さfigureれ、他方が印刷されるようにする必要がありgroundます。具体的には: 入力を受け取らず、文字列を出力するプログラムを作成しますfigure。プログラムで許可されている空白文字は、スペース(コードポイント0x20)と改行(キャリッジリターン、0x0D、改行、0x0A、または両方の組み合わせ)のみです。 改行を無視すると、スペース文字(コードポイント0x20)と非スペース文字の数は同じでなければなりません。たとえば、これは有効なプログラムです(仮想言語): ab c d e f 最初の行に末尾のスペースがあることに注意してください。 n番目の空白文字をn番目の非空白文字と交換する場合、プログラムはground代わりに印刷する必要があります。上記の例では、プログラムは次のようになります。 a b cde f 2行目と3行目に末尾のスペースがあることに注意してください。 図と地上の解法はどちらも、STDOUTに出力される同じ言語の完全なプログラムでなければなりません。どちらの場合でも、単一のオプションの末尾の改行を印刷できます。STDOUTが正しい限り、STDERRに何でも出力できます。 任意のプログラミング言語を使用できますが、これらの抜け穴はデフォルトでは禁止されています。 これはcode-golfであるため、バイト単位で測定された最短の有効な回答が勝ちます。 ヘルパースクリプト このCJamスクリプトを使用して、フィギュアとグラウンドプログラムを変換できます。2つのうちの1つを入力フィールドに貼り付けて、プログラムを実行します。また、スペースと非スペースの数が一致しない場合も通知します。 リーダーボード コードスニペットを表示 function answersUrl(a){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(a,b){return"http://api.stackexchange.com/2.2/answers/"+b.join(";")+"/comments?page="+a+"&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(a){answers.push.apply(answers,a.items),answers_hash=[],answer_ids=[],a.items.forEach(function(a){a.comments=[];var b=+a.share_link.match(/\d+/);answer_ids.push(b),answers_hash[b]=a}),a.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(a){a.items.forEach(function(a){a.owner.user_id===OVERRIDE_USER&&answers_hash[a.post_id].comments.push(a)}),a.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(a){return a.owner.display_name}function process(){var a=[];answers.forEach(function(b){var c=b.body;b.comments.forEach(function(a){OVERRIDE_REG.test(a.body)&&(c="<h1>"+a.body.replace(OVERRIDE_REG,"")+"</h1>")});var d=c.match(SCORE_REG);d?a.push({user:getAuthorName(b),size:+d[2],language:d[1],link:b.share_link}):console.log(c)}),a.sort(function(a,b){var c=a.size,d=b.size;return c-d});var b={},c=1,d=null,e=1;a.forEach(function(a){a.size!=d&&(e=c),d=a.size,++c;var f=jQuery("#answer-template").html();f=f.replace("{{PLACE}}",e+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link),f=jQuery(f),jQuery("#answers").append(f);var g=a.language;g=jQuery("<a>"+g+"</a>").text(),b[g]=b[g]||{lang:a.language,lang_raw:g,user:a.user,size:a.size,link:a.link}});var f=[];for(var g in b)b.hasOwnProperty(g)&&f.push(b[g]);f.sort(function(a,b){return a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase()?1:a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase()?-1:0});for(var h=0;h<f.length;++h){var i=jQuery("#language-template").html(),g=f[h];i=i.replace("{{LANGUAGE}}",g.lang).replace("{{NAME}}",g.user).replace("{{SIZE}}",g.size).replace("{{LINK}}",g.link),i=jQuery(i),jQuery("#languages").append(i)}}var QUESTION_ID=101275,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",OVERRIDE_USER=8478,answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\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:350px;float:left}table …

9
不要な括弧を削除する
文字で構成された文字列が与えられます0123456789+*()。文字列は常に有効な数式であると想定できます。 あなたの仕事は、乗算が加算よりも優先されると仮定して、不要な括弧を削除することです。 構造的に必要でない場合にのみ、括弧を削除する必要があります。 乗算の優先度が高いため:3+(4*5)=>3+4*5 乗算または加算の結合性のため:3*(4*5)=>3*4*5 式の周りで冗長な場合:3*((4+5))=>3*(4+5) 括弧は、特定の数値のために簡略化できる場合は保持する必要があります。 1*(2+3) に単純化されるべきではない 1*2+3 0*(1+0) に単純化されるべきではない 0*1+0 例: (4*12)+11 ==> 4*12+11 (1+2)*3 ==> (1+2)*3 3*(4*5) ==> 3*4*5 ((((523)))) ==> 523 (1+1) ==> 1+1 1*(2*(3+4)*5)*6 ==> 1*2*(3+4)*5*6 1*(2+3) ==> 1*(2+3) 0*(1+0) ==> 0*(1+0) (((2+92+82)*46*70*(24*62)+(94+25))+6) ==> (2+92+82)*46*70*24*62+94+25+6

5
段落にパッチを適用
Patch the Imageの精神で、同様の課題がありますが、テキストがあります。 チャレンジ ビット腐敗はあなたの貴重なテキストを苦しめました!ASCII文字で構成され、どこかに長方形の穴がある段落が与えられた場合、プログラムは、段落が可能な限り最適になるように、適切なテキストで穴を埋めようとする必要があります。 さらなる定義 穴は常に長方形で、複数の線にまたがることがあります。 穴は1つしかありません。 穴は必ずしも単語の境界に収まるわけではないことに注意してください(実際、通常は収まりません)。 穴は入力段落の最大25%になりますが、「通常」テキストの「終了」を超えてオーバーラップまたは拡張する場合があります(以下のユークリッドまたはバジャーの例を参照)。 穴を見つけることはこの課題の主要なポイントではない#ため、簡単に識別できるようにハッシュマークのみで構成されます。 入力段落の他の場所にはハッシュマークがありません。 あなたのコードは、以下の例の「通常の」テキストを使用できません-穴のあるテキストのみを受け取り、処理します。 入力は、単一の複数行の文字列、文字列の配列(1行に1つの要素)、ファイルなどとして使用できます。言語に最も適したものを選択できます。 必要に応じて、穴の座標を詳述するオプションの追加入力を取得できます(たとえば、座標のタプルなど)。 提出物にアルゴリズムを記述してください。 投票 投票者は、アルゴリズムがテキストの穴をどの程度埋めているかに基づいて、エントリを判断するよう求められます。いくつかの提案には以下が含まれます: 記入された領域は、残りの段落としてのスペースと句読点のおおよその分布と一致しますか? 塗りつぶされた領域は構文に誤りがありますか?(たとえば、連続する2つのスペース、疑問符が続くピリオド, ,、などの誤ったシーケンスなど) 目を細めた場合(実際にテキストを読んでいない場合)、以前は穴があった場所を見ることができますか? 穴の外にキャメルケースの単語がない場合、穴には何かが含まれていますか?穴の外側に大文字が含まれていない場合、穴には何かが含まれていますか?穴の外に大文字がたくさんある場合、穴には比例した量が含まれていますか? 有効性基準 提出物が有効と見なされるためには、穴の外側の段落のテキスト(末尾のスペースを含む)を変更してはなりません。末尾の単一の末尾の改行はオプションです。 テストケース 形式は、コードブロック内の元の段落の後に、穴のある同じ段落が続きます。穴のある段落が入力に使用されます。 1(画像のパッチ) In a popular image editing software there is a feature, that patches (The term used in image processing is inpainting as @minxomat …

30
砂時計を描く
プログラミング101のタスクに触発されたのは、もう1つの課題です。 入力: 正の整数n >= 3。(奇妙でなければならない) 出力: nアスタリスクの行。最初の行にはnアスタリスクがあり、すべての新しい行には前の行よりも2つ少ないアスタリスクがあります。アスタリスクを1つ押すまで。そこから、nアスタリスクに戻るまで、すべての新しい行には前の行よりも2つのアスタリスクが付いています。スペースまたはスペースのようなものを使用して、実際に砂時計のように見えるようにアスタリスクを揃える必要があります。 一般的なルール: 末尾の改行は許可されますが、使用する必要はありません。 インデントは必須です。 これはコードゴルフなので、バイト単位の最短回答が勝ちです。 このコースはC ++で教えられているので、C ++で解決策を見たいと思っています。 テストケース(n = 5): ***** *** * *** *****

14
配列エスケープ-そこから出て
ある日、目を覚まして、自分がアレイに巻き込まれているのを見つけます。そこから出て、一度に1つのインデックスを取得しようとしますが、他のルールがあるようです。 配列は自然数で完全に埋められます。 インデックスに自分自身を見つけた場合 nにいる場合は、index array[n]に移動しますが、次の場合を除きます。 あなたがn素数であるインデックスに自分自身を見つけた場合、あなたはarray[n]戻ってステップを取る 例:4この配列のindex から開始します(開始インデックスは0): array = [1,4,5,6,8,10,14,15,2,2,4,5,7]; -----------------^ you are here 現在のフィールドの値は8なので8、最初のステップとしてインデックスに移動します。着陸するフィールドには値が含まれています2。次に2、2番目のステップとしてインデックスに移動します。以下のよう2素数である、あなたはあなたの第三段階である、バックの5つのステップを取ります。インデックスがないため-3、合計3ステップで配列を正常にエスケープしました。 あなたの仕事は: パラメータとして配列と開始インデックスを受け取り、配列をエスケープするためのステップ数を出力するプログラムまたは関数を作成します。配列をエスケープできない場合(たとえば[2,0,2]、start-index 2=>を使用すると、常にインデックスから移動します)2からに0)、偽の値を出力します。1ベースのインデックス付けまたはゼロベースのインデックス付けを使用できますが、使用するものを指定してください。 テストケース 入力: [2,5,6,8,1,2,3], 3 出力: 1 入力: [2, 0, 2], 2 出力: false 入力: [14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5 ; 出力: 6 最短の答えが勝ちです。

5
ASCIIアートを斜体にする
ASCIIアート画像の入力が与えられた場合、ASCIIアートを斜体で出力します。 ASCIIアートを斜体にするには: 最後の行の前にゼロスペース、最後から2番目の行の前に1スペース、最後から3番目の行の前に2スペースを挿入します。 作成された可能性のある余分な先行空白を削除します。つまり、各行のn前に少なくともスペースがある場合は、各行nの先頭からスペースを削除します。 すべて置き換え\秒で|、すべて|との/、およびすべて/のと_。既存_のものを同じにしてください。 入力には、文字\|/_とスペースのみが含まれることが保証されています。 たとえば、入力 /\/\/\ /\/\/\ /\/\/\ /\/\/\ /\ /\ /\ /\ /\ /\ /\/\/\ /\/\/\ /\ /\ /\/\ /\ /\ /\ /\ /\ /\ /\ /\/\/\ /\/\/\ 出力する必要があります _|_|_| _|_|_| _|_|_| _|_|_| _| _| _| _| _| _| _|_|_| _|_|_| _| _| _|_| _| _| _| …

5
爆弾の連鎖反応
前書き: タスクの前に、すべての要素がマップ上で行うことを以下に示します。 平地(X):これは何もしません。 破壊された土地(-):これは平地と同じですが、爆弾によって破壊されました。 アクティブな爆弾(!):マップ上で、これは3x3の正方形のすべてを破壊します。 XXXXX XXXXX XXXXX X---X XX!XX > will become > X---X XXXXX X---X XXXXX XXXXX 受動爆弾(@):別の爆弾で爆発するまで何もしません。これには、3x3の正方形の爆発半径もあります。 XXXXX XXXXX XXXXX XXXXX XX@XX > will become > XX@XX (nothing happened) XXXXX XXXXX XXXXX XXXXX しかし: XXXXX XXXXX XXXXX X---X XX@XX > will become > ----X (both bombs have …

30
シルベスターの配列
シルベスターのシーケンスOEIS A000058は、次のように定義された整数シーケンスです。 各メンバーは、以前のすべてのメンバーに1を加えたものです。シーケンスの最初のメンバーは2です。 仕事 nを取り、Sylvesterのシーケンスのn番目の項を計算する可能な最小のプログラムを作成します。標準の入力、出力、抜け穴が適用されます。結果は非常に急速に成長するため、選択した言語で結果がオーバーフローを引き起こすような用語を取ることは期待されていません。 テストケース ゼロまたは1つのインデックスを使用できます。(ここではゼロインデックスを使用しています) >>0 2 >>1 3 >>2 7 >>3 43 >>4 1807

6
十字架のみの三目並べ
前書き 誰もが三目並べというゲームを知っていますが、この課題では少しひねりを加えます。十字架のみを使用します。3つの十字架を連続して配置した最初の人が負けます。興味深い事実は、誰かが負ける前の最大クロス数は6に等しいことです: X X - X - X - X X つまり、3 x 3ボードの場合、最大量は6です。したがって、N = 3の場合、6を出力する必要があります。 別の例、N = 4、または4 x 4ボードの場合: X X - X X X - X - - - - X X - X これは最適なソリューションです。クロスの最大量は9に等しいことがわかります。12 x 12ボードの最適なソリューションは次のとおりです。 X - X - X - X X - X …

30
2進数から10進数へのコンバーター
2進数から10進数へのコンバーター 私の知る限り、単純な2進数から10進数への変換の課題はありません。 正の2進整数を取り、その10進値を出力するプログラムまたは関数を作成します。 組み込みの基本変換関数を使用することはできません。整数対小数機能(例えば、ターンその関数101010に[1, 0, 1, 0, 1, 0]又は"101010")この規則から除外され、したがって、可能にしました。 ルール: コードは、言語がサポートする最大の数値までの2進数をサポートする必要があります(デフォルト) バイナリ表現で先行ゼロを選択することもできます 10進出力には先行ゼロがない場合があります。 入力形式と出力形式はオプションですが、数字の間に区切り文字を含めることはできません。(1,0,1,0,1,0,1,0)有効な入力形式ではなく、両方10101010と(["10101010"])しています。 「通常の」方向で入力を取得する必要があります。1110ではあり14ません7。 テストケース: 1 1 10 2 101010 42 1101111111010101100101110111001110001000110100110011100000111 2016120520371234567 この課題は、他のいくつかの課題、たとえばthis、this、thisに関連しています。

30
repdigitを取得するにはどうすればよいですか?
私が数時間前にこの挑戦を最初に考えたとき、私がどれだけ多くの担当者を持っていたかに敬意を表して: 1桁の繰り返しで構成されるこのような番号は、repdigitsと呼ばれます。Repdigitsは楽しいです!すべてのボディは、彼らが持っていた担当者の量がぞろ目であった場合、より幸せになる¹が、あなたは私がぞろ目に取得するための最速の方法を見つける手助けする必要があるので、私は、せっかちです。 ここにあなたの挑戦があります: レピュテーションを表す正の整数が与えられた場合、repdigitに到達するために獲得する必要のある最小量の担当者を出力します。たとえば、この課題の執筆時点で、ユーザーMartin Enderの担当者は102,856人でした。最も近いrep-digitは111,111なので、彼は得る必要があります:repdigitになるには8255 rep。 人々が担当者を失うことを嫌うので、ネガティブでない変更のみを考慮します。これは、たとえば、1人の担当者を失うのではなく、12人の担当者がいる場合、解決策は10人の担当者を獲得することであることを意味します。111 repを持っている人はすでに repdigitにいるので、これにより「0」が有効な出力になります。 入力と出力は任意の合理的な形式であり、Stack Exchangeサイトで担当者を1人未満にすることはできないため、入力が1未満になることはないと想定できます。 注意すべき1つのコーナーケース: ユーザーの担当者が10人未満の場合、すでに担当者がいるため、「0」も必要です。 テストIO: #Input #Ouput 8 0 100 11 113 109 87654321 1234567 42 2 20000 2222 11132 11090 標準的な抜け穴が適用され、バイト単位の最短ソリューションが勝ちます!
32 code-golf  math  number 

9
対角線を回転させる
バックグラウンド ほとんどの合理的なプログラミング言語では、2D配列の行または列を簡単に回転できます。この課題では、代わりに対角線を回転させることがタスクです。2D配列の対角線は、北東方向に取られた1Dスライスであることに注意してください。 入力 妥当な形式の1桁の数字の空でない長方形の2D配列。配列は正方形ではないことに注意してください。 出力 同じ配列ですが、各対角線が1ステップ右に回転しています。 例 3x4入力配列を考えます 0 1 2 3 4 5 6 7 8 9 0 1 この配列の対角線は 0 4 1 8 5 2 9 6 3 0 7 1 回転したバージョンは 0 1 4 2 8 5 3 9 6 7 0 1 したがって、正しい出力は 0 4 5 …

4
マインスイーパボードの反転
マインスイーパは人気のあるコンピューターゲームで、おそらくプレイに時間を浪費しているので、各非地雷セルがいくつの隣接地雷を持っているかのヒントに基づいて、長方形のグリッド内の地雷であるセルを明らかにしようとします。また、まだプレイしていない場合は、ここで行います。 マインスイーパグリッド(ボード)についての気の利いた数学的な事実は、次のとおりです。 ボードとその補数の鉱山総数は同じです。(証明) つまり、マインスイーパグリッドが完全に表示されている場合、そのグリッド上のすべての数値の合計、つまり鉱山の合計は、グリッドの補数の鉱山の合計、つまりすべての鉱山が置き換えられたグリッドに等しくなります非地雷とすべての非地雷が地雷に置き換えられました。 たとえば、マインスイーパグリッドの場合 **1.. 34321 *2**1 鉱山の合計は1 + 3 + 4 + 3 + 2 + 1 + 2 + 1 = 17です。 グリッドの補数は 24*** ***** 3*44* 合計で2 + 4 + 3 + 4 + 4 = 17になります。 任意のマインスイーパグリッドをテキスト形式で取り込むプログラムを作成します。ここで*は、地雷を表し、地雷は非地雷セルに隣接する地雷の数1を8表します。.または0または (スペース)を使用して、私の隣人のいないセルを選択できます。入力グリッドに正しくマークが付けられていると想定できます。つまり、各非地雷セルは、それに隣接する地雷の合計数を、直交または斜めに正確に示します。 あなたのプログラムが同じ形式でグリッドの補数を印刷する必要があります(これを用いた.、0または あなたが入力に期待されるような)。 バイト単位の最短コードが優先されます。 プログラムの代わりに、入力グリッドを文字列として受け取り、補数グリッドを出力または返す関数を作成できます。 入力または出力の末尾の改行は問題ありませんが、グリッドを形成する文字以外の文字は他にないはずです。 1×1グリッドが最小の入力であると想定できます。 テストケース 補数の補数が元のグリッドであるため、すべての入力と出力を交換できます。グリッドは、さらにテストケースのために回転させることもできます。 …

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