ASCII荒野マップを生成する[終了]


8

ASCII荒野マップを生成します。

出力例:

................^^^^
..................^^
...^^^^........o....
.....^^^^...........
....................
........o....TT.....
..TTTT..............
TTTT.TTTT....~~~~~~.
..TT..........~~~~~~
....................

反例(これを行わないでください):

....................
...........T........
...^..........oo....
......^.............
....................
..............TT....
T.T.T.T.T........T..
.................T..
T.T.T.T.T..........T
..............TT...T

ルール:

  1. サイズが20x10文字以上である必要があります
  2. 実行ごとに異なる、つまりランダムでなければならない
  3. 木「T」、丘「^」、水「〜」の連続したさまざまな形状の領域が含まれている必要があり、そのほとんどが5つ以上のセルで構成されている必要があります
  4. デフォルトのグラウンド文字は「。」です。
  5. 通常互いに隣接していない少なくとも2つの村「o」を含む必要があります
  6. 長方形や等間隔の領域などの明らかなパターンを含めないでください-「自然な見た目」が重要です
  7. ルールが守られていることを明示的にチェックする必要はありません(たとえば、四角形のロジックは必要ありません)。ただし、実行の大部分(80%など)は一致する結果を生成する必要があります。
  8. 提出時に、出力例を含めます

得点:

勝者は公式からのスコアが最も低い:code character count-votes


「適合結果」と「ルールに従っている」と述べているが、それが何を意味するのかを正確に説明していない。準拠するこれらのルールは何ですか?また、2番目の例で正確に何が間違っていますか?
KSFT 2015年

回答:


5

APL(99 76)

F←⍳S←10 20⋄'.T^~^To'[⊃7⌊1++/(⊂7×F∊{?S}¨⍳2),T×{F∊(?S)∘+¨+\{2-?3 3}¨⍳99}¨T←⍳3]

必要な長さよりも少し長い(出力を向上させるため)が、Golfscriptの回答が来たら短くします。

GolfScriptの回答が投稿されたので、こちらを短くしてください。出力を元のプログラムよりも大幅に悪化させず、元のバックアップ計画よりも短くなるように、短縮する別の(かなり明白な方法で)方法を考えました。

(以前のバージョンでは、互いにxor-ingしていた5つのビットフィールドがありましたが、現在は互いに追加している3つがあります。)

もちろん、出力例を新しいバージョンの出力に置き換えました。

説明:

  • F←⍳S←10 20:サイズは20x10、Fは各要素がその座標である行列です
  • {F∊(?S)∘+¨+\{2-?3 3}¨⍳99}¨T←⍳5:3つのビットフィールドを生成します。ランダムな座標で開始し、隣接するフィールドに99のランダムなステップを実行してから、そのビットをオンに設定します。99は高いように見えますが、ランダムなので後退することがよくあります。これにより、エリアのマップが作成されます。
  • (⊂7×F∊{?S}¨⍳2):2つの村を追加します。
  • ⊃7⌊1++/:面積を合計し、各数値が特定のタイプを表す行列を与えます。村は別のエリアに表示される可能性が高いため、上限を7にします。
  • '.T^~^To'[... ]:各数字を適切な文字に置き換えます。3つの重複する可能性のあるフィールドがあるため、可能な最大値は6です(3 + 3)

出力例:

....TTT.TTT...TTT.^^
...TT....TTT....T..^
....T....TT.......^^
...~..o..T..^^...^^.
...~.........^^^^^^^
...~~~~....^^..^^^..
~..~~~......^.^.^^^^
~~.~~~......^^.^^^..
~.~~~~........o.....
~~~~~~..............

そして

.....o........~~..~~
..............~~~~~.
.^T.T..........~~.~.
^T~~TTTTTT.......~~~
~~~~TT.TT.T......~~~
^~^TTT....T.....~~~~
^^^^T.....T...T..~~.
^^^^.......TT.T.....
^^^^.........TT.....
^^^^.........o......

古いバージョン:

F←⍳S←10 20⋄G←{F∊(?S)∘+¨+\{2-?3 3}¨⍳99}¨T←⍳5⋄'.T^~^To'[⊃7⌊1++/(⊂7×F∊{?S}¨⍳2),T×{(⊃⍵⌽G)∧~⊃∨/1↓⍵⌽G}¨T]

出力は、ほぼ正確に、可能な限り最高の結果が得られると想像したとおりです。
Tapio 2012

4

JavaScript- 294 290文字

試みを促すために、私はこれを自分で試してみました。ここでライブデモを試すことができます(ブラウザーのJSコンソールを開く必要があります)。ChromeとIE8でテスト済み。

R=function(a){return Math.random()*a|0};t=["~","T"];t.splice(R(3),0,"^");p=["XXX..","XXXX.","XXXXX"];b="....................";for(i=j=0;10>i;++i)j=i%3?j:R(15),s=b.substr(0,i%3?j+R(2):20),s+=p[R(3)].replace(/X/g,t[i/3|0])+b,k=R(19),console.log(s.substr(0,k)+".o"[i%2*R(2)]+s.substr(k,19-k));​

出力例:

....................
.......~~~..........
........~~~~~.......
...o................
...............TT.TT
..........o....TTTTT
....................
.....^^^.o..........
.....^^^^^..........
..................o.

常に3つのエリア(種類ごとに1つ)しかないため、それは理想的ではありません。最大サイズは5x2セルで、数回実行すると、それら(および村)の配置に制限があることに気付き始めます。ただし、ルールは満たしています。


3

GolfScript、97文字

"T~^o"1/{:z{[20:s.*:<rand{.[s~)1-1s]4rand=+}z"o"=!9**]}3*++}%2/:x;<,{"."x{)3$\?)!!*+}/\;-1=}%s/n*

出力例:

.............~......
...........~.~~.....
........~~~~~~......
........~~~.........
.......~~~..........
.......~............
..^^..............T.
^^^^...........o..T.
...^....TTT...^...T^
^........TT.o.^^^.^^
^.......TT.....^^.T.
........T......^.TT.
................TT..
....................
....~~~.............
....~.~.............
..~o~...............
..~.....TTTT........
.......TT..TT.......
....................

そして

.............~......
.............~......
....TTT.....~~TT....
....T.T.....~~TT....
....TT......~~~TT...
.....T.....~~~~T....
.......^^.~~~~......
......^^^..~~.......
......^.^...........
....................
..^^^^..............
..^..^^.............
....^^^^^...........
.......o........TT..
................TT..
....................
......o.............
.............o......
....................
....................

2

Ruby 1.9(127 116 112 107)

m=?.*o=W=200
29.times{|i|o+=i%9-i/28>0?[-1,1,20].sample: rand(W);m[o%W]='T~^'[i/9]||?o}
puts m.scan /.{20}/

出力は少しわかりやすいですが、ほとんど仕様に適合していると思います。

いくつかの出力例:

....................
........TTTTTTT.....
........T^^^........
.........^..........
.........^..........
.........^^^.o......
....................
.....~.o............
...~~~..............
...~~~~~............

別の:

.....^^.............
......^^............
.......^^...........
...........o........
....................
..............T~~~..
.............TT~~...
.............T.~....
.............T.~....
.o..^^.......TT~....

そしてまた:

.....TT.............
..............~.....
..............~.....
..............~~....
..............~~~...
........^^^.........
....o.T...^.........
......TT..^^^.......
..o..TT....^^.......
.....T..............

それがコード化されている方法のために、ほとんど常に孤独な木があります。それがデクの木だと想像したい。


1

Q(116107文字)

これはQの1つです

(-1')20 cut@[199{.[t!`s#'(0 20 20 20;0 0 20 20;0 0 0 20;0 1 2 3)!\:t:"T^~.";(x;rand 30)]}\".";2?200;:;"o"];

出力例

...........o........
...~~....TTTT..~~o..
......TTTTTTTTT....T
T...................
......^^^........TTT
...~~~~.............
....................
............^^......
..~~~..^^^^^^.......
....~..............T

そして

..........^^^..^...o
....................
........^.T.........
.......~~...^.......
....................
....TTTTTTTT....^...
..~.................
.o.....^^^^^.......T
............~~~~~~~~
~~~~~....TTT........

そして

....................
...~~~~~~~~~~.....~.
................TT..
....TTTTT..~.TT.TTTT
T................TTT
TTT..........TTTTTTT
TTT....T............
........T.......TToT
TTT..............^^.
...TTT..^.~~~~.o....

確率行列を微調整して出力に影響を与えることができますが、上記はあなたが探しているものに準拠していると思います。

/ edit:微調整された出力

/ edit:2つの村を追加するだけでcharの数を減らしました


これは、ルール3に違反:木「T」、丘「^」の連続と様々な形状の領域を含み、水「〜」、そのほとんどが5個の以上のセルで構成されなければならない必要があります -あなたの地域のほとんどはサイズ1である
タピオ

私はルールを読むのがひどいです...私は分布を微調整しました、私はそれが今より順応していると思います。
skeevey 2012

審美的には、それらのいくつかは私の好みには少しうるさすぎる(1つの文字の領域が多すぎる)が、今はルールに従っています(実際にはカウントしませんでしたが、視覚的には十分に近いです)。コンパクト等よくできました!
タピオ

1

K、84

f:{,/{x+!y}'[5?200;5?10]};m::200#".";{@[`m;x;:;y]}'[(f`;f`;f`;2?200);"~T^o"];10 20#m

出力:

"...................T"
"TTTTT~....TTT...^^^."
"...................^"
"^^..............^^^^"
"^^^..~~~~.......^^o."
".........TTTTT......"
"..~~~~~~........TTTT"
"TTT.~..............."
".........o.....^^^^."
"..........TTTTT....."

そして

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