Помогите Трампу построить стену!


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

Попробуй это здесь!

объяснение

Вышеприведенный hexdump интерпретируется как число base-128, затем преобразуется в base 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 символов вы получите:

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

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

Контрольная работа


Можете ли вы сохранить байт, используя .slice(-15)вместо этого?
Нил

Исправить несложно, просто используйте правую минимальную часть вместо левой минимальной части:__ __ n| |_| | n| |___n - n- n -n—
Нейл

Очень умная, хорошая работа!
Дж Аткин

@ Нил Ах, ты прав. Спасибо за чаевые!
user81655

5

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

Значительное гольф может быть сделано. Отключите красивую печать и очистите вывод для лучшего результата. Попробуй это здесь! , Кроме того, используйте это для более простого тестирования произвольного числа.

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

Я добавлю объяснение позже.


6
@ Коннор О'Брайен, на что это похоже на это объяснение: 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! 󰰹͠  

Поскольку непечатаемые символы были щедро использованы при создании вышеприведенного скрипта, вот 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 символов (105 байт на диске, 102 без спецификации)

Практически так же, как метод @ 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 на один 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])."
";
}

удалите пробел перед
символом

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

Ungolfed:

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 и поддерживает dzamia за то, что в какой-то момент я побил меня буквально по всем из них с помощью 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 байта

сохранить PowerShell в get-trumpwall.ps1(40 байт)

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

сохранить файл данных с именем fи данными, содержит только символ Unicode и Linux LF (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.