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

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

30
どれくらい書く必要がありますか?
数字を書くことは、プログラミングのHelloの世界の1つであり、多くの場合1〜10です。 たくさんの数字を書きたい!多く、多くの数字。しかし、いくつの数字を書く必要がありますか? 仕事 整数の入力が与えられた場合、0から入力までの範囲のすべての整数を含む文字列に含まれる桁数を出力する数値を出力として指定します。否定識別子( "-")は単一の文字としてカウントされます。 I / Oの例 入力:8 書き込み:0,1,2,3,4,5,6,7,8 出力:9 入力:101 書き出し:0,1,2,3 ....、99,100,101 出力:196 入力:102 書き出し:0,1,2,3 ....、100,101,102 出力:199 入力-10 書き込み済み:0、-1、-2、-3、-4、-5、-6、-7、-8、-9、-10 出力:22 これはコードゴルフです。最も少ないバイト数が勝ちです!

22
スノーボールファイトKoTH!
結果(2017年5月22日21:40:37 UTC) Master18ラウンドで勝ち、2ラウンドで負け、0ラウンド Save Oneで15ラウンドで勝ち、3ラウンドで負け、2ラウンド Machine Gunで14ラウンドで勝ち、3ラウンドで負け、3ラウンドで Monte Bot勝ち、14ラウンドで勝ち、3ラウンドで負け、3ラウンドで Amb Bot勝った12ラウンド、8ラウンド負け、タイ0ラウンド Cowardが11 ラウンド勝ち、3ラウンド負け、6ラウンド Pain in the Nashが11ラウンド勝ち、9ラウンド負け、タイ0ラウンド Nece Botが10ラウンド勝ち、7ラウンド負け、タイ3ラウンド Naming Things is Hardが10ラウンド勝ち、 7ラウンドを失い、3ラウンド The Procrastinatorで10 ラウンドを勝ち、8ラウンドで失い、2ラウンド Yggdrasilで10ラウンドを勝ち、10ラウンドを失い、0ラウンド Simple Botで9ラウンドを勝ち、4ラウンドを失い、7ラウンド Table Botで9ラウンドを勝ち、6を失ったラウンド、タイ5ラウンド Prioritized Random Botで8 ラウンド勝ち、7ラウンドで負け、5ラウンドでタイ Upper Hand Bot7ラウンドで勝ち、13ラウンドで敗れ、0ラウンド Aggressorで6ラウンドで勝ち、10ラウンドで敗れ、4ラウンド Insaneで5ラウンドで勝ち、15ラウンドで敗れ、0ラウンドで The Ugly Duckling勝ち、4ラウンドで勝ち、16ラウンドで敗れ、0ラウンドで Know Bot勝った3ラウンド、14ラウンドを失い、3ラウンドで Paranoid Bot勝った0ラウンド、19ラウンドを失い、1ラウンドで Panic Bot勝った0ラウンド、19ラウンドを失って、1ラウンドを獲得 …

30
ボールの弧を描く
投げられたボールの放物線の軌跡を描きます。 入力は、ボールの初期上昇速度、正の整数vです。1秒ごとに、ボールは1スペースを右に移動しv、垂直にスペースを空けvて1から、重力によりによって減少します。したがって、上昇速度は最終的にからvまで0下降し-v、最終的に初期の高さに戻ります。 ボールの位置は放物線を描きます。水平位置でx、その高さはy=x*(2*v+1-x)/2で(0,0)、ボールの初期位置は左下にあります。 ボールの軌跡のASCIIアートを、Oそれが占める座標上のを使用して出力します。出力は、時間の経過に伴うパスのアニメーションではなく、単一の複数行のテキストである必要があります。 出力には、先頭の改行がなく、最大で1つの末尾の改行が必要です。一番下の行は、画面の左端と同じ高さである必要があります。つまり、余分な先行スペースはありません。末尾のスペースはOKです。出力線幅が出力ターミナルに収まると仮定することができます。 v = 1 OO O O v = 2 OO O O O O v = 3 OO O O O O O O v = 4 OO O O O O O O O O v = 10 OO O O O O O …

8
カメのフィズバズ
問題の説明 あなたがグリッド上のカメだと想像してください。2つの数字fとbが与えられ、東を向いています。次の規則に従って、発生した各セルをカウントしながら、グリッド全体で行進を実行します。 デフォルトでは、現在のセルにカウントを書き込んでから先に進みます。 カウントがfで割り切れる場合、次のように記述します。F、現在のセルに、右折してから前方に歩きます。 カウントがbで割り切れる場合、次のように記述します。B、現在のセルに、左に曲がってから前方に歩きます。 カウントがfとbの両方で割り切れる場合、次のように記述します。FB現在のセルに、次に歩きます。 すでに訪れた広場に着いたら、立ち止まります。 たとえば、f = 3およびb = 5を使用してこれらのルールに従うと、次のようなパターンが生成されます。 F 28 29 FB 1 2 F 26 4 F B B F 23 7 22 8 F B B F 19 11 F 17 16 FB 14 13 F チャレンジ fとに対応する2つの数値を入力として受け入れるプログラムまたは関数を記述します bに、上記の規則で指定されたこれらの数値のパターンを出力として生成作成します。 フォーマット要件: 各セルの幅は2文字です セルの内容はこれらの2文字内で右揃えになります 同じ行のセルはスペースで区切られます セルの最初の列には空でないセルが含まれている必要があります …
35 code-golf  grid 

9
モンスターを認識させてください
バックグラウンド コンピューターゲームNetHackは、コンピューターゲームでのグラフィックスの使用が広く確立される前の1987年に遡ります。ゲームにはたくさんのモンスターがいて、一度に画面に収まる必要がある可能性があるため、モンスターは非常に最小限の方法で描かれます。モンスターは単にASCII文字として画面に描かれます。 たくさんのモンスターがあることに加えて、たくさんの種類のモンスターがあります。どちらがどれであるかを知ることは重要です。子猫とドラゴンを見たとき、あなたは異なる反応をしなければなりません。そのため、ASCIIのほとんどはモンスターを表すために使用されます。たとえば、子猫はfで、赤いドラゴンはDです。つまり、特定のモンスターがどのように見えるかを知ることは、ゲームの後半で遭遇した場合にそれを認識するのに役立つため、非常に役立つことがあります。(ASCII文字よりも多くの種類のモンスターがあるので、それらのいくつかは共有していることに注意してください;赤いドラゴンと青いドラゴンは両方Dです。) 仕事 プログラムは、入力としてNetHackモンスターの名前を取り、ゲーム内でそれを表すASCII文字を出力として生成する必要があります。プログラムは、入力が実際にはNetHackモンスターの名前であると想定できます。入力が無効な場合、クラッシュしたい場合、意味のない結果を生成する場合などがあります。 次のStack Snippetは、可能な入力を対応する出力に完全にマッピングするJSONオブジェクトです。 コードスニペットを表示 { "Aleax": "A", "Angel": "A", "Arch Priest": "@", "Archon": "A", "Ashikaga Takauji": "@", "Asmodeus": "&", "Baalzebub": "&", "Chromatic Dragon": "D", "Croesus": "@", "Cyclops": "H", "Dark One": "@", "Death": "&", "Demogorgon": "&", "Dispater": "&", "Elvenking": "@", "Famine": "&", "Geryon": "&", "Grand Master": "@", …

16
ストックタイムマシン
ストックタイムマシン tomorrowStocksNASDAQのお気に入りのビジネスの株価を含むデータセットにアクセスしました。このデータセットは、開いてから数分でインデックス付けされたコンテナです。各インデックスには、その時点の株価が含まれています。 // Assume the stock market opens at 9:30AM EDT // tomorrowStocks[] contains the prices of your target stock. // If the stock is $22 @ 10:30AM EDT tomorrowStocks[60] == 22 出力 あなたの仕事は、可能な限り最高の結果を判定することである1 purchaseと1 saleのを1 stock与えられたデータセットから。 落とし穴 ちょうど1つの株式を売買する必要があります。 あなたは購入しないことと同じ時間帯で販売しています。 販売する前に購入する必要があります。 テストデータ [1,2,3,4,5] # 4 [1,99,2,105] # 104 [99,1,99,100] # …

28
メリー・ゴルフマス、みんな!
それは皆クリスマスです、そしてここに祝うべきコードゴルフの挑戦があります。プレゼントを印刷するプログラムを作成する必要があります。具体的には、「メリークリスマス」という言葉。ただし、キャッチがあります。このプログラムは、12月25日の場合にのみ機能する必要があります。コードが他の日に実行された場合、プログラムはクラッシュするはずです。 これはCode-Golfなので、バイト数が最小の答えが勝ちです。 メリークリスマス!
35 code-golf  date 

30
三角形のアスペクト比を評価する
三角形の3つの辺の長さを与え、そのアスペクト比ARを評価します、次の式を使用してます。 どこで 三角形が等辺に近いほど、1そのアスペクト比に近くなります。1有効な三角形のアスペクト比は、それ以上です。 入力 入力は、リストまたは必要に応じて同様のものにカプセル化できる3つの正の実数です。 3つのサイドレングスが入力される順序に関係なく、プログラムは同じ値を出力する必要があります。 これらの3つの数値は、常に三角形の有効な辺の長さです(sidelengthsのある縮退した三角形1で1あり2、入力として与えられません)。値が縮退三角形に極端に近くなった場合、浮動小数点の不正確さを心配する必要はありません(たとえばdivision by 0、入力でプログラムがエラーになることは許容されます[1, 1, 1.9999999999999999])。 入力はSTDIN、を介して、関数の引数、または類似のものとして与えることができます。 出力 出力は、1言語で許容される標準精度以上の実数です。 出力は、に出力されSTDOUTたり、関数から返されたり、類似したものになります。 テストケース Inputs Output 1 1 1 1 3 4 5 1.25 42 42 3.14 ≈ 6.9476 14 6 12 1.575 6 12 14 1.575 0.5 0.6 0.7 ≈ 1.09375 得点 これはcode-golfであるため、バイト単位の最短回答が優先されます。

30
メルセンヌプライムですか?
数が素数であり、2 n -1の形式で記述できる場合、数はメルセンヌ素数です。ここで、nは正の整数です。 あなたの仕事は、正の整数を与えられて、それがメルセンヌ素数であるかどうかを決定することです。真実/偽の値を返す関数、またはIOを実行する完全なプログラムのいずれかを送信できます。 ルール: これはcode-golfであるため、可能な限り最短のバイトカウントでこれを行う必要があります。組み込みが許可されます。 標準的なゴルフの抜け穴が適用されます-外部ファイルからメルセンヌ素数を読み取ったり、プログラムにハードコードしたりすることはできません。 プログラムは、言語の標準整数サイズ内の値に対して機能するはずです。 テストケース 参考のために、(既知の)メルセンヌプライムのリストはこちらにあります。便利なテストケースは次のとおりです。 2 -> False 1 -> False 20 -> False 51 -> False 63 -> False 3 -> True 31 -> True 8191 -> True みなさん、メリークリスマス!あなたが祝うものは何でも、素晴らしい休日を過ごしてください:)

24
チェックメイト(別名小便器の問題)
私のPrecalcの先生は、彼が作成した(またはxkcdに触発されて盗んだ可能性が高い)彼のお気に入りの問題の1つを抱えています。「チェックメイト」とは、すべての小便器がすでに使用されているか、隣に使用済みの小便器がある状況です。たとえば、人がの場合、nX X-X--X チェックメイトと見なされます。人はすでに占有されている小便器の隣にある小便器を占有できないことに注意してください。 仕事 プログラムはstdin、、コマンドライン引数、または関数引数を介して数字を受け取ります。プログラムは、入力された小便器の数でチェックメイトが発生する可能性のある方法の数を出力または返します。 例 0 -> 1(ヌルケースチェックメイトとしてカウント) 1 -> 1(X) 2 -> 2(X-または-X) 3 -> 2(X-Xまたは-X-) 4 -> 3(X-X-、-X-XまたはX--X) 5 -> 4(X-X-X、X--X-、-X-X-、または-X--X) 6 -> 5(X-X-X-、X--X-X、X-X--X、-X--X-または-X-X-X) 7 -> 7(X-X-X-X、X--X-X-、-X-X--X、-X--X-X、X-X--X-、X--X--Xまたは-X-X-X-) 8 -> 9(-X--X--X、-X--X-X-、-X-X--X-、-X-X-X-X、X--X--X-、X--X-X-X、X-X--X-X、X-X-X--X、X-X-X-X-) ... 得点 バイト単位の最小プログラムが優先されます。

15
トイレで敬意を払う
もちろん、SEネットワークはトイレで敬意を払う方法について非常に知識がありますが、おさらいが必要な人にとっては、敬意を払うことはトイレを洗い流すことなどを意味します。可能な限り他から。 チャレンジ どのストールが文字列として使用されているかを示す一連のストールの設計図を考えると、最も敬意を払ってビジネスを行う場所である関数またはプログラムから返されるか、印刷する必要があります。 入力 0 1 2 3 4 5 <- The stall number which is not actually visible in the input. | | |-| |-|-| <- the stalls ストールには、左から右へ昇順で番号が付けられます。常に少なくとも1つの空のストールがあります。入力には最大50のストールがあります。必要に応じて、入力を0sと1sまたはブール値の配列または文字列として受け取ることもできます。 使用中のストールに-はそれらがあります(パイプ間)。 出力 最も敬意を表するストールは、使用中のストールから平均して最も離れているストールです。2つのストール間の距離は、それらの上の数値の差の絶対値です。 明確にするために、隣の屋台だけでなく、すべての屋台からの平均距離を見つけています。 あなたはそこに行くために最も敬意を表するストールの最小数を空にする必要があります。 例 Input: |-| |-| OR 101 Output: 1 Input: | | |-| |-|-| OR 001011 …
35 code-golf  string 

9
キクセル-量子ピクセル
前書き キキセルは量子ピクセルです。従来のピクセルと同様に、3つの整数値(赤、緑、青)で表されます。ただし、キクセルは、組み合わせではなく、これら3つの状態の上位にあります。このスーパーポジションは、キクセルが観測されるまで持続します。この時点で、3つの古典的なピクセルのいずれかに崩壊します。RGB(255,0,0)、RGB(0,255,0)およびRGB(0,0,255)。 仕様 表現 各QUIXELは、0と255の間の3つの整数の配列として表されr、gそしてbそれぞれ。 スーパーポジション 各キクセルは、それぞれR、Gおよびで表される赤、青、緑の状態の間の上位にありBます。 観察 各キクセルが観察されると、3つの状態のいずれかに崩壊します。各古典的状態の確率はR = (r + 1) / (r + g + b +3)、 G = (g + 1) / (r + g + b + 3)およびB = (b + 1) / (r + g + b + 3)です。このように、各古典的な状態は常に、ゼロ以外の確率で現れます。 入力 関数またはプログラムは、キクセルのイメージを取得する必要があります。これを行う方法は柔軟です。多次元配列などを使用したファイル名はすべて受け入れられます。 出力 関数またはプログラムは、古典的なピクセルの画像を生成する必要があります。この生成された画像のデータ構造も柔軟です。全ての画素が、これら三つの一つであることに注意してください:RGB(255,0,0)、RGB(0,255,0)およびRGB(0,0,255) 出力は確定的であってはなりません。これらは量子ピクセルです!同じ入力でも異なる出力になるはずです。 …

6
色彩パズルを解く
Puzzling.SEの友人に次のパズルが投稿されました。この色彩パズルは常に解決可能ですか?エドガー・G。ここでプレイできます。 パズルの説明 m x n3つの異なる色のタイルを含むグリッドがある場合、色が異なる場合は、隣接する2つのタイルを選択できます。これらの2つのタイルは、3番目の色、つまり、これら2つのタイルで表されない1つの色に変換されます。すべてのタイルが同じ色を持っている場合、パズルは解決されます。どうやら、1ができることを証明どちらも場合は、このパズルは、常に解決可能であることも3で割り切れるされません。mn もちろん、これは解くアルゴリズムを求めます。このパズルを解決する関数またはプログラムを作成します。「副作用」を持つ関数(つまり、stdoutいくつかの厄介なデータ型の戻り値ではなく出力がオンになっている)は明示的に許可されていることに注意してください。 入出力 入力はm x n、整数1、2および3(または0、便利な場合1、2)で構成される行列になります。この入力は、適切な形式で入力できます。どちらmとnしている>1あなたは、パズルが解決されていないと仮定して3で割り切れないと その後、パズルを解きます。これには、「変換」される2つの隣接するタイルを繰り返し選択する必要があります(上記を参照)。これらのタイルの2つの座標を、解決アルゴリズムが実行した各ステップに対して出力します。これは、任意の健全な出力形式でもかまいません。座標の0から1のインデックス付けと、行または列のどちらを最初にインデックス付けするかを自由に選択できます。ただし、これを回答に記載してください。 元の8x8のケースでは、アルゴリズムは妥当な時間内に実行されるはずです。明示的に許可されていない、それを完全にけだもの強制、あなたのアルゴリズムがもとで実行する必要がありますつまりO(k^[m*(n-1)+(m-1)*n])とk解決のために必要なステップの数。ただし、ソリューションは最適である必要はありません。リンクされた質問で与えられた証拠は、これを行う方法についてのアイデアを与えるかもしれません(例えば、最初に垂直に隣接するタイルのみを使用してすべての列を実行し、次にすべての行を実行します) テストケース これらのテストケースでは、座標は1から始まり、行に最初にインデックスが付けられます(MATLAB / Octaveおよびおそらく他の多くのものと同様)。 Input: [1 2] Output: (result: all 3's) [1 1],[1,2] Input: [ 1 2 3 1 ] Output: (result: all 1's) [1 1],[2 1] (turn left column into 2's) [2 1],[2 2] (turn right column …

16
文字列の「運」を決定する
文字列を指定すると、その文字列の「運」を返します。 文字列の運は、このチャレンジの目的のために完全に補ったので、次のように決定される整数です。 文字列の基本的な運は1です。 単語「lucky」(大文字と小文字は区別されません)と共有する連続した文字ごとに、luckに2を掛けます。たとえば、文字列が「lu mberjack」または「sma ck」の場合、4を掛けます。 2 ^連続した文字の共有数。) 共有文字は、「ラッキー」に表示されるのと同じ順序である必要がありますが、同じ値の単語のどこからでも開始できます(「luc」は「cky」と同じ8 *乗数です)。 単語に複数のオカレンスがあり、ラッキーと連続した文字を共有している場合、文字の最も長い連続した文字列を使用します。 任意の文字については、「omen」という単語と共有し、運から2を引きます。 文字を任意の順序で任意の回数一致させることができます。たとえば、文字列 "nnnnnomemenn"は24運(12の一致する文字)を失います 例: luck("lucky") >>32 2 ^ 5(連続した5文字)= 32 luck("firetruck") >>6 2 ^ 3-2(前兆と共有されるuck、eからの連続した3文字) luck("memes") >>-7 1-8(基本額、4は「前兆」と共有) これはコードゴルフであるため、バイト数が最も少ない答えが優先されます。 任意の方法で入出力できます-関数の作成、標準入力の使用など。 関数の場合、その言語にとって意味のあるデータ型を想定します。(たとえば、JavaScriptでは、aが渡され、a Stringを返しますNumber) 編集:入力はすべて小文字であると想定できます。
35 code-golf  string 

30
1から3のように簡単
正の整数を取り込むプログラムまたは関数を作成します。入力が有効であり、文字列として受け取ることができると想定できます。番号が 123 234 345 456 567 678 789 その後、真の値を出力します。それ以外の場合は、偽の値を出力します。たとえば、入力 1 2 3 12 122 124 132 321 457 777 890 900 1011 1230 1234 すべて偽の出力になる必要があります。(入力には先行ゼロがないため、などのことを心配する必要はありません012。) バイト単位の最短コードが優先されます。

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