Допоможіть Трампа побудувати стіну!


68

Трампу потрібна побудована стіна, і ти збираєшся це робити! Щоб найбільш ефективно побудувати його стіну, я створив для вас простий, повторюваний зразок:

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

Трамп скаже вам, скільки сегментів стін йому потрібно, і ви побудуєте їх так, щоб вони виглядали саме так.

Ось викрійка:

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

Вхід завжди буде цілим числом> 0.

Тестові приклади:

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

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

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

Оскільки вам це потрібно зробити швидко, пишіть найкоротшу можливу програму!

Якщо це допомагає, я написав виклик першим, заголовок останній;)

Відповіді:


9

05AB1E , 38 байт

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

Спробуйте в Інтернеті!

•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 перетворено на базу-4:

11110011111311300003111121112111121212122121212100000000

11110011111311300003111121112111121212122121212100000000 із заміненими символами:

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

Попередній візерунок розділили на 8 штук:

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

Потім ви паліндромізуєте, і робите це скільки завгодно через повторення.


29

CJam, 52 байти

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

Включає купу недрукуваних символів ASCII. Шістнадцятковий тиск першого прямого натискання рядків:

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

Спробуйте тут!

Пояснення

Вищенаведений гексдумп інтерпретується як номер базової 128, потім перетворюється на базу 6, щоб отримати цей список:

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

Для цього застосуємо відображення 0 → _, 1 → space, 2 → \n, 3 → |, 4 → -, 5 → —. Це отримує нам рядок:

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

Він складається з "періоду" кожного рядка; тобто ми можемо " -"пройти п'ятий рядок, щоб отримати " - - - - - - - ".

Потім ми виконуємо цю підпрограму:

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.

(Нова версія робить це дещо по-іншому, тому що я насправді не можу дуже добре обмотати голову, тому що вона використовує ff=.)


21
Що це, я навіть не знаю
Конор О'Браєн

4
Чи була спеціально для цієї відповіді ця мова?
Ердаль Г.

5
@ErdalG. Ні. Хоча CJam дійсно був зроблений регулярним PPCG ( aditsu ), він існує вже досить давно. Ви знайдете його по всьому сайту. :)
Олексій А.

@AlexA. Ок, тепер уже більше сенсу. Я тут зовсім новий, дякую! :)
Ердаль Г.

@ErdalG. Моє задоволення. Ласкаво просимо на сайт!
Олексій А.

13

JavaScript (ES6), 116 115 байт

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

Збережено байт завдяки @Neil !

Пояснення

Практично такий же , як метод CJam @Mauris ' , але без відображення символів.

Деталі стіни у форматі:

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

тому що якщо повторити кожен рядок 15 разів, ви отримаєте:

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

а після нарізання лише останніх 15 символів ви отримаєте:

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

Безумовно

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

Тест


Чи можете ви зберегти байт, скориставшись .slice(-15)натомість?
Ніл

Виправити легко, просто використовуйте праву мінімальну частину замість лівої мінімальної частини:__ __ n| |_| | n| |___n - n- n -n—
Ніл

Дуже розумна, приємна робота!
Дж. Аткін

@Neil Ах, ти маєш рацію. Дякую за пораду!
користувач81655

5

Джольф , 135 байт

Можна зробити чималий гольф. Вимкніть ситний друк і очистіть результат для кращого результату. Спробуйте тут! . Також використовуйте це для тестування довільного числа з більшою легкістю.

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

Пояснення я додам пізніше.


6
@Connor O'Brien, так як виглядає ета на це пояснення: D
Rohan Jhunjhunwala

5

Haskell, 116 118 108 байт

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

Приклад використання:

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

Тут використовується та ж стратегія, що й інші відповіді: кожен рядок стіни є одним циклом шаблону, наприклад "-" (тире + пробіл) для другого останнього рядка. Повторіть кожен візерунок, візьміть 15 символів, щоб отримати один відрізок стіни, повторіть ще раз і візьміть 15*nсимволи для nсегментів.

Редагувати: @Mauris знайдено 10 байт. Дякую!


Підсумковий рядок повинен бути - (U + 2014), а не тире ASCII; Я думаю, це означає, що ви втрачаєте 2 байти.
Лінн

@Mauris: ти маєш рацію. Виправлено це. Дякуємо, що дізналися.
німі

Ви можете фактично припинити періоди для рядків 1-3 раніше, заощаджуючи 4 + 3 + 3 байти. (Моя відповідь CJam робить те саме.)
Лінн

@Mauris: Ага так, тому що перший цикл відрізається після 15 символів. Дякую!
німі

4

Утиліти Bash + Linux ( 247 186 180 байт)

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

Оскільки недруковані символи щедро використовувались у побудові вищезазначеного сценарію, ось шестинадцять:

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 символів (105 байт на диску, 102 без BOM)

Досить так само , як @ user81655 методу .

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

Безгольова версія

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

Приклад використання

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

1
97 байт:param($c);' __ __n | |_| |n___| |n- n -n- n—'-split'n'|%{-join($_*15)[0..14]*$c}
маззи

4

PHP 5.4, ( 182 175 символів)

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

Безгольова версія

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

[7 символів збережено за дотриманням пропозиції Blackhole. ]

Ще одна версія з меншим числом байтів, але більше символів

PHP 5.4, (176 символів, 178 байт)

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

Просто замініть 15 екземплярів m-dash на один тире з функцією str_repeat


2
1) Не визначайте змінну для $s, використовуйте її безпосередньо у своєму циклі: foreach([…,…] as $d)2) Видаліть, якщо не буде пробілу раніше $d: foreach(… as$d)3) Замість нового рядка використовуйте новий рядок "\n".
Blackhole

Ви, сер, не зображаєте правди. Ваш код містить 182 символи, але 212 байт.
Чаллачка

@MichaelDibbets, Вибачте, плутайте байтів проти символів, змінено
kuldeep.kamboj

1
використовуйте щось на зразок mothereff.in/byte-counter для підрахунку байтів
Tschallacka,

3

C, 148 байт

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

Оцінка виключає зайвий новий рядок, перед f(n)яким включено для наочності.

магічні числа в pкодують символи для стіни в основі 4, які реконструюються з рядка " -|_" 0,1,2,3 відповідно

16843009в шістнадцятковій є 0x1010101. це використовується для рядків з -ними.

Оскільки _це кодується 3, нижній рядок може бути закодований просто так -1, як це число з усіма встановленими бітами 1.


Приємно, але ви можете зберегти 3 байти, не використовуючи #define qта просто жорстко кодуючи значення.
Йохан дю Тойт

2

Віци , 121 байт

Я це роблю, отримуючи доступ до кожного рядка по черзі вводячи час, надаючи мені стеки зі вмістом кожного рядка. Потім я вивожу рядок за один раз. Якщо хтось хоче, щоб я дав більш поглиблене пояснення, просто запитайте (я зараз відкриваю подарунки, тож ...).

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

Спробуйте в Інтернеті!


2

PHP5.5, 182 172 байт 168 байт

ґрунтуючись на відповіді @ kuldeep.kamboj, що насправді становить 212 байт в момент написання цього запису, але 182 символи. Я б хотів, щоб стіна була трохи вище, тоді я могла б зробити ще кілька оптимізацій ;-)

цей - 168 байт, завдяки @ 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])."
";}

Цей - 172 байти

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

Це 182 байти :-)

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

безгольова версія

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

видаліть пробіл перед як і видаліть дужки -3 Байти
Jörg Hülsermann

$x=$r(' ',3);можна скоротити до$x=' ';
Йорг Гюльсерманн

Вам не потрібні дужки для петлі foreach і `як $ z` міг писати якas$z
Jörg Hülsermann

2

Python 3, 132 122 120 байт

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

Безголівки:

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

Ви можете видалити пробіли, щоб отримати )for s in[...
Cyoce

2

Python 2, (161 символ, 191 байт)

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

2

SOGL V0.12 , 32 байти

→↔\ιδ»►℮⁰}▒║ΙOģΠp~⁵‘ ¾“ζ'¹*+'¹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

повертається до всіх питань мистецтва ascii-art та заявляє про дзамію за те, що в якийсь момент мене побивали буквально всі з SOGL
Magic Octopus Urn

1

Vim, 90 клавіш

Якщо припустити, що вхід знаходиться в буфері сам по собі, це зробить роботу (новий рядок лише для читабельності)

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

де ^Mє return, ^[є escape, ^Kє ctrl+kі ^Vє ctrl+v.

Це може бути дуже полегшеним, оскільки можуть бути набагато кращі способи створення структури.


0

Java 11, 236 235 231 229 байт

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

Спробуйте в Інтернеті.
ПРИМІТКА: Java 11 ще не є TIO, тому String.repeat(int)вона була емульована repeat(String,int)(для того ж байтового числа).

Пояснення:

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 + файл, 92 байти

зберегти патрон потужності до get-trumpwall.ps1(40 байт)

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

файл збереження даних із іменем fта даними містить символ Unicode та лише LF Linux (52 байти):

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

шістнадцятковий дамп:

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

Приклад використання

PS> .\get-trumpwall.ps1 5
    __   __        __   __        __   __        __   __        __   __
   |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |      |  |_|  |
___|       |______|       |______|       |______|       |______|       |___
-   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -  -   -   -   -
 - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -  - - - - - - -
- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -
———————————————————————————————————————————————————————————————————————————
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.