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

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

24
囚人のジレンマv.3-ペトリジレンマ
気違いの科学者がバクテリアの新種を作成しました!彼はそれをNoblus Gentlemanusと名付けることにしました、その挙動を観察した後。しかし、彼のバクテリアは食料を使い果たし、戦争を宣言しました。彼らは他のバクテリアの死体を収穫して、自分のコピーを作成するのに十分な食料を得ることができるからです。この細菌には、お気に入りのゲームであるPrisoner's Dilemmaをプレイする上で異なる戦略を持っている多くの異なる亜種があります。それぞれ異なる亜種から5つの細菌があります。Prisoner's Dilemmaでは、2人のプレイヤーのそれぞれが同時に欠陥または協力を選択します。1人のプレイヤーが協力を選択し、もう1人がデフォルトを選択した場合、デフォルト者は2ポイントを獲得し、協力者は3ポイントを失います。両方のプレイヤーが協力することを選択した場合、両方のプレイヤーが1ポイントを獲得します。両方のプレイヤーがデフォルトを選択した場合、両方のプレイヤーが1ポイントを失います。 貴族の紳士であるバクテリアは、反復囚人のジレンマの200ラウンドの長いゲームをプレイすることにより、この戦争と戦うことに決めました。各決闘の敗者は自殺し、勝者は自分自身をクローンできます。同点の場合、両方の細菌は生きたままですが、どちらも自身をクローン化することはできません。さらに、試合のすべてのバクテリアは、ポイントの10%以上を次の試合に持ち込みます。クローンは、クローンされた細菌のポイントを引き継ぎます。また、毎ターン10分の1の確率で、1つのバクテリアが別の亜種に変異し、ボーナスポイントが0になります(このランダム性に関する苦情があれば、削除できます)。細菌が細菌の亜種の数に10を掛けた数に等しい数のこれらの決闘を行った後、気違いの科学者は細菌が存在するペトリ皿を誤って落とし、そしてすべてのバクテリアは新しい食物源を獲得し、決闘を終えます。これは通常の反復囚人のジレンマコンテストとは異なります。これは、全体で最も多くのポイントを獲得しようとするのではなく、キャリーオーバーポイントとの1対1の決闘を伴うためです。これにより、特定の戦略の効果が大きく変わります。 各バクテリアは、ターンの開始時に次の形式で入力を受け取ります:(ターン番号、現在のポイント、敵ポイント、あなたの以前の動き]、敵の前の動き[同じ形式で])。 入力する4つのサンプル戦略を以下に示します。実際、Defectorは非常に単純ですが、勝つ可能性があると思います。 Tatのシジュウカラ def titfortatfunc(counter, mypoints, enpoints, mylist, enlist): if counter==0 or enlist[counter-1] == "c": return "c" else: return "d" ランダムピック from random import choice def randompickfunc(counter, mypoints, enpoints, mylist, enlist): if counter == 199: return "d" else: return choice(["d", "c"]) 協力者 def cooperatorfunc(counter, mypoints, …

1
CUBEを平らにします
3Dシェイプを見て、2つの多くの次元があると思いますか。それでは、3Dを1Dにしましょう!(私がそこで行ったことを参照してください?) 仕事 キューブの2D表現(下のレイアウト)を指定し、ポインターに基づいて単一の文字列にフラット化します。 キューブ これは、操作なし(,)とコーナーのポインター()で満たされたキューブのレイアウトです<>v^/。ナビゲーションポインター(NP)は、表示されている場所でプログラムを開始します。 | NP begins here, moving right. V >,,,,,,,,,,,,,,,,,,v , ,, , , , , , , , , , , , , , , , , , , , , , /,,,,,,,,,,,,,,,,,,/ / , , , , , , , , , , , , …

1
回転安全なクイン
すべての回転がそれ自体が適切なクインである適切なクインを書きます。 たとえば、ソースコードがの場合、次のようになりますabcdef。 abcdef 出力します abcdef bcdefa 出力します bcdefa cdefab 出力します cdefab defabc 出力します defabc efabcd 出力します efabcd fabcde 出力します fabcde 回転は、「文字列を2つの部分に分割し、それらの順序を逆にすることによって行われます」。 得点 これはcode-golfです。バイト単位の最短回答が優先されます。標準の抜け穴が適用されます。

1
長方形の芝生を刈る
芝生は、1つの文字が2層の表示可能な空白で囲まれた長方形のフィールドとして定義されます。これは、上の2行と下の2行、および左側の2つのスペースのパディングを意味します(右側には目に見える空白があるので、含める必要はありません)。 ||||| ||||| ||||| 刈られた芝生も同様の構造です。ただし、メインキャラクターは最初のキャラクターの短縮バージョンです。 ..... ..... ..... 芝刈り機は、2つの芝生のキャラクターとは異なる2つの異なるキャラクターです。=芝刈り機の背面およびo前面としての例を次に示します。 =o 芝刈り機は芝生の周りを垂直に動き、正面で回転することもできます。上記の芝刈り機は、アニメーションのある時点で以下のいずれかになります。 =o o= o = = o 芝刈り機は、下の芝生にある下の位置のセットで開始できます。芝刈り機はo、芝生を時計回りに回ります。芝刈り機0は芝生を反時計回りに回ります。 = = 0 o =o|||||0= ||||| =0|||||o= o 0 = = アニメーションは0秒から始まります。毎秒、芝刈り機は1スペース先に進み、その前で草を刈ります。芝刈り機がスポットを空けると、刈り取られたように見えます。芝刈り機の前部がライン上の最後の未切断アイテムに到達すると(そしてまだ刈り取られていない草がある場合)、芝刈り機の後部は1回回転して現在の刈り取りを続けます(元の位置に基づいて時計回り/反時計回りに留まります)芝刈り機が終了すると、芝生から完全に離れるまでまっすぐに(すでに刈った草を刈る)続けます。 左上から芝刈り機を開始すると、これは5x3の芝生の基本的な進行を示します。 Second 0 Second 1 Second 2 Second 3 Second 4 Second 5 Second 6 Second 7 Second 8 Second …

21
piで最初に出現する数字でソートする
負でない数を指定するとn、pin内の最初の出現によっての数字をソートします。 入力は、関数cli引数、またはSTDINを介して、文字列、char []または整数として取得できます。戻り値、終了ステータス、またはSTDOUTを介して出力できます。
17 code-golf  number  sorting  pi 

12
無料のランチのようなものはありません
...またはありますか? あなたの課題は、基本料金、ヒント、割引、クーポン、追加料金を含む私の昼食請求書を解析し、私の昼食が0ドル以下かどうかを調べることです。これが入力の場合: 12.34 15 tip 25 discount 1.5 extra 2 coupon その場合、出力はになる可能性がありますfalse。仕組みは次のとおりです。 12.34 は基本価格です。 15 tip合計に15%を追加することを意味します。 25 discount合計から25%を引くことを意味します。 1.5 extra合計に1.5を加算することを意味します。 2 coupon合計から2を引くことを意味します。 の量があるかもしれませんヒント、割引、クーポン、およびエキストラが、常に1台の価格が存在します。 それから (12.34 * 1.15) * 0.75 + 1.5 - 2、10.14の出力を作成します。10.14は0より大きいため、falseを出力します。私の昼食は無料ではありませんでした。 ルール 数値 tipは、合計に数値パーセントを追加することを意味します。 number discountは、合計からnumberパーセントを引くことを意味します 数値 extraは、合計に数値を追加することを意味します 数の coupon減算する手段の数を、合計から もう一つの例: 10 20 tip 20 discount 2 coupon …

1
Brainflak Multiplication Metagolf
この質問は、Brain-Flakの最初の誕生日を祝うために設計されたいくつかのBrain-flak Birthdayチャレンジの最初のものです!Brain-Flakの誕生日の詳細については、こちらをご覧ください。 昨年の夏、私たちはBrain-flak Integer Metagolfを作成し、それが生成した回答はBrain-Flakコミュニティにとって非常に役立ちました。整数メタゴルフを非常に効率的にする主なものは、乗算ハードコーディングと呼ばれる技術です。 Brain-Flakでは、実行時の乗算は非常に高価です。既知の最短の乗算スニペットは次のとおりです。 ({}<>)({<({}[()])><>({})<>}{}<><{}>) メガトムが発見 ただし、コンパイル時間の乗算を作成する非常に簡単な方法があります。たとえば、次のコードは5倍になります。 (({})({})({})({}){}) オンラインでお試しください! これは、連続した式が一緒に追加されるため機能します。それぞれ({})がスタックに対して何もせず({}ポップし(..)てすぐに押し戻します)、スタックの一番上にあるものを評価します。これらのすべての式は、スタックの一番上にあるものを合計すると最大5倍になります。 いずれかのためにn、以下の文字列式は、スタックの最上部を掛けますスニペットを行いますn。 "("+"({})"*(n-1)+"{})" これはn、すべてスタックの最上位に評価される式を作成することで機能します。最初のものn-1は実際には何も変更せず、最後のものはプッシュの前にスタックのトップを削除します。 複合数値の場合、複数の小さな式を連結してバイトを節約できます。たとえば、5を2回掛けることで25を掛けることができます。 (({})({})({})({}){})(({})({})({})({}){}) これは非常に単純であり、いくつかの数値ではかなりうまく機能しますが、これを行うより良い方法があります。たとえば、私が思いついた方法の1つは、数値のバイナリ表現を使用しています。(ここにpythonの実装があります)この新しいメソッドは、前に示した単純な文字列式よりもはるかに効果的ですが、終わりではありません。 だから、私たちがどれほど良いものを得ることができるかを見る時だと思います。 Brain-Flakの簡単な概要 このチャレンジでBrain-Flakについて知っておく必要があるすべての説明を以下に示します。 Brain-Flakには「nilads」と「monads」があります。ニラッドは、中に何もないカッコです。各niladは処理を行い、値を返します。この挑戦のために私達がかかわっている2人のniladsは{}あり<>ます。 {}アクティブなスタックの一番上をポップし、その値を返します。<>アクティブスタックとアクティブスタックを切り替え、アクティブスタックが非アクティブになり、非アクティブスタックがアクティブになるように、ゼロを返します。 モナドは、中に何かがある括弧です。それらは、単一の引数、内部のすべての合計を取り、アクションを実行してから値を返します。懸念しているこれらの3つは(...)、<...>および[...]です。このチャレンジで最も重要なモナド(...)は、内部の値を取得してアクティブスタックにプッシュします。次に、引数を返します。 <...>そして[...]、彼らは任意のアクションを実行するのではなく、彼らが渡された値を変更しないでという、両方の「不活性」モナドです。 <...>渡された引数に関係なく、常にゼロを返します。一方、[...]常に引数timesを返します-1。 説明付きのサンプルプログラム Brain-Flakでプログラミングしたことがない場合は、説明されている操作を使用していくつかのサンプルプログラムを確認することをお勧めします。 ({}{}) これにより、スタックの上位2つの数字が追加されます。それぞれ{}がスタックから値をポップし、(...)合計を押し戻します。 ({}[{}]) 同様に、これはスタックの2番目の項目を最初の項目から減算します。それぞれ{}が値をポップする前と同様ですが[..]、2番目の値の前後で値が追加されます。もう一度(...)合計をプッシュします。 ({}<{}>) これにより、スタックの2番目の値が削除され、トップの値がそのまま維持されます。最後の2つと同じように機能しますが、2つ目の値はによって無音化される<...>ため、プッシュは最初の値のみを押し戻します。 (({})) これにより、スタックの一番上に値の2番目のコピーが作成されます。これは{}、値を取得してスタックの最上部をポップすることでこれを行い、最初に(..)値を評価してその値に戻します。2番目(...)は1番目から返された値を受け取り、それをスタックにプッシュします。2番目のコピーを作成します。 仕事 整数を指定nすると、現在のスタックの最上部にを掛けるスタッククリーンなBrain-Flakスニペットを作成しますn。 次のBrain-Flak操作を使用することが許可されています (...) -> Push Monad, Pushes the result of its contents <...> …

20
それ以外の空の行の空白を取り除く
ああ、このStackのわがままな使い方のもう1つです。 Chromebookの所有者である私は、Cloud9で使用されるエディターであるAce IDEの頻繁なユーザーです。余分な空白を処理するためのツールはたくさんありますが、特に不足しているものが1つあります。空の行をクリアすることです。 今日のあなたの使命は、コピーして[ ;)]に貼り付けることができる場所からの入力を与え、同じものを出力し、それ以外の場合は空の行にすべてのスペースとタブレーターを保存することです。 #削除する空白文字を表すsを使用して、いくつかの例を示します。 入力1: if (this.Color !== 'blue') { ## this.Color = 'blue'; } 出力: if (this.Color !== 'blue') { [empty line] this.Color = 'blue'; } 入力2: function outputSomething(times) { for (var iter = 0; iter < times; iter++) { console.log('"# # " represents a tabulator'); // …

9
絶対パスを短くする
現在の作業ディレクトリを参照として使用して、Linuxツールへのコマンドラインパラメーターなどの長い絶対パスを短縮できる場合があります。 $ pwd /home/heh $ cat /home/heh/mydir/myfile my stuff $ cat mydir/myfile my stuff この課題では、2つのパラメーターを受け取る関数またはプログラムを作成する必要があります。 Linux形式を使用した絶対パス(で始まる/) 同じ形式を使用した現在のディレクトリ 出力は、次のうち短い方です。 入力1は変更なし 絶対パスと同じファイル/ディレクトリを参照する相対パス 細かい点: オペレーティングシステムがLinuxと互換性がある場合は、入力として受け取る代わりに、システムの現在のディレクトリを使用できます。 入力には英数字(およびパス区切り文字)のみが含まれると想定できます。 入力絶対パス/の最後にパス区切り記号がないと仮定できます 入力現在のディレクトリ/の最後にパス区切り文字があると仮定できます 絶対パスが既存のファイルを参照している、またはその一部がアクセス可能なディレクトリであると想定することはできません。ただし、現在のディレクトリは有効であると想定できます。 いずれかのパスの近くにシンボリックリンクがないと仮定できます-シンボリックリンクを処理する特別な方法を必要としないため 入力のいずれかがルートディレクトリである場合をサポートする必要はありません 「現在のディレクトリ」として出力する必要があります.(空の文字列は無効です) テストケース(input1、input2、output): /home/user/mydir/myfile /home/user mydir/myfile /var/users/admin/secret/passwd /var/users/joe/hack ../../admin/secret/passwd /home/user/myfile /tmp/someplace /home/user/myfile /dir1/dir2 /dir1/dir2/dir3/dir4 ../.. /dir1/dir2 /dir1/dir2 .

15
変換テーブルを見つける
2つの文字列が与えられた場合、2つの間の変換テーブル(置換暗号)を見つけ、変換が不可能な場合はfalseを出力します。答えは最小化し、左から右に作成する必要があります。単語間で翻訳される最初の文字は、翻訳テーブルの最初の文字でなければなりません。これに加えて、翻訳されていない(元の場所と同じ場所にある)手紙は、翻訳テーブルに入れないでください。 おそらく例を通して最も簡単に定義できます: 有効なケース "bat", "sap" => ["bt","sp"] 順序に注意してください。出力は["tb","ps"]このチャレンジでは無効です。 "sense", "12n12" => ["se","12"] nは1対1の関係であるため、がどのように変換されないかに注意してください。 "rabid", "snail" => ["rabd","snal"] iは1対1の関係であるため、がどのように変換されないかに注意してください。 "ass", "all" => ["s","l"] Aは含まれず、同じままで、パターンマッチのためにsマッピングできますl。 "3121212", "ABLBLBL" => ["312","ABL"] パターンと完全に一致します。 偽のケース "banana", "angular" => false (同じ長さではなく、不可能です)。 "animal", "snails" => false (各文字は、翻訳の両側で1回のみ使用できます)。 "can","cnn" => false (nは変換で暗黙的に使用されるため、n-> aで変換テーブルを定義することは無効になります) したがって、これ[aimal,sails]は無効な答えであり、これは偽物です。 "a1", "22" => false 「警告」を参照してください。これは偽物としてリストされています。ので、この場合、それはだaと1の両方にマップすることはできません2。(各文字は、翻訳の両側で1回のみ使用できます)。 …

30
egaugnaLをポリグロットに追加する
これは回答連鎖の質問です。つまり、すべての回答はその前の回答者の影響を受けます。 タスク nはこの質問への番目の答えは、その前の答えに存在するすべての言語で実行する必要があります。これらは順番に実行する必要はありませんが、現在実行中の言語の名前を反転して出力する必要があります。 追加のルール 言語を2回使用することはできません。 プログラムはエラーなしで実行する必要があります。エラーを使用して言語名を記録することは許可されていませんが、エラーを使用して言語を決定することは許可されています。 各回答は、前の回答よりも30%または40バイト(どちらか大きい方)を超えてはなりません。パーセンテージが整数でない場合、切り捨てられます。 追加する言語は、無料の実装言語でなければなりません。 言語の通訳は許可されています。 再現可能な結果にリンクできる場合は、リンクしてください。 反転される言語の名前は大文字と小文字が区別されないため、Python 3では「3nohtyp」が有効です 2つの回答を連続して入力することはできません。 ご使用の言語が文字列をサポートしていない場合は、次のパターンに従って文字を数字として印刷します。「A」= 0、「B」= 1、「C」= 2 ... 文字列をサポートせず、名前に文字以外の文字がある言語の場合、文字以外の文字の代わりに-1を出力します。言語が文字列をサポートしていないことを確認してください。 勝利条件 この質問が回答なしで20日間続く場合、最後から2番目の回答が優先されます。 回答形式 4. CoffeeScript、20バイト (program goes here) このプログラムは、印刷しnohtypのPython 3で、かつtpircsavajを JavaScriptで。 (その方法を説明したい場合は、ここで行います)

1
人生:創造されたか進化したか?
正方形のGame of Lifeグリッドの状態を考慮して、それが以前の状態から進化したのか、または作成されたにすぎないのかを判断します。つまり、状態が「Garden of Eden」状態であるかどうかを識別します。 入力 1が「生きている」ことを示し、0が「死んでいる」ことを示す状態の正方形のグリッド。必要に応じて、0と1の代わりに2つの識別可能なシンボルを選択できます。 グリッドの辺の長さはゼロではありませんが、任意の自然数1 <= N <= 20です。 入力グリッド外のセルのいずれかまたはすべてがこの世代で生きている可能性があり、それらのいずれかまたはすべてが前の世代で生きている可能性があります。考慮される宇宙は無限であるため、境界条件はありません。入力のエッジは、ユニバースのエッジではありません。具体的には、グリッドはラップしません。 入力は、行で区切られた文字列または単一の文字列の形式です。必要に応じて、グリッドの辺の長さまたは領域を追加入力として(グリッドの前後に)取ることができます。 許容される入力形式: 010,101,010 010101010 010 101 010 3 010101010 出力 次世代の入力状態につながる可能性のある以前の状態(入力グリッドよりも大きい状態を含む)がない場合は「作成済み」。 次世代の入力状態につながる可能性のある少なくとも1つの可能な以前の状態(入力グリッドよりも大きい状態を含む)が存在する場合、「進化した」。 必要に応じて、「作成」と「進化」の代わりに、2つの区別可能な文字列または数字を使用できます。 可能な以前の状態は、入力と区別する必要がないことに注意してください。状態がそれ自体を次世代として持っている場合、それは進化したと見なされるべきです。 テストケース 010 101 010 Evolved 0101110100 0010101001 1011100110 0101111101 1001001111 1111001001 1011111010 0110011101 1001010100 0010111010 Created 作成されたテストケースは、Achim FlammenkampのGame of Lifeページから取得されます。 注意 このチャレンジを書いてくれたtrichoplaxに感謝し、ここから採用しました

6
ピザにしてください
土曜日(UTC)で空腹なので、ピザを一切れ食べたいです。私はあなたに注文をします、そして私は素敵な熱いアスキーアートのピザが欲しいです。挑戦まで? ドライブスルー ドライブスルーがどこであっても、STDIN、関数パラメーター、コマンドライン引数など、どこにでも注文しますが、変数に入れません。(JS関数式は変数に割り当てる必要があります。) オーダー 私の注文には2つの部分があります。最初はから3までのゼロ以外の正の整数6です。これは私のピザのサイズです。たとえば、6トッピングのないサイズのピザは次のようになります。 /=====\ / \ | | | | \ / \=====/ サイズ5: /====\ / \ | | \ / \====/ サイズ4: /===\ | | | | \===/ サイズ 3 /==\ | | \==/ トッピング 私のトッピングは、大文字の文字列になります。可能な値は次のとおりです。 P-ペパロニ S-ソーセージ N-パイネップル J-ハラペーニョ B-バナナペッパー C-baCon あなたはどこかにピザにそれらを合わせる必要があります。サイズ4およびを注文した場合PSPCJ、これは有効な出力です。 /===\ |PSPCJ| | | …

1
2つの時間ディメンションでのプログラミング
この世界にたった1つの時間次元があるのはおかしい事故ですが、そうである必要はありません。2つ以上の時間ディメンションを持つ世界を想像するのは簡単です。これらの世界では、この世界のように、コンピューターを構築してソフトウェアを実行できます。 システム これは、2つの時間ディメンションでBrainf * ckプログラムを実行するためのシステムです。 2つの時間ディメンションはxとyです。各Brainf * ckプログラムは、x半プログラムとy半プログラムで構成されます。たとえば、プログラムは x: +>+ y: [-] 2つのハーフプログラムにはそれぞれ独自のプログラムポインターがありますが、1つのテープポインターを共有します(つまり、両方がテープの同じセルで動作します)。 時間は2次元なので、モーメントのグリッドで構成されます。 x次元に沿って移動すると、xハーフプログラムは1つのタイムステップを実行します。y次元に沿って移動すると、yハーフプログラムは1つのタイムステップを実行します。 したがって、たとえば、テープが[0] 0 0([]テープポインタを表す)として始まり、x / yプログラムが+andであるとしましょう->-。このプログラムの実行は次のようになります。 x y tape x-action y-action 0 0 [ 0] 0 0 + at 0 - at 0 1 0 [ 1] 0 0 (done) - at 0 0 1 [-1] …

13
算術テーブルの整数桁
チャレンジ: 入力に基づいて、次の6つの算術表のいずれかの「整数桁」を出力します。- 加算(+); -減算(-); -乗算(*); -部門(/); -べき乗(^); -モジュロ演算(%)。 ルール: 正確に次のいずれかである算術演算のオペランドのすべての結果:私は「整数の数字」として定義何をすべきか0、1、2、3、4、5、6、7、8、9。この手段は、あなたは除外し、すべての結果10以上のすべての結果-1以下であり、すべての非整数の結果を。 算術結果の計算方法:最初に最上位の数字を使用し、次に左の桁のオペランドを使用します。6つすべての出力で一貫している限り、この逆も可能です(つまり、のy/x代わりにx/y)。(あなたが使用を許可されていないのでy-xとx/y同じ答えインチ)† 0のテストケースによる除算(除算およびモジュロ演算テーブル)については何も出力しません edge-caseについては何も出力しません0^0。 出力: したがって、以下を出力します(テーブル形式は多少柔軟です(以下を参照)。したがって、行はオプションであり、主にテストケースを読みやすくするために追加されます)。 添加: + | 0 1 2 3 4 5 6 7 8 9 ----------------------- 0 | 0 1 2 3 4 5 6 7 8 9 1 | 1 2 3 4 5 6 7 …

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