Subir a América

11

Ahora que otros usuarios han ayudado a Trump a construir el muro , es hora de que lo escales.

Este es un desafío de arte ascii en el que debes sacar un muro de escalada con presas colocadas al azar.

Una pared de escalada está compuesta de paneles, cada uno de los cuales tiene entre 3 y 10 bodegas y tiene 5 paneles de altura. Cada panel tiene 4 caracteres de alto y 10 caracteres de ancho

Usamos |para representar el lado de la pared (el arête) y a -para representar los bordes de los paneles. Las esquinas de los paneles se muestran +y las bodegas se muestran como o.

Finalmente, la pared debe tener America!en la parte superior e Mexicoinferior.

Su programa no debe recibir ninguna entrada a menos que se requiera una entrada para ejecutarse y debe generar algo similar al siguiente

Este es un ejemplo de salida:

  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

Esto puede establecerse de manera confusa, por lo que está estructurado más claramente a continuación

Entrada

Zilcho No debe tomar absolutamente ninguna entrada.

Salida

Un muro de escalada ascii-art compuesto por 5 paneles, cada uno de 6 líneas por 12 columnas con America!centrado en la parte superior y Mexicocentrado en la parte inferior. Cada panel tiene un patrón idéntico generado aleatoriamente por el programa. El patrón del panel consiste en un número aleatorio de retenciones distribuidas aleatoriamente, entre 3 y 10.

Reglas

  • No se permite entrada
  • Yo diría "no hay incorporados", pero si su idioma tiene un incorporado para esto, lo aceptaré automáticamente como el ganador.
  • Este es el por lo que gana el código más corto (en bytes).
  • La salida sin retenciones debe ser exactamente la misma que la anterior, nuevamente sin retenciones.
  • Aleatorio es el aleatorio definido aquí
caird coinheringaahing
fuente
55
¿Al azar significa uniformemente aleatorio, o cada diseño posible solo necesita una posibilidad distinta de cero, o solo necesito tener al menos dos posibilidades?
Pavel
@ Notts90 Deberían ser iguales y elegir una cantidad al azar. Esto se menciona en la publicación, pero la aleatoriedad no está definida.
Pavel
2
Todavía creo que este sería un desafío mejor si cada panel tuviera que ser diferente.
Shaggy
3
Esto es mi problema con Sandbox. Tuve este desafío allí durante más de un mes y acabo de decidir limpiar mis publicaciones allí. ¡Así que publico esto, pensando que cada problema se ha resuelto y esto sucede!
caird coinheringaahing
1
@WORNGALL ¡Noticias falsas! ¡Mentiras! El azar es muy importante. Trumpscript tiene el MEJOR GENERADOR ALEATORIO que hayas visto. (Todo lo que tiene que hacer es un enlace a feed de Twitter del presidente!)
el nivel del río St

Respuestas:

5

Jalea , 65 57 bytes

Primera vez el uso del nuevo cuño , una de dos puntos de código literal de cadena entera ( ⁽¥0= 2049)

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

Programa completo sin entrada e impresión de la pared.

Pruébalo en línea!

¿Cómo?

⁽¥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
Jonathan Allan
fuente
44
Este es el programa de gelatina más largo que he visto.
Pavel
La ambigüedad ha cambiado. Decidí con 3-10 como permitir que el tuyo se quede.
caird coinheringaahing
+1 para el )o <-- a space. ¡Genuinamente me hizo reír!
caird coinheringaahing
@ Phoenix se ha acortado, pero no puedo evitar pensar que debería ser aún más corto.
Jonathan Allan
@ Satan'sSon es casi una tolva espacial!
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";

Pruébalo en línea!

Expandido

<?=($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
Jörg Hülsermann
fuente
4

JavaScript (ES6), 194160 bytes

(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`

Intentalo

El patrón de las retenciones cambiará cada 2 segundos en el Fragmento a continuación.

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>


Explicación

  • Creamos una función anónima que, aunque no requiere ninguna entrada, tiene 2 parámetros con valores predeterminados:
    • h, que recibe un valor inicial de 0; esto mantendrá el recuento de la cantidad de retenciones en el panel cuando las agreguemos.
    • g, que es una función recursiva que usaremos para crear el patrón aleatorio de retenciones en el panel. Volveremos a esto en un momento.
  • En el cuerpo de la función principal, mostramos una plantilla literal, comenzando con America!\n.
  • Luego creamos el panel divisor ( +----------+\n) y lo asignamos a la variable t, agregándolo a la salida en el proceso.
  • A continuación, creamos una sola línea del panel ( | |\n), la repetimos 4 veces y agregamos t.
  • Llamamos g, pasando la cadena del paso anterior como argumento, a través del parámetro p.
  • Ahora, para el patrón de espera. Dentro de g:
    • Verificamos si h>2(es decir, si tenemos 3 o más retenciones).
    • Si es así, devolvemos la cadena p.
    • Si no, llamamos gnuevamente, esta vez pasando una copia modificada de pcomo argumento.
    • La copia modificada de ptiene el replacemétodo utilizado, reemplazando todos los <space>caracteres con a <space>o an ohaciendo referencia al índice de caracteres (0 o 1) de la cadena <space>o.
    • Determinamos el índice de caracteres por
      1. Llamada Math.random(), que devuelve un número decimal entre 0 y 1, exclusivo.
      2. Comprobando si eso es mayor que .8. Con 40 espacios en el panel y solo un máximo de 10 retenciones, esto mejora la distribución de las retenciones en el panel ( .75sería más preciso, pero, con suerte, me permitirá la concesión por el bien de guardar un byte!)
      3. El booleano de esa verificación se asigna a la variable s.
      4. sse coacciona a un entero (0 o 1) y se agrega a h.
      5. Verificamos si hahora es menor que 11 (es decir, si actualmente tenemos menos de 10 retenciones) y si sfue cierto.
      6. Ese booleano se convierte a su vez en un número entero, lo que nos da un índice en la cadena.
  • De vuelta a nuestra salida! Repetimos la cadena devuelta por g5 veces.
  • Y luego simplemente agregue Mexicoal final de la cadena para terminar las cosas. ¡Uf!

Alternativa

Y, simplemente porque pensé que habría sido una buena adición al desafío: por solo 12 bytes adicionales, podemos tener un patrón único de retenciones en cada panel, en lugar de que todos sean idénticos.

(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`

Intentalo

Nuevamente, los patrones de las bodegas cambiarán cada 2 segundos.

Lanudo
fuente
3

Pyth - 58 57 bytes, posiblemente 47

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

Intentalo

Explicación de la solución anterior (actualizaré cuando tenga tiempo):

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

Creo que puedo obtener 47 mientras sigo técnicamente las reglas:

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

Aquí, el número de agujeros todavía se elige al azar (del conjunto {4,8}) y la configuración de esos agujeros se elige al azar (del conjunto de configuraciones donde cada fila es idéntica)

Intentalo

Maria
fuente
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"}]
J42161217
fuente
¿+1 por usar un idioma que no puedo probar?
caird coinheringaahing
@ Satan'sSon, puedes ejecutar la mayoría de los programas de Mathematica gratis aquí en Wolfram Sandbox. (Pégalo y presiona shift-enter.)
No es un árbol
Cuando se trata de imprimir, este sitio imprime de una manera divertida. La salida está distorsionada porque usa caracteres especiales ...
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" 
Sivaprasath Vadivel
fuente
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'])

Pruébalo en repl.it

-35 incluyendo algunas pistas de @ Satan'sSon - ¡gracias!

-3 con gracias a @Wondercricket

ElPedro
fuente
¿podría guardar bytes simplemente generando en tlugar de guardarlo en una variable y si elimina los espacios después America!y Mexico? print" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0?
caird coinheringaahing
Gracias @ Satan'sSon. Este fue un "almuerzo especial" y probablemente pueda jugar un poco más cuando tenga tiempo. Gracias de nuevo por las pistas.
ElPedro
También puede guardar algunos bytes cambiando su importación from random import*y eliminando r.de las funciones
Wondercricket
Gracias @Wondercricket. No estoy seguro de cómo me las arreglé para perder esa :)
ElPedro
¡Satanás fue útil! (Primera y última vez para todo> :(
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'])
TFeld
fuente