ASCII-Wildniskarte erstellen [geschlossen]

8

Generieren Sie eine ASCII-Wildniskarte.

Beispielausgabe:

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

Anti-Beispiel (mach das nicht):

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

Regeln:

  1. Muss mindestens 20x10 Zeichen groß sein
  2. Muss bei jedem Lauf anders sein, dh zufällig
  3. Muss durchgehende und unterschiedlich geformte Bereiche von Bäumen 'T', Hügeln '^' und Wasser '~' enthalten, von denen die meisten aus mehr als 5 Zellen bestehen sollten
  4. Das Standard-Grundzeichen ist '.'
  5. Muss mindestens 2 Dörfer enthalten, die normalerweise nicht nebeneinander liegen
  6. Darf keine offensichtlichen Muster wie Rechtecke oder gleichmäßig verteilte Bereiche enthalten - "natürliches Aussehen" ist der Schlüssel
  7. Sie müssen nicht explizit überprüfen, ob die Regeln eingehalten werden (z. B. keine Anti-Rechteck-Logik erforderlich), aber die große Mehrheit der Läufe (z. B. 80%) muss konforme Ergebnisse liefern
  8. Fügen Sie Ihrer Einreichung eine Beispielausgabe bei

Wertung:

Der Gewinner hat die niedrigste Punktzahl aus der Formel: code character count-votes

Tapio
quelle
Sie erwähnen "konforme Ergebnisse" und "die Regeln, die befolgt werden", erklären aber nicht genau, was das bedeutet. Welche Regeln müssen eingehalten werden und was genau stimmt nicht mit Ihrem zweiten Beispiel?
KSFT

Antworten:

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]

Ein bisschen länger als nötig (damit es eine bessere Ausgabe gibt), aber ich werde es verkürzen, wenn die Golfscript-Antwort eingeht.

Die GolfScript-Antwort wurde veröffentlicht, daher hier eine kürzere. Ich dachte an eine andere (im Nachhinein ziemlich offensichtliche) Möglichkeit, sie so zu verkürzen, dass die Ausgabe nicht viel schlechter als das ursprüngliche Programm und sogar kürzer als mein ursprünglicher Sicherungsplan ist.

(In der alten Version hatte ich fünf Bitfelder, die ich miteinander verknüpft habe, jetzt habe ich drei, die ich einander hinzufüge.)

Ich habe die Beispielausgabe natürlich durch die Ausgabe der neuen Version ersetzt.

Erläuterung:

  • F←⍳S←10 20: Größe ist 20x10, F ist eine Matrix, in der jedes Element seine Koordinaten ist
  • {F∊(?S)∘+¨+\{2-?3 3}¨⍳99}¨T←⍳5: Generieren Sie 3 Bitfelder, indem Sie an einer zufälligen Koordinate beginnen, 99 zufällige Schritte zu einem benachbarten Feld ausführen und dieses Bit dann aktivieren. 99 scheint hoch zu sein, aber es zieht sich oft zurück, da es zufällig ist. Dies macht die Karten für die Gebiete.
  • (⊂7×F∊{?S}¨⍳2): In zwei Dörfern hinzufügen.
  • ⊃7⌊1++/: Summieren Sie die Bereiche und geben Sie eine Matrix an, in der jede Zahl einen bestimmten Typ darstellt. Cap es auf 7, weil die Dörfer in einem anderen Gebiet mit hohen Zahlen erscheinen könnten.
  • '.T^~^To'[... ]: Ersetzen Sie jede Zahl durch das richtige Zeichen. Es gibt 3 möglicherweise überlappende Felder, daher ist der höchstmögliche Wert 6. (3 + 3)

Beispielausgabe:

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

und

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

Alte Version:

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]
Marinus
quelle
Die Ausgabe ist fast genau so, wie ich mir das bestmögliche Ergebnis vorgestellt habe!
Tapio
4

JavaScript - 294 290 Zeichen

Um Versuche anzuregen, habe ich mich selbst damit beschäftigt. Sie können eine Live - Demo versuchen hier (Sie benötigen Browser JS - Konsole zu öffnen). Getestet mit Chrome und 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));​

Beispielausgabe:

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

Es ist nicht ideal, da es immer nur drei Bereiche gibt (einen von jeder Art), deren maximale Größe 5x2 Zellen beträgt und nach einigen Läufen Einschränkungen bei der Platzierung (und der Platzierung der Dörfer) auftreten. Es erfüllt jedoch die Regeln.

Tapio
quelle
3

GolfScript, 97 Zeichen

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

Beispielausgaben:

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

und

.............~......
.............~......
....TTT.....~~TT....
....T.T.....~~TT....
....TT......~~~TT...
.....T.....~~~~T....
.......^^.~~~~......
......^^^..~~.......
......^.^...........
....................
..^^^^..............
..^..^^.............
....^^^^^...........
.......o........TT..
................TT..
....................
......o.............
.............o......
....................
....................
Howard
quelle
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}/

Die Ausgabe ist ein bisschen schlicht, aber ich denke, sie entspricht größtenteils der Spezifikation!

Einige Beispielausgaben:

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

Ein weiterer:

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

Und wieder:

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

Aufgrund der Art und Weise, wie es codiert ist, gibt es fast immer einen einsamen Baum. Ich stelle mir gerne vor, dass es der Deku-Baum ist.

Paul Prestidge
quelle
1

Q ( 116 107 char)

Hier ist einer in Q.

(-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"];

Beispielausgabe

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

und

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

und

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

Ich kann die stochastische Matrix anpassen, um die Ausgabe zu beeinflussen, aber ich denke, dass das oben Gesagte dem entspricht, wonach Sie suchen.

/ edit: optimierte Ausgabe

/ edit: Die Anzahl der Zeichen wurde reduziert, indem nur 2 Dörfer hinzugefügt wurden

skeevey
quelle
Es verstößt gegen Regel 3: Muss durchgehende und unterschiedlich geformte Bereiche von Bäumen 'T', Hügeln '^' und Wasser '~' enthalten, von denen die meisten aus mehr als 5 Zellen bestehen sollten - die meisten Ihrer Bereiche haben die Größe 1.
Tapio
Ich bin schrecklich, wenn ich Regeln lese ... Ich habe die Verteilung optimiert, ich denke, sie ist jetzt konformer.
skeevey
Ästhetisch sind einige von ihnen etwas zu laut für meinen Geschmack (zu viele Bereiche mit einem Charakter), aber es folgt jetzt den Regeln (ich habe nicht wirklich gezählt, aber visuell ist es nah genug), ist definitiv zufälliger als meine Lösung, sehr kompakt etc. Gut gemacht!
Tapio
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

Ausgabe:

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

und

"...............~~~.."
".......~~~~~......TT"
"TTTT.^^^^^^^^......."
"....TT......~~......"
"..........^........."
"...........oTTT..^^^"
"^^^^^^..........^^^^"
"^^...TTTTTTT........"
"................o.~~"
"~~~.............T..."
tmartin
quelle