Hilf Trump, die Mauer zu bauen!


68

Trump braucht die Mauer und du wirst es tun! Um seine Mauer möglichst effizient zu bauen, habe ich ein einfaches, wiederholbares Muster erstellt, das Sie verwenden können:

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

Trump wird Ihnen sagen, wie viele Wandsegmente er benötigt, und Sie werden sie so bauen, dass sie genau so aussehen.

Hier ist das Muster:

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

Die Eingabe ist immer eine Ganzzahl> 0.

Testfälle:

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

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

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

Da Sie dies schnell erledigen müssen, schreiben Sie das kürzestmögliche Programm!

Wenn es hilft, habe ich zuerst die Challenge geschrieben, zuletzt den Titel;)

Antworten:


9

05AB1E , 38 Bytes

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

Probieren Sie es 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 umgerechnet auf base-4:

11110011111311300003111121112111121212122121212100000000

111100111113113000031111211121111212122121212100000000 mit ersetzten Zeichen:

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

Vorheriges Muster in 8 Teile geteilt:

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

Dann palindromisieren Sie und machen es durch Wiederholung so lange wie nötig.


29

CJam, 52 Bytes

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

Enthält eine Reihe nicht druckbarer ASCII-Zeichen. Der Hexdump des ersten geschobenen String-Literal lautet:

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

Probieren Sie es hier aus!

Erläuterung

Der obige Hexdump wird als Basis-128-Zahl interpretiert und dann in Basis 6 konvertiert, um diese Liste zu erhalten:

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

Dazu wenden wir die Abbildung 0 → _, 1 → space, 2 → \n, 3 → |, 4 → -, 5 → —. Das bringt uns den String:

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

Es besteht aus dem "Punkt" jeder Zeile; dh wir können die fünfte Zeile fahren " -", um zu bekommen " - - - - - - - ".

Dann führen wir dieses Unterprogramm aus:

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.

(Die neue Version macht das auf eine etwas andere Art und Weise, als ich meinen Kopf eigentlich nicht gut um mich wickeln kann, weil es benutzt ff=.)


21
Was ist das, das ich nicht einmal
Conor O'Brien

4
War diese Sprache speziell für diese Antwort gemacht?
Erdal G.

5
@ErdalG. Nein. Obwohl CJam in der Tat von einem regulären PPCG ( Aditsu ) hergestellt wurde, gibt es ihn schon seit einiger Zeit. Sie finden es überall auf der Website. :)
Alex A.

@AlexA. Ok, jetzt macht es mehr Sinn. Ich bin ganz neu hier, danke! :)
Erdal G.

@ErdalG. Gern geschehen. Willkommen auf der Seite!
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`
`

Dank @Neil ein Byte gespeichert !

Erläuterung

Ziemlich genau wie @ Mauris 'CJam-Methode , jedoch ohne die Zeichenzuordnung .

Die Wandteile haben das Format:

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

Denn wenn Sie jede Zeile 15 Mal wiederholen, erhalten Sie:

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

und nachdem Sie nur die letzten 15 Zeichen geschnitten haben, erhalten Sie:

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

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

Prüfung


Können Sie ein Byte speichern, indem Sie .slice(-15)stattdessen verwenden?
Neil

Die Behebung ist einfach, verwenden Sie einfach den rechten Mindestteil anstelle des linken Mindestteils:__ __ n| |_| | n| |___n - n- n -n—
Neil

Sehr klug, nette Arbeit!
J Atkin

@ Neil Ah, du hast recht. Danke für den Tipp!
user81655

5

Jolf , 135 Bytes

Es kann viel Golf gespielt werden. Deaktivieren Sie Pretty Print und löschen Sie die Ausgabe, um ein besseres Ergebnis zu erzielen. Probieren Sie es hier aus! . Verwenden Sie dies auch , um eine beliebige Zahl einfacher zu testen.

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

Ich werde später eine Erklärung hinzufügen.


6
@Connor O'Brien also, wie sieht die Eta auf dieser Erklärung aus: 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—"

Anwendungsbeispiel:

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

Hierbei wird die gleiche Strategie wie bei den anderen Antworten angewendet: Jede Zeile der Wand ist ein Zyklus des Musters, z. B. "-" (Bindestrich + Leerzeichen) für die vorletzte Zeile. Wiederholen Sie jedes Muster, nehmen Sie 15 Zeichen, um ein Wandsegment zu erhalten, wiederholen Sie es erneut und nehmen Sie 15*nZeichen für nSegmente.

Edit: @ Mauris gefunden 10 Bytes. Vielen Dank!


Die unterste Zeile sollte - (U + 2014) und kein ASCII-Bindestrich sein. Ich denke, das bedeutet, dass Sie 2 Bytes verlieren.
Lynn

@ Mauris: Du hast recht. Behoben. Danke, dass Sie es herausgefunden haben.
nimi

Sie können die Punkte für die Zeilen 1-3 auch früher beenden und dabei 4 + 3 + 3 Bytes einsparen. (Meine CJam-Antwort macht dasselbe.)
Lynn

@ Mauris: ah ja, weil der erste Zyklus nach 15 Zeichen abgeschnitten wird. Vielen Dank!
nimi

4

Bash + Linux-Dienstprogramme ( 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! 󰰹͠  

Da bei der Erstellung des obigen Skripts großzügig nicht druckbare Zeichen verwendet wurden, ist hier ein 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 Zeichen (105 Byte auf der Festplatte, 102 ohne Stückliste)

Ziemlich genau wie @ user81655-Methode .

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

Ungolfed-Version

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

Anwendungsbeispiel

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 Zeichen)

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

Ungolfed Version

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

[7 Zeichen, die durch Befolgen des Vorschlags von Blackhole gespeichert wurden. ]

Eine andere Version mit weniger Bytes, aber mehr Zeichen

PHP 5.4 (176 Zeichen, 178 Bytes)

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

Ersetzen Sie einfach 15 Instanzen von m-dash durch einen Gedankenstrich mit der Funktion str_repeat


2
1) Definieren Sie keine Variable für $s, sondern verwenden Sie sie direkt in Ihrer Schleife: foreach([…,…] as $d)2) Entfernen Sie das vorhergehende Leerzeichen $d: foreach(… as$d)3) Verwenden Sie stattdessen eine neue Zeile "\n".
Blackhole

Sie, mein Herr, schildern nicht die Wahrheit. Ihr Code besteht aus 182 Zeichen, aber 212 Bytes.
Tschallacka

@MichaelDibbets, Sorry, verwirrt über Bytes vs Zeichen, geändert
kuldeep.kamboj

1
benutze so etwas wie mothereff.in/byte-counter um die Bytes zu zählen
Tschallacka 24.12.15

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

Die Punktzahl schließt den unnötigen Zeilenvorschub aus, f(n)der der Übersichtlichkeit halber eingefügt wird.

Die magischen Zahlen in pcodieren die Zeichen für die Wand in Basis 4, die aus der Zeichenfolge 0,1,2,3 rekonstruiert " -|_" werden

16843009in hex ist 0x1010101. Dies wird für die Zeilen mit verwendet- in ihnen verwendet.

Weil von _codiert wird 3, kann die unterste Zeile einfach wie folgt codiert werden: Dies -1ist die Zahl, bei der alle Bits auf gesetzt sind 1.


Schön, aber Sie können 3 Bytes sparen, indem #define qSie die Werte nicht verwenden und nur hartcodieren.
Johan du Toit

2

Vitsy , 121 Bytes

Dazu greife ich nacheinander auf jede Zeile zu und erhalte Stapel mit dem Inhalt jeder Zeile. Dann gebe ich jeweils eine Zeile aus. Wenn jemand möchte, dass ich eine ausführlichere Erklärung gebe, frage ihn einfach (ich öffne gerade Geschenke, also ...).

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

Probieren Sie es online!


2

PHP5.5, 182 172 Bytes 168 Bytes

Basierend auf der Antwort von @ kuldeep.kamboj, die in dem Moment 212 Bytes beträgt, in dem ich dies schreibe, aber 182 Zeichen. Ich wünschte die Mauer wäre etwas höher, dann könnte ich noch etwas optimieren ;-)

Dieser ist 168 Bytes, danke an @ 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])."
";}

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

Dieser ist 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]).'
';}

ungolfed version

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

entferne das Leerzeichen vor dem as und entferne die Klammern -3 Bytes
Jörg Hülsermann

$x=$r(' ',3);kann verkürzt werden auf$x=' ';
Jörg Hülsermann

Sie brauchen keine Klammern für die foreach-Schleife und "as $ z" könnte schreiben wieas$z
Jörg Hülsermann

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['    __   __    ',
                                    '   |  |_|  |   ',
                                    '___|       |___',
                                    '-   ',
                                    ' -',
                                    '- ',
                                    '—']]

Sie können die Leerzeichen entfernen, um )for s in[...
Cyoce

2

Python 2 (161 Zeichen, 191 Byte)

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

2

SOGL V0.12 , 32 Bytes

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

Probieren Sie es hier aus!

Erläuterung:

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

Ich kehre zu allen Fragen der Ascii-Art und zu allen Gegenstimmen zurück, die mich irgendwann mit SOGL besiegt haben
Magic Octopus Urn,

1

Vim, 90 Schlüssel

Unter der Annahme, dass sich die Eingabe in einem Puffer befindet, erledigt das Folgende die Aufgabe (Zeilenumbruch nur zur besseren Lesbarkeit)

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

Wo ^Mist ein return, ^[ist escape, ^Kist ctrl+kund ^Vist ctrl+v.

Dies kann sehr wahrscheinlich ein wenig herabgolfen werden, da es viel bessere Möglichkeiten zum Erzeugen des Musters gibt.


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

Probieren Sie es online aus.
HINWEIS: Java 11 ist noch nicht in TIO, wurde also String.repeat(int)mit emuliert repeat(String,int)(bei gleicher Bytezahl).

Erläuterung:

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 + Datei, 92 Bytes

Powershell speichern auf get-trumpwall.ps1(40 Bytes)

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

Datendatei mit Namen fund Daten speichern enthält nur Unicode-Symbol und 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             │                          ◙—››

Anwendungsbeispiel

PS> .\get-trumpwall.ps1 5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————
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.