Виведіть повідомлення Arecibo


38

Повідомлення Arecibo - це міжзоряне радіозв'язок 1974 року, що містить основну інформацію про людство та Землю, надіслане кульовому зоряному кластеру M13 з надією, що позаземна розвідка може отримати та розшифрувати ... Повідомлення складалося з 1679 двійкових цифр, приблизно 210 байт ...

Число 1679 було обрано тому, що воно є напівприкметником (добуток двох простих чисел), розташоване прямокутно у вигляді 73 рядів на 23 стовпчики. Альтернативне розташування, 23 рядки на 73 стовпці, створює нерозбірливий набір символів (як і всі інші формати X / Y).

Повідомлення Аресібо

Це повідомлення з доданим кольором, щоб виділити його окремі частини. Фактична двійкова передача не мала кольорової інформації.

Джерело: Вікіпедія


Ваше завдання - вивести повідомлення Arecibo у точному розташуванні 23x73, зображеному на зображенні. Будь-який із цих форматів виводу прийнятний:

  • Текст, використовуючи один символ для символів, а інший для нулів (використовуючи звичайні правила для розділення рядків)
  • 2D масив з двох різних значень
  • Зображення розміром 23x73 з двома різними кольорами
  • Аан безперебійного потоку 1679 предметів з двома різними значеннями (тобто будь-якого з перерахованих вище форматів, але плоского.)
  • Ціле число 1679 біт. Укажіть порядок розрядів і байтів (нестабільність) у своєму рішенні.

Для вашої зручності, ось версія для копіювання (також приклад виводу у текстовому форматі):

00000010101010000000000
00101000001010000000100
10001000100010010110010
10101010101010100100100
00000000000000000000000
00000000000011000000000
00000000001101000000000
00000000001101000000000
00000000010101000000000
00000000011111000000000
00000000000000000000000
11000011100011000011000
10000000000000110010000
11010001100011000011010
11111011111011111011111
00000000000000000000000
00010000000000000000010
00000000000000000000000
00001000000000000000001
11111000000000000011111
00000000000000000000000
11000011000011100011000
10000000100000000010000
11010000110001110011010
11111011111011111011111
00000000000000000000000
00010000001100000000010
00000000001100000000000
00001000001100000000001
11111000001100000011111
00000000001100000000000
00100000000100000000100
00010000001100000001000
00001100001100000010000
00000011000100001100000
00000000001100110000000
00000011000100001100000
00001100001100000010000
00010000001000000001000
00100000001100000000100
01000000001100000000100
01000000000100000001000
00100000001000000010000
00010000000000001100000
00001100000000110000000
00100011101011000000000
00100000001000000000000
00100000111110000000000
00100001011101001011011
00000010011100100111111
10111000011100000110111
00000000010100000111011
00100000010100000111111
00100000010100000110000
00100000110110000000000
00000000000000000000000
00111000001000000000000
00111010100010101010101
00111000000000101010100
00000000000000101000000
00000000111110000000000
00000011111111100000000
00001110000000111000000
00011000000000001100000
00110100000000010110000
01100110000000110011000
01000101000001010001000
01000100100010010001000
00000100010100010000000
00000100001000010000000
00000100000000010000000
00000001001010000000000
01111001111101001111000

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

Щасти!

ОНОВЛЕННЯ: Я прийняв відповідь 05AB1E, оскільки перше було коротшим, ніж оригінальне повідомлення. Не дозволяйте це відвернути вас від нових рішень.

ОНОВЛЕННЯ 2019-09-09: Прийнята відповідь перенесена на нову відповідь 05AB1E, оскільки вона застаріла попередню відповідь 05AB1E. Те саме стосується попереднього оновлення; нові рішення все ще вітаються.


9
Якщо в мові є вбудоване повідомлення для Аресібо, я можу з усією впевненістю сказати, що я бачив усе на цьому світі c:
Luis felipe De jesus Munoz

6
Mathematica (IIRC) має вбудований образ для Лени, тож мене не здивує, якщо у нього також є повідомлення Aricebo.
Beefster

@RobertS. ні, тому що крім тексту є інші допустимі формати.
Beefster

4
У дусі оригінального формату слід дозволити рівний результат / результат. Вся суть 1679 біт полягає саме в тому, що з належної кількості рядків і стовпців можна зробити висновок про довжину сигналу.
Адам

4
@LuisfelipeDejesusMunoz Mathematica має вбудований для визначення козлів на малюнку , тож вбудоване повідомлення Arecibo мене теж не здивує .. Ця мова побудована на побудовах всесвіту ..>.>
Кевін Круїйсен

Відповіді:


2

05AB1E , 182 байти

•sv¯ö¨₁ÿ.ÛïžôΔ¨γ_Ígv…=Bм„Ð.(ܦi´…ε±G½0^/₃öRÛž¼¤"āêL!ˆ6‘Gā܇ðв₁÷Ã7€₂䬂Cć¨g¾†@÷[_-68¯a∍iG*6ÆîÆ;>éjζãÎÂ+ºžnî¼ć'(ÝÞΔ‹∞ÉݹÕ5λ₆*a|§oÄmôæ¨;—:hž¥ð¢ocË'¨%¡4Ćáß©ìća;FÁ?iˆèεƒʒ•Ž6–FD4‰`3ÊD?i-

Спробуйте в Інтернеті! (використовує 1для 0 і 0для 1, як це дозволяє питання).

Спробуйте в Інтернеті! (На 5 байт довше, 0на 0 і 1на 1, додані нові рядки для читабельності).

Більша частина коду - це ціла константа N-255, решта - це декодер асиметричної чисельної системи , використовуючи твердо кодовані ймовірності 75% / 25% (фактична частота 0 становить 76,35%, що наближається до 75%, що це врятувало б лише 1,2 біта на корисному навантаженні, тоді як приємний і круглий 75% дозволяє нам зберегти кілька байтів у декодері).

Ž6–F                  # repeat the following 1679 times:
    D                 #  duplicate N
     4‰`              #  divmod 4: pushes N / 4, N % 4 on the stack
        3Ê            #  is N % 4 != 3 ? (boolean 1 or 0)
          D?          #  print a copy
            i-        #  if it's 1, subtract: N = N - (N / 4)
                      #  (otherwise, N = N / 4, since that's the top of the stack)

Ось кодер ANS, який генерував константу: Спробуйте це в Інтернеті!

Î                          # start from N = 0
 Rv         ]              # for each bit in the reversed input:
   4*                      #  N *= 4
     yi                    #  if the bit is 1:
       3+                  #   N += 3
         ë                 #  else:
          3÷               #   N /= 3 (integer division)
             ₅B'•.ø        # compress N as base-255

Гарна робота щодо застарівання попередньої відповіді 05AB1E!
Beefster

13

05AB1E , 215 210 200 байт

Збережено 15 байт завдяки чарівної урни восьминога

•cOž¤4é57ñΛ\Ö₃BαöĀíL½₅üBdoÙRθLγ¨G×Tćú$G(˜ƒ¦!€R»SDrµCnJ†d∊ζ·<8‡T@|‹ï=BζćósxG\ÙÎ$¿o₁5/ÔŸÇBûXé-”a::Ž]°∊y;ζ]MÜβ‘иL”β{üÃÇíäc€÷›ÎU=}¨иaŸdY`»¾ÚUβ:ô©¦β†₅DGŠβ3Jêθ,äá!ícqšVÖ›lÈΣ¯pε €êʃDpÙ/¬Žλ8:ãÿ3=€.Þć•3BY¾4×:

Спробуйте в Інтернеті! або з додатковим форматуванням

Base-255 - закодована тринарна рядок із входженнями, 0000заміненими на 2.


@MagicOctopusUrn: Дякую! Це робить 210 рівним :)
Emigna

Насправді навіть краще, якщо ви заміните 0000на 2ще 9 байт. - pastebin.com/aZ6tHxjx для 201
Чарівний восьминіг Урна

@MagicOctopusUrn: Так, я це також знайшов і збирався опублікувати це :)
Emigna

2
Класно! Оскільки повідомлення Arecibo становить 210 байт (23 * 73/8 = 209,875), ваше рішення (наразі на 200 байт) коротше, ніж саме повідомлення!
JL

Я пішов вперед і зробив це прийнятою відповіддю, оскільки це було першим, який був коротшим, ніж саме повідомлення.
Beefster

11

Java, 688 678 590 379 361 байт

Повертає рядок.

n->new java.math.BigInteger("in95mzupnpa2r0khpoepyql6ioqyn413avucdtfay6indx4wh9dehe3sn18klobtf4z9g9q17umqmwpegr2khb5eqinn7azl4jpfp2a8eui0xfrx5qwrou6gd65jh4ge3ls14k5lu7qrvmg6942ms29u5rb8fa6yrdhfoh5zoi9bdi7uh5ig0u0ff9kounth8sh357x7qox4m3oqviqsbrvakonbka4ahp21bgzi5v1akzzuqoncszhpabbru9q1uo2g11zr73iuyiqr5ikr69zn7cdv7e1lhd6ese9",36).toString(3).replace("2","0000")

-10 байт, повернувши необроблений потік (стара відповідь)
-88 байт, використовуючи числові цифри базових 10 (спасибі @ceilingcat!)
-211 байт (я знав, що це може бути гольф!), Використовуючи BigInteger, кодований базою-36 (спасибі @JollyJoker) !)
-18 байт, використовуючи інше закодоване ціле число (ще раз дякую @JollyJoker)

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

Пояснення:

n->new java.math.BigInteger("base36 string",36) // Decode the base-36 integer.
   .toString(3)                                 // Re-encode as ternary
   .replace("2","0000")                         // Replace 2 with "0000"
                                                // Implicit return

1
Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Адам Лір

9

Желе , 213 байт

“H²ɓ¶Ṡḷ€ẹ]ƒf*ḳḢ&ƁṇOḥ{ḄṫwỊ+oLạʋߢH9¢¹÷ỴɗÇ⁶ƲƙæḊẋ3³=1!VƇƁ'D⁺3Ỵɱ©⁵%fȯez#ƈjƒżṆo.ZF⁶ċṢ⁶ọṛb9Ȯƒd?ƁUĠt4ẇ,ḞġƒµƭfʠƁP§÷øȤŻPɲẋ(¢ß¢(⁽3¶ṙėɗy@ṁYȮL~e⁷ƤĊ§nỊṅµṠ°@7ẠB>Ġ⁻İ}uy¡½:esOpḢt}qS©HÞṬĖṛṇḣ9÷;ESḢ,Ẉ^ṙpƲ©tṃwçnẒṆ¡⁻Jıƒị£-&Ɱ*ẋʂżoȯÑḢɼ’

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

Я розігрувався з кодуванням Хаффмана, але покращення розміру даних переважило додатковий код. Таким чином, це просто бажана версія 250 кодованої версії. Вихід складається з цілого числа, яке при розшифровці як біективної бази 2 дасть 1D-список 1s і 2s. Дякуємо @Emigna за вказівку на зміну правил.

Спробуйте в Інтернеті - з подальшим розшифруванням, щоб продемонструвати вихід!

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


7

Brainfuck, 2360, 2008, 1938 байт

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

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

Я, мабуть, незабаром ще гольфу.


5

Deadfish ~ , 1115 1088 1084 байт

oooooo{i}ooo{d}iod{o}{i}c{d}ooiodoiodoooooiodoiodoooooooiodoo{i}c{ii}is{iiii}doooio{{{d}}}oioodooiodo{i}coooooooo{d}o{{i}}oo{{d}i}c{d}{oo}ooo{i}c{d}{o}ooioodooooooooo{i}c{d}{o}ioodoiodooooooooo{i}c{d}{o}ioodoiodooooooooo{i}c{d}oooooooooiodoiodoiodooooooooo{i}c{d}oooooooooiooooodooooooooo{i}c{d}{oo}ooo{i}c{d}ioodooooiooodoooioodooooioodooo{i}c{d}iod{o}oooioodooiodoooo{i}c{d}ioodoiodoooioodoooioodooooioodoiodo{i}c{d}iooooodoiooooodoiooooodoioooood{i}c{d}{oo}ooo{i}c{d}oooiod{o}oooooooiodo{i}c{d}{oo}ooo{i}c{d}ooooiod{o}oooooooiod{i}c{d}ioooood{o}oooioooood{i}c{d}{oo}ooo{i}c{d}ioodooooioodooooiooodoooioodooo{i}c{d}iodoooooooiodoooooooooiodoooo{i}c{d}ioodoiodooooioodoooiooodooioodoiodo{i}c{d}iooooodoiooooodoiooooodoioooood{i}c{d}{oo}ooo{i}c{d}oooiodooooooioodoooooooooiodo{i}c{d}{o}iood{o}o{i}c{d}ooooiodoooooiood{o}iod{i}c{d}iooooodoooooioodooooooioooood{i}c{d}{o}iood{o}o{i}c{d}ooiodooooooooiodooooooooiodoo{i}c{d}oooiodooooooioodoooooooiodooo{i}c{d}ooooioodooooioodooooooiodoooo{i}c{d}ooooooioodoooiodooooioodooooo{i}c{d}{o}ioodooioodooooooo{i}c{d}ooooooioodoooiodooooioodooooo

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

Якщо хтось має терпіння грати далі в гольф, я вітаю вас достроково. : P

-27 байт, друкуючи 10 та 100 в місцях, де це можливо.
-4 байти, надрукувавши три тисячі та один 1001 на рядку 3


4

Піт , 1763 коделів

Виводить потік 0s і 1s (без розривів рядків).

Розмір кодера 1:

Програма повідомлень Arecibo з коделем розміром 1

Розмір 4 коделів для легшого перегляду:

Програма повідомлень Arecibo з коделем розміром 4

Пояснення

  • Спочатку натисніть на стеження значення -1 на стек.
  • Потім натисніть на повідомлення Arecibo у зворотному порядку (тому що це стек), використовуючи кодування довжини.
  • Нарешті, чергуйте дві петлі, одну нуль друку та іншу друкуючу.
    • Лічильник циклу - це поточне значення стека, зменшене, поки воно не досягне нуля, в цей момент воно відкидається і ми переходимо до іншого циклу.
    • Між нульовим циклом та циклом one-петлі перевірте, чи є дозорне значення, якщо він знайдений.

Примітки

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

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

Факт забави: кодування довжиною у Piet не (само собою) економить простір. Щоб натиснути значення n на стек, потрібно n коделів одного кольору , або n кодерів різних кольорів, щоб натиснути на стек стільки 1s. Так що в будь-якому випадку це однакова кількість коделів. Але більша кількість, яку дає вам RLE, означає, що ви можете використовувати арифметичні трюки (наприклад, замість натискання на 9, ви можете натиснути 3, дублювати та помножити), щоб зменшити кількість коделів та блоки смішної форми, щоб заповнити доступний пробіл.

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

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


3

C # (Visual C # Interactive Compiler) , 366 332 329 319 байт

int i;foreach(var g in"*ЀʂЄ࢈ҲપԤ␀␀␀؀ȀȀȀ؀␀␀సؘࠀƐഘؚ྾ߟ␀␀Ā␀␀ྀ␀␀రܘࠈഌΚ྾ߟ␀␀ă␀ྃ␀ȁăÃ1`ƀ1`ÃĂȃЃЁȂĀ`ÀƀȺ؀Ȃ␀ȏЀȗɛ'Ŀஇ7;ȅ?ȅ0ȍЀ␀␀΂␀ΨՕ΀Ŕ␀ŀЀ?܀àǀƀ`̀°٠Ƙѐʈш҈EB@Ѐޟɸ")Write(Convert.ToString(g,2).PadLeft(12-i++%2,'0'));

Замінити всі екземпляри з \0випробуванню.

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

C # (Visual C # Interactive Compiler) , 305 байт, 210 символів

_=>"*ЀʂЄ࢈ҲપԤ␀␀␀؀ȀȀȀ؀␀␀సؘࠀƐഘؚ྾ߟ␀␀Ā␀␀ྀ␀␀రܘࠈഌΚ྾ߟ␀␀ă␀ྃ␀ȁăÃ1`ƀ1`ÃĂȃЃЁȂĀ`ÀƀȺ؀Ȃ␀ȏЀȗɛ'Ŀஇ7;ȅ?ȅ0ȍЀ␀␀΂␀ΨՕ΀Ŕ␀ŀЀ?܀àǀƀ`̀°٠Ƙѐʈш҈EB@Ѐޟɸ".Select((g,i)=>Convert.ToString(g,2).PadLeft(12-i%2,'0'))

Те ж саме з вище, замініть з \0випробуванню. Вихід як IEnumerable<string>.

Спробуйте в Інтернеті! (Людство Джо Кінга)



Я вважаю, що ++ін 12-i++%2є nop (принаймні, він працював на мене, коли я його видалив)
моє займенник monicareinstate

@someone Вони є копією-вставкою зі старої відповіді, яку я забув видалити
Втілення Невідомості

2

Perl 6 , 368 байт

.say for :36('FJXOE0PDDNF5Y5EHGB8M9SWMXQOXIKIT9F6ZKWWDEACHCBGXL1N2H60CN0CJ4EMKF7D6MODSKYJVNR4SFTDR6NSM421LQ67B6MWF0G5BQATFOJJJBQ0UFQM64T0MWSQN41C4S5D1QR5KJM2L9UTYMMKUBBQWY45YCMRGO8ZRGTQH7LXMZBUASLCTKX30IH0AYKYEPHO8HFHX8GAY5WM38YOSUX0HABYSH2PPBLRDRZIN5ANAQ3V8PLOZ6EHC0UI95EVJVYD1820T6J14HGX85NWFQET2NWOMSNUT0JW4LHMY90X094TEE9KXJXSNN6YPERFQW').base(2).substr(1).comb(23)

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

Довга рядок - це повідомлення як єдиний номер базового 36 (з одним префіксом 1 біт для збереження провідних нулів), яке потім перетворюється назад у двійкові та надруковує 23 біти одночасно.


Ви можете використовувати >>.sayі&{S/.//} зберігати байти. Чи думали ви замість цього використовувати іншу базу?
Джо Кінг

Так, я спробував використовувати базу 65536 / Unicode, але повідомлення стикається з деякими забороненими сурогатними кодовими точками. Мені вдалося уникнути цього, додавши фіксований зсув до кожної кодової точки, але дивно, що деякі з генерованих рядків кілька разів руйнували Emacs. Вирішення питань почало займати більше часу, ніж я міг собі дозволити. Я, мабуть, переглянути проблему пізніше.
Шон

Немає сенсу входити в кілька байтових символів, оскільки це збільшує кількість байтів. 289 байт , застосовуючи мої поради зверху та використовуючи базу 122 (щоб уникнути повернення перевезення)
Jo King

2

Мова Вольфрама (Mathematica) , 383 байти

StringPartition[Uncompress@"1:eJylVNsRwjAM44s92KBaBTZgAUZhZXqtHUuOWrgjfSRRHFlO4tyer/vjfb1clq0gHirZLRjby986hppcT5p+L3BmgJ3t4Ul4GsNyG++7YbaXLh0ZTPhXa4Sn+X/s9Qfk3Hx2cOaSIuNYaVu5laschvgzSqAjHeZBhilKgKBDEhw0upJRg+HOK4MyNC29sfbc3RV0VPDqeLiRTsG1ulExq1IitpunOa7asnYM9siDZ6eidUCkEzBOUbCkGIig4aTyUGBYWAX6W6aXIWGGI/HlhmsqzSU0QTZjkMVpaX5sBsm1OGKVg1qdjKP0EdyqZBRLhukn8DLBQav6kccgz8OKfgBzjj6Z",23]

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


2

Node.js , 333 байти

Повертає двійковий рядок з 1679 символів.

_=>Buffer(")SI)=.);1K?>>>2333A3,93/I3>3)g33)AEAAI)5JQZJTddda3)*3*33+3,e)*e3)//0/1+)1C/7Cgggg3395)9)A3IY)h*IH),39+)995*)AA-)59Y)*O3Z,)//*)91**)A*-)Y+1)I11+)I1)/)5)Y*0?)+)I)-0Y)1@;_*7<gaE/a)Q7[*9HM+IY16I33)a1)*^.><I+S3.38I)*hY)7)a)Y)A,9*A5Y/A:9=9K:1I-=9)19I)9*329)GH<").map(x=>s+=(x-51&&x-41).toString(2).padStart(x-51?6:12,0),s='')&&s

Спробуйте в Інтернеті! (з відформатованим виходом)


JavaScript (ES8), 413 байт

Повертає двійковий рядок з 1679 символів.

_=>atob('AsKoAFBQEiIlwpVVUk!!ABwo!DQ!Gg!V!Aw7g!!GHGHCi!yGjHChsK+w7vDr8K!!Q!Q!!g!/DgAHDs!AGGHDhiAgCGhjwprDu8Ovwr4!ABAw4AQAcK!MKDAD8GB8OAD!QCAQQMBAYYEAMQwABwpgAMQwBwoYEBAgEEBgEQDAIwoAgIMKAwoDCgMKABgDDgDAEdcKACAgAEHwAIXTCtgTDpMO+w6HDgcK4AsKDwrIFB8OkCgwINg!!A4IAB1FVTDoArCo!U!/CgAB/w4ADwoDDoAwAYDQBYMOMBmEUFEIkSMKARR!woQgAQB!MKUAHnDtA'.split`!`.join`AA`).replace(/[\s\S]/g,c=>c.charCodeAt().toString(2).padStart(8,0))

Спробуйте в Інтернеті! (з відформатованим виходом)


2

Bubblegum, 275 236 байт

00000000: e006 8e00 e45d 0018 6988 6507 a228 f86f  .....]..i.e..(.o
00000010: f042 c62f d4d7 b99e 38bc 56c4 52e8 2630  .B./....8.V.R.&0
00000020: 8aaa 7252 d47d 5ef4 c96a 511f 6842 423f  ..rR.}^..jQ.hBB?
00000030: 4532 ca9f 22d3 1633 e0c4 665a d5dc 4e68  E2.."..3..fZ..Nh
00000040: 7b09 76ae 3c7e f9d4 fa4a 05e0 4163 c580  {.v.<~...J..Ac..
00000050: c585 a383 2396 4ca9 1f48 a4b9 744e 37c8  ....#.L..H..tN7.
00000060: 68c5 af23 645d 59a7 542a e6d1 23b9 3aba  h..#d]Y.T*..#.:.
00000070: f0e6 2738 dfd5 b0a3 c6a3 60bf c5b6 5ae6  ..'8......`...Z.
00000080: 7893 30a8 ae04 edf9 298b b777 4d56 285b  x.0.....)..wMV([
00000090: cb74 07cc 7a7b a399 3dc7 c6e7 b693 e715  .t..z{..=.......
000000a0: d908 876e 001f 7408 3c6a 5fcd 37cb 02c4  ...n..t.<j_.7...
000000b0: 93de 33c2 a11e 5bac cd12 d99a fac3 e0fa  ..3...[.........
000000c0: 5268 94f7 d640 0f73 cede f79d 821f 39d1  Rh...@.s......9.
000000d0: dc49 ff06 6962 6c31 dc29 a077 01c3 7690  .I..ibl1.).w..v.
000000e0: 85ef bbec 31d7 5c7f f9fc 8c00            ....1.\.....

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


2

bash + інструменти GNU, 351 байт

base64 -d<<<H4sIAPnNrVwCA6WUCRLDIAwDv8T+/3NNG4wvkTBTcisGSyA8xrcxj9Ds02F+Z7yuf3hnPyz0vYEGz+FG3IKBs+x3oL2PSh0TM/PnaGamft9nPUCew3uCp5RBWdRKGz+qNJn8qRKkkNaTBgeVIFXWOdi8VCaIeUnsfHo6TXpaFa3H5olf6J5MuIHLoEi0uKcRFCvEXG4xseglKzZg7kpYJSLMA3M7wXKR+/L2WiK0kvg+TDASLp6Co1KEVIlVmFzhCktRhBBDdSZYU1xKHrmDUllcWpNR/YNW2QNcHtF0rSySb0MXk/SDUgEwG5gfLvQDxuEdDo8GAAA=|gunzip

ТІО


я не бачив вашої башти, перш ніж я розмістив шахту - настільки менше!
Noodle9

2

MathGolf , 223 220 байт

'06*"x·<×J× Ç×►B×ê\"@$↕!◙è0♥f░×→0×♠p└☺α?×└•×◙×P♣p¬è:×►∟××××←♦♠♣≥â☻┘A☺▄αp⌂r☻[║►×>◘×♦♦└:☻↑`×♥@@@@►►@♦↑ ☻♀◘☻♦☻☻├×å↑×╠×Ç!♠ 0♀◘↑◘☻♦◘×♠α♥â▼ÇA×└×◘` ×××▀≈}═14♦►►π0♀××°×α•×►×××☻×◘××└≈}_├↑♪↓×─0♫♥×××|××*××♪×Ç♠×└×××× ⌐¬╩↕◄○((×T☺"$à+

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

Пояснення

'0                push single character "0"
  6*              repeat 6 times
    "..."         push the magic string
         $        convert to ordinal
          à       convert to binary string
           +      pop a, b : push(a+b) (add the 6 zeroes)
                  below is the footer
            L/    divide into groups of 23 characters
              n   join array with newlines into string

Ви можете перемістити L/nколонтитул у нижній колонтитул, тож насправді це 220 байт. Чи можна зберегти більше байтів, перенісши відповіді 05AB1E / Java (використовуючи це стиснене ціле число , перетворіть його на base-3 та замініть всі 2s на 0000s)?
Кевін Кройсейсен

@KevinCruijssen приємний улов! Я б хотів, щоб у мене були більше функції заміни рядків, але це ще не частина MathGolf.
maxb

Як щодо карти на цифру, яка відображає 2на ♫░╞? EDIT: Неважливо. Я бачу, у вас немає вбудованої базової конверсії (крім двійкової / шістнадцяткової) для перетворення на базу-3?
Кевін Кройсейсен

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

Безумовно, ви також можете перейти +до нижнього колонтитулу
Jo King

1

Perl 5 , 460 байт

printf"%023b",oct"0x$_"for qw/15400 141404 4444b2 555524 0 600 1a00 1a00 2a00 3e00 0 61c618 400190 68c61a 7df7df 0 80002 0 40001 7c001f 0 618718 404010 68639a 7df7df 0 81802 1800 41801 7c181f 1800 100804 81808 61810 18860 1980 18860 61810 81008 101804 201804 200808 101010 80060 60180 11d600 101000 107c00 10ba5b 1393f 5c3837 283b 10283f 102830 106c00 0 1c1000 1d4555 1c0154 140 7c00 1ff00 701c0 c0060 1a00b0 330198 228288 224488 22880 21080 20080 9400 3cfa78/

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


1

Python 2 , 336 байт

print bin(int('gVQAKCgJERLKqqkgAAAAAMAABoAADQAAKgAAfAAAAAMOMMQAGQ0Yw19998AAAAgAAgAAABAAB+AA+AAADDDjEBAENDHNffffAAAAIGAIAMAAQYAfgwPgBgAIBAIIGAgMMCAGIYAAzAAYhgDDAgIEAggMAiAYBEAQEEBAQEADAGAYAjrABAQACD4AELpbAnJ/cODcAUHZAoPyBQYEGwAAAAAcEAA6iqpwBVAACgAHwAA/4AHAcAYAMBoAsGYDMIoKIRIkQCKIAEIQAIAgAEoAPPp4'.decode('base64').encode('hex'),16))[3:]

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

Друкує рядок байтів


1

Java (OpenJDK 8) , 364 байти

n->new java.math.BigInteger("in95mzupnpa2r0khpoepyql6ioqyn413avucdtfay6indx4wh9dehe3sn18klobtf4z9g9q17umqmwpegr2khb5eqinn7azl4jpfp2a8eui0xfrx5qwrou6gd65jh4ge3ls14k5lu7qrvmg6942ms29u5rb8fa6yrdhfoh5zoi9bdi7uh5ig0u0ff9kounth8sh357x7qox4m3oqviqsbrvakonbka4ahp21bgzi5v1akzzuqoncszhpabbru9q1uo2g11zr73iuyiqr5ikr69zn7cdv7e1lhd6ese9",36).toString(3).replaceAll("2","0000")

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

Пояснення: Спочатку було n->new java.math.BigInteger(str,36).toString(2), просто перетворивши число радіації 36 в бінарне, але для цього потрібно дев'ять додаткових знаків для провідних нулів. Потім мені виникла ідея кодування довжини пробігу, яка дорівнює нулям, як двійки. Довжина чотирьох нулів, здається, мінімізує довжину радіусу 36, такn->new java.math.BigInteger(str,36).toString(3).replaceAll("2","0000")

Дивіться дискусію під цією відповіддю щодо виправлення помилок на початку нулів від @KevinCruijssen


Приємно. Це надзвичайно коротко для Java!
Ерік Думініл

1

[Python 2] , 345 байт

s=''
for c in")pG/K(K*j$h%kk$ppjGE&I6S6S5[5eCv~vw0x&z$wgqcde$e=G4G?G4eG0e:vv~w*G,gn$wy$uuuuG=G)I,G.I2G(I-eG(I)e-I0G+G+G(G)I*G*vI)G-w'I2y0w'I,vI)G*G)G+G(G*I+W+I+W,G*G(G*G*G*G/I,I+I,iq.G*G1G(e/g$c%sG)m%md~$M(},K(cO)K(eO)K(I)G(aE$M(G1c$hpoI,pG3K1e3eU/M*M,I.I*S,Q(y*y'hG(ng&j$j$G+hW/g'G/G,G1k.d$e$mN":c=ord(c)-35;s+=[bin(c-35)[2:],'0'*c][c<35]
print s

Я кодував довжину рядків 0s як байт, починаючи з chr (31). Потім я кодував решту 10101 як двійкові числа, починаючи з chr (70) до chr (126). Двійкові рядки, які не підходили, були розбиті на менші шматки.

Редагування: зменшено до 326 байт. Дякую Джо Кінгу

Редагувати: виправлена ​​помилка в програмі генератора коду

Редагування: остаточне редагування


Вам не потрібно зберігати великий рядок у oзмінній.
xnor

1

Zsh , 577 байт

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

S=fxxxxibxxdxxfyzzzyx1yxxxxxxxxyyywl2ij1xxhj1xxhixxxhi5iw2d3c2d2cxl2bxc2az2c2d2ax4x4x4x5wcxpxwdxp15m5w2d2d3c2cxfxhxc1xxc2c2y1xx4x4x4x5wc1f2ixj2kd1e2j15e2f5j2kb1h1hyc1f2gzd2d2fzaf2c1d2ej2b2gf2c1d2ed2d2f1dc1f1hzb1g2hya1h2hya1i1gzb1g1g1dc1l2ed2h2gbz2xx2ibzd1lbzb5jb1dx2xyx1x2fy2yy6x3d3e2a3ixxd2x2b1fxxd6b1fxxd2db1e2a2jwb3e1lb2xxzxxxxx1b3ixxxynxxeh5jf9hd3g3fc2k2eb2a1ix2da2b2g2b2cazxxdxzzazyzyzzezxz1ge1d1d1ge1i1ggyxxia3y4xy3z
for X in ${(s::)S};{case $X in
[a-w])V=$[##$X-96];printf 0%.s {1..$V};;[1-9])V=$[##$X-48];printf 1%.s {1..$V};;[x-z])V=$[##$X-119];printf $[10**$V];;esac}

Використовується власна логіка кодування. Рядок Sмає 421 символ, можливо, його можна стиснути трохи більше. Букви a-wпредставляють повторні 0s. Числа 1-9являють собою повторні 1s. Листиx y z представляють 10 100 1000відповідно.

Можливо, я повинен був спробувати кодування байт-пари або Ascii85 .


0

Bash , 702 697 байт

xxd -r -p<<X|xz -dc
fd377a585a000004e6d6b4460200210116000000742fe5a3e006d7010c5d
0018698865079cf6752c9e9a501a87a798b4844f9fcfdaaf87733b9d8239
48c816d860a938767f6cb81299f3e8a638effe3068c0e096a8949c81d706
7dff3ec44e5df185b3a48e5b5857724386e8c37cfbd5c856b12614ee78ec
c41df4db3aea71fd3a8fa474905609f78eb3fd66e246557965e4ab6dfd67
efbd9202f542ded9cf98a6401ee2d23afb2f544bd2442c6f428fd612397c
f2c6ec50847ddccc5832185e487712e5a7676b97058d7e485d5a3536166a
44ab3c689c93073cdda73b5306a83c4cd268e79db238bfa2d08ac912a578
75020bc7828342d5a62ce367aff7fd89290336128d119fa4272da2b2a79f
5973c71935af054f2d91c1bd3ea4847a3502d6dc8c975114dacf8a4de600
622d80986dbb0cd00001a802d80d00001b16e2a7b1c467fb020000000004
595a
X

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


0

Рубін , 362 байти

puts"5r0afnfm8wyke8tfy1pwt7xnuaxyh3wodfp7bhsdufyw0xbdp1pumrz2xir652tuc0ss9oec8yad9vefivd66j126wybhefgk2lv38uqqiur11u26q275jk3h2ucithd59awpaenqpqi1pszh52179zw0ddqtbrvo6kyrrgv8c34pqrp83j8estjp63v29t4hqp9yg2hhzjlq1e9zqx6gh20n9lsttimz3nbq060ritrphxaru7quwmv3oujhd9xjddpbacq4bnpf270znhgto59yn0980itylf95pxw9x7rvkvi7mfql1sx46puo8rg4dq0".to_i(36).to_s(2).rjust(1679,?0)

Ціле число, написане в базі 36. Звичайно, існує більш ефективний спосіб стиснення цілого числа, наприклад, з zlibабо base64.

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


350 байт, якщо ви: (1) використовуєте "% b" для форматування замість to_s, (2) додати? 0 * 6 замість виклику rjust
GB

0

[C ++ (VC ++) (але також перевірено з gcc)], 585 байт

#define l(x,y)for(int x=0;x<y;x++)
void f(){const char*a="02A800505012Y595Y240U180YD0Y1A0Y540YF80V61C618800321A3186BEFBEF80X10Y40W20YFC001F0X1861C620200868639AFBEFBE0W40C0100180Z83003F0607C00C001008041030101860400C430Z19800310C018604040804101804403008802020808080800600C030047580080800107C002174B604E4FEE1C1B80283B20507E40A0C08360U3820Z751554E00AA0Z140ZF80Z7FC00380E00C0060340160CC06611414422448804510Z8420010040Z940079F4F0";int x=1679;l(i,365){int d=a[i],c=0;d-=(d>47&d<58)?48:((d>64&d<71)?55:0);if(d>70&d<91)c=91-d,d=a[i-1];for(c;c>=0;c--)l(j,4){if(x--)cout<<(int)((d&(8>>j))>0);}}}

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

неліточна версія (не вистачає перерви після 1679-го елемента, хоча і йде до 1680-х):

#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
    const char arecibo[]="02A800505012Y595Y240U180YD0Y1A0Y540YF80V61C618800321A3186BEFBEF80X10Y40W20YFC001F0X1861C620200868639AFBEFBE0W40C0100180Z83003F0607C00C001008041030101860400C430Z19800310C018604040804101804403008802020808080800600C030047580080800107C002174B604E4FEE1C1B80283B20507E40A0C08360U3820Z751554E00AA0Z140ZF80Z7FC00380E00C0060340160CC06611414422448804510Z8420010040Z940079F4F0";
    int i = 0,j;
    while (i<sizeof(arecibo)-1)
    {   
        char digit = arecibo[i];
        int count=0;
        if (digit >= '0' & digit <= '9')
        {
            digit -= '0';
        }
        else if (digit>='A'& digit<='F')
        {
            digit -=  'A'-10;
        }
        else if (digit > 'F'&digit<='Z')
        {
            //digit does not contain any valid hex digit in this case
            count = 'Z' - digit+1; //digit = Z means repeat 2 more times...
            digit = arecibo[i - 1];
        }
        for (count; count >= 0; count--)
        {
            for (j = 0; j<4; j++)
            {
                cout << (int)(((digit)&(8 >> j))>0);
            }
        }
        i++;
    }
    return 0;
}

як Пояснення: я об'єднав 73 рядки вибірки, подані в один довгий рядок. Я кодував їх у шістнадцять, де порядок бітів - msbfirst (використовуючи цю програму https://github.com/Marc-Bender/longBinaryStreamToHex/releases/download/addedErrorCode-4/longBinaryStreamToHex.exe ), я скоротив вихід цього на приблизно 70 шістнадцяткові цифри, використовуючи букви "G" - "Z" як знак повторення останньої цифри протягом певної кількості разів (Z = 2 більше разів, Y = 3 більше разів ...), решта має бути відносно пояснювальною для Code-Golfers . зловживання препроцесором для скорочення циклів, зловживання ,Оператором тощо.

Формат виводу - це безперебійний потік 1679 значень 0/1.


перш ніж хтось запитує const - це сумісність з VC ++ (з чим було зроблено основні роботи з розробки)
der bender

@ceilingcat Я думаю, ви можете навіть коротко сказати, що додайте в розділ заголовка ...
дер Бендер


0

Perl 6 , 348 байт

{"000000"~:36<5r0afnfm8wyke8tfy1pwt7xnuaxyh3wodfp7bhsdufyw0xbdp1pumrz2xir652tuc0ss9oec8yad9vefivd66j126wybhefgk2lv38uqqiur11u26q275jk3h2ucithd59awpaenqpqi1pszh52179zw0ddqtbrvo6kyrrgv8c34pqrp83j8estjp63v29t4hqp9yg2hhzjlq1e9zqx6gh20n9lsttimz3nbq060ritrphxaru7quwmv3oujhd9xjddpbacq4bnpf270znhgto59yn0980itylf95pxw9x7rvkvi7mfql1sx46puo8rg4dq0>.base(2)}

На основі рішення Java Бенджаміна Уркхарта .

Використовується прямий потік з 0 і 1 символів. Посилання нижче містить деякий код для покращення результатів.

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


0

Tcl , 366 байт

binary scan [binary decode base64 QBUACgpIRKSpqkoCAAAAgAEAsAAAWAAAKgAAHwAAAGA4hhEATFiMYX3f9wEAAAgAIAAAAAQA8AOADwAAGIZjBAQQFsZZ3/d9AAAAAgMIgAEAwQD8YOADMAAIECAIDAgYBgIwwgCAGQCMMIBhICAQIAgYIAIMEAEEBAEBAQFgAAMMIK4BEBAACD4AhC5tICd/h4MdQMFNoOAnUDAQbAAAAAAcBACuqCoHUAUAKADwAQD+A8ABBzAABiyABjNghigoQiQSAaIIACEEgAACACkAni8P] b* z
puts [join [regexp -all -inline .{23} $z] \n]

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


0

C ++ (з багатоточною бібліотекою Gnu), 359 байт

Це виводить рядок як один рядок. Він використовує "1" для 0, а "0" для 1: /

Він просто читає вбудований рядок як основу 62 та друкує його як базу 2.

Використовувати g++ -g arecibo.cpp -lgmp -lgmpxxдля компіляції та посилання

#include<gmpxx.h>
main(){mpz_out_str(stdout,2,class_mpz("vuXXKBYAu1hPsJPbFSf49akyFd0bjJbMIV3upYndU8kYFPsXcpRUK6c9qnzLfORxkxGL7ZfoSwgSxFbCrydjHL603QcxexopAzoYAcAyEiENJJU2vQA2zM8NDbeY6nHgL8rfFoPJaclwxx6TeKeOEknEQHzp7C4la3o8xijBQLOVweFZ1CI9dXy2VQhgnuwF5FeW5mQ909pRMxhn6G3RJ1QEtkS7oGMZYHM03fh4fj391IoYLGVv3iUVuTrV2ghz9CUa9hfGYrdhGoVE2w1inYalYl",62).get_mpz_t());}

Я не міг отримати цю роботу , поки я не замінив class_mpzзmpz_class
ceilingcat

0

Perl 6 , 276 байт

:122[q{3tD!gLF['u#.K>'uCG8cvJZ[on1Z<D!	`Fhqq-_V'"qQn+n0h\:b,vXjo&1TMFaW;wvX;eUS
(ueelNSu,y93\kjGI&?UU/38 :ndi4Y5cyC+ME\g7LWaS;QLjtD^L+aVd(XW%gy\8'Eqk-+f72S5J?(r5!m^5px T[Z'3&jd0lZ'/x%#(}.ords].base(2)~~S/.//.say

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

Виходи у серії 1679 0 і 1s. Ви можете мати його в різних рядках, додавши .comb(23)>>передsay .

Пояснення:

:122["...".ords]                     # Convert the string from base 122
                .base(2)             # To base 2
                        ~~S/.//      # Remove the leading 1
                               .say  # And print

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


0

C ++ (gcc) , 748 байт

#define l(X,Y)if(z[i]==#X[0])z.replace(i,1,#Y);
void f(){std::string z = {"ab1eeedala1ebeeheal1mmma1fa1g1eeeeeeea1a1alddhgdbcdgdacedgdacedgdeeedgdndgddhgqiafbcag1dbfa1blceafafbcegcinnnlddhgmddegddhgb1ddelcidbnlddhgqqiafag1hedeblcebcaf1acegcinnnlddhgmhcdegdacdagb1bfda1lcibfhcildacdaga1d1d1almhcheagbqch1blhcmbqgdacachghcmbqgbqch1blmh1d1aga1hfd1aledcd1aledeheaga1heheblmdbqgbcdchga1af1efdga1hedbla1bndala1b1f1ea1fflh1aia1acccl1f1bibff1ldeebf1fla1h1ebfccla1h1ebfbla1bffdalddhgaibedblaieemeeeeelaideeeealdh1ehldcidalhcccidlbihf1hlafdafbgacedefblfachfacagemebeemagema1ma1magbememhgbeb1b1hgbedehghea1edalfcacieacca0"};for(int i=0;i<1751;i++){l(q,cb)l(n,fi)l(m,ae)l(i,c1)l(h,ba)l(g,0l)l(f,0c)l(e,01)l(d,bb)l(c,11)l(b,aa)l(a,00)l(l,\n)printf("%c",z[i]);}}

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

Замінивши найбільш використовувану підрядку на новий символ, поки це вже не варто



0

Python 3 , 331 байт

exit(''.join(bin(i)[3:]for i in b'`UP@JB`IDQKJjjd`@@@@@L@@Ah@@CP@@J`@@_@@@@@LNLLP@FPtXpu}}}|@@@@`@@`@@@A@@A~@@~@@@CCCcDA@DMCGM____@@@@HF@H@L@@PX@_`pO`A`@HA@HHF@`LLB@FHX@@s@@Xa`CC@`HD@``L@b@XAD@PDDA@PD@C@F@X@ck@A@P@BCx@DKi[@gI\x7f\\NC\\@TGY@hOrAPXDFp@@@@@\\D@@zbjipAU@@B`@Gp@@\x7fx@G@\\@X@LAh@lFXCLHhJHQHdPBJH@DHP@H@`@Dh@OOix')[1:])

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

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