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


90

Адам Вест помер, і я хотів би вшанувати його пам’ять тут на PPCG, хоча я сумніваюся, що він знав про наше існування. Хоча є багато, багато різних речей, якими відомий цей чоловік, жодна не є більш помітною, ніж його роль оригінального Бетмена. Я завжди пам’ятаю свого вітчима, який донині спостерігає за Бетменом та Робіном зі старої школи. Цей виклик спрощений за своєю суттю, зовсім не відповідає складній людині, якою був Адам Уест. Однак це найкраще, що я міг придумати, оскільки це найпомітніший образ кар’єри чоловіка.


Я хотів опублікувати це раніше, але чекав, коли хтось придумає щось краще.


Виведіть наступне (з або без пробілів / нових рядків):

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

Це , виграє найнижчий байт.


7
Вам слід заборонити закодовані рядки. Це справді не весело!
серхіол

7
Він не був оригінальним Бетменом. Ця честь належить Льюїсу Вілсону.
Кудлатий

42
Побачивши заголовок, я подумав, що вихід буде "на-на-на-на-на-на-на-на-на-на-на-на-на-на-на-на".
D Крюгер

3
@DKrueger: зробіть так у іншому запитанні :)
Олів'є Дулак

4
Чому це не стартувало минулого року? Керрі Фішер, Принц, Девід Боуі та Алан Рікман!
caird coinheringaahing

Відповіді:


47

Желе , 44 байти

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

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

Як це працює

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

Це числовий літерал. На кодовій сторінці Jelly всі символи замінюються їхніми індексами на основі, результат інтерпретується як біжективне ціле число бази-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 байти ...
Ерік Аутгольфер

Я спробував, як 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
Це жахливо. Я це люблю.
TheWanderer

25
Хм. Так. Дуже добре, але я думаю, ви забули підкреслення на рядку 1.
Mateen Ulhaq

2
Чи є спосіб ми перевірити це?
Кудлатий

4
@ Вітаємо Вас у PCCG! ми дійсно не конкуруємо на цьому сайті, звичайно, це не виграшне рішення, але його веселе та тематичне виклик, тож воно отримує перевагу, щоб більше людей могли насолоджуватися ним. Сподіваємось, що незабаром піднесуть ваші відповіді!
Уріель


67

Пітон, 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)

5
О, пане, я не так довго сміявся. NAanANANaNANaNAANnAnaNANanaNA
Magic Octopus Urn

9
У коді гольфу, ми повинні зробити кількість байтів невеликою, але ваш запис досить здоровенний . ;)
PM 2Ring

34
Іноді треба жертвувати заради більшого блага.
rrauenza

1
Це звучить як би щось сказав Бетмен. ;) Я мушу визнати, що мене B.pop(0)трохи дратує. Чому б не повернути назад, Bщоб ви могли використовувати набагато ефективніший (і коротший) B.pop()? pop(0)Повинен перемістити всі інші елементи списку на одну позицію вниз. Звичайно, це трапляється зі швидкістю С, але це все ще менш ефективно, ніж спливання з кінця струни.
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))

Демо


12

Пітон, 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
Uriel

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 атм, щоб перевірити, чи справді це коротше ...
Денніс

@Dennis Це виглядає перспективно. За допомогою набору [1:24 99]я видалив один байт . Якщо я використовую [0:24](база 25), я не знаю, як перетворитись 0на 99кілька байтів
Луїс Мендо

1
Право Y|не працює в MATL / Octave, як це робиться в Jelly / Python. В останньому 0 or 99врожайність 99 ...
Денніс

7

05AB1E , 47 байт

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

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


Перенесений алгоритм Денніса так?
Ерік Аутгольфер

@EriktheOutgolfer: Позичені у replace 99 trickнього (збережено 4 байти прямим прямим шляхом). Все ж шукаю кращого шляху.
Емінья

-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 для зручності Спробуйте в Інтернеті! , який справді використовує езоланг, про який я писав, але це (в основному) назад сумісний у будь-якому випадку. -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 збережено 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 Мені справді потрібно навчитися Вугільному вугіллю (також Гексагонія та Кубікс). Три мої улюблені мови програмування я бачу тут. Btw, я думаю, ви вже планували, але ви могли б додати пояснення?
Kevin Cruijssen

@KevinCruijssen Хм, я думаю, навіть багатослівний код потребує певного уточнення ... цього достатньо?
Ніл

Ах, я не помітив, щоб TIO містив багатослівну версію tbh. Але, тим не менш, пояснення у самій відповіді ніколи не шкодить, тому дякую, що знайшли час, щоб її написати.
Kevin Cruijssen

Я хочу вивчити вугілля, але йому потрібна сторінка на зразок 05AB1E, яка пояснює, що насправді робить кожен знак кодової сторінки, не занурюючись у код.
Чарівний восьминога Урна

2
@carusocomputing Це не так вже й погано: крім стислих рядків, у вас є звичайні рядки (символи ASCII та стовпчик), цифри (надстрокові цифри), стрілки (... стрілки), команди (зазвичай великі літери повної ширини) та оператори (все інше), тож ви зможете шукати їх на відповідній сторінці вікі.
Ніл

6

Clojure, 833 437 байт

Майже за визначенням Clojure ніколи не виграє жодних призів за стислість, але, як я з нетерпінням чекав КОЖНОГО ДОРОГО ТИЖНЯ на ДВОХ (рахуйте їх - ДВА ) епізоди Бетмена (той самий Bat-time, той же Bat-канал!), Зрозуміло, що існує немає часу втрачати!

Швидко, Робін - до Бат-ВІДПОВІДА !!!

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

RIP Адам Вест. Якими б смішними не були ці виступи, ті з нас, хто були дітьми, вітають вас.


Хоча він не займається гольфом, він все ще б'є котячу відповідь хе.
Чарівний восьминога Урна

Додана версія для гольфу. Я б повернув її набік, щоб було схоже на те, що це лізти по стіні, якби я міг. :-)
Боб Джарвіс


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 цього шаблону життя , деякі програми життєдіяльності (включаючи Golly) можуть завантажувати шаблони життя з PNG та різних інших форматів файлів зображень.


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, даючи такий вихід:

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

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

Java, 296 214 байт

Гольф:

()->{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;}

Безумовно:

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 char. Я вірю, що це заощадить 70-80 байт. Також я вважаю, що жорстке кодування даних у ламбі також зменшить байти.
Magic Octopus Urn

Ви також boolean b=false;можете бути boolean b=1<0, а ще краще, ви можете використовувати intі також комбінувати декларацію для iтого ж рядка;).
Чарівний восьминога Урна

1
@carusocomputing спасибі, я не думав про упаковку в рядок. У вас було якесь погане значення Unicode, я повинен був відновити його, і вихід відображається правильно.

Оскільки ви не використовуєте iдля свого циклу, я думаю, ви можете використовувати for(int i=0;i++<a-48;)як for-head.
Роман Ґраф


3

Кофескрипт (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
  • Друга карта поєднує кожен рядок із його перевернутою половиною (підкидає середній стовпчик вдруге) і замінює 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, '*'));
});


Класна відповідь! Ласкаво просимо на сайт! :)
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

При цьому використовується кодування довжини пробігу для створення наступної половини Бетмена:

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

А потім перевертає та дублює кожен рядок.


2

Пітон 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.


Я б хотів, щоб я міг використати цей хитромудрий трюк у своїй версії ...
PM 2Ring

2

Математика 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

Bash ,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 an 1 і транслітерує в кінці. Зашифровані в шістнадцятковій частині цифри суми 0 і 1, обережно, щоб остання цифра 0 для перших двох рядків була як прапор для виведення середнього стовпця. Використовує натискання printf або на цифру, або на рядок, щоб вивести 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 \ \*

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

Безумовно:

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

Цей метод кодування кращий, ніж базовий 36. Я сподіваюся, ви не заперечуєте, що я адаптував його для мого останнього рішення. ;) Є кілька речей, які можна зробити, щоб зменшити кількість байтів. 1 Ви можете зберегти байт, поставивши printдзвінок у ту саму лінію, що і for. 2 Якщо ви використовуєте bytesрядок, ви можете позбутися цих ordдзвінків. 3 Ви можете замінити на rangeблискавку через пару ітераторів. Ось генератор , який поєднує в собі обидві ці ідеї: ((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2)). Ці зміни приведуть ваш рахунок до 164.
PM 2Ring

@ 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). Кодована рядок (до базового кодування 64) може бути оброблена вісьмома позиціями масиву, і діапазон може бути зменшений. Не впевнений, чому StreamWriter вводить цей процес у MemoryStream. Розуміння основної поведінки було б вдячно.

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

Безумовно:

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

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. Чи потрібні вони?
корінь

Ні. І намагаючись різних вхідних рядків, здається, що це точно два непотрібні положення масиву на кінці. Я додам пункт пропустити останні два до мого сценарію стиснення. Все ще хотілося б, щоб я знав, чому письменник потоку додає нулі до кінця
Chirishman

1
Ви маєте рацію, це більше, ніж лише 2 хвостових символи, це 8. Останні 8 позицій у масиві ('225','193','82','192','106','2','0','0'), можна видалити для створення H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg==. Я не розумію, звідки вони беруться.
корінь

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, що безкоштовно.

Можливо, може бути гольф зовсім трохи більше.


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

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

Багато байтів збережено після зміни підходу. Приймаючи креслення як двовимірний масив, я обчислив кодування 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 nope. Я щойно перевірив (до речі, вражаючий виклик) і вже використовую найменше представлення, тому не пощастить. Я навіть намагався знайти найбільшого спільного дільника між ними, щоб побачити, чи можу я розділити числа на постійну, але це очевидно 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''

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

Безумовно:

-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 для кожного діаграми з рядка cripto-string. Це довжина відрізка
  2. Додайте відрізок, що складається з пробілу або зірочки, повторного Lengthразу
  3. Вставте новий рядок кожні 49 символів, щоб розділити рядки

Деякі розумні речі

  1. Алгоритм кодування пропонує символ з кодом 189 для відображення 3 середніх рядків зірочки. Цей символ не є ASCII. Це працює нормально в сучасних умовах, але існують неоднозначності із довжиною сценарію. Отже, я замінюю символ, що не містить асції, ½на s*t(73 зірочки, 0 пробіли, 74 зірочки).
  2. Я вирізав правильні пробіли в останньому рядку, щоб зберегти 1 байт. Вибач, Бетмен.
  3. Чому зсув дорівнює 42? Просто хотів :) І крипто-струна виглядає приємно.

Додатково: Швидке кодування емблеми

(@"
           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       
"@ -replace"`n"-split'( +|\*+)'-ne''|%{[char]($_.Length+42)})-join''

1

Математика, 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]}

1

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

-111 байт, тому що LeakyNun - це бог у гольфі

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

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

Брайнгольф не добре в мистецтві ASCII, але, чорт забираю , я намагався.

Я ні в якому разі не пояснюю цей кластер ** k


1

/// , 171 166 байт

5 байт збережено, тому що я використовував \r\nу джерелі, lol

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

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

Стискається за допомогою послідовних ітерацій заміни "найекономічніших" підрядів одним символом. Це майже оптимально, хоча одна з двох речей може бути так:

  1. Я міг би піти з використанням мета-замін (наприклад, динамічно вставляти регулярні вирази)
  2. Якось вигідніше спочатку замінити менш економічні підрядки (навряд чи).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.