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

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

24
イライラして入力を待つ
今日のタスクは、入力を取得するための時間制限を実装することです。これは、ほとんどの言語で達成するのがかなり面倒だと感じたタスクです。 ユーザーに入力を求めるプログラム関数を作成します。ユーザーが入力を提供した直後に、メッセージinput receivedを出力して実行/リターンを終了します。ただし、ユーザーが入力を提供するために10秒以上待機する場合は、メッセージno input receivedを出力して実行/リターンを終了します。 入力はstdin(コンソール)または同等であり、関数またはプログラムの引数ではありませんが、出力はto stdout、関数の戻り値、またはその他の受け入れられる出力メソッドのいずれかです。 任意の量の入力を要求できます。1文字、行、単語、または少なくとも1文字を待つ限り、言語で最も短い方法を入力できます。 10秒が経過した後ではなく、入力を受信したらすぐに出力する必要があります。 10秒が経過したら、終了する必要がありますno input received。印刷後、入力を待つことはできません。 これは非常に小さなウィンドウであるため、入力が10秒経過してからテキストが画面に出力されるまでの間に渡されないと想定することができます。また、あなたの言語の組み込みの同等物sleepが一貫して、完全に完璧であると仮定するかもしれません。 これはcode-golfで、最少バイトが勝ちます!
39 code-golf 

21
レーベンシュタイン距離
このような編集距離の質問は数多くありますが、レーベンシュタイン距離を計算するプログラムを書くのは簡単な質問ではありません。 博覧会 2つの文字列間のレーベンシュタイン編集距離は、1つの単語を別の単語に変換するための挿入、削除、または置換の可能な最小数です。この場合、挿入、削除、および置換の各コストは1です。 例えば、間の距離rollとは、rolling削除が1のコスト、そして私たちは3 characterrsを削除する必要があるため、3です。置換のコストは1なので、tollとの間の距離はtall1です。 ルール 入力は2つの文字列になります。文字列は小文字で、文字のみを含み、空ではなく、最大100文字の長さであると想定できます。 出力は、上記で定義したように、2つの文字列の最小レーベンシュタイン編集距離になります。 コードはプログラムまたは関数でなければなりません。名前付き関数である必要はありませんが、レーベンシュタイン距離を直接計算する組み込み関数にすることはできません。他のビルトインが許可されます。 これはコードゴルフであるため、最短の答えが勝ちます。 いくつかの例 >>> lev("atoll", "bowl") 3 >>> lev("tar", "tarp") 1 >>> lev("turing", "tarpit") 4 >>> lev("antidisestablishmentarianism", "bulb") 27 いつものように、問題が不明な場合はお知らせください。幸運と良いゴルフ! カタログ var QUESTION_ID=67474;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=47581;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"http://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else …
39 code-golf  string 

21
不可能なダーツスコア
ダーツのチェックアウトには素晴らしい質問がありますが、これがすでに質問されていないことに驚きました:ダーツとコードゴルフの出会い あなたの挑戦は、「n」ダーツの最大スコアを下回る「n」ダーツでは不可能なスコアを計算することです。たとえば、n = 3の場合、可能な最大スコアは180なので、[163,166,169,172,173,175,176,178,179]を返します 最低限のルールの概要: 1本のダーツで可能なスコアは次のとおりです。 0(ミス) 1-20、25、50 1〜20のダブルまたはトリプル ルール: 標準コードのゴルフ規則が適用されます 言語で許可されている方法で単一のパラメーター「n」を取り、nダーツでは得られない最大スコア以下のすべての一意のスコアのリスト/配列を返す必要があります。これらの値をコンソールに出力することもできます。 結果の順序は重要ではありません バイト単位の最短コードが勝つ
39 code-golf 

30
時計の文字盤を表示する
次のように、時計の文字盤に12個の数字を表示します。 12 11 1 10 2 9 3 8 4 7 5 6 グリッドを見やすくするために、ドットのあるものを次に示します。 ...........12............ .....11...........1...... ......................... .10...................2.. ......................... ......................... 9.......................3 ......................... ......................... ..8...................4.. ......................... ......7...........5...... ............6............ グリッドがより正方形に見えるように、2倍に幅が引き伸ばされていることに注意してください。 また、2桁の数字は1桁の数字に合わせて配置されていることに注意してください。9桁が左に揃うはずです。 結果を複数行の文字列(行のリストではなく)として返すか出力します。末尾のスペースはオプションです。最後の改行もオプションです。

30
私は宇宙船の浮浪人を作りました!
前書き: 触発さのこのコメント@MagicOctopusUrn上@Emignaの05AB1E答え私のために『それはただのバグだったの挑戦』: 8F9ÝÀNð×ý}».∊私は宇宙船の浮浪人を作りました!そして、私は皆、12バイトの編集を提案することに興奮していました。– 魔法のタコUr 17年7月17日20:10 これは05AB1E(レガシー)プログラムであり、次の結果になります。 1234567890 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 …

19
ソーラーシステムを作成する
イントロ これは、最近コンピューターゲームを作成しているときに直面した実際の問題に基づいており、コードゴルフの素晴らしいラウンドに役立つと思いました。 星には、さまざまな量の熱を出す7つの主要なスペクトルクラスがあります。星の周りの惑星の地質は、星から受け取った熱の量に大きく影響されます。これは、スペクトルクラスと星からの距離の要因です。したがって、水星は実質的に融解しており、海王星は凍結しています。 私のゲームの銀河は手続き的に生成され、与えられた星の惑星タイプをランダムに選択することは、本当の「ifステートメント地獄」であることが判明しました! チャレンジ メソッドは、最小熱しきい値、最大熱しきい値、および乱数に基づいて、星のクラスに適した惑星タイプのリストから1つの惑星を選択する必要があります。簡単にするために、この課題では太陽のようにクラスGの星のみを使用します。 入力 heat惑星が星から受け取った熱量を表す4〜11の整数。 変数 この表は、に基づいて可能な惑星を示していますheat。あなたの方法は、最初に、ヒートミニとヒートマックスに基づいて利用可能な選択肢を狭めheat、2つまたはその間に収まる必要があります。例えば、10のヒートで通過したのは、砂漠、鉄、溶岩だけです。 Planet type Heat min Heat max Random Chance Gas Giant 4 9 15 Ice 4 6 10 Ice Giant 4 6 10 Gaia class 5 7 10 Dense Atmosphere 7 9 10 Desert 7 10 25 Iron 7 10 14 …
39 code-golf  random 

30
バンプはありますか?
正の整数のリストが与えられると、2つの近傍よりも大きいか、2つの近傍よりも小さい(「バンプ」)要素があるかどうかを判別します。明確にするために、バンプは隣人が1人しかいないため、リストの最初または最後の項目にはなりません。 プログラムは、バンプのないリストまたはバンプのあるリストにそれぞれ対応する2つの一貫した値のいずれかを出力する必要があります。値が何であるかは重要ではありません。自分で選択することができます。 これはコードゴルフであるため、回答はバイト単位で記録され、バイト数は少ない方が良いでしょう。 テストケース [] -> False [1] -> False [1,2] -> False [1,2,1] -> True [1,2,2] -> False [1,2,3] -> False [1,2,2,1] -> False [1,2,2,3] -> False [1,2,1,2] -> True [1,3,2] -> True [3,1,2] -> True [2,2,2] -> False

30
日曜日にのみ失敗した質問がありました
インスピレーションを受けた日曜日に1回だけ失敗した単体テストがあり、日曜日にエラーをスローするだけのプログラムまたは関数を作成し、他の日に正常に終了しました。 ルール: 入力を使用したり、通常のIOメソッドを使用して出力を表示したりすることは、STDERRまたは同等の言語に出力する場合を除きます。エラーの副産物である場合は、STDOUTに出力できます。 関数は、何も出力しない限り、非日曜日に値を返す場合があります プログラムは、一貫している限り、任意のタイムゾーンまたはローカルタイムゾーンの日曜日を使用できます。 エラーは、ゼロ除算エラーや初期化されていない変数の使用など、プログラムを異常終了させるものです。これは、エラーが発生した部分の後にコードが追加された場合、日曜日に実行されないことを意味します。 Pythonに相当するエラーを手動で作成するステートメントを使用することもできますraise。 これには、実行時エラー、構文エラー、コンパイル中のエラーが含まれます(幸運を祈ります!) エラーには、エラーがないことを区別する記号が必要です。 これはcode-golfなので、各言語で最も短いバイト数が勝ちです! 私は答えを確認するために日曜日まで待つ必要があります;)

3
このアルカサルを私のために解決してください
最近、アルカザールと呼ばれるゲームをプレイしています。ボードパズルゲームです。1つのドアから入り、すべての広場を通過し、別のドアから出ることが目標です。唯一のルールは次のとおりです。 一度入力し、一度離れます。 すべての正方形を通過します。 正方形を複数回通過しないでください 以下の画像は、アルカサルのボードとその右側の解決済みパズルの例を示しています(もちろんこれは簡単なパズルです)。 http://www.theincrediblecompany.com/try-alcazarでさらにパズルを見つけて、PlayStoreでゲームをダウンロードできます(PS:広告ではありません)。 私の問題は、1つのレベルを除いて、ゲームをほぼ終了したことです。私はそれを解決する方法を見つけることができません。したがって、私が提案する課題は、通常の1可解2アルカサルレベルを解決するアルゴリズムを作成することです。 もちろん、画像を読み取ってパズルを解くために画像インタープリターを作成するように誰かに求めているわけではありません(または私ですか?)。そこで、私はボックス描画文字を使用して上記のパズルを作り直しました。パズルとその解決策は次のようになります。 ╔═══════╗ ╔═══════╗ ║▒ ▒ ▒ ▒║ ║┌─┐ ┌─┐║ ║ ║ ║ ║│ │ │║│║ ╣▒ ▒ ▒║▒╠ ╣│ └─┘║└╠ ║ ══╦═╩═╣ ║│══╦═╩═╣ ║▒ ▒║▒ ▒║ ║└─┐║┌─┐║ ║ ║ ║ ==> ║ │║│ │║ ╣▒ ▒║▒ ▒║ ╣┐ │║│ │║ ║ ║ ║ …

15
Wordsで20に数えます!
次の長さ区切りの単語リストを使用します。 https://github.com/Magic Octopus Urn / wordListsByLength n 有効な例は、1から20までの長さの各リストから1ワードを出力します。 a an and hand hands handle handles abandons abandoned understand outstanding newfoundland understanding characteristic characteristics characterization characterizations characteristically characterologically chemotherapeutically または(配列): ['a', 'an', 'and', 'hand', 'hands', 'handle', 'handles', 'abandons', 'abandoned', 'understand', 'outstanding', 'newfoundland', 'understanding', 'characteristic', 'characteristics', 'characterization', 'characterizations', 'characteristically', 'characterologically', 'chemotherapeutically'] 代わりに(以外の印刷可能な非アルファベット区切り文字\n): …

30
私のメールをマークしてください!-ASCIIバーコード
4ステートバーコード 多くの郵便サービス(英国郵政、カナダ郵便、米国郵便など)は、4州のバーコードを使用して郵便に関する情報をエンコードします。ASCIIでレンダリングされると、次のようになります。 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4ステートバーコードはバーの列です。各バーは上向き、下向き、またはその両方に延長でき、4つの可能性があります。これは、各バーが基本的に4桁を表すことを意味します。 | | バー:| | | | | | 数字:0 1 2 3 …

30
最初に複製された要素を見つける
1からa.lengthの範囲の数値のみを含む配列aが与えられた場合、2番目のオカレンスが最小のインデックスを持つ最初の重複する数値を見つけます。つまり、重複する番号が複数ある場合、2番目のオカレンスのインデックスが他の番号の2番目のオカレンスよりも小さいインデックスを返します。そのような要素がない場合、プログラム/関数の動作が未定義になる可能性があります。 例: の場合a = [2, 3, 3, 1, 5, 2]、出力は firstDuplicate(a) = 3。 重複は2つあります。番号2と3です。2番目に出現する3は、2番目に出現する2よりもインデックスが小さいため、答えは3です。 の場合a = [2, 4, 3, 5, 1]、出力は firstDuplicate(a) = -1。 これはcode-golfであるため、バイト単位の最短回答が優先されます。 ボーナス:O(n)時間の複雑さとO(1)追加のスペースの複雑さでそれを解決できますか?

29
ピラミッド(または高速道路)を出力する
長さが偶数で空の文字列sがなく、その高さを表す正の整数nが与えられた場合、次の規則を使用してピラミッドを構成します。 ピラミッドには、空でない行がn行含まれている必要があります。末尾の改行が許可されます。各1 <= i <= nについて、i番目の行には、個々の文字がインプレースでi回繰り返される文字列が含まれている必要があります。abcdは3回繰り返され、aaabbbcccdddになります。各行の中央が垂直に揃うように、各行の中央にパディングスペースを配置する必要があります。各行の末尾にスペースを追加できます。また、最初の行の前に最大1つの改行を含めることができますが、他の空白を含めることはできません。 入力文字列が回文であるとは限りません。 テストケース s = 'o-o o-o', n = 10: o-o o-o oo--oo oo--oo ooo---ooo ooo---ooo oooo----oooo oooo----oooo ooooo-----ooooo ooooo-----ooooo oooooo------oooooo oooooo------oooooo ooooooo-------ooooooo ooooooo-------ooooooo oooooooo--------oooooooo oooooooo--------oooooooo ooooooooo---------ooooooooo ooooooooo---------ooooooooo oooooooooo----------oooooooooo oooooooooo----------oooooooooo

30
小冊子を印刷する
本を読むのは簡単ですが、本を印刷するのは少し難しいかもしれません。小冊子を印刷するとき、プリンタは左から右に読むために特定の方法でページを配置する必要があります。これを行うには、次のようなパターンを使用します n, 1, 2, n-1, n-2, 3, 4, n-3, n-4, 5, 6, n-5, n-6, 7, 8, n-7, n-8, 9, 10, n-9, n-10, 11, 12, n-11… テストケース 4ページの小冊子: 4, 1, 2, 3 8ページの小冊子: 8,1,2,7,6,3,4,5 12ページの小冊子: 12,1,2,11,10,3,4,9,8,5,6,7 16ページの小冊子: 16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9 20ページの小冊子: 20,1,2,19,18,3,4,17,16,5,6,15,14,7,8,13,12,9,10,11 仕事 あなたの仕事はn、4の倍数である整数が与えられると、本の印刷に使用できる数字の配列を表示することです。nページのです。 注意:スペース、コンマ、ハイフン、または括弧で区切られているかどうかにかかわらず、出力が正しい数値を生成する限り、ソリューションを取得するための任意の方法を使用できます。 これはコードゴルフの質問なので、回答はバイト単位でスコア付けされ、最も少ないバイトが勝ちます。

3
ツールアシストコードゴルフ
TASゴルフ コードゴルフツイストを備えたツールアシストスピードランのスタイルで、この課題の目標は、選択したプログラミング言語で元のスーパーマリオブラザーズゲームのワールド1-1をできるだけ少ないバイトで完了することです。以下で説明する形式のゲーム内コント​​ローラー入力のみを使用します。プログラムは、このチャレンジ専用に作成されたこの形式の行のリストに出力する必要があります。stdout up down left right start select A B 最初のフレームから開始して、各改行は特定のフレームのコントローラー1の入力を表します。フレームごとのボタンの順序は重要ではなく、任意の量の改行以外の空白で区切ることができます。ボタン名のすべてまたはすべて、または一部を行ごとに含めることができます。たとえば、Dパッドを3フレーム右に押してからAを押す単純なPythonプログラムは次のようになります。 for _ in range(3): print('right') print('A') そして、その出力(検証のためにエミュレータに入力します)は次のようになります。 right right right A ここでは、「成功」を、上記の世界1-1の終わりに旗に到達することと定義しています。この例のPython提出のスコアは、成功した場合(成功しなかった場合)、44バイト、またはPythonプログラムの元の長さになります。 現在の最速TASに基づいて作成した作業入力ファイルの例については、このGithub Gistを参照してください:https ://gist.github.com/anonymous/6f1a73cbff3cd46c9e1cf8d5c2ff58e1 このファイルはゲーム全体を完了することに注意してください。 サブフレーム入力を入力する方法はありません。また、プレーヤー2のコントローラーに入力を入力する方法はありませんが、レベルまたはゲームを完了するために必要な(または有用な)べきではありません。 使用されるSMBのバージョンは、元のUSA / Japan iNES ROM(md5sum 811b027eaf99c2def7b933c5208636de-USAバージョンは日本語バージョンとまったく同じであるため、どちらでも動作します。ROMは一般的にラベル付けされているSuper Mario Bros (JU) (PRG 0)か、類似しています)。 提出物をテストするには、プログラムを実行し、それらstdoutをinput.txtファイルにパイプして、mario.luaこのチャレンジ用に作成したこのLuaスクリプトを使用してFCEUXにロードします。 for line in io.lines('input.txt') do local t = {} for …
39 code-golf  game 

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