タグ付けされた質問 「simulation」

シミュレーションを伴う課題に。

16
宇宙をシミュレートします!
チューリング完全言語の優れた特性の1つは、ユニバース全体のシミュレーションを含む、あらゆるプログラムの記述に使用できることです。 あなたの仕事はまさにそれをすることです:宇宙をシミュレートするプログラムを書く。 注:このタスクを達成できることは間違いありませんが、最近では、シミュレーション内の10 90個のパーティクルすべてが実際にすべきことを行うかどうかを検証するのに十分な余裕がありません。したがって、テストと評価を単純化するためだけに、ユニバースシミュレータが単一の開始パーティクルでのみ動作する場合は十分です。面白くするために、この粒子が最近発見されたヒッグスボソンであると仮定しましょう。 あなたの宇宙は、その中央にある約120 GeVの単一のヒッグスボソンだけで始まります。出力を長くしすぎないようにするには、5.4×10 -44秒という「通常のクロックレート」の代わりに、このユニバースをわずか10 -25秒で刻みましょう。 このヒッグス粒子は半減期が1.6×10 −22秒であるため遅かれ早かれ減衰するため、シミュレーションのティックごとに0.0433%の確率で減衰します。ここで何に崩壊するか確認できます。中心的で簡素化された要件を実現するために、使用する分岐比率をリストします。 シミュレーションを実行する シミュレーションの各ティックで、ヒッグス粒子は減衰する可能性が0.0433%あります。それが起こると、リストされた確率で、次の粒子に崩壊します(これらの名前を出力で使用する必要があります)。 ボトムクォーク+ボトムクォーク(64.8%) 2 Wボソン(14.1%) 2グルオン(8.82%) タウ・レプトン+アンチタウ・レプトン(7.04%) チャームクォーク+チャームアンチクォーク(3.27%) 2 Zボソン(1.59%) 2光子(0.223%) 1 Zボソン+ 1光子(0.111%) ミューオン+反ミューオン(0.0244%) トップクォーク+トップ反クォーク(0.0216%) 合計で100%。 これらの粒子の一部はさらに減衰します。 Wボソン:10 -25秒の半減期。これは、すべてのティックで50%の確率で等しい確率で次のいずれかに減衰することを意味します。 陽電子+ニュートリノ 反ミューオン+ニュートリノ アンティタウレプトン+ニュートリノ Zボソン:10 -25秒の半減期。これは、ティックごとに50%の確率で次のいずれかに減衰することを意味します。 ニュートリノ+反ニュートリノ(20.6%) 電子+陽電子(3.4%) ミューオン+反ミューオン(3.4%) タウレプトン+アンチタウレプトン(3.4%) ダウンクォーク+ダウンクォーク(15.2%) 奇妙なクォーク+奇妙な反クォーク(15.2%) ボトムクォーク+ボトムクォーク(15.2%) クォークアップ+クォークアップ(11.8%) チャームクォーク+チャームアンチクォーク(11.8%) トップクォーク:5×10 -25秒の半減期。これは、等しい確率で、すべてのティックで次のように減衰するチャンスが12.95%であることを意味します。 Wボソン+ダウンクォーク Wボソン+ストレンジクォーク Wボソン+ボトムクォーク もちろん、Wボソンもすぐに崩壊します... …

10
リトルチャンドラーは悲しい。彼を元気づけるために彼に雲を引きます
リトルチャンドラーは悲しい。彼を元気づけるために彼に雲を引きます。 注:クラウドを描画しても、実際に彼を元気づけることはありません。 円は、3組として定義できます。(x,y,r)ここxで、デカルト平面上の円のx位置、デカルト平面上の円yのy位置、およびr円の半径です。xそしてy負でもよいです。r常にポジティブです。入力は、スペースで区切られた3タプルの形式の円のリストです。例えば: 3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8 3,1,1手段「に中心点を有する円3,11つの半径を有する。3,2,1.5手段」に中心点を有する円3,21.5半径を有します。 入力のこれらの円をすべてグラフに描画すると、次のようになります(わかりやすくするためにグリッド線とラベルを含めましたが、これらは必須ではありません)。 すべての円が凝集していることに注目してください。つまり、それらはすべて互いに重なり合っており、1つの大きなグループを形成し、残りの部分から分離された小さな円のグループはありません。入力は凝集性が保証されています。 ここで、これらの円によって形成される「境界線」の周りを移動する線を描き、他の線は一切ないとします。これは、すべての円によって形成されるシルエットの境界線を描くようなものです。結果のクラウドは次のようになります。 そのため、このクラウドは、境界を形成する入力内の円の円弧のみを描画することで形成され、単一の形状になります。言い換えると、クラウドは、別の円内にないアークを描くことによって形成されます。プログラムは、上記で説明した形式で入力を受け取り、結果のクラウドを表示する画像を出力します。雲の全体的な形状は正確でなければなりませんが、スケール、色、線の太さ、頂点の見え方はあなた次第です。クラウドが表示されている必要があるため、「このプログラムは白い背景に白い雲を描画する」、「このプログラムは無限に小さなスケールで雲を描画する」、「このプログラムは0の雲を描画する」また、境界線の色は塗りつぶしまたは背景の色と異なる必要があることに注意してください。 もう一つの例。入力: 1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7 出力: クラウドに「穴」がある場合は、穴も描画する必要があります。入力: 0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4 出力: 重要なルールは次のとおりです。プログラムは境界を形成する線のみを描画する必要があります。つまり、単純に円を完全に描画してから、白い塗りでわずかに小さい円を描画することはできません。このメソッドはまだ境界を形成しない線を描画するため、後でそれらを覆うだけです。ルールの目的は、「円を描いてから、白い塗りで円をもう一度描く」実装、またはそれに類似したものを防ぐことでした。答えは、実際に描画する前に描画する場所を実際に計算することです。 これはコードゴルフであるため、最短の文字数が優先されます。

16
コード(ミニ)ゴルフ
ミニゴルフコースのサイドビューとスイングの力を考慮して、ボールがホールに進入するかどうかを判断します。 コースは次の形式になります。 ____ ____ _ __/ \ / U \ __/ \ / \_ \_/ ボールは左側の最初の地面の直前から始まり、ホール(U現在の地面レベルより下の大文字)に到達するまでコースの輪郭をたどります。穴に到達した場合、真実の値を出力します。スイングの力がボールの初速になります。ボールは各反復で右側の次のキャラクターに移動し、現在のキャラクターに応じて速度が変更されます。速度が0穴の前に到達するかそれ以下の場合、偽の値を出力します。 _ 速度を下げる 1 / 速度を下げる 5 \ 速度を上げる 4 オプションで、コースにスペースを埋め込むことができます。スイングの力は常に正の整数になります。 ボールが速すぎてホールに入るのを心配したり、後方に転がったり、丘を飛び降りたりすることを心配する必要はありません。 テストケース Input: 27 ____ ____ _ __/ \ / U \ __/ \ / \_ \_/ Output: true ---------- Input: 26 ____ ____ …

5
間に合いますか?
これに触発された。 バックグラウンド 悪の農家が価格を押し上げるために、あなたの小麦畑を焼失することを決定しました。完全に破壊するために、彼はあなたの畑をガソリンに浸しました。さらに不幸なことに、あなたはたまたま畑に火がついたときに歩いていたので、生き残るためには素早く出なければなりません。 チャレンジ 小麦、火、およびあなたの場所を含む畑が与えられたら、時間内に畑から出せるかどうかを判断します。 畑は小麦(ここでは.)と火(F)で構成されています。ここであなたの場所はでマークされていOます。例えば: ...F...F F....... ........ .F...... ....O... ...F.... ........ .F....F. 毎秒、隣接するセルに移動します(対角線上ではありません)。すべての火は隣接するすべてのセルに広がります。火事にならないセルに移動できない場合、あなたは死にます。野外に出れば生き残ります。この例で何が起こるか見てみましょう: ...F...F F....... ........ .F...... ....O... ...F.... ........ .F....F. ..FFF.FF FF.F...F FF...... FFF..... .F.F.O.. ..FFF... .F.F..F. FFF..FFF FFFFFFFF FFFFF.FF FFFF...F FFFF.... FF.FF.O. .FFFFFF. FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFF.FF FFFFF.FF FFFFFFFO FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF …

5
重力シミュレーター
ステートメント 2Dグリッドに落ちる一連のボールの静止画が表示されます。このグリッドは不変で壊れない壁に囲まれているため、すべてのアクションが壁に含まれています。あなたの仕事は、重力がすべての作業を行った後、シナリオの状態がどうなるかを決定することです。 グリッド内の要素 - 床、落下するボールの方向を変えません。 \ 右スライド、ボールのパスを1つ右に変更します。 / 左スライド、ボールのパスを1つ左に変更します。 o ボール。 ルール ボールが落ちる。 床とスライドは落ちません。 ボールがスライドを打って壁(\#または#/)を通過したり、床を横切ったりすると、スライドは床として機能します。 ボールが別のボールに当たった場合、ボールは1つのボールになりますが、両方のボールの合計までパワーを増やします。 (結合された)新しいボールは、通常どおりに動作し続けます。 ボールがそれ以上移動できなくなると、その力に置き換えられます。 ボールのパワーは常に最大9です。 入力 グリッドは、選択した言語で最も短い名前の文字列変数で指定されます。デフォルトではa、入力として使用します。受け取ったとおりの入力のサンプル: ##########\n# \ #\n#o #\n# - -\o #\n#/- \ #\n# \oo-/\#\n#-/ \ /#\n# \ \ #\n# /#\n########## 生成されたランダムグリッドの場合はhttps://repl.it/B1j3/2を使用します。代わりに生成されたページを使用します(広告なし、がらくたなし、入力と出力のみ) 注改行があります\n。入力を画面に印刷すると(チャレンジには不要)、次のように表示されます。安全なスペースに4つのパズルを並べましたが。 ########## ########## ########## ########## # \ # # o -/# # …

14
火で殺します
免責事項:この質問の中で語られたストーリーは完全に架空のものであり、イントロを提供する目的でのみ発明されました。 私は邪悪な農民であり、私の地域で小麦の価格を引き上げるために、私は私の周りのすべての農民の畑を燃やすことにしました。私は本当に野原が炎上するのを見たいです(したがって、私は私の邪悪な笑いを使用して、喜びと手を一緒にこすることができます)私のために焼却された。 あなたのタスク: 入力としてフィールドを取り、フィールド全体が灰になるまで書き込みの段階を返すプログラムまたは関数を作成します。燃えているフィールドの特定のセクションは、炎の強度を表す整数で表されます。火災は「1」から始まり、「2」、次に「3」へと続きます。火災が「4」に達すると、火災で可燃性である直接(斜めではない)隣接エリアをキャッチします。「8」に達すると、次の反復で燃え尽き、「A」で表される灰に変わります。エリアがまだ火に触れていない場合、「0」で表されます。たとえば、フィールドが次のような場合: 100 000 あなたのプログラムはこれを出力するはずです: 100 000 200 000 300 000 410 100 520 200 630 300 741 410 852 520 A63 630 A74 741 A85 852 AA6 A63 AA7 A74 AA8 A85 AAA AA6 AAA AA7 AAA AA8 AAA AAA 必要に応じて、一貫性があり互いに異なる限り、上記の記号を選択した記号のセットに置き換えることができます。 入力: 上記の改行で区切られた文字列など、標準形式のフィールドの開始位置。 出力: 配列として、または何らかの文字で区切られた文字列として、書き込みのたびに繰り返されるフィールド。 テストケース: 0301 …

9
火災伝播シミュレータ
次のような行列があると仮定します。 11111 12221 12321 12221 11111 このマトリックスは地形を表し、各セルは地形の一部を表します。各セルの数値は、その可燃性に応じて、地形の一部を完全に燃やす必要がある時間(測定単位が必要な場合は分単位)を表します。特定の位置(セル)で火災が発生した場合、そのセルは、隣接するセル(対角線ではなく、水平および垂直のみ)に伝播する前に完全に燃焼する必要があります。そのため、中央の位置で火災が発生した場合、火災には次のことが必要です。 11111 11111 11111 11011 10001 00000 12221 3 m. 12221 2 m. 12021 1 m. 11011 1 m. 00000 1 m. 00000 12321 -----> 12021 -----> 10001 -----> 00000 -----> 00000 -----> 00000 12221 12221 12021 11011 00000 00000 11111 11111 11111 11011 …

3
助けてください、私は無限の工場に閉じ込められています!
この課題は、ザックトロニクスのゲームInfinifactoryに大まかに触発されています。 で表されるコンベアの長方形グリッドのトップダウンビューが表示され>v<^ます。スペースで表されるコンベアのないセルが存在する場合があります。以下に例を示します。 > <vv < v ^ >v v >v^^>vv^ ^>^ v > v<v >> >v v<^ この設定は、無限のスペースに暗黙的に囲まれています。 さらに、グリッドの左上隅にあるコンベヤー上に配置される長方形の貨物の寸法が与えられます。あなたの仕事は、貨物が静止するかどうか、またはループで移動するかどうかを把握することです。 もちろん、貨物は一度に複数のコンベヤーをカバーする可能性が高いため、各ステップで貨物の方向を把握するためのルールは次のとおりです。 反対側のコンベヤーは互いにキャンセルします。したがって、3x2の貨物が次のパッチのいずれかをカバーする場合(明確にするためにハイフンとパイプで概説)、結果は同じになります。 +---+ +---+ +---+ |>>^| | ^| |v^^| |^<<| |^ | |^^v| +---+ +---+ +---+ これらについても同じことが言えます。 +---+ +---+ +---+ |v^<| | | |><>| |>>>| |>> | |>><| +---+ +---+ +---+ …

15
幾何学的な挑戦
誰もがジオメトリを愛しています。では、なぜゴルフをコーディングしてみませんか?この課題には、文字や数字を取り入れ、それに応じた形を作ることが含まれます。 入力 入力はの形式になり(shapeIdentifier)(size)(inverter)ます。 しかし、shapeIdentifier、サイズ、およびインバーターは何ですか? 形状識別子は、*s で作成する形状のタイプの識別子です。形状識別子は次のとおりです。 s - 平方 t -三角形 サイズはの間1-20になり、それは図のサイズです。 インバーターは、形状が逆さまになるかどうかであり、a +またはaで示され-ます。注: s3-==(等しい)s3+正方形は対称であるため。ただし、t5-!=(等しくない)t5+。 出力では末尾の空白は問題ありませんが、先頭の空白はそうではありません。 出力例 Input: s3+ Output: *** *** *** Input: t5+ Output: * *** ***** Input: t3- Output: *** * 特記事項 三角形の入力は常に奇数になるため、三角形は常に*上部が1 で終わります。 三角形のサイズは、インバーターの場合は底辺 +のサイズであり、インバーターの場合は上部のサイズです-。
23 code-golf  string  ascii-art  geometry  code-golf  ascii-art  subsequence  fewest-operations  test-battery  code-golf  array-manipulation  bitwise  code-golf  interactive  code-golf  music  code-golf  string  kolmogorov-complexity  code-golf  string  decision-problem  simulation  code-golf  string  classification  code-golf  sequence  base-conversion  palindrome  code-golf  kolmogorov-complexity  code-golf  date  astronomy  code-golf  sequence  base-conversion  code-golf  geometry  combinatorics  code-golf  string  code-golf  math  array-manipulation  code-challenge  math  code-golf  card-games  code-challenge  array-manipulation  sorting  code-golf  code-golf  math  abstract-algebra  polynomials  code-golf  palindrome  factoring 

11
二乗差を最大化する
整数値の順列を検討1するがN。たとえば、次の例N = 4: [1, 3, 4, 2] このリストは循環的である1と見なし、そのように、および2隣接として扱われます。そのようなリストについて計算できる1つの量は、隣接する値の差の2乗の合計です。 (1-3)² + (3-4)² + (4-2)² + (2-1)² = 10 あなたの仕事は、正の整数を与えられて、この量を最大にする順列を見つけることNです。N = 4上記の例の場合、最適ではありません(実際、最小限です)。18次の順列(および他のいくつかの順列)の合計平方差を達成できます。 [1, 4, 2, 3] アルゴリズムは(のN)多項式時間で実行する必要があります。特に、すべての順列の差の合計を単純に計算することはできません。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 出力は、任意の便利で明確なフラットリストまたは文字列形式にすることができます。0toのN-1代わりに1toの値を持つリストを返すことを選択できますN。 標準のコードゴルフ規則が適用されます。 テストデータ この問題に対する優れた分析ソリューションがあります。たとえば、すべての有効なソリューションN = 10は次のリストと同等です(巡回シフトおよび反転まで)。 [7, 5, 6, 4, 8, 2, 10, 1, 9, 3] 私は(それがパターンを把握する、おそらく十分ですが)それを超えてあまりにも明らかにし、その代わりに任意のより多くの例を与える、あなたは結果が与えられたため、次の総乗違いがあることを確認することができますしたくありませんN。 N Total squared difference 1 0 2 …
19 code-golf  array-manipulation  permutations  restricted-complexity  code-golf  geometry  grid  code-golf  string  sorting  code-golf  simulation  code-golf  string  code-golf  arithmetic  code-golf  sorting  code-golf  string  code-golf  sorting  code-golf  interpreter  code-golf  number  kolmogorov-complexity  natural-language  conversion  code-golf  random  internet  code-golf  board-game  code-golf  number  sequence  code-golf  math  number  code-challenge  image-processing  classification  test-battery  code-golf  ascii-art  code-golf  tips  code-golf  arithmetic  code-golf  tips  code-golf  tips  javascript  code-golf  array-manipulation  code-golf  ascii-art  code-golf  string  binary  code-golf  arithmetic  linear-algebra  matrix  code-golf  sequence  code-golf  math  number  arithmetic  code-golf  primes  code-golf  math  code-golf  array-manipulation  counting  code-golf  arithmetic  code-golf  quine  code-generation  polyglot  code-golf  math  kolmogorov-complexity  trigonometry  code-golf  string  encryption 

13
シェルピンスキー層
はじめに、そのような下に線を追加することにより、パターンのようなシェルピンスキーの三角形/\を作成することができます... ゆるい枝/または\2つの枝に再び分割されます/\。 ブランチの衝突は、その\/下に何も(スペースはありません)死んでしまいます。 これらの規則を繰り返すと、 /\ /\/\ /\ /\ /\/\/\/\ /\ /\ /\/\ /\/\ etc... (ViHartによるインスピレーション) 正の整数Nを取り込んで、このパターンの最初のN行をstdoutに出力するプログラムまたは関数を作成します。必要以上に先行または後続のスペースはありません。 たとえば、入力が1出力の場合、 /\ 入力が2出力の場合 /\ /\/\ 入力が8出力の場合 /\ /\/\ /\ /\ /\/\/\/\ /\ /\ /\/\ /\/\ /\ /\ /\ /\ /\/\/\/\/\/\/\/\ 等々。 最小バイトのコードが優先されます。

4
フォレスト-シミュレートされたエコシステム
注意 この問題は、このredditスレッド(スポイラーアラート!)から取られたものであり、このサイトのフォーマットに合うように調整しました。すべてのクレジットはredditユーザー「Coder_d00d」に送られます。 この問題では、フォレストをシミュレートします。 このシミュレートされたフォレストでは、3つの側面を扱います。 苗木、ツリー、またはエルダーツリーになりうるツリー。 木こり(彼は木を切り倒し、昼食を食べて、溶岩流に行きます) クマ(彼はパンケーキのような匂いの木こりをひどく傷つける) 警告:これらのルールは、おそらく完全ではありません。それらをガイドラインとして参照し、問題ないものを少し微調整する必要がある場合は(スポーン率が問題として指摘されているので、この例としてkuroi nekoの答えを参照してください。 時間のサイクル: シミュレーションは月単位でシミュレートされます。あなたは「ティック」に間に合うように前進します。各「目盛り」は月を表します。12個の「ティック」は1年を表します。私たちの森は変化し、常に変化します。森林の進捗状況を記録し、何が起こるかを分析します。 森林: フォレストは2次元のフォレストになります。N x Nのサイズのグリッドでフォレストのサイズを表すには、Nの入力が必要です。各場所で、ツリー、ベア、またはランバージャックを保持できます。それらは同じ場所を占めることができますが、多くの場合、同じ場所を占めるときにイベントが発生します。 私たちの森は、サイズに基づいてランダムに生成されます。たとえば、N = 10の場合、10 x 10のフォレストと100のスポットがあります。 フォレストの10%は、ランダムに10か所で木こりを保持します。(100スポットフォレストを使用すると、これは10本の木こりです) フォレストの50%は、ランダムな場所にツリーを保持します(ツリーは3種類のいずれかであり、「ツリー」の真ん中から始まります)。 フォレストの2%がベアを保持します。 フォレストのサイズをどのように受け取るかはあなた次第です(stdin、ファイルから読み取るか、ハードコーディングしてください)。Nを5以上にすることをお勧めします。小さな森はあまり楽しくありません。 イベント: シミュレーション中にイベントが発生します。イベントは、以下で説明するいくつかのロジックに基づいて発生します。私たちの森の3つの要素の各説明で、以下のイベントを説明します。 イベントは最初に木の順序に従い、次に木こりが続き、最後に熊が続きます。 木: 毎月、ツリーは10%の確率で新しい「苗木」を生成します。ツリーに隣接するランダムな空きスペースでは、10%の確率で「苗木」を作成できます。 たとえば、森の真ん中にあるツリーには、周囲に8つのスポットがあります。これらの1つ(空の場合)は「苗木」になります。 存在してから12か月後、「苗木」は「ツリー」にアップグレードされます。「苗木」は、「ツリー」に成熟するまで他のツリーを生成できません。 「苗木」がツリーになると、他の新しい「苗木」を生成できます。 「ツリー」が120か月(10年)使用されていると、「エルダーツリー」になります。 エルダーツリーは10%ではなく20%の確率で新しい「苗木」を生成します。 ツリーまたはエルダーツリーに隣接するオープンスポットがない場合、新しいツリーは生成されません。 木こり: 木こりは木を切り倒し、スキップしてジャンプして野生の花を押します。 毎月木こりはさまようでしょう。任意の方向に隣接するランダムに選択されたスポットに最大3回移動します。たとえば、グリッドの中央にある木こりには、移動先が8つあります。彼はランダムな場所にさまようでしょう。また。そして最後に三度目です。NB:これはどんな場所でも構いません(彼らはクマに足を踏み入れることができ、結果としてモールになります)。 木こりが動くとき、彼が木(苗木ではない)に出会うと、彼は止まり、その月の放浪は終わります。彼はそれから材木を収穫します。ツリーを削除します。木材を1個獲得します。 木こりは「苗木」を収穫しません。 木こりはエルダーツリーも収穫します。ニワトコの木は2枚の木材の価値があります。 木材追跡: 12か月ごとに、伐採された木材の量は、森の中の木こりの数と比較されます。 収集された材木が森林内の木こりの量と同じかそれを超える場合、多くの新しい木こりが雇われ、森の中にランダムに生成されます。 採用する木こりの数を計算します。 floor(lumber_collected / number_of_lumberjacks) ただし、12か月後に収集された木材の量が木こりの数を下回った場合、木こりはお金を節約するために放され、森から1つのランダムな木こりが取り除かれます。Lumberjackの労働力を0未満に減らすことは決してないことに注意してください。 くま: …

3
蜂の巣の奇妙な生活
研究者は最近、蜂の巣の無限のフィールドに住む興味深い蜂のコロニーを発見しました。 各セルには蜂を入れることも入れないこともできます。実際、それらの生き物の生活は少し混chaとしているように見えます。コロニーは常に次のパターンで始まると計算できます。 (ビーによって描か エマニュエルBOUTET にウィキメディアコモンズ。このハニカム・アンド・ハチ画像はこのように下でリリースされる CC-BY-SA。 grumbles) その後、ミツバチのライフサイクルはいわゆる世代に分割されます。各世代の古いミツバチは死に、新しいミツバチはhatch化します。そして、それは主に彼らの細胞の隣人に依存します: ミツバチの隣人が2人以下の場合、孤独のために死にます。 ミツバチが3つ以上の隣人を持っている場合、過密のために死にます。 セルが隣接するセルに2つ、3つ、または4つの生きているミツバチを持っている場合、新しいミツバチが次世代でそこにthere化します。 死ぬミツバチは世代の終わりまで死なないので、次世代のミツバチをhatch化させるかもしれない周囲の細胞に影響を与えます。 そのようなコロニーがどのように機能するかがわかったので、何世代でもそれをシミュレートできます。 入力 入力は、標準入力で指定された単一の数値Nであり、改行で終了します。0≤ N ≤150これは、シミュレートする世代数です。 出力 出力は、標準出力では単一の数値であり、オプションで単一の改行が続きます。これは、N 世代後の生きているミツバチの数を表します。 標準エラーの追加出力は無視されます。 サンプル入力 0 5 42 100 サンプル出力 6 44 1029 5296 勝利条件 ゴルフで通例であるように、最短のコードが勝ちます。同点の場合、以前のソリューションが優先されます。 テストケース 同じテストケースを含む2つのテストスクリプトがあります。 バッシュ パワーシェル 呼び出しはどちらの場合でも:<test script> <my program> [arguments]、./test ruby beehive.rbまたは./test.ps1 ./beehive.exe。 151の代わりに22のテストしかないことを知っています(主にソリューションが非常に遅いため)。タスクを解決する代わりに、正確なテストケースを埋め込むことは控えてください。これらのスクリプトは、変更によってプログラムが正しく動作するかどうかをテストするのに便利です。特定のテストケースにコードを適応できるわけではありません。 別のメモ このタスクは、2011〜W24の間に私の大学で開催されたゴルフコンテストの一部でした。出場者のスコアと言語は次のとおりです。 336 – …

2
ボイドアルゴリズムを実装する
前書き Boidsアルゴリズムは、グループ内の緊急行動の比較的簡単なデモです。作成者のクレイグ・レイノルズが説明するように、3つの主要なルールがあります。 基本的な植毛モデルは、個々のボイドが近くの植生仲間の位置と速度に基づいてどのように操作するかを記述する3つの単純なステアリング動作で構成されます。 分離:地元の群れが混雑しないように操縦します。 アライメント:地元の群れの平均的な方向に向かってください。 結束:地元の群れ仲間の平均的な位置に向かって移動するように操縦します。 各boidは、シーン全体の幾何学的記述に直接アクセスできますが、群れを作るには、周囲の特定の小さな近傍内の群れだけに反応する必要があります。近傍は、ボイドの中心から測定された距離とボイドの飛行方向から測定された角度によって特徴付けられます。この近隣地域の外の群れは無視されます。近隣は、限られた知覚のモデルと考えることができます(濁った水中の魚など)が、群れ仲間がボイドのステアリングに影響を与える領域を定義するものと考える方がおそらく正しいでしょう。 私は物事を説明するときに完璧ではないので、ソースをチェックアウトすることを強くお勧めします。また、彼のサイトには非常に有益な写真がいくつかあります。 チャレンジ ボイド(シミュレートされたエンティティ)の数とフレームの数を指定して、シミュレーションのアニメーションを出力します。 ボイドは赤い円としてレンダリングされる必要があり、円の内側の線はヘディングを示します。これは、ボイドが指している方向です。 各ボイドの角度(レイノルズによる説明)は、完全な300度である必要があります。(360ではない) 各boidの開始見出しと位置は、位置と同様に、ランダムに(ただし、シードされているため、出力はまだ確定されている)必要があります。 ボイドの半径が1の場合、近傍の半径は3でなければなりません。 boidの数は2〜20の範囲です。 フレームの数は1〜5000のいずれかになります アニメーションは、フレームごとに最小10ミリ秒、最大1秒でボイドの数で再生する必要があります。(2ボイド=フレームあたり最大2秒、3ボイド=フレームあたり最大3秒など) 出力アニメーションは、少なくとも5ボイド半径x 5ボイド半径、半分のボイド数の倍数である必要があります。したがって、2ボイドの最小サイズは10ボイド半径x 10ボイド半径であり、3ボイドの最小サイズは15ボイド半径x 15ボイド半径などです。 各boidの半径は、最小で5ピクセル、最大で50ピクセルでなければなりません。 各boidの速度は、1フレームで半径の1/5を超えて移動しないように制限する必要があります。 出力は確定的である必要があるため、同じ入力が複数回実行された場合に同じ出力を生成します。 ボイドが境界に達すると、反対側に戻ります。同様に、各boidの周囲も境界を囲む必要があります。 アルゴリズムの規則 この場合、各Boidの周囲には、Boidの見出しを中心とした300度に及ぶセクターがあります。この「近傍」の他のboidは、「近傍」、または(レイノルズの用語を使用すると)「群れ」と見なされます。 各ボイドは、衝突を回避し、1つのボイド半径と隣接するボイドの快適な距離を維持するために、見出しを調整する必要があります。(これはアルゴリズムの「分離」の側面です。1つの半径をバイパスすることもできますが、ゴムバンドのように、元の位置に戻ります。) 各ボイドは、最初のルールに干渉しない限り、さらに他のボイドの平均ヘディングに近づくように、ヘディングを調整する必要があります。(これはアルゴリズムの「アライメント」の側面です) 衝突が発生しないか、2番目のルールを大幅に妨害しない限り、各ボイドは群れの平均位置に向かって回転します。 この件に関する彼の論文で、彼はこれを次のように説明しています。 シミュレートされた群れを構築するには、幾何学的飛行をサポートするボイドモデルから始めます。衝突回避の反対の力と群れに参加する衝動に対応する行動を追加します。ルールとして簡単に述べますが、優先順位の高い順に、群れのシミュレーションにつながる動作は次のとおりです。 衝突回避:近くの群れとの衝突を回避 速度マッチング:速度を近くの群れと一致させようとします 群れの中心化:近くの群れの近くにとどまることを試みる 動きのより詳細な説明: Boidsアルゴリズムの標準実装では、通常、各ルールの計算を行い、それを一緒にマージします。 最初のルールでは、boidは近傍内の隣接boidのリストを通過し、それ自体と近傍との距離が特定の値よりも小さい場合、boidを隣接から遠ざけるベクトルがboidの見出しに適用されます。 2番目のルールでは、ボイドはその隣の平均ヘディングを計算し、現在のヘディングと平均ヘディングの差のわずかな部分(このチャレンジでは1/10を使用します)を現在のヘディングに追加します。 3番目の最後のルールでは、boidはその近傍の位置を平均し、この位置を指すベクトルを計算します。このベクトルは、ルール2に使用されたものよりもさらに小さい数で乗算され(このチャレンジでは、1/50が使用されます)、見出しに適用されます。 次に、ボイドは見出しの方向に移動します ここ Boidsアルゴリズムの有用な擬似コードの実装があります。 入力と出力の例 入力: 5、190(5ボイド、190フレーム) 出力: 勝利基準 これはcode-golfであるため、バイト単位の最小のソリューションが優先されます。

6
ボールはどこに着地しますか?
最初の行にスペースと1つのピリオド(.、「ボール」)が含まれ、その後にスペース、スラッシュ(/)、およびバックスラッシュ()が含まれる行が続く文字\列を指定すると、ボールが開始位置から落ちた後に着地する列を決定します。それぞれ/が左に1列ずつ\移動し、それぞれが右に1列ずつ移動します。 サンプル入力 . / \ \ / / \ \/ \ \ /\ \ /\ \ \ / サンプル出力 ボールは5列目から始まり、/3行目でヒットし、次に\5行目から7行目までの3つがヒットし、最終的な位置は 7 主にテキストエディタの規則との一貫性のために、列は1からインデックス付けされていることに注意してください。 エッジケース ボール/が最初の列でa に当たった場合、ボールは存在しない列0に永久に留まります0。 ボールが\/パターンのいずれかの側に当たった場合、結果は不定です。プログラムは出力なしで終了するか、無限ループするか、エラーメッセージを印刷することができます(私のソリューションは印刷します-1)が、有効な出力と認識できるものを印刷することはできません。 ボールが\\パターン内の左スラッシュに当たった場合、ボールは右スラッシュではなく、右スラッシュの直下に到達するはずです。私が当初考えていた解決策は、この間違いを起こしやすいため、その道をたどらないでください! .最後/または\各行の後にスペースがある場合とない場合があります。あなたのプログラムは、そのようなパディングが利用可能であることに依存すべきではありません。同様に、最初の行に続く行がある場合とない場合があります。 最初の行には0個以上のスペースと正確に1個のスペースがあると想定できます.。後続の行がある場合は、ゼロ個以上のスペースとゼロ個以上のスラッシュが含まれます。 実装の詳細 プログラムは、ファイル(コマンドライン引数として指定)から読み取るか、標準入力から読み取ることができます。 プログラムは、単一の数値を標準出力に出力する必要があります。(はい、末尾の改行は問題ありません。はい、数字に複数の数字がある場合があります。) テストケース 入力: . 出力: 1 ここでの入力は正確に1バイトであることに注意してください。これは、処理できる最小のケースです。 入力: . \ \ \ \ 出力: 6 これらのスラッシュの後にスペースがないことに注意してください。 入力: . / …

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