¡Ayuda a Trump a construir el muro!


68

¡Trump necesita construir el muro y tú lo vas a hacer! Para construir su muro de manera más eficiente, he creado un patrón simple y repetible para que use:

    __   __    
   |  |_|  |   
___|       |___
-   -   -   -  
 - - - - - - - 
- - - - - - - -
———————————————

Trump le dirá cuántos segmentos de muro necesita y usted los construirá para que se vean así.

Aquí está el patrón:

    __   __     <-- 4-2-3-2-4          ' _ _ '
   |  |_|  |    <-- 3-1-2-1-1-1-2-1-3  ' | |_| | '
___|       |___ <-- 3-1-7-1-3          '_| |_'
-   -   -   -   <-- 1-3-1-3-1-3-1-1    '- - - - '
 - - - - - - -  <-- 1-1-...-1-1        ' - -...- - '
- - - - - - - - <-- 1-1-...-1-1        '- - ... - -'
——————————————— <-- 15                 Unicode U+2014

La entrada siempre será un entero> 0.

Casos de prueba:

1
    __   __    
   |  |_|  |   
___|       |___
-   -   -   -  
 - - - - - - - 
- - - - - - - -
———————————————

2
    __   __        __   __    
   |  |_|  |      |  |_|  |   
___|       |______|       |___
-   -   -   -  -   -   -   -  
 - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -
——————————————————————————————

5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————

Como necesita hacer esto rápido, ¡escriba el programa más corto posible!

Si ayuda, escribí el desafío primero, el título último;)

Respuestas:


9

05AB1E , 38 bytes

•4H’*»È%f·ù„áÅ'4•4B3ÝJ"_ -|"‡8ô€ûvy¹×»

Pruébalo en línea!

•4H’*»È%f·ù„áÅ'4•     # Push '1724427993555739020619095486300160'
4B                    # Convert to base 4 (turns it into an 8x8 bitmap).
  3ÝJ"_ -|"‡          # Replace digits 0-3 with _, , -, or |.
            8ô        # Split into pieces of 8.
              €û      # Palindromize each piece.
                vy¹×» # For each row, dupe it n times (hori) and print it.

1724427993555739020619095486300160 convertido a base-4:

11110011111311300003111121112111121212122121212100000000

11110011111311300003111121112111121212122121212100000000 con caracteres reemplazados:

__ | |____| - - - - - -- - - - ________

Patrón anterior dividido en 8 piezas:

    __  
   |  |_
___|    
-   -   
 - - - -
- - - - 
________

Luego palindromizas, y lo haces el tiempo que sea necesario a través de la repetición.


29

CJam, 52 bytes

F,ri*"s@;b6(MBZF,fu"128b6b"_ 
|-—"f=N/ff=zN*

Incluye un montón de caracteres ASCII no imprimibles. El hexdump del primer literal de cadena empujado es:

01 73 06 40 3B 62 36 28 1E 4D 07 42 5A 14 1B 46 2C 66 75

Pruébalo aquí!

Explicación

El hexdump anterior se interpreta como un número de base 128, luego se convierte en base 6, para obtener esta lista:

[1 1 1 1 0 0 1 1 1 0 0 2
 1 1 1 3 1 1 3 0 3 1 1 3 2
 0 0 0 3 1 1 1 1 1 1 1 3 2
 4 1 1 1 2
 1 4 2
 4 1 2
 5]

Para ello, aplicamos el mapeo 0 → _, 1 → space, 2 → \n, 3 → |, 4 → -, 5 → —. Esto nos da la cadena:

    __   __
   |  |_|  |
___|       |
-   
 -
- 
—

Consiste en el "período" de cada línea; es decir, podemos recorrer la quinta línea " -"para obtener " - - - - - - - ".

Luego, ejecutamos este subprograma:

N/               Split into lines.
  Ff*            Repeat each line 15 times (to cycle it).
     Ff<         Take the first 15 chars of each line.
        rif*     Repeat these chars input() times.
            N*   Join lines.

(La nueva versión hace esto de una manera ligeramente diferente que en realidad no puedo entender muy bien, porque lo usa ff=).


21
¿Qué es esto? Ni siquiera
Conor O'Brien

44
¿Se hizo este lenguaje especialmente para esta respuesta?
Erdal G.

55
@ErdalG. No. Aunque CJam fue hecho por un PPCG regular ( aditsu ), existe desde hace bastante tiempo. Lo encontrarás en todo el sitio. :)
Alex A.

@AlexA. Ok tiene más sentido ahora. Soy bastante nuevo aquí, gracias! :)
Erdal G.

@ErdalG. El gusto es mio. Bienvenido al sitio!
Alex A.

13

JavaScript (ES6), 116 115 bytes

n=>"__   __    n|  |_|  |   n|       |___n -  n- n -n—".split`n`.map(l=>l.repeat(15).slice(-15).repeat(n)).join`
`

¡ Ahorré un byte gracias a @Neil !

Explicación

Prácticamente lo mismo que el método CJam de @Mauris , pero sin el mapeo de caracteres.

Las partes de la pared están en el formato:

__   __    
|  |_|  |   
|       |___
 -  
- 
 -
—

porque si repites cada línea 15 veces obtienes:

...    __   __    __   __    __   __    
... |  |_|  |   |  |_|  |   |  |_|  |   
... |       |___|       |___|       |___
 -   -   -   -   -   -   -   -   -   -  
          - - - - - - - - - - - - - - - 
           - - - - - - - - - - - - - - -
                         ———————————————

y después de cortar solo los últimos 15 caracteres que obtienes:

    __   __    
   |  |_|  |   
___|       |___
-   -   -   -  
 - - - - - - - 
- - - - - - - -
———————————————

Sin golf

n=>

  // array of wall line parts
  "__   __    n|  |_|  |   n|       |___n -  n- n -n—".split`n`

  .map(l=>       // for each wall line
    l.repeat(15) // repeat the line 15 times to create a complete wall line
    .slice(-15)  // each wall piece is only 15 characters long
    .repeat(n)   // repeat the wall n times
  )
  .join`
`                // output the resulting wall

Prueba


¿Puedes guardar un byte usando en su .slice(-15)lugar?
Neil

La solución es fácil, solo use la parte mínima derecha en lugar de la parte mínima izquierda:__ __ n| |_| | n| |___n - n- n -n—
Neil

Muy inteligente, buen trabajo!
J Atkin

@Neil Ah, tienes razón. ¡Gracias por el consejo!
user81655

5

Jolf , 135 bytes

Se puede hacer golf considerable. Desactive la impresión bonita y borre la salida para obtener un mejor resultado. Pruébalo aquí! . Además, use esto para probar un número arbitrario con más facilidad.

oHpAt++++++++++++*"    __   __    "jH*"   |  |_|  |   "jH*"___|       |___"jH*j"-   -   -   -  "H*+*" -"7' jH*"- - - - - - - -"jH*M35j'—

Agregaré una explicación más tarde.


66
@Connor O'Brien, ¿cómo se ve el eta en esa explicación? D
Rohan Jhunjhunwala

5

Haskell, 116 118 108 bytes

h n=take(n*15).cycle
f n=unlines$h n.h 1<$>lines"    __   __\n   |  |_|  |\n___|       |\n-   \n -\n- \n—"

Ejemplo de uso:

*Main> putStr $ f 3
    __   __        __   __        __   __    
   |  |_|  |      |  |_|  |      |  |_|  |   
___|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  
 - - - - - - -  - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -- - - - - - - -
—————————————————————————————————————————————

Esto usa la misma estrategia que otras respuestas aquí: cada línea de la pared es un ciclo del patrón, por ejemplo, "-" (guión + espacio) para la segunda última línea. Repita cada patrón, tome 15 caracteres para obtener un segmento de pared, repita nuevamente y tome 15*ncaracteres para los nsegmentos.

Editar: @Mauris encontró 10 bytes. ¡Gracias!


La conclusión debería ser: (U + 2014), no un guión ASCII; Creo que esto significa que pierdes 2 bytes.
Lynn

@Mauris: tienes razón. Arreglado. Gracias por descubrirlo.
nimi

En realidad, puede terminar los períodos para las líneas 1-3 anteriores, ahorrando 4 + 3 + 3 bytes. (Mi respuesta CJam hace lo mismo.)
Lynn

@Mauris: ah sí, porque el primer ciclo se corta después de 15 caracteres. ¡Gracias!
nimi

4

Utilidades Bash + Linux ( 247 186 180 bytes)

read x
for i in {1..7}
do
tail -n +7 $0|gzip -dc|sed -nr "$i s/(.*)/$(printf '\\1%.0s' $(seq 1 $x))/p"
done
exit
ˈ ELzVSPPPȏǑ
\@\D񵠚k>ĄÚ ܋ɀÜ@r²uٞ5L! 󰰹͠  

Dado que los caracteres no imprimibles se han utilizado generosamente en la construcción del script anterior, aquí hay un hexdump:

00000000  72 65 61 64 20 78 0a 66  6f 72 20 69 20 69 6e 20  |read x.for i in |
00000010  7b 31 2e 2e 37 7d 0a 64  6f 0a 74 61 69 6c 20 2d  |{1..7}.do.tail -|
00000020  6e 20 2b 37 20 24 30 7c  67 7a 69 70 20 2d 64 63  |n +7 $0|gzip -dc|
00000030  7c 73 65 64 20 2d 6e 72  20 22 24 69 20 73 2f 28  ||sed -nr "$i s/(|
00000040  2e 2a 29 2f 24 28 70 72  69 6e 74 66 20 27 5c 5c  |.*)/$(printf '\\|
00000050  31 25 2e 30 73 27 20 24  28 73 65 71 20 31 20 24  |1%.0s' $(seq 1 $|
00000060  78 29 29 2f 70 22 0a 64  6f 6e 65 0a 65 78 69 74  |x))/p".done.exit|
00000070  0a 1f 8b 08 00 45 4c 7a  56 02 03 53 50 50 50 88  |.....ELzV..SPPP.|
00000080  8f 87 11 0a 5c 40 5c 03  44 f1 35 60 5a 81 2b 3e  |....\@\.D.5`Z.+>|
00000090  1e c4 04 83 1a 20 9b 4b  17 c8 40 c2 5c 40 02 19  |..... .K..@.\@..|
000000a0  72 a1 72 75 b9 1e 35 4c  21 1e 01 00 f3 30 f0 f9  |r.ru..5L!....0..|
000000b0  8d 00 00 00                                       |....|
000000b4

4

PowerShell, 103 100 caracteres (105 bytes en disco, 102 sin lista de materiales)

Prácticamente lo mismo que el método @ user81655 .

Param($c)'    __   __n   |  |_|  |n___|       |n-   n -n- n—'-split'n'|%{($_*15).Substring(0,15)*$c}

Versión sin golf

# Assign input to variable,
Param($c)

# Split array of wall parts and send them down the pipeline
'    __   __n   |  |_|  |n___|       |n-   n -n- n—' -split 'n' |
    ForEach-Object { # For each piece of wall
        ($_*15) # Repeat the line 15 times to create a complete wall line
        .Substring(0,15) # Each wall piece is only 15 characters long
        *$c # Repeat the wall n times
    }

Ejemplo de uso

PS> .\TrumpWall.ps1 3
    __   __        __   __        __   __    
   |  |_|  |      |  |_|  |      |  |_|  |   
___|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  
 - - - - - - -  - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -- - - - - - - -
—————————————————————————————————————————————

1
97 bytes:param($c);' __ __n | |_| |n___| |n- n -n- n—'-split'n'|%{-join($_*15)[0..14]*$c}
mazzy

4

PHP 5.4, ( 182 175 caracteres)

foreach(['    __   __    ','   |  |_|  |   ','___|       |___','-   -   -   -  ', ' - - - - - - - ','- - - - - - - -','———————————————'] as$d)echo str_repeat($d,$argv[1])."\n";

Versión sin golf

$s=['    __   __    ',
    '   |  |_|  |   ',
    '___|       |___',
    '-   -   -   -  ',
    ' - - - - - - - ',
    '- - - - - - - -',
    '———————————————'
];
foreach($s as $d) {
    echo str_repeat($d,$argv[1])."\n";
}

[7 caracteres guardados por seguir la sugerencia de Blackhole. ]

Otra versión con menos bytes pero más caracteres.

PHP 5.4, (176 caracteres, 178 bytes)

foreach(['    __   __    ','   |  |_|  |   ','___|       |___','-   -   -   -  ',' - - - - - - - ','- - - - - - - -',str_repeat('—',15)] as$d)echo str_repeat($d,$argv[1])."\n";

Simplemente reemplace 15 instancias de m-dash con un guión con la función str_repeat


2
1) No defina una variable para $s, úsela directamente en su bucle: foreach([…,…] as $d)2) Elimine el espacio a menos que antes $d: foreach(… as$d)3) Use una nueva línea en lugar de "\n".
Blackhole

Usted señor no está retratando la verdad. Su código tiene 182 caracteres, pero 212 bytes.
Tschallacka

@MichaelDibbets, lo siento confundido sobre bytes vs caracteres, modificado
kuldeep.kamboj

1
use algo como mothereff.in/byte-counter para contar los bytes
Tschallacka

3

C, 148 bytes

#define q 16843009
i;p[]={-1,q*17,q*68,q*16,-8388417,8577152,3936000};
f(n){for(i=n*105;i--;i%(15*n)||puts(""))putchar(" -|_"[p[i/15/n]>>i%15*2&3]);}

La puntuación excluye la nueva línea innecesaria antes de lo f(n)cual se incluye para mayor claridad.

los números mágicos pcodifican los caracteres para el muro en la base 4, que se reconstruyen a partir de la cadena " -|_" 0,1,2,3 respectivamente

16843009en hexadecimal es 0x1010101. Esto se utiliza para las líneas con -ellos.

Debido a que _está codificado por 3, la línea inferior puede codificarse simplemente como -1, que es el número con todos los bits establecidos 1.


Agradable, pero puede guardar 3 bytes al no usar #define qy simplemente codificar los valores.
Johan du Toit

2

Vitsy , 121 bytes

Cómo hago esto es accediendo a cada línea una a la vez, ingresando veces, dándome pilas con el contenido de cada línea. Luego, saco una línea a la vez. Si alguien quiere que le dé una explicación más profunda, solo pregunte (actualmente estoy abriendo regalos, así que ...).

V0v7\[v1+v&V\[vDvm]a]y\[?Z]
"    __   __    "
"   |  |_|  |   "
"___|       |___"
4\["-   "]Xr
6mXr" "
8\["- "]X
"—"e\D

Pruébalo en línea!


2

PHP5.5, 182 172 bytes 168 bytes

basado en la respuesta de @ kuldeep.kamboj, que en realidad es de 212 bytes en el momento en que escribo esto, pero 182 caracteres. Desearía que el muro fuera un poco más alto, entonces podría hacer algo más de optimización ;-)

este es de 168 bytes, gracias a @ JörgHülsermann

$r='str_repeat';$d=$r(' -',7);$x='   ';foreach(["$x __   __ $x","$x|  |_|  |$x","___|$x$x |___","-$x-$x-$x-  ","$d ","-$d",$r('—',15)] as$z){echo$r($z,$argv[1])."
";}

Este es de 172 bytes

$r='str_repeat';$d=$r(' -',7);$x=$r(' ',3);foreach(["$x __   __ $x","$x|  |_|  |$x","___|$x$x |___","-$x-$x-$x-  ","$d ","-$d",$r('—',15)] as$z){echo$r($z,$argv[1])."
";}

Este es de 182 bytes :-)

$r='str_repeat';$d=$r(' -',7);$x=$r(' ',4);foreach([$x.'__   __'.$x,'   |  |_|  |   ','___|       |___','-   -   -   -  ',$d.' ','-'.$d,$r('—',15)] as$z){echo $r($z,$argv[1]).'
';}

versión sin golf

$r='str_repeat';
$d=$r(' -',7);
$x=$r(' ',3);
$s=["$x __   __ $x",
    "$x|  |_|  |$x",
    "___|$x$x |___",
    "-$x-$x-$x-  ",
    "$d ",
    "-$d",
    $r('—',15)
];
foreach($s as $z) {
  echo$r($z,$argv[1])."
";
}

quitar el espacio antes del as y quitar los corchetes -3 Bytes
Jörg Hülsermann

$x=$r(' ',3);se puede acortar a$x=' ';
Jörg Hülsermann

No necesita los corchetes para el bucle foreach y `como $ z` podría escribir comoas$z
Jörg Hülsermann

2

Python 3, 132 122 120 bytes

def f(n):[print((s*15*n)[:15*n])for s in['    __   __    ','   |  |_|  |   ','___|       |___','-   ', ' -', '- ', '—']]

Sin golf:

def f(n):
    [print((s*15*n)[:15*n])for s in['    __   __    ',
                                    '   |  |_|  |   ',
                                    '___|       |___',
                                    '-   ',
                                    ' -',
                                    '- ',
                                    '—']]

Puede eliminar los espacios para obtener )for s in[...
Cyoce

2

Python 2, (161 caracteres, 191 bytes)

x=input();a=['    __   __    ','   |  |_|  |   ','___|       |___','-   -   -   -  ',' - - - - - - - ','- - - - - - - -','———————————————']
for i in a:print i*x

2

SOGL V0.12 , 32 bytes

→↔\ιδ»►℮⁰}▒║ΙOģΠp~⁵‘ ¾“ζ'¹*+'¹n*

Pruébalo aquí!

Explicación:

...‘ ¾“ζ'¹*+'¹n*
...‘              push a string of the top 6 lines of 1 wall piece (no newlines)
     ¾“           push 8212
       ζ          convert to char from unicode codepoint
        '¹*       repeat 15 times
           +      add that to the previous compressed string
            '¹n   split into lines with length 15
               *  repeat horizontally input times

se remonta a todas las preguntas de arte ascii y vota a dzamia por golpearme literalmente con SOGL en algún momento
Magic Octopus Urn

1

Vim, 90 llaves

Suponiendo que la entrada está en un búfer, lo siguiente hará el trabajo (nueva línea solo para facilitar la lectura)

"aDi    __   __    ^M   |  |_|  |   ^M___|       |___^M^[
4i-   ^[xo-^[Y7P8JY2PxA ^[GVr^K-M^Vgg$d@aP

donde ^Mes un return, ^[es escape, ^Kes ctrl+ky ^Ves ctrl+v.

Es muy probable que esto se pueda reducir bastante, ya que podría haber formas mucho mejores de generar el patrón.


0

Java 11, 236 235 231 229 bytes

n->{String w[]={"","","","","","",""},t="- ".repeat(7);for(;n-->0;w[0]+="x __x__x ",w[1]+="x|  |_|  |x",w[2]+="___|xx |___",w[3]+="-x-x-x-  ",w[4]+=" "+t,w[5]+=t+"-")w[6]+="_".repeat(15);return"".join("\n",w).replace("x","   ");}

Pruébalo en línea.
NOTA: Java 11 aún no está en TIO, por lo que String.repeat(int)se ha emulado con repeat(String,int)(para el mismo número de bytes).

Explicación:

n->{                                // Method with integer parameter and String return-type
  String w[]={"","","","","","",""},//  Start with seven empty rows
         t="- ".repeat(7);          //  Temp String to reduce bytes
  for(;n-->0;                       //  Loop `n` amount of times:
    w[0]+="x __x__x ",              //   Append to the first row
    w[1]+="x|  |_|  |x",            //   Append to the second row
    w[2]+="___|xx |___",            //   Append to the third row
    w[3]+="-x-x-x-  ",              //   Append to the fourth row
    w[4]+=" "+t,                    //   Append to the fifth row
    w[5]+=t+"-")                    //   Append to the sixth row
    w[6]+="_".repeat(15);           //   Append to the seventh row
  return"".join("\n",w)             //  Join all rows by new-lines
          .replace("x","   ");}     //  Then replace all "x" with three spaces,
                                    //  and return the result

0

Powershell + archivo, 92 bytes

guardar powershell en get-trumpwall.ps1(40 bytes)

param($c);gc f|%{-join($_*15)[0..14]*$c}

guardar el archivo de datos con el nombre fy los datos contienen el símbolo Unicode y solo Linux LF (52 bytes):

    __   __
   |  |_|  |
___|       |
-   
 -
- 
—

volcado hexadecimal:

0000000000: 20 20 20 20 5F 5F 20 20 │ 20 5F 5F 0A 20 20 20 7C      __   __◙   |
0000000010: 20 20 7C 5F 7C 20 20 7C │ 0A 5F 5F 5F 7C 20 20 20    |_|  |◙___|
0000000020: 20 20 20 20 7C 0A 2D 20 │ 20 20 0A 20 2D 0A 2D 20      |◙-   ◙ -◙-
0000000030: 0A E2 80 94             │                          ◙—››

Ejemplo de uso

PS> .\get-trumpwall.ps1 5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.