Aiuta Trump a costruire il muro!


68

Trump ha bisogno del muro costruito e lo farai! Per costruire in modo più efficiente il suo muro, ho creato un modello semplice e ripetibile che puoi usare:

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

Trump ti dirà di quanti segmenti di muro ha bisogno e li costruirai per apparire proprio così.

Ecco lo schema:

    __   __     <-- 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

L'input sarà sempre un numero intero> 0.

Casi test:

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

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

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

Dato che devi farlo velocemente, scrivi il programma più breve possibile!

Se aiuta, ho scritto prima la sfida, il titolo per ultimo;)

Risposte:


9

05AB1E , 38 byte

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

Provalo online!

•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 convertito in base-4:

11110011111311300003111121112111121212122121212100000000

11110011111311300003111121112111121212122121212100000000 con caratteri sostituiti:

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

Modello precedente diviso in 8 pezzi:

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

Quindi palindromizza e lo fai tutto il tempo necessario attraverso la ripetizione.


29

CJam, 52 byte

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

Include un gruppo di caratteri ASCII non stampabili. Il hexdump della prima stringa letterale spinta è:

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

Provalo qui!

Spiegazione

Il hexdump sopra è interpretato come un numero base-128, quindi convertito in base 6, per ottenere questo elenco:

[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]

Per questo, applichiamo la mappatura 0 → _, 1 → space, 2 → \n, 3 → |, 4 → -, 5 → —. Questo ci dà la stringa:

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

Consiste nel "periodo" di ciascuna riga; cioè possiamo scorrere la quinta riga " -"per ottenere " - - - - - - - ".

Quindi, eseguiamo questo sottoprogramma:

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 nuova versione lo fa in un modo leggermente diverso che in realtà non riesco a avvolgere molto bene la mia testa, perché usa ff=.)


21
Cos'è che non ho nemmeno
Conor O'Brien il

4
Questa lingua è stata creata appositamente per questa risposta?
Erdal G.,

5
@ErdalG. No. Sebbene CJam sia stato effettivamente creato da un normale PPCG ( aditsu ), è in circolazione da parecchio tempo. Lo troverai in tutto il sito. :)
Alex A.

@AlexA. Ok, ora ha più senso. Sono abbastanza nuovo qui, grazie! :)
Erdal G.,

@ErdalG. Il piacere è tutto mio. Benvenuti nel sito!
Alex A.

13

JavaScript (ES6), 116 115 byte

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

Salvataggio di un byte grazie a @Neil !

Spiegazione

Praticamente lo stesso del metodo CJam di @Mauris , ma senza la mappatura dei caratteri.

Le parti della parete sono nel formato:

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

perché se ripeti ogni riga 15 volte ottieni:

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

e dopo aver suddiviso in soli gli ultimi 15 caratteri ottieni:

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

Ungolfed

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

Test


Puoi salvare un byte usando .slice(-15)invece?
Neil,

La correzione è semplice, basta usare la parte minima destra invece della parte minima sinistra:__ __ n| |_| | n| |___n - n- n -n—
Neil

Molto intelligente, bel lavoro!
J Atkin,

@Neil Ah, hai ragione. Grazie per il consiglio!
user81655

5

Jolf , 135 byte

Si può giocare a golf considerevole. Disattiva la stampa graziosa e cancella l'output per un risultato migliore. Provalo qui! . Inoltre, usa questo per testare un numero arbitrario con più facilità.

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

Aggiungerò una spiegazione più tardi.


6
@Connor O'Brien, quindi come appare l'et in quella spiegazione: D
Rohan Jhunjhunwala,

5

Haskell, 116 118 108 byte

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

Esempio di utilizzo:

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

Questo utilizza la stessa strategia delle altre risposte qui: ogni linea del muro è un ciclo del modello, ad esempio "-" (trattino + spazio) per la seconda ultima riga. Ripeti ogni schema, prendi 15 caratteri per ottenere un segmento di muro, ripeti ancora e prendi i 15*ncaratteri per i nsegmenti.

Modifica: @Mauris ha trovato 10 byte. Grazie!


La linea di fondo dovrebbe essere - (U + 2014), non un trattino ASCII; Penso che questo significhi che perdi 2 byte.
Lynn,

@Mauris: hai ragione. Aggiustato. Grazie per averlo scoperto.
nimi,

Puoi effettivamente terminare i periodi per le righe 1-3 precedenti, risparmiando 4 + 3 + 3 byte. (La mia risposta di CJam fa la stessa cosa.)
Lynn,

@Mauris: ah sì, perché il primo ciclo viene interrotto dopo 15 caratteri. Grazie!
nimi,

4

Utilità Bash + Linux ( 247 186 180 byte)

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! 󰰹͠  

Poiché i caratteri non stampabili sono stati generosamente utilizzati nella costruzione dello script sopra, ecco un dump esadecimale:

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 caratteri (105 byte su disco, 102 senza BOM)

Praticamente uguale al metodo @ user81655 .

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

Versione Ungolfed

# 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
    }

Esempio di utilizzo

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

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

4

PHP 5.4, ( 182 175 caratteri)

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

Versione Ungolfed

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

[7 caratteri salvati seguono il suggerimento di Blackhole. ]

Un'altra versione con meno byte ma più caratteri

PHP 5.4, (176 caratteri, 178 byte)

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

Basta sostituire 15 istanze di m-dash con un trattino con la funzione str_repeat


2
1) Non definire una variabile per $s, usala direttamente nel tuo ciclo: foreach([…,…] as $d)2) Rimuovi lo spazio a meno prima $d: foreach(… as$d)3) Usa una nuova riga invece di "\n".
Buco nero

Signore, non state rappresentando la verità. Il codice contiene 182 caratteri, ma 212 byte.
Tschallacka,

@MichaelDibbets, mi dispiace confuso per byte vs caratteri, modificato
kuldeep.kamboj

1
usa qualcosa come mothereff.in/byte-counter per contare i byte
Tschallacka,

3

C, 148 byte

#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]);}

Il punteggio esclude la nuova riga non necessaria prima della f(n)quale è inclusa per chiarezza.

i numeri magici pcodificano i caratteri per il muro nella base 4, che sono ricostruiti rispettivamente dalla stringa " -|_" 0,1,2,3

16843009in esadecimale è 0x1010101. questo è usato per le linee che -contengono.

Poiché _è codificato da 3, la riga inferiore può essere codificata semplicemente come-1 , che è il numero con tutti i bit impostati su 1.


Bello ma puoi salvare 3 byte non usando #define qe semplicemente codificando i valori.
Johan du Toit,

2

Vitsy , 121 byte

Il modo in cui lo faccio è accedendo a ciascuna riga uno alla volta, inserendo i tempi, dandomi pile con il contenuto di ogni riga. Quindi, ho emesso una riga alla volta. Se qualcuno vuole che io dia una spiegazione più approfondita, basta chiedere (sto attualmente aprendo i regali, quindi ...).

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

Provalo online!


2

PHP5.5, 182 172 byte 168 byte

basato sulla risposta di @ kuldeep.kamboj, che in realtà è di 212 byte nel momento in cui scrivo questo, ma 182 caratteri. Vorrei che il muro fosse un po 'più alto, quindi avrei potuto fare qualche ottimizzazione in più ;-)

questo è di 168 byte, grazie 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])."
";}

Questo è di 172 byte

$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])."
";}

Questo è di 182 byte :-)

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

versione non golfata

$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])."
";
}

rimuovere lo spazio prima
dell'as

$x=$r(' ',3);può essere abbreviato in$x=' ';
Jörg Hülsermann il

Non hai bisogno delle parentesi per il ciclo foreach e `as $ z` potrebbe scrivere comeas$z
Jörg Hülsermann

2

Python 3, 132 122 120 byte

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

Ungolfed:

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

Puoi rimuovere gli spazi per ottenere )for s in[...
Cyoce,

2

Python 2, (161 caratteri, 191 byte)

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

2

SOGL V0.12 , 32 byte

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

Provalo qui!

Spiegazione:

...‘ ¾“ζ'¹*+'¹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

risale a tutte le domande di arte ascii e vota dzamia per avermi battuto letteralmente tutti con SOGL ad un certo punto
Magic Octopus Urn

1

Vim, 90 tasti

Supponendo che l'input sia in un buffer da solo, il seguente farà il lavoro (newline solo per leggibilità)

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

dove ^Mè a return, ^[è escape, ^Kè ctrl+ke^V è ctrl+v.

Molto probabilmente questo può essere risolto un po ', in quanto potrebbero esserci modi molto migliori per generare il modello.


0

Java 11, 236 235 231 229 byte

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","   ");}

Provalo online.
NOTA: Java 11 non è ancora su TIO, quindi String.repeat(int)è stato emulato con repeat(String,int)(per lo stesso conteggio byte).

Spiegazione:

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 + file, 92 byte

salva powershell in get-trumpwall.ps1(40 byte)

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

salva il file di dati con nome fe dati contiene il simbolo Unicode e solo LF Linux (52 byte):

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

discarica esadecimale:

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             │                          ◙—››

Esempio di utilizzo

PS> .\get-trumpwall.ps1 5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.