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

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

8
ボックスの高さマップ
さまざまなボックスのこのアスキーアート図をご覧ください。 +--------------------------------------------------------------+ | | | +-------------------------------+ +-------+ | | | | | | | | | | | | | | | +----------------+ | | | | | | | | | +-------+ | | | | | | | | | | | | +-------+ | | | +----------------+ …

9
キングオブザヒル-嘘つきのサイコロ
嘘つきのサイコロはかなりシンプルなサイコロゲームです。ルールにはいくつかの異なるバリエーションがありますが、最もよく知っているバージョンは次のとおりです。 各プレイヤーは5d6で始まります ラウンドの終わりにサイコロを集計する場合を除き、各プレイヤーは自分のサイコロを見ることができますが、どの敵のものも見ることはできません 任意のラウンドの開始時に、すべてのプレイヤーは現在持っているサイコロを転がします 次に、1人のプレーヤー(通常、これは前のラウンドの勝者または前回開始したプレーヤーの左側のプレーヤーのいずれかです。このKotHには前者を使用します。ランダムなプレーヤーが最初のラウンドを開始します)テーブルに特定の数字がいくつあるかを推測します(ONES ARE WILD) 入札は右側に続き、毎回高くなります(たとえば、3 5、3 6、4 2はすべて3 4よりも高くなりますが、3 3はそうではありません。4が高くなりますが、1に入札するとおそらく不利益); いずれかのプレイヤーがその前のプレイヤーを嘘つきと呼ぶまで この時点で、すべてのプレイヤーはサイコロを公開し、テーブルで最後に入札した数をすべてカウントします 合計が入札よりも低い場合、入札を行ったプレーヤーは、彼らを嘘つきと呼んだプレーヤーにダイスを与えなければなりません。そうでなければ、入札者を嘘つきと呼んだプレーヤーは、入札者にダイスを与えなければなりません彼らが少なくとも彼が入札した数と同じ数であれば、正確な数である必要はありません) あなたがサイコロを使い果たすと、あなたは失う 最後のプレイヤーが勝ちます 例えば: プレイヤー1には1,1,2,4,6があります プレイヤー2には1,2,2,3,5があります プレイヤー3には1,3,3,4,6があります プレイヤー1:3つのシックス。 プレイヤー2:4 2。 プレイヤー3:フォースリー。 プレイヤー1:5 2。 プレイヤー2:6 2。 プレイヤー3:6人のスリー。 プレーヤー1:6人の4人。 プレイヤー2:うそつき! 彼らはサイコロを公開し、(サイコロがワイルドであるため)サイコロとフォーを数えます。 実際には、正確に6つのフォーがあります。 したがって、プレイヤー2はプレイヤー1にダイスを与えます。 彼らはリロールし、プレイヤー1は次のラウンドを開始します。 このゲームをプレイするにはボットを作成する必要があります。次の抽象Javaクラスを実装する必要があります。 public abstract class Player { public Player() {} public String toString() { …

18
Iccanobifシーケンスを出力する
nOEISにA014258として文書化されている、Iccanobifシーケンスのth番目までのシーケンスを出力または返すプログラムまたは名前付き関数を作成します。がゼロの0場合、シーケンスのゼロ番目の要素()のみが出力されることに注意してくださいn。 シーケンスは、標準のフィボナッチシーケンスと同様に開始することで生成されますが、前の2つの数値を追加した後、結果を反転し、先行ゼロを削除します。少なくとも私にとって興味深い事実は、このシーケンスが厳密に増加していないことです(以下のリストを参照)。また、厳密にフィボナッチ数列以上であるようです(おそらくそうです)。 プログラムの入力は整数でなければなりません。 シーケンスの最初の20の数字は、視聴の楽しみのためにここに提供されています。 0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297, 8964541, 8389769 標準的な抜け穴は禁止されています。 最短のプログラムが勝ちます。 編集:シーケンスがゼロ番目の要素で始まり、ゼロの場合に含める必要があることを明確にするためのメモを追加しましたn。 IOの例: 0 -> 0 1 -> 0 1 6 -> 0 1 1 2 3 5 8 17 -> [0, 1, 1, 2, …

3
64ビット整数の因数分解
書き込みゴルフ STDOUT上の末尾の改行に続く(最後の改行が続く)標準入力から整数を読み取り、出力の素因数は改行で区切らアセンブリプログラムを、。 素因数は特定の順序である必要はありません。1素因数ではありません。 あなたのゴルフ(組み立て後)バイナリが8192バイトに収まらなければなりません。 プログラムは、それぞれ次の入力のいずれかを使用して10回実行することによりスコアリングされます。 8831269065180497 2843901546547359024 6111061272747645669 11554045868611683619 6764921230558061729 16870180535862877896 3778974635503891117 204667546124958269 16927447722109721827 9929766466606501253 これらの数字は、難易度の観点から大まかに分類されています。最初のものは、試行分割によって簡単に解決できるはずです。 この数字のセットに対する最適化は、質問の精神に反します。数字のセットはいつでも変更できます。プログラムは、これらだけでなく、任意の正の64ビット入力番号に対して機能する必要があります。 スコアは、上記の数値を因数分解するために使用されるCPUサイクルの合計です。 GOLFは非常に新しいため、ここにいくつかのポインターを含めます。あなたは読むべきGOLFのすべての命令およびサイクルコストと仕様を。Githubリポジトリのサンプルプログラムにあります。特に、入力/出力を示す階乗のサンプルプログラムを見てください。 を実行して、プログラムをバイナリにコンパイルしますpython3 assemble.py your_source.golf。次に、を使用してプログラムを実行するとpython3 golf.py your_source.bin、サイクルカウントも出力されます。-dフラグを使用--helpして、プログラムの終了時にレジスタの内容の値を確認します- すべてのフラグを確認するために使用します。

12
底の階乗の最後の非ゼロ桁
n b k入力の出力として3つの正の整数を指定するか、またはkの基本b表現の末尾のゼロの前の最後の桁を返すプログラムまたは関数を作成する必要がありn!ます。 例 n=7 b=5 k=4 factorial(n) is 5040 5040 is 130130 in base 5 the last 4 digits of 130130 before the trailing zeros are 3013 the output is 3013 入力 n b kここで、3つの正の整数2 <= b <= 10。 入力整数の順序は任意に選択できます。 出力 整数または整数リストとして返されるか出力される数字のリスト。 先行ゼロはオプションです。 あなたの解決策は、私のコンピューターで1分以内にすべてのサンプルテストケースを解決する必要があります(私は、近いケースのみをテストします。 例 提出物の正確性を確認するための新しいテストが追加されました。(これらは1分未満のランタイムルールの一部ではありません。) 入力=>出力(先行ゼロの省略を選択可能) 3 10 …

13
最速の西の銃、キングオブザヒルチャレンジ
これは、ラウンドロビンでのキングオブザヒルチャレンジです。西の最高のガンマンを見つけるのは戦いです! このコンテストに参加するには、2つの機能を作成する必要があります。最初の1つは、ガンマンの属性を設定し、2つ目は、ガンマンのメインロジック関数です。 属性関数 function () { var bot = { name: "testBot", numbOfBullets: 7, reloadSpeed: 1, shotsPerTurn: 1, moveSpeed: 2 } return bot } 属性関数には、いくつかの規則に従って設定する必要がある5つの変数が含まれます(例外はname任意の文字列です)。ガンマンに正確に合計15ポイントを費やす必要があります。15ポイントすべてを費やしていないガンマンは資格がありません。属性の仕組みは次のとおりです。 numbOfBullets -銃の弾数を定義します。 の初期値と最小値numbOfBulletsは1です。追加の弾丸ごとに1ポイントかかり、最大16個の弾丸に15ポイントが費やされます。 reloadSpeed -ガンマンが弾丸を使い果たした後に銃をリロードするのに必要なターン数を定義します。 基本値と最大値は4で、最小値は1です。この属性を1減らすと、2ポイントかかります。 shotsPerTurn -ガンマンが1ターンで撃てる回数を定義します。 基本値と最小値は1です。1ずつ増加するごとに3ポイントかかるため、ラウンドごとに最大6ショット、15ポイントを使用できます。上記のこの属性を上げるとnumbOfBullets、銃が保持できる以上の弾丸を撃つことができないため、逆効果です。 moveSpeed -ガンマンが1ターンで実行できるスペースの数を定義します。 基本値と最小値は1です。1ずつ増加するごとに3ポイント、最大6スピード、15ポイントが消費されます。ガンマンは、最大の移動速度まで、ターンごとに左または右に走ることができます。彼はまた、彼にボーナスを与えることができます(これについては後で説明します)。 上記の関数の例では、弾丸に6ポイント、リロード速度に6ポイント、動きに3ポイントを費やしています。 主な機能 function main(bulletsLeft, yourShots, enemyShots, yourMovement, enemyMovement) { var shots = []; …

5
StickStack番号
StickStackは、2つの命令のみを持つ非常にシンプルなスタックベースのプログラミング言語です。 | スタックの長さをスタックにプッシュします -スタックから上位2つの要素をポップし、それらの差を押し戻します(second topmost - topmost) 言語の詳細 スタックは、プログラムの開始時には空です。 すべての命令は、左から右に順番に実行されます。 スタックの数が2未満の場合、-命令は無効です。 実行の終了時に、スタックには正確に1つの数値が含まれている必要があります。 StickStackプログラムで任意の整数を生成できます。例えば: |||--||-- generates the number 2 through the following stack states: [] [0] [0, 1] [0, 1, 2] [0, -1] [1] [1, 1] [1, 1, 2] [1, -1] [2] StickStackコードを評価するには、このオンライン(CJam)エバリュエーターを使用できます。(コードの@Martinに感謝します。) タスク 入力または出力として整数を指定するか、指定された数値を出力するStickStackプログラムを表す文字列を返すプログラムまたは関数を作成する必要があります。 得点 主なスコアは、以下のテストケースのStickStackプログラムの合計の長さです。スコアが低いほど優れています。 すべてのテストケースでプログラムを実行し、スコアをカウントした場合にのみ、提出は有効です。 2次(タイブレーカー)スコアは、生成するプログラムまたは関数の長さです。 入力テストケース (各番号は異なるテストケースです。) …

12
グレートワンパスハント
コンプリート Wumpusシーズンは終了し、多くの悪質なWumpusと勇敢なハンターの生活が終わりました。some病で不道徳で実に愚かなハンターもいます。しかし、その日の終わりに、ヘックル博士のNascarHunterは、略奪品と栄光を手に入れました。私たちはあなたに敬意を表します、ああ勇敢な...ドライバー? Wumpusesはオープンシーズンで、世界中のハンターがWumpus Cavesに集まり、貴重なWumpus Peltを手に入れようとしています。 ゲーム いくつかのバリエーションを持つ、古典的なハンプザワンパスゲームに基づいています。 地図 十二面体。20の部屋があり、それぞれが他の3つの部屋に接続されており、基本的に3つのリングが間に橋を架けています。 ザ・ワンプス Wumpusは神秘的な獣です。それがどのように見えるかは確かではありませんが、すべてが凶暴であることに同意します。Wumpusは洞窟に住んでいて、死んだものを食べるのが好きです。Wumpusの隣の洞窟に死体がある場合、彼はそこに移動してそれを食べます。Wumpusがたまたまハンターを含む洞窟に移動した場合、Wumpusはハンターを殺して食べます。Wumpusが彼の近くに矢印を聞くと、彼はパニックしてランダムな部屋に走ります。 オプションの特性:これらは現在、ゲームをより面白くするために含まれていますが、あまりにも多くのランダム性を追加する場合、人気のリクエストで削除できます。 怒りに満ちた怒り:怒りに満ちた怒りは、3日間、20%の生存と暴れを持っています。暴れ回ると、彼は1日に2回ランダムに動きますが、それでも死体に引き付けられます。3日後、彼は死ぬでしょう。2回目の矢の射撃もWumpusを殺します。 さまようワンプス:毎日、ワンプスを誘発するものが他にない場合、25%の確率で移動します。 ハンターたち 4人のハンターが一度に洞窟に入ることができます。洞窟は暗いため、ハンターは見ることができませんが、他の感覚を使用できます。ハンターは、隣接する部屋でWumpusの匂いを嗅ぎ、隣接する部屋で死体の匂いを嗅ぎ、隣接する部屋で動いている他のハンターの音を聞き、隣接する部屋に矢が放たれるのを聞くことができます。 ハンターには2つのアクションがあります。撮影または移動です。ハンターは矢を隣の部屋や自分の部屋に向けて発射し、同様に移動できます。 ゲームプレイ 各ラウンドでは、ハンターはまず自分の周囲に注意を払い、次に1動きます。移動は矢印の前に発生するため、ハンターが移動する部屋に矢印が放たれた場合、ハンターは生き残ります。すべてのハンターの移動が行われた後、矢印が評価されます。1人の居住者と矢が同じ部屋にいる場合、居住者は撃たれて死亡します。2人以上の居住者が部屋を共有している場合、1人がランダムにヒットして死亡します。注:死体は居住者であるため、死体は部分的なシールドとして機能する場合があります。 すべてのハンターが移動した後、Wumpusが応答します。ハンターがWumpusと一緒に部屋に移動した場合、Wumpusは彼/彼女を食べます。Wumpusが移動すると、Wumpusは新しい部屋の居住者も食べます。 100日後、ハンターがWumpusを殺さなかった場合、またはfall落した犠牲者がいない場合、洞窟内で飢starで死にます。 コード すべてのソースコードは、ここにあります。誰かが私にstdIn / stdOutアダプタを書きたくない限り、すべての提出はJavaで行われるべきです;) ボットはHunterクラスを拡張する必要があります。Hunterに名前を付けるには、名前フィールドを設定するパラメーターなしでコンストラクターを追加します。応答するには、getResponse関数をオーバーライドします。この関数では、毎ターン、周囲の状況を知らせる5つのブール値の配列が渡されます。 ステータス0 =「おかしな匂いがする」 ステータス1 =「別のハンターが聞こえます」 ステータス2 =「死体の匂いがする」 ステータス3 =「矢印のカチャカチャという音が聞こえます」 ステータス4 =「同じ部屋で別のハンターを感じている」 Hunterクラスには2つのスロットがあります:nextMoveとnextDirection、それぞれ列挙型MoveとDirectionを使用します。移動はMOVEまたはSHOOTのいずれかであり、方向はLEFT、RIGHT、BACK、またはHEREです。方向は一貫しています。つまり、戻ると常に前の部屋に戻り、同じ部屋から入る場合、左と右は常に同じになります。ただし、別の方向から入る場合は、LEFTおよびRIGHTで別の場所に移動します。 独自のメソッドも自由に実装してください。記憶はトーナメント全体を通して持続します。つまり、ハンターは一度だけ構築されます。ただし、各ラウンドの開始時に、新しいゲームが開始されたことをハンターに知らせるためにnewGame()メソッドが呼び出されます。 得点 一度に4人のハンターが競います。殺された場合、Wumpusの毛皮は60ポイントの価値があり、生存しているすべてのハンターに均等に分割されます。フルラウンドロビンスタイルなので、4人のハンターの各組み合わせが一緒にプレイします。 5つのサンプルハンターが含まれています。4つは非常に基本的な機能で、もう1つはテストのためにユーザー入力を再生できます。 提案/リクエストがあれば、教えてください! 終わりが見えます! 世界のWumpusの人口は驚くべき速さで狩られています。6月17日水曜日にWumpuses保護法が可決されます。この日を過ぎると、洞窟でこれ以上ハンターは許可されなくなり、勝者が選ばれます。 スコアボード 注:謝罪、コードにバグがあり、複数のゲームでハンターが死んでいる可能性がありました。それを修正したので、全体的なランキングはあまり変わりませんが、統計は大きく変わります。 スコアが入り、ハンターの各セットをそれぞれ1000ゲームで実行します。NascarHunterとFullCoverageHunterがパックをリードし、AntiHunterの追加によりWumpusesの生存率が2%向上しましたが、彼らは今でも32%の生存率で吸盤足で揺れています。仲間のハンターからの矢は、これまで以上に洞窟の最大の脅威です。 1. NascarHunter : …

2
六角形のロッドscupltureに保持されている水
私は奇妙な彫刻に接着された六角形の棒の束を持っています。棒の長さは1〜99センチメートル(cm)で、断面積は1平方センチメートルです。すべてのロッドは、六角形の面で少なくとも1本の他のロッドに接着されています。ロッドはすべて下端で揃えられています。 大雨の後、彫刻は水で満たされています。それはどれくらいの水を保持しますか? 入力 プログラムは、(stdinまたはファイルを介して)スペースのペアと次の形式のロッドの長さを指定する数字のペアで構成される行を読み込む必要があります。 aa bb cc dd ee ff gg 例に示すように、各ロッド(ここのddなど)は、最大6本の周囲のロッドに接着されています。不足しているロッドは穴であり、水を収集しません。たとえば、入力 04 04 04 01 03 04 04 次の彫刻を表します。 中央の棒は高さです1(その棒が見える角度が見つかりませんでした)。これで、そのロッドの上のコラム3は、右側のロッドから溢れる前に2 cmの水を保持できます。他のロッドはどれもその上に水を保持できないため、答えはになります2。次に、さらに2つの複雑な例を示します。 Example 2: 55 34 45 66 33 21 27 23 12 01 77 36 31 74 answer = 35 ( 2 on top of 21 +11 on top …

16
一般化された配列の波紋
週を始める簡単なゴルフ!ベース配列 B、値配列 V、インデックス配列の 3つの配列が与えられますI。で指定されたインデックスにから値Vが挿入される別の配列を作成する必要があります。以下に例を示します。BI Base: [5, 1, 4, 1, 3] Values: [0, 0, 7] Indices: [5, 0, 3] インデックスは、基本配列の次の位置を指します。 [ 5, 1, 4, 1, 3 ] ^ ^ ^ 0 3 5 したがって、値配列から対応する要素を挿入すると、結果は次のようになります。 [0, 5, 1, 4, 7, 1, 3, 0] ルール プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値、またはBパラメーターとして指定された配列を変更することで結果を出力できます。 送信が関数でIありV、何らかの方法で変更できる場合、およびB出力に使用されない場合。 入力について次のことを想定できます。 ベース配列および値配列のすべての要素は、負でない整数になります。 値配列には、基本配列よりも多くても1つの要素しかありません。 値配列とインデックス配列の要素数は同じになります。 インデックス配列には繰り返しインデックスが含まれず、すべてのインデックスが範囲内になります。 基本配列と値配列には、繰り返される要素が含まれる場合があります。 …

6
最短のDe Bruijnを生成する
De Bruijnシーケンスは興味深いものです。これは、指定された長さの指定されたアルファベットのすべての可能なシーケンスを含む最短の循環シーケンスです。たとえば、アルファベットA、B、Cおよび長さ3を検討している場合、可能な出力は次のとおりです。 AAABBBCCCABCACCBBAACBCBABAC あなたはすべての可能な3文字のシーケンスは文字を使用していることに気づくでしょうA、Bと、Cそこにあります。 あなたの課題は、可能な限り少ない文字数でDe Bruijnシーケンスを生成することです。関数は、2つのパラメーター、シーケンスの長さを表す整数、およびアルファベットを含むリストを取る必要があります。出力はリスト形式のシーケンスになります。 アルファベットのすべてのアイテムが異なると仮定することができます。 ジェネレーターの例はこちらにあります 標準的な抜け穴が適用されます

10
この修正された円で平面を並べます
原点を中心とした単位円を取ります。隣接する2つの四分円で、円のx切片とy切片を結ぶ線に沿って円の曲線をミラーリングします。 結果の形状を使用して、平面をタイル表示できます。 この画像は、素晴らしい2D物理サンドボックスAlgodooで作成しました! 一般的な可逆画像ファイル形式で、これに似た画像を出力するプログラムを作成します。選択した名前のファイルとして画像を保存することも、単に表示することもできます。何も入力しないでください。 ルール: 全体画像は、任意の2つの視覚的に別個のRGBカラーを使用して変更円タイルでモザイク状にされなければならない:垂直ポインティングタイル、水平方向を向いタイルのための1つのための1つ。 円形タイルの半径は、少なくとも32ピクセルにする必要があります。(上の画像の半径は約110ピクセルです。) 画像は、少なくとも幅4タイル、高さ4タイルでなければなりません。上記のルールと組み合わせると、画像の最小サイズは256×256ピクセルになります。(上の画像は4タイルx 4タイルです。) テッセレーションは、任意の量で翻訳できます。たとえば、画像の左上隅は、タイルが交わる頂点である必要はありません。(ただし、テッセレーションは回転させないでください。) 円を描いたり、画像などを出力するためのコマンドを備えた外部グラフィックライブラリを使用できます。 曲線は、ほとんどのグラフィックスライブラリが実行する中点円アルゴリズムで実行できるように、実際に円に近似する必要があります。 タイルの端の周りのアンチエイリアスは許可されますが、必須ではありません。 バイト単位の最短提出が勝ちです。


7
地すべりを予測する
地すべり この課題では、あなたの仕事は、大規模な地滑りによって引き起こされる被害の程度を予測することです。初期高さ h >= 0と臨界係数 によってパラメーター化された、次の単純化された2次元モデルを使用しますc > 0。高さの崖から始めhて、地形がその左右に無限に完全に平らであると仮定します。の場合h = 6、状況は次のようになります。 ########## ########## ########## ########## ########## ########## ----------------------- -不動の岩盤であり、#不安定な土壌です。隣接する2つの列の高さの差がより大きい場合c、地すべりが発生します。c左の列の上部の土壌単位はc、右側の次の列に1つずつ落下します。図の右端の空でない列はのc = 2ために不安定であるため、地滑りが引き起こされます。 ######### ######### ########## ########## ########## ############ ----------------------- 列はまだ不安定であり、2番目の地滑りを引き起こします。 ######### ######### ######### ######### ############ ############ ----------------------- これで、左側の列が不安定になったため、そこで新しい地滑りがトリガーされます。 ######## ######## ######### ########### ############ ############ ----------------------- この後、崖は再び安定しています。このモデルの良いところは、地滑りが処理される順序は重要ではないということです。最終結果は同じです。 タスク あなたのプログラムは、整数パラメータを与えているhし、cそれは出力の総数すべき入力として(順番は関係ありませんが、あなたはあなたの答えでそれを指定する必要があります)、および列地滑りが影響していることを。これは、結果として安定した崖の高さが厳密に0との間の列数を意味しますh。上記の例では、正しい出力は4です。 完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース これらは形式で与えられますh c …
22 code-golf 

19
ラッキーナンバーを生成
ストーリー: ルーシーはジョージに彼のラッキーナンバーとは何かを尋ねました。熟考した後、ジョージはラッキーナンバーをいくつか持っていると答えました。少しの混乱の後、ルーシーはジョージに彼の最初のnラッキーナンバーとは何かを尋ねました。その後、ジョージは彼に、あなたのために、彼のために仕事をするためのプログラムを書くように頼みました。 チャレンジ: 標準入力/関数引数から文字列または整数を受け取るプログラム/関数を作成しnます。プログラム/関数は、最初のn ラッキーナンバーを返し/出力します。ラッキーナンバーは、ふるいを介して次のように定義されます。 正の整数から始めます。 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, ... 次に、1つおきの数字を削除します。 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, ... 残りの2番目の数値は3なので、3番目ごとに削除します。 1, …

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