Klettere nach Amerika


11

Jetzt, da andere Benutzer Trump beim Bau der Mauer geholfen haben , ist es Zeit für Sie, sie zu besteigen.

Dies ist eine ASCII-Kunstherausforderung, bei der Sie eine Kletterwand mit zufällig platzierten Griffen ausgeben müssen.

Eine Kletterwand besteht aus Paneelen, von denen jedes zwischen 3 und 10 Griffe hat und 5 Paneele hoch ist. Jedes Panel ist 4 Zeichen hoch und 10 Zeichen breit

Wir verwenden |, um die Seite der Wand (das Arête) und a -darzustellen, um die Kanten von Paneelen darzustellen. Die Ecken der Paneele sind durch +und die Griffe als dargestellt o.

Schließlich muss die Wand America!oben und Mexicounten haben.

Ihr Programm sollte keine Eingabe annehmen, es sei denn, zur Ausführung ist eine Eingabe erforderlich, und es sollte etwas ausgegeben werden, das dem folgenden ähnlich sieht

Dies ist eine Beispielausgabe:

  America!
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
   Mexico

Dies kann verwirrend dargelegt werden, so dass es unten klarer strukturiert ist

Eingang

Zilcho. Sie sollten keine absolute Eingabe nehmen.

Ausgabe

Eine Ascii-Art-Kletterwand aus 5 Tafeln mit jeweils 6 Linien und 12 Säulen America!, die oben Mexicozentriert und unten zentriert sind. Jedes Panel hat ein identisches Muster, das vom Programm zufällig generiert wird. Das Panel-Muster besteht aus einer zufällig verteilten Zufallszahl von Laderäumen zwischen 3 und 10.

Regeln

  • Keine Eingabe erlaubt
  • Ich würde "keine eingebauten" sagen, aber wenn Ihre Sprache ein eingebautes dafür hat, werde ich es automatisch als Gewinner akzeptieren.
  • Dies ist so dass der kürzeste Code (in Bytes) gewinnt.
  • Die Ausgabe ohne Holds muss genau wie oben sein, auch ohne Holds.
  • Zufall ist der hier definierte Zufall

5
Bedeutet zufällig einheitlich zufällig oder benötigt jedes mögliche Layout nur eine Wahrscheinlichkeit ungleich Null, oder muss ich nur mindestens zwei Möglichkeiten haben?
Pavel

@ Notts90 Sie sollten gleich sein und eine zufällige Menge auswählen. Dies wird im Beitrag erwähnt, aber die Zufälligkeit ist nicht definiert.
Pavel

2
Ich denke immer noch, dass dies eine bessere Herausforderung wäre, wenn jedes Panel anders sein müsste.
Shaggy

3
Das hier ist mein Problem mit der Sandbox. Ich hatte diese Herausforderung dort seit mehr als einem Monat und habe gerade beschlossen, meine Beiträge dort zu räumen. Also poste ich dies und denke, dass jedes Problem behoben wurde und dies passiert!
Caird Coinheringaahing

1
@WORNGALL Gefälschte Nachrichten! Lügen! Der Zufall ist sehr wichtig. Trumpscript hat den BESTEN ZUFÄLLIGEN GENERATOR, den Sie jemals gesehen haben. (Alles, was Sie tun müssen, ist einen Link zum Twitter-Feed des Präsidenten!)
Level River St

Antworten:


5

Gelee , 65 57 Bytes

Erster Einsatz von der neumodischen , einer Zwei-Punkt - Code-integer Stringliteral ( ⁽¥0= 2049)

⁽¥0ṃ⁾+-W
“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#»

Vollständiges Programm ohne Eingabe und Drucken der Wand.

Probieren Sie es online aus!

Wie?

⁽¥0ṃ⁾+-W - Link 1, panel separator: no arguments
⁽¥0      - literal 2049
    ⁾+-  - literal "+-"
   ṃ     - convert 2049 to base "+-" as if they were [1,0]
       W - wrap in a list   -> ["+----------+"]

“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#» - Main link: no arguments
“K2X)»                                           - "  America!"
      Ṅ                                          - print with line feed
       ø                                         - niladic chain separation
        40                                       - literal 40
          R                                      - range -> [1,2,...,40]
           Ẋ                                     - random shuffle
                 ¤                               - nilad and link(s) as a nilad:
             8X                                  -   random integer between 1 and 8
                3                                -   literal 3
               +                                 -   add
            <                                    - less than? (vectorises)
                   ⁵                             - literal 10
                  s                              - split into chunks of length 10
                     ⁾o <-- a space              - literal "o "
                    ị                            - index into
                           ⁾||                   - literal "||"
                        j@€                      - join with reversed @rguments
                              Y                  - join with line feeds
                                ¢                - call last link (1) as a nilad
                               ṭ                 - tack left to right
                                 µ               - call that p... (monadic chain separation)
                                    5¡           - repeat five times:
                                   €             -   for €ach (separator & panel)
                                  Ṅ              -     print with trailing line feed(separator and panel):
                                      Ṗ          - pop (just the separator now)
                                        ⁷        - literal line feed
                                       ;         - concatenate
                                                 - unused value printed
                                         “Ç€:;#» - "   Mexico"
                                                 - implicit print

4
Dies ist das längste Gelee-Programm, das ich je gesehen habe.
Pavel

Die Mehrdeutigkeit wurde geändert. Ich entschied mich mit 3-10, damit du bleiben kannst.
Caird Coinheringaahing

+1 für die )o <-- a space. Hat mich wirklich zum Lachen gebracht!
Caird Coinheringaahing

@Phoenix es ist kürzer geworden, aber ich kann nicht anders als zu denken, dass es noch kürzer sein sollte.
Jonathan Allan

@ Satan'sSon es ist fast ein Space-Hopper!
Jonathan Allan

4

PHP, 138 Bytes

<?=($p=str_pad)("  America!",349,strtr("
+----------+
|0|
|1|
|2|
|3|",str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10)))."   Mexico";

Probieren Sie es online aus!

Erweitert

<?=($p=str_pad)("  America!",349, 
#fill the string till a length of 349 with
strtr("
+----------+
|0|
|1|
|2|
|3|",
# before replace the digits with strings in the array
str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10))) 
# make a string with o length 3- 10 fill it with spaces to length 40
# shuffle the resulting string and split it into a array of strings with length 10
."   Mexico"; # add the end

4

JavaScript (ES6), 194 160 Byte

(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`

Versuch es

Das Muster der Laderäume ändert sich alle 2 Sekunden im folgenden Snippet.

f=
(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`
o.innerText=f()
setInterval("o.innerText=f()",2e3)
<pre id=o>


Erläuterung

  • Wir erstellen eine anonyme Funktion, die zwar keine Eingabe benötigt, jedoch zwei Parameter mit Standardwerten enthält:
    • h, der einen Anfangswert von gegeben ist 0; Dadurch wird die Anzahl der Holds auf dem Panel gezählt, wenn wir sie hinzufügen.
    • gDies ist eine rekursive Funktion, mit der wir das zufällige Muster von Holds auf dem Panel erstellen. Wir werden gleich darauf zurückkommen.
  • Im Hauptfunktionskörper geben wir ein Vorlagenliteral aus, beginnend mit America!\n.
  • Anschließend erstellen wir den Panel-Teiler ( +----------+\n), weisen ihn der Variablen zu tund fügen ihn dabei der Ausgabe hinzu.
  • Als nächstes erstellen wir eine einzelne Zeile des Panels ( | |\n), wiederholen sie viermal und hängen sie an t.
  • Wir rufen auf gund übergeben die Zeichenfolge aus dem obigen Schritt als Argument über einen Parameter p.
  • Nun zum Haltemuster. Innerhalb g:
    • Wir prüfen, ob h>2(dh haben wir 3 oder mehr Laderäume).
    • Wenn ja, geben wir den String zurück p.
    • Wenn nicht, rufen wir gerneut auf und übergeben diesmal eine modifizierte Kopie von pals Argument.
    • Auf der geänderten Kopie von pwird die replaceMethode verwendet, bei der alle <space>Zeichen durch ein <space>oder ein ersetzt werden, oindem auf den Zeichenindex (0 oder 1) der Zeichenfolge verwiesen wird <space>o.
    • Wir bestimmen den Zeichenindex durch
      1. Aufruf Math.random(), der eine Dezimalzahl zwischen 0 und 1 zurückgibt, exklusiv.
      2. Überprüfen Sie, ob dies größer als ist .8. Mit 40 Feldern im Panel und maximal 10 Holds verbessert dies die Verteilung der Holds über das Panel ( .75wäre genauer, aber hoffentlich erlauben Sie mir die Konzession für ein Byte speichern!).
      3. Der Boolesche Wert dieser Prüfung wird der Variablen zugewiesen s.
      4. swird zu einer ganzen Zahl (0 oder 1) gezwungen und zu addiert h.
      5. Wir prüfen, ob hjetzt weniger als 11 (dh haben wir derzeit weniger als 10 Holds) und ob dies szutrifft.
      6. Dieser Boolesche Wert wird wiederum zu einer Ganzzahl gezwungen, wodurch wir einen Index in der Zeichenfolge erhalten.
  • Zurück zu unserer Ausgabe! Wir wiederholen die zurückgegebene Zeichenfolge um das gFünffache.
  • Und dann einfach Mexicoam Ende der Zeichenfolge hinzufügen, um die Sache zu beenden. Puh!

Alternative

Und einfach, weil ich dachte, es wäre eine schöne Ergänzung der Herausforderung gewesen: Für nur 12 zusätzliche Bytes können wir auf jedem Panel ein eindeutiges Muster von Laderäumen haben, anstatt dass alle identisch sind.

(g=(p=`|          |
`.repeat(4)+t,h=0)=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s]),h))=>`  America!
${t=`+----------+
`}${g()+g()+g()+g()+g()}    Mexico`

Versuch es

Auch hier ändern sich die Muster der Laderäume alle 2 Sekunden.


3

Pyth - 58 57 Bytes, möglicherweise 47

Ks(b\+*\-T\+*+++b\|*dT\|4)J<.SxdmdK+3O8+*s.e?/Jk\obK5<K13

Versuch es

Erklärung der alten Lösung (ich werde aktualisieren, wenn ich Zeit habe):

J+++b\+*\-T\+K+J*+++b\|*dT\|4=Y<.SxdmdK+3O8+*s.e?/Yk\obK5J
J+++b\+*\-T\+                                                Create the +----------+, and store as J
             K+J*+++b\|*dT\|4                                Create a full panel (minus bottom border, and without holes), store as K
                                  xdmdK                      Get indices of spaces
                                .S                           Create random permutation of these indices
                               <       +3O8                  Get first several indices (a random number from 3 to 10)
                                             s.e?/Yk\obK     Replace space with 'o' at these indices
                                           +*           5J   Create 5 copies, and add bottom border

Ich denke, ich kann 47 bekommen, während ich mich technisch an die Regeln halte:

JhO2Ks(b\+*\-T\+*+++b\|.S+*\oJ*d-TJ\|4)+*K5<K13

Hier wird die Anzahl der Löcher immer noch zufällig ausgewählt (aus der Menge {4,8}) und die Konfiguration dieser Löcher wird zufällig ausgewählt (aus der Menge der Konfigurationen, bei denen jede Reihe identisch ist).

Versuch es


2

Mathematica, 201 Bytes

c=Column;s=RandomSample[Tuples[{" ",o," "," "},10],4];t="+----------+";w=c[{t,c[Row/@Table[AppendTo[s[[i]],"|"];PrependTo[s[[i]],"|"],{i,Length@s}]]}];c[Flatten@{"  America!",Table[w,5],t,"   Mexico"}]

+1 für die Verwendung einer Sprache, die ich nicht testen kann?
Caird Coinheringaahing

@ Satan'sSon, Sie können die meisten Mathematica-Programme hier in der Wolfram Sandbox kostenlos ausführen . (Fügen Sie es ein und drücken Sie die Umschalttaste.)
Kein Baum

Wenn es um das Drucken geht, druckt diese Seite auf witzige Weise. Die Ausgabe ist verzerrt, weil es spezielle Zeichen verwendet ...
J42161217

1

Powershell (255 Bytes)

echo "  America!"
for($l=0;$l-lt4;$l++){$a=," "*12;$a[0]="|";$a[11]="|";$i=get-random -Max 10 -Min 6;$j=get-random -Max 5 -Min 1;$a[$i]=$a[$j]="o";$b+=($a-join"")}
for($k=0;$k-lt5;$k++){echo +----------+($b-join"`n")} 
echo +----------+`n"   Mexico" 

1

Python 2 , 259 224 221 218 Bytes

from random import*
b=[' ']*40
for x in sample(range(40),randint(3,10)):b[x]='o'
a=["+"+"-"*10+"+"]+['|'+''.join(o)+'|'for o in[b[x*10:x*10+10]for x in 0,1,2,3]] 
print'\n'.join(['  America!']+a*5+[a[0]]+['   Mexico'])

Probieren Sie es bei repl.it aus

-35 mit einigen Hinweisen von @ Satan'sSon - danke!

-3 danke an @Wondercricket


Können Sie Bytes speichern, indem Sie sie einfach ausgeben, tanstatt sie in einer Variablen zu speichern, und wenn Sie die Leerzeichen nach America!und entfernen Mexico? print" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0?
Caird Coinheringaahing

Danke @ Satan'sSon. Dies war ein "Lunchbreak Special" und kann wahrscheinlich ein bisschen mehr Golf spielen, wenn ich Zeit habe. Nochmals vielen Dank für die Hinweise.
ElPedro

Sie können auch ein paar Bytes sparen, indem Sie Ihren Import in die Funktionen from random import*r.
ändern

Danke @Wondercricket. Ich bin mir nicht sicher, wie ich es geschafft habe, diesen zu verpassen :)
ElPedro

Satan war hilfreich! (Erstes und letztes Mal für alles> :(
Caird Coinheringaahing

0

Python 2, 197 Bytes

from random import*
n=randint(3,10)
s=list('o'*n+' '*(40-n))
shuffle(s)
t=10
S='+'+'-'*t+'+'
print'\n'.join(['  America!']+([S]+['|'+''.join(s[x:x+t])+'|'for x in range(0,40,t)])*5+[S,'   Mexico'])
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.