Bantu Trump membangun dinding!


68

Trump membutuhkan dinding yang dibangun dan Anda akan melakukannya! Untuk membangun temboknya secara paling efisien, saya telah membuat pola yang sederhana dan dapat diulang untuk Anda gunakan:

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

Trump akan memberi tahu Anda berapa banyak segmen dinding yang ia butuhkan dan Anda akan membangunnya agar terlihat seperti ini.

Berikut polanya:

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

Input akan selalu berupa bilangan bulat> 0.

Kasus uji:

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

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

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

Karena Anda perlu melakukan ini dengan cepat, tulislah program sesingkat mungkin!

Jika itu membantu, saya menulis tantangan terlebih dahulu, judul terakhir;)

Jawaban:


9

05AB1E , 38 byte

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

Cobalah 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 dikonversi ke basis-4:

11110011111311300003111121112111121212122121212100000000

11110011111311300003111121112111121212122121212100000000 dengan karakter yang diganti:

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

Pola sebelumnya dibagi menjadi 8 bagian:

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

Kemudian Anda melakukan palindromisasi, dan membuatnya selama dibutuhkan melalui pengulangan.


29

CJam, 52 byte

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

Termasuk banyak karakter ASCII yang tidak dapat dicetak. Hexdump dari string literal pertama yang didorong adalah:

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

Coba di sini!

Penjelasan

Hexdump di atas ditafsirkan sebagai nomor basis-128, kemudian dikonversi ke basis 6, untuk mendapatkan daftar ini:

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

Untuk ini, kami menerapkan pemetaan 0 → _, 1 → space, 2 → \n, 3 → |, 4 → -, 5 → —. Ini memberi kami string:

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

Ini terdiri dari "periode" dari setiap baris; yaitu kita dapat memutar baris kelima " -"untuk mendapatkan " - - - - - - - ".

Kemudian, kami menjalankan subprogram ini:

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.

(Versi baru melakukan ini dengan cara yang sedikit berbeda sehingga saya benar-benar tidak dapat membungkus kepala saya dengan sangat baik, karena menggunakannya ff=.)


21
Apa ini yang bahkan tidak saya lakukan
Conor O'Brien

4
Apakah bahasa ini dibuat khusus untuk jawaban ini?
Erdal G.

5
@ ElG. Tidak. Meskipun CJam memang dibuat oleh seorang biasa ( aditsu ) PPCG , itu sudah ada selama beberapa waktu. Anda akan menemukannya di seluruh situs. :)
Alex A.

@AlexA. Oke, lebih masuk akal sekarang. Saya cukup baru di sini, terima kasih! :)
Erdal G.

@ ElG. Dengan senang hati. Selamat datang di situs ini!
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`
`

Menyimpan satu byte berkat @Neil !

Penjelasan

Hampir sama dengan metode CJam @Mauris , tetapi tanpa pemetaan karakter.

Bagian dinding dalam format:

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

karena jika Anda mengulangi setiap baris 15 kali Anda mendapatkan:

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

dan setelah mengiris hanya 15 karakter terakhir yang Anda dapatkan:

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

Tidak disatukan

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

Uji


Bisakah Anda menyimpan byte dengan menggunakan .slice(-15)sebagai gantinya?
Neil

Cara mengatasinya mudah, cukup gunakan bagian minimum kanan dan bukan bagian minimum kiri:__ __ n| |_| | n| |___n - n- n -n—
Neil

Sangat pintar, pekerjaan bagus!
J Atkin

@Neil Ah, kamu benar. Terima kasih atas tipnya!
user81655

5

Jolf , 135 byte

Bermain golf yang cukup bisa dilakukan. Matikan cetakan cantik dan kosongkan output untuk hasil yang lebih baik. Coba di sini! . Juga, gunakan ini untuk menguji nomor arbitrer dengan lebih mudah.

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

Saya akan menambahkan penjelasan nanti.


6
@Connor O'Brien jadi seperti apa eta pada penjelasan itu: 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—"

Contoh penggunaan:

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

Ini menggunakan strategi yang sama dengan jawaban lain di sini: setiap baris dinding adalah satu siklus pola, misalnya "-" (tanda hubung + spasi) untuk baris terakhir kedua. Ulangi setiap pola, ambil 15 karakter untuk mendapatkan satu segmen dinding, ulangi lagi dan ambil 15*nkarakter untuk nsegmen.

Sunting: @Mauris ditemukan 10 byte. Terima kasih!


Intinya adalah - (U + 2014), bukan tanda hubung ASCII; Saya pikir ini berarti Anda kehilangan 2 byte.
Lynn

@Mauris: kamu benar. Memperbaikinya. Terima kasih sudah mencari tahu.
nimi

Anda benar-benar dapat mengakhiri periode untuk baris 1-3 sebelumnya, menghemat 4 + 3 + 3 byte. (Jawaban CJam saya melakukan hal yang sama.)
Lynn

@Mauris: ah ya, karena siklus pertama terputus setelah 15 karakter. Terima kasih!
nimi

4

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

Karena karakter yang tidak patut telah digunakan dengan murah hati dalam pembuatan skrip di atas, inilah 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 karakter (105 byte pada disk, 102 tanpa BOM)

Hampir sama dengan metode @ user81655 .

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

Versi tidak disatukan

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

Contoh penggunaan

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

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

Versi Tidak Serigala

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

[7 karakter disimpan dengan mengikuti saran Blackhole. ]

Versi lain dengan byte lebih sedikit tetapi lebih banyak karakter

PHP 5.4, (176 karakter, 178 byte)

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

Cukup ganti 15 instance m-dash dengan satu dash dengan fungsi str_repeat


2
1) Jangan mendefinisikan variabel untuk $s, gunakan langsung di loop Anda: foreach([…,…] as $d)2) Hapus ruang kecuali sebelum $d: foreach(… as$d)3) Gunakan baris baru sebagai ganti "\n".
Blackhole

Anda tidak menggambarkan kebenaran. Kode Anda berjumlah 182 karakter, tetapi 212 byte.
Tschallacka

@MichaelDibbets, Maaf bingung tentang byte vs karakter, dimodifikasi
kuldeep.kamboj

1
gunakan sesuatu seperti mothereff.in/byte-counter untuk menghitung 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]);}

Skor mengecualikan baris baru yang tidak perlu sebelum f(n)dimasukkan untuk kejelasan.

angka ajaib dalam pmenyandikan karakter untuk dinding di basis 4, yang direkonstruksi dari string " -|_" masing-masing 0,1,2,3

16843009dalam hex adalah 0x1010101. ini digunakan untuk baris dengan -di dalamnya.

Karena _dikodekan oleh 3, intinya dapat dikodekan hanya sebagai -1, yang merupakan angka dengan semua bit diatur ke 1.


Bagus tetapi Anda dapat menyimpan 3 byte dengan tidak menggunakan #define qdan hanya hardcoding nilai-nilai.
Johan du Toit

2

Vitsy , 121 byte

Cara saya melakukan ini adalah dengan mengakses setiap baris satu per satu waktu input, memberi saya tumpukan dengan isi setiap baris. Kemudian, saya menampilkan satu baris sekaligus. Jika ada yang ingin saya memberikan penjelasan yang lebih mendalam, tanyakan saja (saya sedang membuka hadiah, jadi ...).

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

Cobalah online!


2

PHP5.5, 182 172 byte 168 byte

berdasarkan jawaban @ kuldeep.kamboj, yang sebenarnya 212 byte saat saya menulis ini tetapi 182 karakter. Saya berharap temboknya sedikit lebih tinggi, maka saya bisa melakukan beberapa optimasi lagi ;-)

yang ini adalah 168 byte, terima kasih kepada @ 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])."
";}

Yang ini adalah 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])."
";}

Yang ini 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]).'
';}

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

hapus spasi sebelum dan hapus tanda kurung -3 Bytes
Jörg Hülsermann

$x=$r(' ',3);dapat disingkat menjadi$x=' ';
Jörg Hülsermann

Anda tidak memerlukan tanda kurung untuk foreach loop dan `sebagai $ z` bisa menulis sebagaias$z
Jörg Hülsermann

2

Python 3, 132 122 120 byte

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

Tidak Disatukan:

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

Anda dapat menghapus spasi untuk )for s in[...
Cyoce

2

Python 2, (161 karakter, 191 byte)

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

2

SOGL V0.12 , 32 byte

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

Coba Di Sini!

Penjelasan:

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

kembali ke semua pertanyaan ascii-art dan meningkatkan dzamia karena mengalahkan saya pada mereka semua dengan SOGL di beberapa titik
Magic Octopus Mm

1

Vim, 90 kunci

Dengan asumsi input ada dalam buffer dengan sendirinya yang berikut ini akan melakukan pekerjaan (baris baru untuk keterbacaan)

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

dimana ^Ma return, ^[adalah escape, ^Kadalah ctrl+kdan ^Vsedang ctrl+v.

Ini sangat mungkin diturunkan sedikit, karena mungkin ada banyak cara yang lebih baik untuk menghasilkan pola.


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

Cobalah online.
CATATAN: Java 11 belum pada TIO, jadi String.repeat(int)telah ditiru dengan repeat(String,int)(untuk byte-count yang sama).

Penjelasan:

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

File Powershell +, 92 byte

simpan PowerShell ke get-trumpwall.ps1(40 byte)

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

simpan file data dengan nama fdan data hanya mengandung simbol Unicode dan Linux LF (52 byte):

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

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

Contoh penggunaan

PS> .\get-trumpwall.ps1 5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.