Ajude Trump a construir o muro!

68

Trump precisa do muro construído e você vai fazê-lo! Para construir seu muro com mais eficiência, criei um padrão simples e repetível para você usar:

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

Trump lhe dirá quantos segmentos de parede ele precisa e você os construirá para ficar assim.

Aqui está o padrão:

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

A entrada sempre será um número inteiro> 0.

Casos de teste:

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

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

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

Como você precisa fazer isso rápido, escreva o programa mais curto possível!

Se ajudar, escrevi o desafio primeiro, o título por último;)

J Atkin
fonte

Respostas:

9

05AB1E , 38 bytes

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

Experimente 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 convertido em base-4:

11110011111311300003111121112111121212122121212100000000

11110011111311300003111121112111121212122121212100000000 com os caracteres substituídos:

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

Padrão anterior dividido em 8 partes:

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

Então você palindromiza, e faz o tempo que for necessário através da repetição.

Urna de polvo mágico
fonte
29

CJam, 52 bytes

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

Inclui um monte de caracteres ASCII não imprimíveis. O hexdump da primeira string literal enviada é:

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

Experimente aqui!

Explicação

O hexdump acima é interpretado como um número de base 128 e depois convertido em base 6, para obter 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 isso, aplicamos o mapeamento 0 → _, 1 → space, 2 → \n, 3 → |, 4 → -, 5 → —. Isso nos dá a string:

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

Consiste no "período" de cada linha; ou seja, podemos percorrer a quinta linha " -"para obter " - - - - - - - ".

Em seguida, executamos 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.

(A nova versão faz isso de uma maneira um pouco diferente que eu realmente não consigo entender muito bem, porque usa ff=.)

Lynn
fonte
21
O que é isso eu nem sei #
Conor O'Brien
4
Este idioma foi especialmente criado para esta resposta?
Erdal G.
5
@ErdalG. Não. Embora o CJam tenha sido feito por um aditsu do PPCG , ele já existe há algum tempo. Você encontrará em todo o site. :)
Alex A.
@AlexA. Ok, faz mais sentido agora. Sou muito novo aqui, obrigado! :)
Erdal G.
@ErdalG. O prazer é meu. Bem vindo ao site!
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`
`

Guardou um byte graças a @Neil !

Explicação

Praticamente o mesmo que o método CJam do @Mauris , mas sem o mapeamento de caracteres.

As peças da parede estão no formato:

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

porque se você repetir cada linha 15 vezes, obtém:

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

e depois de cortar apenas os últimos 15 caracteres, você obtém:

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

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

Teste

user81655
fonte
Você pode salvar um byte usando .slice(-15)?
Neil
A correção é fácil, basta usar a parte mínima direita em vez da parte esquerda esquerda:__ __ n| |_| | n| |___n - n- n -n—
Neil
Muito inteligente, bom trabalho!
J Atkin
@ Neil Ah, você está certo. Obrigado pela dica!
user81655
5

Jolf , 135 bytes

Golfe considerável pode ser feito. Desative a impressão bonita e limpe a saída para obter um melhor resultado. Experimente aqui! . Além disso, use isso para testar um número arbitrário com mais facilidade.

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

Vou adicionar uma explicação mais tarde.

Conor O'Brien
fonte
6
@Connor O'Brien, então qual é a aparência do eta nessa explicação: 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—"

Exemplo de uso:

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

Isso usa a mesma estratégia que outras respostas aqui: cada linha da parede é um ciclo do padrão, por exemplo, "-" (traço + espaço) para a segunda última linha. Repita cada padrão, pegue 15 caracteres para obter um segmento de parede, repita novamente e leve 15*ncaracteres para nsegmentos.

Edit: @Mauris encontrados 10 bytes. Obrigado!

nimi
fonte
A linha inferior deve ser - (U + 2014), não um traço ASCII; Eu acho que isso significa que você perde 2 bytes.
Lynn
@Mauris: você está certo. Corrigido. Obrigado por descobrir.
nimi
Você pode realmente encerrar os períodos das linhas 1-3 anteriormente, economizando 4 + 3 + 3 bytes. (Minha resposta CJam faz a mesma coisa.)
Lynn
@Mauris: ah sim, porque o primeiro ciclo é interrompido após 15 caracteres. Obrigado!
nimi
4

Utilitários 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! 󰰹͠  

Como caracteres não imprimíveis foram generosamente usados ​​na construção do script acima, aqui está um 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
user2064000
fonte
4

PowerShell, 103 100 caracteres (105 bytes no disco, 102 sem BOM)

Praticamente o mesmo que o método @ user81655 .

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

Versão 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
    }

Exemplo de uso

PS> .\TrumpWall.ps1 3
    __   __        __   __        __   __    
   |  |_|  |      |  |_|  |      |  |_|  |   
___|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  
 - - - - - - -  - - - - - - -  - - - - - - - 
- - - - - - - -- - - - - - - -- - - - - - - -
—————————————————————————————————————————————
beatcracker
fonte
11
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";

Versão Ungolfed

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

[7 caracteres salvos por sugestão do Blackhole. ]

Outra versão com menos bytes, mas mais caracteres

PHP 5.4, (176 caracteres, 178 bytes)

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

Apenas substitua 15 instâncias do m-dash por uma dash com a função str_repeat

kuldeep.kamboj
fonte
2
1) Não defina uma variável para $s, use-a diretamente no seu loop: foreach([…,…] as $d)2) Remova o espaço, a menos que antes $d: foreach(… as$d)3) Use uma nova linha em vez de "\n".
BlackBack #
O senhor não está retratando a verdade. Seu código possui 182 caracteres, mas 212 bytes.
Tschallacka
@MichaelDibbets, Desculpe, confuso sobre bytes vs caracteres, modificado
kuldeep.kamboj
11
use algo como mothereff.in/byte-counter para contar os 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]);}

A pontuação exclui a nova linha desnecessária antes da f(n)qual é incluída para maior clareza.

os números mágicos em p codificam os caracteres da parede na base 4, que são reconstruídos a partir da sequência " -|_" 0,1,2,3, respectivamente

16843009em hexadecimal é 0x1010101. isso é usado para as linhas com -elas.

Como _é codificado por 3, a linha inferior pode ser codificada simplesmente como -1, que é o número com todos os bits configurados para 1.

Level River St
fonte
Bom, mas você pode salvar 3 bytes não usando #define qe apenas codificando os valores.
Johan du Toit
2

Vitsy , 121 bytes

Como eu faço isso é acessando cada linha, uma de cada vez, fornecendo pilhas com o conteúdo de cada linha. Então, eu produzo uma linha de cada vez. Se alguém quiser que eu dê uma explicação mais aprofundada, basta perguntar (atualmente estou abrindo presentes, então ...).

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

Experimente online!

Dam Son
fonte
2

PHP5.5, 182 172 bytes 168 bytes

com base na resposta de @ kuldeep.kamboj, que na verdade é de 212 bytes no momento em que escrevo isso, com 182 caracteres. Eu gostaria que o muro fosse um pouco mais alto, então eu poderia fazer mais otimização ;-)

este tem 168 bytes, graças 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 é 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 é 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]).'
';}

versão ungolfed

$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])."
";
}
Tschallacka
fonte
remova o espaço antes do as e remova os colchetes -3 Bytes
Jörg Hülsermann 27/03
$x=$r(' ',3);pode ser reduzido para$x=' ';
Jörg Hülsermann 27/03
Você não precisa dos colchetes para o loop foreach e o `as $ z` poderia escrever comoas$z
Jörg Hülsermann 28/17
2

Python 3, 132 122 120 bytes

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['    __   __    ',
                                    '   |  |_|  |   ',
                                    '___|       |___',
                                    '-   ',
                                    ' -',
                                    '- ',
                                    '—']]
Zenadix
fonte
Você pode remover os espaços para chegar )for s in[...
Cyoce
2

Python 2, (161 caracteres, 191 bytes)

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

SOGL V0.12 , 32 bytes

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

Experimente aqui!

Explicação:

...‘ ¾“ζ'¹*+'¹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
dzaima
fonte
remonta a todas as perguntas ascii-art e upvotes dzamia para me bater em literalmente todos com Sogl em algum momento
Magia Octopus Urna
1

Vim, 90 teclas

Supondo que a entrada esteja em um buffer por si só, o seguinte fará o trabalho (nova linha apenas para facilitar a leitura)

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

onde ^Mé um return, ^[é escape, ^Ké ctrl+ke ^Véctrl+v .

Provavelmente, isso pode ser bastante diminuído, pois pode haver maneiras muito melhores de gerar o padrão.

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

Experimente online.
NOTA: O Java 11 ainda não está no TIO, então String.repeat(int)foi emulado com repeat(String,int)(para a mesma contagem de bytes).

Explicação:

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
Kevin Cruijssen
fonte
0

Powershell + arquivo, 92 bytes

salvar o PowerShell em get-trumpwall.ps1(40 bytes)

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

salve o arquivo de dados com nome fe os dados contêm símbolo Unicode e apenas Linux LF (52 bytes):

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

hex dump:

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

Exemplo de uso

PS> .\get-trumpwall.ps1 5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————
confuso
fonte