Ходоки Присоединяйтесь! - логотип Алана Уокера


13

Возможно, вы знаете Алана Уокера по его популярной песне Faded. Теперь его «последователи» называются Уокерами, и у них есть логотип, вот упрощенная версия:

\\
 \\              //\\  
  \\            //  \\            //
   \\          //    \\          //
    \\        //      \\        //
     \\      //        \\      //
      \\    //          \\    //
       \\  //    //\\    \\  //
        \\//    //  \\    \\//
         //    //    \\    \\
        //\\  //      \\  //\\
           \\//        \\//  \\
                              \\

Цель этого задания - напечатать этот логотип.

ПРАВИЛА:

  1. Если вы возвращаете список строк из функции в соответствии с метастандартами, предоставьте нижний колонтитул, который выводит его на экран.
  2. Все символы вышеуказанного логотипа должны быть там. Нет ярлыков!
  3. Наименьшее количество байтов побеждает!

могут ли быть дополнительные пробелы в конце каждой строки (так как они не меняют внешний вид выходных данных)? Могут ли быть ведущие / добавляющие новые строки?
Дзайма

@dzaima, да, ты можешь.
Dat

+1 для Алана Уокера !!
HighlyRadioactive

Ответы:


14

Древесный уголь , 31 30 29 27 байт

F²«Jι⁰↙χ↖↖⁵↙↙⁵↖↖²P↖χ↙↗χ↘↘¹²

Попробуйте онлайн! Ссылка на подробную версию кода. К сожалению Copy, в этом случае я не делаю то, что хочу, поэтому вместо этого я должен выполнить цикл. Объяснение:

F²«Jι⁰

Нарисуйте все дважды, но курсор будет начинаться на один символ вправо во второй раз.

   ↙χ↖↖⁵↙↙⁵↖↖²P↖χ

Нарисуйте основной W справа налево, но оставьте курсор возле перевернутого V.

   ↙↗χ↘↘¹²

Нарисуйте перевернутый V.


Вы «только» разбили наивные решения на 20 байтов: P
Стивен

1
@StepHen Экономия в 46% - это неплохо, если учесть, что в первую очередь
Нил

Разве зеркалирование для этого не короче?
Стивен

5
@ StepHen Исправление асимметрии стоит слишком дорого. Лучшее, что я мог сделать, это 35 байт F²«Jι⁰↘χ↗↗⁵M⁵↑←↙χ»‖M↥\\¶ \\F²«Jι⁰↖³.
Нил

13

JavaScript (ES6), 172 139 байт

let f =

_=>`1
3s1
5o5o
7k9k
9gdg
bchc
d8l8
f48194
h08590
i899
g14d41
n0h05
1p`.replace(/.p?/g,n=>' '.repeat((n=parseInt(n,36))/2)+(c='/\\'[n&1])+c)

O.innerText = f()
<pre id=O>

Как?

Логотип в основном состоит из групп пробелов, за которыми следует либо либо, //либо \\перевод строки.

Пробелы и конечные шаблоны кодируются с использованием значений base-36:

  • Младший значащий бит дает конечный шаблон: 0для //, 1для \\.
  • Все остальные биты дают количество пробелов перед конечным шаблоном.

Все может быть закодировано таким образом с одной цифрой base-36, кроме последней строки, состоящей из 30 пробелов, за которыми \\следует 30 * 2 + 1 = 61 = 1pв base-36. Это pследует интерпретировать как 12 пробелов, за которыми следует, \\но этот шаблон нигде не появляется. Таким образом, мы можем просто обработать этот частный случай цены 2 дополнительных байт в регулярном выражении: /.p?/.


Первая версия, 186 байт

NB: Этот был представлен до обновления логотипа.


Красиво в гольф. Я сам попробовал это, прежде чем проверять ответы; в итоге получилось нечто похожее на вашу 172-байтовую версию.
Лохматый

7

брейкфук , 579 байт

+++++++++[>+>+++++>+++>++++++++++<<<<-]>+>++>+++++>++..<<<.>>.>..<..............<..>>..<..<<.>>..>..<............<..>..>..<............<..<.>>...>..<..........<..>....>..<..........<..<.>>....>..<........<..>......>..<........<..<.>>.....>..<......<..>........>..<......<..<.>>......>..<....<..>..........>..<....<..<.>>.......>..<..<..>....<..>>..<....>..<..<..<.>>........>..<<..>....<..>..>..<....>..<<..<.>>.........<..>....<..>....>..<....>..<<<.>>........<..>>..<..<..>......>..<..<..>>..<<<.>>...........>..<<..>........>..<<..>..>..<<<.>>..............................>..

Попробуйте онлайн!

Генерирует константы 47 92 32 10в памяти, затем выбирает и выводит их соответствующим образом.


Я почти уверен, что это можно проиграть, особенно эта последняя часть
Стэн Струм

@StanStrum Не стесняйтесь дать ему шанс. Я пытался, но не мог найти хороший способ выразить это, особенно учитывая многословие BF в условных выражениях.
Конор О'Брайен


4

Жевательная резинка , 77 76 байт

HexDump:

0000000: 75cf c109 8000 0c43 d17b a6c8 0659 28fb  u......C.{...Y(.
0000010: cf21 05cb a782 3de9 4b5a b495 5b9f 4946  .!....=.KZ..[.IF
0000020: 870f dac3 f8ea 5704 51b9 2284 c611 0114  ......W.Q.".....
0000030: 9029 f09e ec67 2362 21e1 075e 2136 29b9  .)...g#b!..^!6).
0000040: 08b9 bf97 8939 cf33 ebbf d33e            .....9.3...>

Попробуйте онлайн!

Порог жевательной резинки. :П



3

C (gcc) , 377 байт

char*r="2\\01 2\\14 2/2\\02 2\\12 2/2 2\\12 2/03 2\\10 2/4 2\\10 2/04 2\\8 2/6 2\\8 2/05 2\\6 2/8 2\\6 2/06 2\\4 2/10 2\\4 2/07 2\\2 2/4 2/2\\4 2\\2 2/08 2\\2/4 2/2 2\\4 2\\2/09 2/4 2/4 2\\4 2\\08 2/2\\2 2/6 2\\2 2/2\\011 2\\2/8 2\\2/2 2\\030 2\\";char d[9];main(i){do{if(*r==48)puts(""),r++;for(i=0;isdigit(*r);d[i++]=*r++);for(d[i]=0,i=atoi(d);i--;putchar(*r));}while(*r++);}

Попробуйте онлайн!




3

Haskell, 161 160 байт

foldr(\a->(++(' '<$[1..fromEnum a-last(96:[64|a<'`'])])++last("\\\\":["//"|a<'`'])))""<$>words"` `Na LbLb JdJc HfHd FhFe DjDf Bd`DBg @dbD@h ddDI `BfB`H b@h@k ~"

Попробуйте онлайн!

Пробелы перед \\кодируются строчными буквами, а перед //- заглавными, где количество пробелов равно значению ASCII минус 96 (или 64). Ноль пробелов это `/ @. Пробелы каждой строки хранятся в обратном порядке, потому что они расходуются по правой стороне.



2

Древесный уголь , 50 31 байт

F²«↘¹²↗↗⁵↘↘⁵↗↗⁹Mχ↓M⁴←↖¹²↙↙χJ¹¦⁰

Попробуйте онлайн! Ссылка на подробную версию.

Я старался. (Кроме того, я укажу, что я сделал это полностью самостоятельно, даже если это выглядит несколько похожим на другой. [Шиз, я сделал это снова. Между прочим, это все еще другое.: P])


1

Желе , 65 байт

“<fṭY2Ẹ<ƭẹ£ʋ¥¹)Œ<Ẓ⁹ḣ⁶ıĠ\ṃṛ?04|ẏḌẉƙ+’b36⁶ẋ“ÇỴ$ñ⁵FḄ’Bị⁾\/¤ẋ€2¤żFs36

Попробуйте онлайн!

Возвращает список символов. Ссылка TIO имеет нижний колонтитул для печати на отдельных строках.


1

PHP, 186 байт:

Обе версии требуют PHP 5.5 или выше.

Запустите -nrили попробуйте их онлайн


сжатие пространства дает кратчайшую альтернативу:

(двойная обратная косая черта сопоставлена ​​с 0, двойная косая черта с f, символы сжаты до цифр)

while(~$c="0
1077f0
2066f2066f
3055f4055f
408f608f
506f806f
604f5504f
702f4f0402f
80f4f2040f
9f4f4040
8f02f602f0
560f80f20
87870"[$i++])echo+$c?str_pad("",$c):strtr($c,["\\\\",f=>"//"]);

PHP 7.1 выдает предупреждения; заменить +$cс , $c>0чтобы исправить.


битовая карта в кодировке Base 64 ( 187 байт ):

(сопоставлено пробел 00, новая строка 01, двойная обратная косая черта 10и двойная косая черта 11, затем конкатенированные 3 "пикселя" каждый к одному символу, с добавлением префикса 1и преобразованием из двоичного в ASCII)

for(;$c=ord("d`@@@@yB@@@@p`@@@M@`@@C@H@@@t@`@@p@H@@M@B@@p@@`@M@@`C@@@H@t@@`pC`BCP@@l@p`Bt@@C@L@`BP@@xL@BCd@@@K@@Bpd@@@@@@@@@B"
[$i++]);)for($b=6;$b;)echo[" ","
","\\\\","//"][3&$c>>$b-=2];

(первый перевод строки для удобства чтения; другой необходим)



1

PowerShell , 221 220 байт

$ofs=''
"b
 b$(' '*14)/b
$((2..6|%{' '*$_+"b$(($a=' '*(14-++$i*2)))/$(' '*$i*2)b$a/`n"}))   4b  /4/b4b  /
44b/4/  b4b/
44 /4/4b4b
44/b  /4  b  /b
44   b/44b/  b
$(' '*30)b"-replace4,'    '-replace'/','//'-replace'b','\\'

Попробуйте онлайн!

Довольно наивный подход ( и на 50 байтов хуже, чем ответ JS, съеживается ). Кто-нибудь знает способ сделать несколько операций -replaceв PowerShell?

-1 байт благодаря Веске.



@Veskah Простая экономия байтов. Благодарность!
AdmBorkBork

1

Python 2 , 180 байт

print''.join(c<'3'and'\\/\n\\/'[int(c)::3]or' '*(int(c,36)-2)for c in'0230g104240e140e1250c160c1260a180a127081a08128061c0612904161060412a0161406012b16160602a1041804102d01a01402w0')

Попробуйте онлайн!

Кодировка базовая 36:

0 => \\
1 => //
2 => \n

и в противном случае,

n => (n-2) spaces

1

C # (интерактивный компилятор Visual C #) , 122 байта (121 символ)

_=>@"
A
9;13) +!(# 0$(	-) 
4	(	€".SelectMany(j=>(j%2>0?"//":@"\\").PadLeft(j/4)+(j%4>1?"\n":""))

Попробуйте онлайн!

объяснение

Каждая часть логотипа - это всего лишь 0+ пробелов с буквой a \\или a //в конце, плюс, возможно, символ новой строки. Есть 52 из них. Затем мы кодируем каждый сегмент в символ:

  • Возьмите количество пробелов в каждом сегменте, затем добавьте 2 к этому числу.

  • Сдвиньте бит влево 2 раза.

  • Если сегмент заканчивается //, побитовое ИЛИ число на единицу.

  • Если сегмент заканчивается новой строкой, побитовое ИЛИ число на два.

  • Возьмите номер и бросьте его в символ.

  • Повторите для каждого сегмента.

Вот все 52 сегмента и числовое значение, в которое они кодируются:

10,12,65,10,16,57,16,59,20,49,24,51,24,41,32,43,28,33,40,35,32,25,48,27,36,17,25,8,24,19,40,9,25,16,24,11,45,25,24,26,41,8,17,32,17,10,52,9,40,9,18,128


124 . также я думаю, что вы можете вставить нулевые байты, если вы вручную
только ASCII

в объяснении: сдвиг влево , а не вправо. Кроме того, список строк доступен только в том случае, если вы возвращаете каждую строку в виде отдельной строки ... вам нужно string.Concatздесь, чтобы она была действительной ...
Только для ASCII

близко , это 143, тогда как обычно 141
только для ASCII

@ ASCII-only Я уверен, что возвращать список строк, как это разрешено, но я добавлю другое решение на всякий случай. Тем не менее, это действительно: tio.run/##Sy7WTS7O/…
Воплощение Невежества

0

C (gcc) , 144 140 139 байт

-4 байта благодаря потолку .

Каждый символ в строке кодирует количество пробелов, используемых перед определенной строкой. Если это строчная буква (или обратный кавычки), то строка "\", а если заглавная или @, это "//". Пробел означает новую строку.

f(c,i){for(i=0;c="` aN` bLbL cJdJ dHfH eFhF fDjD gBD`dB h@Dbd@ IDdd H`BfB` k@h@b ~"[i++];)printf("%*s",c%32+2,c<33?"\n":c<96?"//":"\\\\");}

Попробуйте онлайн!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.