В честь Адама Веста

90

Адам Уэст скончался, и я хотел бы почтить его память здесь, на PPCG, хотя я сомневаюсь, что он знал о нашем существовании. В то время как есть много, много разных вещей, которыми этот человек известен, ни одна не более заметна, чем его роль в качестве оригинального бэтмена. Я всегда буду помнить моего отчима, который до сих пор следит за старыми школьными Бэтменом и Робином. Эта задача носит упрощенный характер, совсем не в соответствии со сложным человеком, которым был Адам Вест. Тем не менее, это лучшее, что я мог придумать, так как это самый знаковый образ в карьере человека.


Я хотел опубликовать это раньше, но я ждал, чтобы кто-нибудь придумал что-нибудь получше.


Выведите следующее (с или без завершающих пробелов / новых строк):

           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       ****
       **       *      ***      *       **

Это , победит самый низкий счетчик байтов.

Урна волшебного осьминога
источник
7
Вы должны запретить закодированные строки. Это действительно не весело!
sergiol
7
Он не был оригинальным Бэтменом. Эта честь принадлежит Льюису Уилсону.
Лохматый
42
Когда я увидел название, я подумал, что результатом будет «на-на-на-на-на-на-на-на-на-на-на-на-на-на-на-на».
D Крюгер
3
@DKrueger: сделай так в другом вопросе :)
Оливье Дюлак
4
Почему это не началось в прошлом году? Кэрри Фишер, Принц, Дэвид Боуи и Алан Рикман!
Кэрд coinheringaahing

Ответы:

47

Желе , 44 байта

“¡©İ'¹!ðkW>ṅṙẏṙlœf:ߌÆ@Ƥ’b25o99Jx$ị⁾ *s25ŒBY

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

Как это устроено

“¡©İ'¹!ðkW>ṅṙẏṙlœf:ߌÆ@Ƥ’

Это числовой литерал. Все символы заменяются их индексами, основанными на 1, в кодовой странице Jelly, результат интерпретируется как биективное целое число base-250, что приводит к

58616171447449697510361193418481584558895594063391402

Затем b25конвертируем это целое число в основание 25 и o99заменяем 0 на 99 , получая

11 1 20 4 10 1 8 4 12 4 3 6 12 4 2 9 9 5 1 99 1 24 2 5 7 11 4 4 7 3 4 3 7 2 7 1 6 2

Jx$заменяет j- ую основную 25 цифр n на n копий j , давая

1 1 1 1 1 1 1 1 1 1 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 7 7 7 7 7 7 7 7 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 11 11 11 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 15 15 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 18 18 18 18 18 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 23 23 24 24 24 24 24 25 25 25 25 25 25 25 26 26 26 26 26 26 26 26 26 26 26 27 27 27 27 28 28 28 28 29 29 29 29 29 29 29 30 30 30 31 31 31 31 32 32 32 33 33 33 33 33 33 33 34 34 35 35 35 35 35 35 35 36 37 37 37 37 37 37 38 38

Теперь, ị⁾ *индексы в пару символов. Индексирование основано на 1 и является модульным, поэтому нечетные числа заменяются пробелами, четные - звездочками. Это дает

           *                    ****          *        ****            ****   ******            ****  *********         ***** *************************************************************************************************** ************************  *****       ***********    ****       ***    ***       **       *      **

s25нарезать результат на куски длиной 25 . Если мы напишем каждый кусок в отдельной строке, мы получим

           *             
       ****          *   
     ****            ****
   ******            ****
  *********         *****
 ************************
*************************
*************************
*************************
 ************************
  *****       ***********
    ****       ***    ***
       **       *      **

Подпрыгивать атом ŒBpalindromizes каждый кусок, добавляя перевернутую копию без ее первого символа, получая

           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       

Наконец, Yвводит фактические переводы строки.

Деннис
источник
1
И я думал, что это “QƤḣọḲ£¿ẆịµñẒṢƊ¬ƒỤ2ỴÐ,ịṁ&Ḅ<ḋsḳn.⁷ṛḃṡ⁾6bḋeṁ’ṃ⁾ *s25ŒBYбыло достаточно коротким на 53 байта ...
Эрик Outgolfer
Я пробовал как 14 разных вещей, а потом, наконец, получил методом проб и ошибок. Не поняла, что вы имели в виду под «заменой 0 на 99», пока я не попробовал сам.
Волшебная урна осьминога
156

Wordfuck , 5761 2686 байт

Я предполагаю, что использование его имени в качестве исходного кода приносит Адаму Весту некоторую честь.

adam west adam west adam_wes t_a dam_we st_a dam_ west adam west adam west adam west_ad am_west_a dam_we st ad am we st ad am we st ad am west_a dam_we st_a dam_ west_ada m_w est ada m_w est ada m_west_ adam west_a dam_west_ adam_we st_ ad am_west ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am_wes t_ adam_w est_ adam west adam west adam west adam west adam we st_adam west_ad am we st ad am we st adam_w es t_ ad am west_ad am we st ad am we st ad am we st_ada m_ west_ad am we st ad am west_a da m_west_ ad am we st ad am we st ad am west_a da m_ we st adam_w es t_adam_ west_ad am we st ad am west_a da m_ we st adam_we st ad am we st ad am we st ad am we st_ada m_ we st ad am we st adam_we st ad am we st ad am we st ad am we st_ada m_ we st ad am_wes t_ adam_we st_adam we st ad am_wes t_ ad am we st ad am_west ad am we st ad am we st ad am we st adam_w es t_ ad am we st ad am_west ad am we st ad am we st ad am we st adam_w es t_ ad am we st adam_w es t_adam_ west_ad am we st_ada m_ we st ad am we st ad am west_ad am we st ad am we st ad am west_a da m_ we st ad am we st ad am_west ad am we st ad am we st ad am_wes t_ ad am we st ad am we st adam_w es t_adam_ west_ad am west_a da m_ we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st_ada m_ west_ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am west_a da m_west_ ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am_wes t_ adam_we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st adam_w es t_adam_ west_ad am west_a da m_ we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st_ada m_ west_ad am_west ad am west_a da m_ we st ad am_west ad am we st ad am we st_ada m_ we st ad am we st ad am we st ad am we st ad am we st ad am west_ad am we st ad am we st adam_w es t_ ad am we st_ada m_ west_ad am_west ad am we st adam_w es t_ ad am west_ad am we st ad am we st adam_w es t_ ad am_west ad am we st adam_w es t_ ad am we st_adam we st ad am west_a da m_ we st_adam we st ad am we st ad am_wes t_ ad am we st_ada m_ west_ad am_west ad am we st ad am we st_ada m_ we st_adam we st ad am we st ad am_wes t_ adam_we st ad am we st ad am_wes t_ ad am west_ad am we st ad am we st_ada m_ west_ad am we st ad am we st adam_w es t!

Попробуйте онлайн! (перенесенный мозговой трах)

Адам Вест поет (спасибо @carusocomputing)

Уриэль
источник
69
Это ужасно. Я люблю это.
Странник
25
Хм. Да. Довольно хорошо, но я думаю, что вы забыли подчеркивание в строке 1.
Mateen Ulhaq
2
Есть ли способ, которым мы можем проверить это?
Лохматый
4
@ Добро пожаловать в PCCG! мы не реально конкурировать на этом сайте, конечно , это не выигрышное решение, но его веселый и вызов тематикой, поэтому он получает upvoted , чтобы больше людей могли наслаждаться этим. Надеюсь объявить ваши ответы в ближайшее время!
Уриэль
3
@ Shaggy Попробуйте онлайн! (STDERR)
Адам
67

Python, 530 529 528 524 байта

import zlib as Holy
B=list("NNAAAnAAnnAnaAannnaaaaNaAAnNanAaAanNNaNNaNaanNNANanNNANaAnAaANANAAnAaANNnAanAaNnAaAANNAaAnNANAaaANNAanAaNaNNNAaNNanAAnNNnaaaNANANANnnaaaNaaAAAANaNaNaNAnNAAAAaaaaANAaNnnAaAaNAAaANNnaaNnNnaannaaAaananannNnAAAAAanAananANAnaAAnANAAaaaAaaanaaAAaanNAnanAAnnnANAnNAnnAnnnanaNNaaaNaNNaAAnNAaaANNNANAnAaaAaNaANnNNNaaAanaaaanaaaaaAaAaNnNnnaAnANaNnnANanNA")
A=dict(N='11',A='01',n='10',a='00')   
T=""
POP=BIFF=POW=OOF=lambda:A[B.pop()]
while B:T+=chr(int(POP()+POW()+BIFF()+OOF(),2))
print Holy.decompress(T)
rrauenza
источник
5
О, Господи, я не так долго смеялся. НААНАНАНАНАНАНААННАНАНАНАНА
Урна магического осьминога
9
В кодовом гольфе мы должны уменьшить количество байтов, но ваш вход довольно большой . ;)
PM 2Ring
34
Иногда нужно жертвовать ради общего блага.
rrauenza
1
Это звучит как то, что сказал бы Бэтмен. ;) Должен признать, что меня это B.pop(0)немного раздражает. Почему бы не повернуть вспять, Bчтобы вы могли использовать гораздо более эффективный (и более короткий) B.pop()? Необходимо pop(0)переместить все оставшиеся элементы списка вниз на один слот. Конечно, это происходит на скорости C, но это все же менее эффективно, чем выталкивание с конца строки.
PM 2Ring
5
Псевдонимы POP, BIFF, POW, OOFзаставили меня выплюнуть то , что я пил на моем мониторе. Спасибо, лол. +1.
rayryeng - Восстановить Монику
21

JavaScript (ES6), 148 146 байт

_=>`n2zh2
f8l2b2l8
b8pep8
7cpepc
5ijiji
3yyq
0
0
0
3yyq
5afy8fa
98f69a96f8
f4f2d6d2f4`.replace(/./g,c=>'* '[(n=parseInt(c,36))&1].repeat(n/2||49))

демонстрация

Arnauld
источник
12

Python, 149 142 байта

7 байтов сохранено благодаря @ PM2Ring

for l in"b1d 74a13 54c4 36c4 2995 1o 0p 0p 0p 1o 257b 447343 727162".split():x=''.join(s*int(k,36)for s,k in zip(' *'*3,l));print(x+x[-2::-1])
Уриэль
источник
Приятно. Вы можете сбрить 7 байтов:x=''.join(s*int(k,36)for s,k in zip(' *'*3,l))
PM 2Ring
Не волнуйтесь. Мне удалось написать еще более короткую версию Python. ;)
PM 2Ring
1
@ PM2Ring ты получил мой +1
Уриэль
12

MATL , 61 59 байт

' *'60:'*u9|K9j[~F9R,>ejc4Q,7;F\1l_=7sFR'F11:ZaY"13e)25ZvZ)

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

Как это устроено

При этом используются следующие стандартные методы:

  • Поскольку изображение горизонтально симметрично , кодируется только левая половина (включая центральный столбец).
  • Изображение линеаризуется в главном порядке столбцов (вниз, затем поперек), и результирующая последовательность кодируется по длине серии .
  • Результирующие длины серий принимают значения от 1до 11, поэтому последовательность длин серий сжимается путем преобразования базы из базы 11в базу 94(печатные символы ASCII, за исключением одинарных кавычек, которые необходимо экранировать).
Луис Мендо
источник
1
Существует 60 трасс в мажорном порядке, но только 38 в мажорном ряду. Это спасло бы какие-нибудь байты?
Деннис
@Dennis Проблема в том, что в этом случае длина пробега равна [1:12 20 24 99], что затрудняет сжатие. Моя лучшая попытка на 60 байтов
Луис Мендо
Вместо того, чтобы строить точное множество, вы пытались просто использовать базу 25 и заменить 0 на 99, например Y|,? Я не знаю достаточно атласа MATL, чтобы проверить, действительно ли он короче ...
Деннис
@ Денис Это выглядит многообещающе. Используя набор, [1:24 99]я удалил один байт . Если я использую [0:24](основание 25) Я не знаю , как превратить 0в 99в несколько байт
Luis Mendo
1
Right Y|не работает в MATL / Octave, как в Jelly / Python. В последнем 0 or 99дает 99 ...
Деннис
7

05AB1E , 47 байтов

„ *19×S•«M;Ó8ζ?èYÑ?½¨/Ž´.δòÈÖ<•25вт<19ǝ×J13ä€û»

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

Emigna
источник
Портированный алгоритм Денниса верно?
Эрик Outgolfer
@EriktheOutgolfer: Заимствовано replace 99 trickу него (сохранено 4 байта по прямому пути). Тем не менее все еще ищу лучший способ.
Emigna
-1 с помощью .∞вместо €û»(зеркала неявно объединяют списки на новых строках сначала в устаревшей версии, перед применением зеркала). Я также пытался использовать ₂ввместо 25в, но , к сожалению , сжатое целое число , то 1 байт больше, так что он ничего не спасает: •2Ø°×á[1∊Œ)’˜Àå<тIÞ‡p5ÉQ•₂в.
Кевин Круйссен
7

vim, 168 156 байт

:nm N a <C-v><ESC>
:nm A a*<C-v><ESC>
:nm B aY<C-v><ESC>yyp!!rev<C-v><CR>kJh4xo<C-v><ESC>
11NA13NB7N4A10NA3NB5N4A12N4AB3N6A12N4AB2N9A9N5ABN24AB25ABkyyppjN24AB2N5A7N11AB4N4A7N3A4N3AB7N2A7NA6N2ABdd

Это предполагает среду Unix, для rev. Я использую довольно простую кодировку (число, символ), где N и A добавляют a и *соответственно, а B выполняет копирование и реверс.

В реальном файле записи в квадратных скобках заменяются литеральными байтами, которые они представляют. <C-v>0x16, <ESC>0x1b и <CR>0x0d.

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

луч
источник
Я думаю, что было бы быстрее не беспокоиться о создании макросов «b» и «c», а вместо этого переназначить их напрямую. :nm N a <C-v><esc>и:nm A a*<C-v><esc>
DJMcMayhem
@DJMcMayhem Так и есть. По какой-то причине я подумал, что будет сложнее сохранить <C-v>файл в файле, чем он есть, поэтому я использовал обходной метод, чтобы проверить его { cat foo.vim; echo ':wq'; } | vim out.txt. Я не уверен, почему мне не пришло в голову попробовать <C-v><C-v>вчера.
Рэй
Я рад, что у вас все получилось! Еще один способ проверить ответы vim для удобства - попробуйте онлайн! , который действительно использует esolang, который я написал, но он (в основном) обратно совместим в любом случае. -vФлаг позволяет использовать VIM ключевые описания (как <C-v>и этажерка)
DJMcMayhem
@DJMcMayhem Очень мило. Благодарю.
Луч
Вы не можете написать <NL>вместо <NEWLINE>?
L3viathan
7

Древесный уголь , 69 54 52 48 байт

E⪪”|↖y{{﹪yc›o”n↗πf>T≔Y¿PN|ωπQβ” ⪫Eιק* μ⌕βλω‖O←

Попробуйте онлайн! Ссылка на подробную версию кода. Редактирование: Благодаря @ ASCII-only, сохраняются 4 байта путем переключения с отдельного флага на циклический переход по индексам, 7 байтов с использованием ⸿символа (недокументированного?) И еще 4 байта с использованием алфавита для кодирования длины серии. Сохранено еще 2 байта, потому что AtIndexавтоматически принимает по модулю. Сохранено еще 4 байта, потому что Mapавтоматически создается индексная переменная. Объяснение:

Print(Map(

Внешний Mapвозвращает массив. Printобрабатывает это печатая каждый элемент по своей линии, что позволяет избежать необходимости вручную Joinих \n.

Split("anb adbke eme fjj y z z z y lhf dedhe cgbhc" " "),

Строка кодирует все половинные строки вывода. Чередующиеся буквы относятся к числу *s и пробелов ( a=0используется для обработки строки, которая начинается с пробела). Пространство является удобным выбором разделителя, но также хорошо сжимается (x также сжимает до 55 байтов). Каждый ряд обрабатывается отдельно. (Примечание. Девербосификатору не удается удалить разделитель между сжатой и несжатой строкой, в противном случае код будет иметь ,удобочитаемость.)

Join(Map(i, Times(AtIndex("* ", m), Find(b, l))), w)));

Обведите каждую букву, расширяясь до соответствующего числа *s или пробелов. Переменная mявляется индексом внутреннего цикла для этого Map, в то время как lсодержит букву. Затем результат Joinредактируется в одну строку, используя предопределенную пустую строку w.

ReflectOverlap(:Left);

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

Я попытался обработать символы новой строки, пробелы и звезды в одном цикле, но на самом деле это заняло еще два байта:

Print(Join(Map("anb adbke eme fjj y z z z y lhf dedhe cgbhc", Ternary(Equals(" ", i), "\n", Times(AtIndex("* ", k), Find(b, i)))), w));
ReflectOverlap(:Left);
Нил
источник
1
+1 Мне действительно нужно выучить древесный уголь (а также гексагонию и кубикс). Три моих любимых языка программирования я вижу здесь. Кстати, я думаю, что вы уже планировали, но не могли бы вы добавить объяснение?
Кевин Круйссен
@KevinCruijssen Хм, я думаю, что даже подробный код нуждается в некотором уточнении ... этого достаточно?
Нил
Ах, я не заметил, что TIO содержал многословную версию tbh. Но, тем не менее, объяснение в самом ответе никогда не повредит, поэтому спасибо, что нашли время написать его.
Кевин Круйссен
Я хочу изучить древесный уголь, но ему нужна страница типа 05AB1E, которая объясняет, что на самом деле делает каждый символ кодовой страницы, не углубляясь в код.
Волшебная Урна Осьминога
2
@carusocomputing Это не так уж и плохо: кроме сжатых строк, у вас есть нормальные строки (символы ASCII и символ Pilcrow), числа (цифры надстрочного знака), стрелки (... стрелки), команды (обычно заглавные буквы полной ширины) и операторы (все еще), так что вы можете посмотреть их на соответствующей странице вики.
Нил
6

Clojure, 833 437 байт

Почти по определению Clojure никогда не выиграет никаких призов за краткость, но, поскольку я с нетерпением ждал КАЖДУЮ НЕДЕЛЮ в эпизодах ДВУХ (считать их - ДВУХ ) Бэтмена (тот же Bat-time, тот же Bat-канал!), Ясно, что есть нет времени терять!

Скорей, Робин - в Bat-REPL !!!

(defn r[c n](clojure.string/join(repeat n c)))(defn pl[col](loop[i 0 c " "](print(r c (nth col i)))(if(< i (dec (count col)))(recur (inc i) (if (= c " ") "*" " "))(println))))(defn p[](loop[lines [[11 1 25 1][7 4 10 1 5 1 10 4][5 4 12 7 12 4][3 6 12 7 12 6][2 9 9 9 9 9][1 47][0 49][0 49][0 49][1 47][2 5 7 21 7 5][4 4 7 3 4 5 4 3 7 4][7 2 7 1 6 3 6 1 7 2]] i 0] (pl (nth lines i))(if (< i (dec (count lines)))(recur lines (inc i))nil)))

Версия без гольфа:

(defn repstr [c n]
  (clojure.string/join (repeat n c)))

(defn print-bat-signal-line [col]
  (loop [i  0
         c  " "]
    (print (repstr c (nth col i)))
    (if (< i (dec (count col)))
      (recur (inc i) (if (= c " ") "*" " "))
      (println))))

(defn print-bat-signal []
  (loop [lines [[11 1 25 1]  ; spaces asterisks spaces asterisks
                [7 4 10 1 5 1 10 4]
                [5 4 12 7 12 4]
                [3 6 12 7 12 6]
                [2 9 9 9 9 9]
                [1 47]
                [0 49]
                [0 49]
                [0 49]
                [1 47]
                [2 5 7 21 7 5]
                [4 4 7 3 4 5 4 3 7 4]
                [7 2 7 1 6 3 6 1 7 2]]
        i      0]
    (print-bat-signal-line (nth lines i))
    (if (< i (dec (count lines)))
      (recur lines (inc i))
      nil)))

Покойся с миром Адам Вест. Как бы нелепы ни были эти шоу, те из нас, кто был детьми, приветствуют вас.

Боб Джарвис
источник
Хотя это не игра в гольф, это все еще бьет кота ответ хех.
Волшебная Урна Осьминога
Добавлена ​​версия для гольфа. Я бы повернул его вбок, чтобы он выглядел так, будто он взбирается на стену, если бы мог. :-)
Боб Джарвис
6

C (gcc) , 191 байт

#define x 16777215
char*b,*c,a[50];l[]={4096,122888,491535,2064399,4186143,x/2,x,x,x,x/2,4064255,983495,98435,0},*p=l;main(){for(;*p;p++,puts(a))for(b=c=a+23;b>=a;*p/=2)*b--=*c++=" *"[*p&1];}

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

Хаген фон Айцен
источник
6

Различные решения, использующие кодирование длины выполнения, с различными методами кодирования данных RLE.

Python 3, 125 121 байт

Эта версия использует bytes строку для хранения данных.

s=''
for c in b'<)@4/:),0/>/,3>/*981(WYYY(W*14=./4-.-4+4)2+':s+=' *'[c%2]*(c//2-19);s*=len(s)<25or print(s+s[-2::-1])or 0

Позвольте sбыть строкой звезд или пространств. Тогда байтовое nкодированиеs задается

n = 38 + 2*len(s) + (s[0]=='*')

Python 2, 133 126 байт

Эта версия использует буквенное кодирование. Значение буквы определяет длину выходной строки, регистр букв определяет, состоит ли она из пробелов или звездочек.

s=''
for c in'kAmgDjAceDlDcFlDbIiEaXYYYaXbEgKdDgCdCgBgAfB':
 s+=' *'[c<'a']*(int(c,36)-9)
 if len(s)>24:print s+s[-2::-1];s='' 

Мое оригинальное 133-байтовое решение Python 2.

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

s=''
for c,n in zip(24*' *','b1d074a13054c436c429951o0p0p0p1o257b447343727162'):
 s+=c*int(n,36)
 if len(s)>24:print s+s[-2::-1];s=''

Просто для удовольствия, вот одна строка, использующая буквенное кодирование.

Python 2, 148 байт

print'\n'.join(''.join(s+s[-2::-1])for s in zip(*[iter(''.join(' *'[c<'a']*(int(c,36)-9)for c in'kAmgDjAceDlDcFlDbIiEaXYYYaXbEgKdDgCdCgBgAfB'))]*25))

Для еще большего удовольствия, вот образец в игре жизни Конвея, который генерирует версию логотипа Бэтмена. Мне пришлось удвоить каждую строку, чтобы соотношение сторон было примерно таким же, как и у текстовой версии. Эта модель не действительно вычислить логотип (хотя это можно делать вычисление в жизни - это Тьюринг), он просто воспроизводит его из петли памяти, так что я думаю , я не могу отправить его в качестве ввода кода игры в гольфе (хотя Я сделал создать его , используя скрипт Python , который я написал несколько лет назад). ;)

Он закодирован в довольно стандартном формате RLE, который может загружать большинство движков Life. Если у вас нет программы GoL (например, Golly ), вы можете просмотреть ее в действии онлайн с помощью этого онлайн-движка Life , который может импортировать файлы Life RLE. Вот PNG-версия этого шаблона Life , некоторые программы Life (включая Golly) могут загружать шаблоны Life из PNG и различных других форматов графических файлов.

PM 2Ring
источник
6

T-SQL, 283 276 222 байта

SELECT CAST(DECOMPRESS(CAST('H4sIAAAAAAAEAFNQgAMtBVxAi5cLxgICdB3IAkAAVYuqEsLHIgRWjV0KqxBIvZYWujQeEaAGLdIALxeJGuinhXSvQEMCPVSQAbIcJPJQReGSSHxU9WAeSppAqEMoBwCfudAGawIAAA=='as XML).value('.','varbinary(max)'))AS varchar(max))

Реализация сжатия GZIP оригинальной строки Бэтмена с помощью метода, размещенного здесь . Это работает только в SQL 2016 и более поздних версиях.

Для более ранних версий SQL используйте мой предыдущий метод ( 276 байт ):

DECLARE @ CHAR(999)=REPLACE(REPLACE(REPLACE('PRINT SPACE(11#1$25#1&$7#4$10#1$5#1$10#4&$5#4$12#7$12#4&$3#6$12#7$12#6&$2#9$9#9$9#9&$1#47&#49&#49&#49&$1#47&$2#5$7#21$7#5&$4#4$7#3$4#5$4#3$7#5&$7#2$7#1$6#3$6#1$7#2)','#',')+REPLICATE(''*'','),'$',')+SPACE('),'&',')+CHAR(13')EXEC(@)

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

  • #7 заменяется +REPLICATE('*',7)
  • $4 заменяется +SPACE(4)
  • & заменяется +CHAR(13)

После замены полная строка из 958 символов выглядит так (с разрывами строк в каждой строке в символе Бэтмена:

PRINT 
SPACE(11)+REPLICATE('*',1)+SPACE(25)+REPLICATE('*',1)+CHAR(13)
+SPACE(7)+REPLICATE('*',4)+SPACE(10)+REPLICATE('*',1)+SPACE(5)+REPLICATE('*',1)+SPACE(10)+REPLICATE('*',4)+CHAR(13)
+SPACE(5)+REPLICATE('*',4)+SPACE(12)+REPLICATE('*',7)+SPACE(12)+REPLICATE('*',4)+CHAR(13)
+SPACE(3)+REPLICATE('*',6)+SPACE(12)+REPLICATE('*',7)+SPACE(12)+REPLICATE('*',6)+CHAR(13)
+SPACE(2)+REPLICATE('*',9)+SPACE(9)+REPLICATE('*',9)+SPACE(9)+REPLICATE('*',9)+CHAR(13)
+SPACE(1)+REPLICATE('*',47)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+SPACE(1)+REPLICATE('*',47)+CHAR(13)
+SPACE(2)+REPLICATE('*',5)+SPACE(7)+REPLICATE('*',21)+SPACE(7)+REPLICATE('*',5)+CHAR(13)
+SPACE(4)+REPLICATE('*',4)+SPACE(7)+REPLICATE('*',3)+SPACE(4)+REPLICATE('*',5)+SPACE(4)+REPLICATE('*',3)+SPACE(7)+REPLICATE('*',5)+CHAR(13)
+SPACE(7)+REPLICATE('*',2)+SPACE(7)+REPLICATE('*',1)+SPACE(6)+REPLICATE('*',3)+SPACE(6)+REPLICATE('*',1)+SPACE(7)+REPLICATE('*',2)

Который выполняется как динамический SQL, производя следующий вывод:

           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       *****
       **       *      ***      *       **
BradC
источник
5

PHP , 137 байт

<?=gzinflate(base64_decode(U1CAAy0FXECLC8YAAnQNyAJAwIVFIYSPRYgLLkWEYrByLS10WTwiXAgmcYCLRPV00kGyN6BhgB4eyABZjgstyqAsuDpU5YjEgJIOEKoQigE));

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

PHP , 177 байт

foreach(["9zojk",a2878,aa4nb,b7u9z,chbf3,eze2n,jz6rj,jz6rj,jz6rj,eze2n,cepdr,ako8z,a1pc1]as$v)echo$t=strtr(substr(base_convert($v,36,2),1),10,"* "),"* "[$k++<2],strrev($t),"\n";

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

PHP , 179 байт

for(;$o=ord(kAlgDjAbeDlCcFlCbIiDaWXXXaWbEgJdDgCdBgBgAfA[$i++]);($x+=$s)%24?:print$r.("* "[$k++<2]).strrev($r)."\n".$r="")$r.=strtr(str_repeat($b=+($o>96),$s=$o-64-$b*32),10," *");

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

Йорг Хюльсерманн
источник
Ваш первый пример нуждается в цитатах
Стивен Пенни
2
@ StevenPenny Нет, это не так. Проверили попробовать онлайн ссылку?
овс
1
@StevenPenny В этом случае PHP использует приведение несуществующих констант к строкам. Я только выдаю ошибку уведомления, которая разрешена в Codegolf. И пропущенный «=» в конце строки, закодированной в base64, будет добавлен автоматически
Jörg Hülsermann
4

Ява, 296 214 байт

Golfed:

()->{String r="";boolean b=1<0;for(int a:";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172".toCharArray()){for(int i=0;i<a-48;++i)r+=(b?'*':' ');if(a<49)r+='\n';else b=!b;}return r;}

Ungolfed:

public class InHonorOfAdamWest {

  public static void main(String[] args) {
    System.out.println(f(() -> {
      String r = "";
      boolean b = 1 < 0;
      for (int a : ";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172".toCharArray()) {
        for (int i = 0; i < a - 48; ++i) {
          r += (b ? '*' : ' ');
        }
        if (a < 49) {
          r += '\n';
        }
        else {
          b = !b;
        }
      }
      return r;
    }));
  }

  private static String f(java.util.function.Supplier<String> f) {
    return f.get();
  }
}

источник
Можно использовать ";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172"для данных, и в for(char a:x){a=(int)a-48; [...]основном это добавление 48 к каждому из чисел и преобразование их в эквивалентный символ ascii. Я верю, что это сэкономит вам 70-80 байт. Также я считаю, что жесткое кодирование данных в lamba также уменьшит количество байтов.
Волшебная Урна Осьминога
Также boolean b=false;может быть boolean b=1<0, или даже лучше, вы можете использовать, intа также объединить объявление для iв той же строке;).
Волшебная Урна Осьминога
1
@carusocomputing спасибо, я не думал об упаковке в строку. У вас было плохое значение Unicode, мне пришлось его регенерировать, и теперь вывод отображается правильно.
Поскольку вы не используете iв своем цикле for, я думаю, что вы можете использовать for(int i=0;i++<a-48;)как for-head.
Роман Греф
3

Жвачка , 75

xxd dump:

00000000: cd92 b501 8050 1043 fb4c 91fa efbf 1f0e  .....P.C.L......
00000010: 2f87 d371 5814 37d3 7c35 4d2b 1826 64f6  /..qX.7.|5M+.&d.
00000020: d8aa 419c 2a11 3e75 ce25 6d1e ee9d 22e0  ..A.*.>u.%m...".
00000030: bb11 f04f 0d7f 2e38 dfc8 6926 3dad 0871  ...O...8..i&=..q
00000040: f316 1071 6db8 fc07 a408 f7              ...qm......

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

Цифровая травма
источник
3

Coffeescript (282 байта)

t=['6bk','59mw','l2j3','2ghsf','4zg2n','9zldr','jz6rj','4u7zz','165qf','47wj']
[0,1,2,3,4,5,6,6,6,5,7,8,9].map((d)->parseInt(t[d], 36).toString(2).padStart 25, '0').forEach (d)->console.log (d+d.split('').reverse().join('').substring(1)).replace(/0/g, ' ').replace(/1/g,'*')

Объяснение (используя обычный ES6)

  • Как уже упоминалось, изображение симметрично, поэтому мы можем выбросить половину из него в кодировке
  • Несколько строк также повторяются, поэтому мы можем бросить каждую строку в таблицу поиска, чтобы сохранить несколько байтов
  • Мы преобразуем каждую половину строки в двоичную (используя 0 в качестве пробела и 1 в качестве *) и кодируем ее с наивысшим основанием в Javascript (36), что приводит к массиву кодирования.
  • Первая карта берет каждую строку и преобразует ее в свою конечную половину строки, дополняя ее нулями
  • Вторая карта объединяет каждую строку с ее обращенной половиной (бросая средний столбец во второй раз), и заменяет 0 и 1 на пробелы и * s

var t = [
    '6bk',
    '59mw',
    'l2j3',
    '2ghsf',
    '4zg2n',
    '9zldr',
    'jz6rj',
    '4u7zz',
    '165qf',
    '47wj'
];
[0,1,2,3,4,5,6,6,6,5,7,8,9].map((d) => {
    return parseInt(t[d], 36).toString(2).padStart(25, '0');
})
.forEach((d) => {
    console.log((d + d.split('').reverse().join('').substring(1))
        .replace(/0/g, ' ')
        .replace(/1/g, '*'));
});

cjbrooks12
источник
Классный ответ! Добро пожаловать на сайт! :)
DJMcMayhem
2

V , 102 байта

i±³ *±± 
³ *± ´*· 
´*±² ´*µ 
´*±² ¶*³ 
µ*¹ ¹*  
²´* Ä3o²µ*jo±±*· µ*  
³*´ ³*· ´*´ 
**¶ *· **· Îæ$vp

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

HexDump:

00000000: 69b1 b320 2ab1 b120 0ab3 202a b120 b42a  i.. *.. .. *. .*
00000010: b720 0ab4 2ab1 b220 b42a b520 0ab4 2ab1  . ..*.. .*. ..*.
00000020: b220 b62a b320 0ab5 2ab9 20b9 2a20 200a  . .*. ..*. .*  .
00000030: b2b4 2a20 1bc4 336f b2b5 2a1b 6a6f b1b1  ..* ..3o..*.jo..
00000040: 2ab7 20b5 2a20 200a b32a b420 b32a b720  *. .*  ..*. .*. 
00000050: b42a b420 0a2a 2ab6 202a b720 2a2a b720  .*. .**. *. **. 
00000060: 1bce e624 7670                           ...$vp

Это использует кодировку длины прогона, чтобы сгенерировать следующую половину Бэтмена:

             *           
   *          ****       
****            ****     
****            ******   
*****         *********  
************************ 
*************************
*************************
*************************
************************ 
***********       *****  
***    ***       ****    
**      *       **      

А затем переворачивает и дублирует каждую строку.

DJMcMayhem
источник
2

Python 2 , 134 байта

for w in'1D 4A13 4C4 6C4 995 O P P P O 57B 47343 27162'.split():r=''.join(c*int(k,36)for c,k in zip(3*'* ',w));print'%25s'%r+r[-2::-1]

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

Длина серии кодирует каждую строку из левой половины в базе 36. Зеркально отображает ее, чтобы получить полную строку, которая печатается. Ведущие пробелы не кодируются; вместо этого левая половина дополняется до длины 25.

XNOR
источник
Хотел бы я использовать этот трюк с
отступами
2

Mathematica 151 байт

Uncompress@"1:eJxTTMoPCm5iYmBQQAAtBVxAK8bA0AjGBgJ0PcgCQABXjaoWwsciBFWPXRKrEESHlha6AjwiYC1apAGQHhK10FsTOV6Chgp6CCEDZDlYdKKKw6WR+OjxD+KiJBSEQoR6AC49ZiI="

Дешево и не креативно. Строка только из встроенной Compressкоманды, используемой для требуемого вывода.

Обновить:

Я думаю, что я могу сделать лучше с помощью встроенных ImportString\ ExportStringфункций, но я не вижу, чтобы правильно скопировать и вставить полученные строки ExportString. Например

b = "           *                         *\n       ****          *     *          ****\n     ****            *******            ****\n   ******            *******            ******\n  *********         *********         *********\n ***********************************************\n*************************************************\n*************************************************\n*************************************************\n ***********************************************\n  *****       *********************       *****\n    ****       ***    *****    ***       ****\n       **       *      ***      *       **"
ExportString[b,"GZIP"]
ImportString[%,"GZIP"]

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

Ян Миллер
источник
2

удар ,407 322 байта

w=`yes 1|head -30|tr -d '\n'`
for i in B1C000 74A120 54C003 36C003 299004 1C0506 0D0506 0D0506 0D0506 1C0506 257505 447342 727161
{ read a b c d e f <<<$(echo $i| fold -1| xargs)
x=`printf "%.$[0x${a}]d%.$[0x${b}]s%.$[0x${c}]d%.$[0x${d}]s%.$[0x${e}]d%.$[0x${f}]s" 0 $w 0 $w 0 $w`
echo -n $x$[f<1?0:1]
rev<<<$x
}|tr 01 \ \*

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

действительно ужасно, нужно больше времени или помощь в игре в гольф. он генерирует выходные данные с 0 по 1 и транслитерирует в конце. Закодированный в шестнадцатеричном формате цифры 0 и 1, при этом последняя цифра 0 для первых двух строк задается как флаг для вывода среднего столбца. Использует printf pressision для ввода цифр или строк для вывода 0 и 1. думаю, что %.$[0x${X}]Cшаблон можно использовать для игры в гольф.

w=`yes 1|head -30|tr -d '\n'`  # w=111111111111111111111111111111   
for i in B1C000 74A120 54C003 36C003 299004 1C0506 0D0506 0D0506 0D0506 1C0506 257505 447342 727161
{ read a b c d e f <<<$(echo $i| fold -1| xargs)
printf "%.$[0x${a}]d
%.$[0x${b}]s
%.$[0x${c}]d
%.$[0x${d}]s
%.$[0x${e}]d
%.$[0x${f}]s" 0 $w 0 $w 0 $w
echo -n $[f<1?0:1]
printf "%.$[0x${f}]s
%.$[0x${e}]d
%.$[0x${d}]s
%.$[0x${c}]d
%.$[0x${b}]s
%.$[0x${a}]d\n" $w 0 $w 0 $w 0 
}|tr 01 \ \*
marcosm
источник
2

Python 3, 232 197 183 164 байта

Еще один ответ Python. Нет скучного кода сжатия, хотя. Захватывающий код сжатия.

for s in map(lambda x:x+x[-2::-1],b".$; *',$' ('.* &).* %,+, $R #T #T #T $R %()8 '')&&( *%)$(&".split()):print(*((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2)))

Я использую магическое число 35, потому что таким образом никакие управляющие символы, пробелы или вещи, которые должны быть экранированы, не происходят. Грустно, что мне приходится обрабатывать пространства и звезды отдельно, это стоит мне немного.

Ungolfed:

for s in map(lambda x:x+x[-2::-1],   # map a list to the list and itself reversed,
                                     # minus the last (center) element
# magic string:
".$; *',$' ('.* &).* %,+, $R #T #T #T $R %()8 '')&&( *%)$(&"
.split()):                           # split on whitespace to divide into lines
 print(*(                            # unpack generator expression
(ord(s[i])-35)*" "                   # convert character to int, -25, times space
+(ord(s[i+1])-35)*"*"                # same thing with "*"
for i in range(0,len(s)-1,2)))       # for every pair in the list
L3viathan
источник
Этот метод кодирования лучше, чем базовый 36. Надеюсь, вы не возражаете, что я адаптировал его для своего последнего решения. ;) Есть несколько вещей, которые вы можете сделать, чтобы уменьшить количество байтов. 1 Вы можете сохранить байт, поместив printвызов на ту же линию, что и for. 2 Если вы используете bytesстроку, вы можете избавиться от этих ordвызовов. 3 Вы можете заменить range, переместившись через пару итераторов. Вот генератор , который сочетает в себе обе эти идеи: ((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2)). Эти изменения
снизят
@ PM2Ring Я совсем не против. Собираетесь в отпуск на несколько недель, так что не стесняйтесь редактировать свои изменения.
L3viathan
О хорошо Но я позволю тебе сделать новую версию без игры в гольф.
PM 2Ring
@ PM2Ring уже в автобусе, так что я просто надеюсь, что кто-то еще одобрит это
L3viathan
2

PowerShell, 305 байт, 307 байт , 316 байт

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')),0,102),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

Может быть, кто-то еще может помочь мне сократить его дальше, хотя я не могу понять, как, если нет более краткого способа определения ускорителя нестандартного типа.

Изменить: сокращенная версия (спасибо @root). Кодированная строка (кодирование до base64) может быть урезана на восемь позиций массива, и, таким образом, диапазон может быть уменьшен. Не уверен, почему StreamWriter вводит этот раздув в MemoryStream. Понимание основного поведения будет оценено.

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg')),0,94),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

Ungolfed:

#Read decoded stream 
[IO.StreamReader]::new(
    (
        #Reverse GZip encoding
        [IO.Compression.GZipStream]::new(
            #Load GZip encoded string into a memory stream
            [IO.MemoryStream]::new(
                (
                    # Convert Base64 back to GZip encoded string
                    [Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')
                ),
                #Start of range
                0,
                #End of range. Stick the Memory Stream into a variable and use .Length here for non golf code
                102
            ),
            #Specify that we are decompressing
            [IO.Compression.CompressionMode]::Decompress
        )
    )
).ReadToEnd()

Код сжатия:

$s = '           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       ****
       **       *      ***      *       **'

#Create Memory Stream
$ms = [IO.MemoryStream]::new()
#Initialize a stream
$sw = [IO.StreamWriter]::new(
    #Create GZip Compression stream
    [IO.Compression.GZipStream]::new(
        #Reference Memory Stream
        $ms,
        #Set mode to compress
        [IO.Compression.CompressionMode]::Compress
    )
)
#Write input into stream
$sw.Write($s)
#Close the stream
$sw.Close()

#Convert Array to Base64 string
[Convert]::ToBase64String(
    #Retrieve Memory Stream as an array
    ($ms.ToArray() | select -SkipLast 8)
)
Chirishman
источник
1
Почему 102? 99 работает так же,[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')),0,102),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()
root
@ Корень, да, но я не уверен, почему это работает. Вы можете уменьшить его на восемь до 94 и удалить последние восемь символов кодированной входной строки. Мне трудно понять, почему это работает, и я не хочу добавлять его в свой ответ, пока не сделаю. Моя функция сжатия ошибочно добавляет какие-то посторонние отступы?
Киришман
1
Из вашего кода сжатия последние два значения $ms.ToArray()равны 0. Они необходимы?
root
Нет. И пробуя разные входные строки, кажется последовательным, что в конце находятся ровно две ненужные позиции массива. Я добавлю предложение, чтобы пропустить последние два в моем сценарии сжатия. Все еще жаль, что я не знал, почему потоковый автор добавляет нули в конец
Chirishman
1
Вы правы, это больше, чем просто 2 хвостовых символа, это 8. Последние 8 позиций в массиве ('225','193','82','192','106','2','0','0')могут быть удалены для создания H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg==. Я не понимаю, откуда они.
root
2

Perl 5, 168 байт

$_="11 *25 
7 4*10 *5 *10 4
5 4*12 7*12 4
3 6*12 7*12 6
2 9*9 9*9 9
 47
49
49
49
 47
  5*7 21*7 5
4 4*7 3*4 5*4 3*7 4
7 **7 *6 3*6 *7 *";s/$/*/gm;say s/\d+(.)/$1x$&/ger

Обратите внимание на завершающий пробел в конце только первой строки. Требуется -M5.01, что бесплатно.

Вероятно, можно играть в гольф немного больше.

msh210
источник
2

LaTeX, 314 байтов

\documentclass{book}\begin{document}\def\r#1#2{\ifnum#2>64#1\r#1{\numexpr#2-1}\fi}\catcode`.13\catcode`!13\catcode`-13\def!#1{\r*{`#1}}\def-#1{\r~{`#1}}\let.\par\tt-K!A-Y!A.-G!D-J!A-E!A-J!D.-E!D-L!G-L!D.-C!F-L!G-L!F.-B!I-I!I-I!I.-A!o.!q.!q.!q.-A!o.-B!E-G!U-G!E.-D!D-G!C-D!E-D!C-G!D.-G!B-G!A-F!C-F!A-G!B\enddocument

Нежелательная версия с объяснениями:

\documentclass{book}
\begin{document}
% Macro for repeating #1 (#2-64) times
\def\r#1#2{\ifnum#2>64#1\r#1{\numexpr#2-1}\fi}
% Prepare '.', '!' and '-' for usage as macro names
\catcode`.13\catcode`!13\catcode`-13
% The ASCII code of #1 (a character) is used as the number of how often '*' will be printed with \r
\def!#1{\r*{`#1}}
% Same as ! but for spaces
\def-#1{\r~{`#1}}
% . becomes a line break
\let.\par
% Set monospace font
\tt
% And finally print the whole thing
-K!A-Y!A.-G!D-J!A-E!A-J!D.-E!D-L!G-L!D.-C!F-L!G-L!F.-B!I-I!I-I!I.-A!o.
!q.!q.!q.-A!o.-B!E-G!U-G!E.-D!D-G!C-D!E-D!C-G!D.-G!B-G!A-F!C-F!A-G!B
\enddocument
Сиракуза
источник
2

C # (.NET Core) , 342 333 328 185 175 байтов

_=>{var r="";for(int i=0,j,k=0;i<63;i++)for(j=0;j++<"-#;#4&,#'#,&.&.).&*(.).('+++++%Q#µ#Q%')7)'(&)%&'&%)&-$)#(%(#)$)"[i]-34;){r+=i%2<1?' ':'*';if(++k%49<1)r+='\n';}return r;}

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

Много байтов сохранено после изменения подхода. Взяв чертеж в качестве 2D-массива, я рассчитал кодировку RLE по файлам:

{ 11, 1, 25, 1, 18, 4, 10, 1, 5, 1, 10, 4, 12, 4, 12, 7, 12, 4, 8, 6, 12, 7, 12, 6, 5, 9, 9, 9, 9, 9, 3, 47, 1, 147, 1, 47, 3, 5, 7, 21, 7, 5, 6, 4, 7, 3, 4, 5, 4, 3, 7, 4, 11, 2, 7, 1, 6, 3, 6, 1, 7, 2, 7 }

Нечетные индексы обозначают s, а четные - *s. Затем я заменил каждое число на печатное представление ASCII (принимая символ «#» за 1), и я получил:

-#;#4&,#'#,&.&.).&*(.).('+++++%Q#µ#Q%')7)'(&)%&'&%)&-$)#(%(#)$)

Таким образом, алгоритм просто вычисляет чертеж, распаковывая эту строку и добавляя новые строки в нужных местах.

Чарли
источник
1
Нет необходимости устанавливать lпеременную, просто используйте ее в цикле напрямую. .ToString(i, 2)-> .ToString(i,2)т.е. удалить пробел.
TheLethalCoder
Можете ли вы сохранить байты с десятичным или научным ( 1e10) представлениями для этих чисел? Этот вызов на самом деле полезен здесь.
TheLethalCoder
@TheLethalCoder Нету. Я только что проверил (кстати, впечатляющая задача), и я уже использую наименьшее представление, так что не повезло. Я даже пытался найти наибольший общий делитель между ними, чтобы посмотреть, смогу ли я разделить числа на константу, но, очевидно, это 1.
Чарли
2

PowerShell , 129 128 байтов

-join('5+C+<.4+/+4.6.616.206160/33333-Y+s*t+Y-/1?1/0.1-./.-1.5,1+0-0+1,'|% t*y|%{(' ','*')[$i++%2]*($_-42)})-split'(.{49})'-ne''

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

Ungolfed:

-join(
    '5+C+<.4+/+4.6.616.206160/33333-Y+s*t+Y-/1?1/0.1-./.-1.5,1+0-0+1,'|% toCharArray|%{
        (' ','*')[$i++%2]*($_-42)
    }
)-split'(.{49})'-ne''

Выход:

           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **

Основная идея очень проста

Кодирование эмблемы:

  1. Объединить все строки эмблемы в одну строку
  2. Считать пробелы и звездочки
  3. Кодировать длину каждого сегмента + 42 как символ

Расшифровка (этот скрипт):

  1. Получите код символа минус 42 для каждого символа из строки криптографии. Это длина отрезка
  2. Добавить сегмент, состоящий из пробела или звездочки, повторенных Lengthраз
  3. Вставьте новую строку каждые 49 символов, чтобы разделить строки

Некоторые умные вещи

  1. Алгоритм кодирования предлагает символ с кодом 189 для отображения 3 средних звездочек. Этот символ не является ASCII. Он работает нормально в современных средах, но есть неоднозначности с длиной скрипта. Итак, я заменяю не-ascii-символ ½на s*t(73 звездочки, 0 пробелов, 74 звездочки).
  2. Я вырезал правильные пробелы в последней строке, чтобы сохранить 1 байт. Извини, Бэтмен.
  3. Почему смещение составляет 42? Просто хотел :) И крипто-строка выглядит красиво.

Дополнительно: Scipt для кодирования эмблемы

(@"
           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       
"@ -replace"`n"-split'( +|\*+)'-ne''|%{[char]($_.Length+42)})-join''
Mazzy
источник
1

Mathematica, 271 байт

T=Table;f[x_]:=""<>T["*",x];m={f@49};n={f@47};g[y_]:=""<>T[" ",y];k[a_,b_,c_,d_,e_]:={(s=f@a<>g@b<>f@c<>g@d<>f@e)<>StringDrop[StringReverse@s,1]};Grid@{k[1,13,0,0,0],k[4,10,1,3,0],k[4,12,0,0,4],k[6,12,0,0,4],k[9,9,0,0,5],n,m,m,m,n,k[5,7,0,0,11],k[4,7,3,4,3],k[2,7,1,6,2]}
J42161217
источник
1

Braingolf , 590 580 579 577 428 423 312 байт

-111 байт, потому что LeakyNun - бог игры в гольф

14#
46*6394943[92+.6,5][8]#.[# ]#*[# ]#*#
[# ][#*][# ]#*[# ]#*[# ]#*...#
[# ][#*][# ][#*][# ]#*...#
# ..[#*][# ][#*][# ][#*]#
# .[#*][# ][#*][# ][#*]#
# [#*]#
&@#0[#*]#
!&@!&@# &@#.[#*]"
  "&@4645*643646366556[#*][# ][#*][# ][#*]"
    "[#*][# ]#*..# ...[#*]# ...#*..[# ][#*]#
[# ]#*.[# ]#*[# ]#*..[# ]#*[# ]#*.&@

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

Braingolf не хорош в искусстве ASCII, но, черт возьми, я пытался.

Ни в коем случае я не объясняю этот кластер **

Skidsdev
источник
1

/// , 171 166 байт

5 байтов сохранено, потому что я использовал \r\nв источнике, смеется.

/-/  //,/!!//'/**//&/*"//%/--//#/,,,,,!*//"/%-//!/''/"% &""" *
" !"%*% &%!
% !""!'&"!
- !*&"!'&"!'
-,&- ,&- ,*
 #'
!#
!#
!#
 #'
-!& ,,!& !*
%!" '*%!*%'& !
" *& &'&& '

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

Сжатие с использованием последовательных итераций замены «наиболее экономичных» подстрок одним символом. Это почти оптимально, хотя может иметь место одна из двух вещей:

  1. Я мог бы избежать использования некоторых мета-замен (например, динамически вставлять регулярные выражения)
  2. Как-то выгоднее сначала заменить менее экономичные подстроки (маловероятно).
Конор О'Брайен
источник