я люблю тебя, я люблю тебя, я люблю тебя!

58

На XKCD № 99 с заголовком «Binary Heart» показано простое изображение из нулей и единиц, причем некоторые цифры окрашены в красный цвет.

введите описание изображения здесь

Красное сердце видно невооруженным глазом, но сообщение, скрытое в двоичной последовательности, - нет. Если вы удалите все пробелы и символы новой строки и интерпретируете двоичную последовательность как 8-битный ASCII-код, вы получите сообщение:

iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv

Мило верно?

Pssst ... Строка не является чистым повторением строки.


Ваша задача состоит в том, чтобы создать это двоичное изображение с 21 цифрой в поперечнике и 23 цифрами вниз. Должен быть ровно один пробел между каждой цифрой в каждой строке и одна новая строка для каждой новой строки. Обратите внимание, что последние биты - это только начало буквы e, так 21*23как не делятся на 8. Эти биты тоже должны быть правильными.

Функция или программа не должны принимать никаких данных. Начальные и конечные пробелы и новые строки принимаются.

Результат вашего кода должен выглядеть так:

0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0
1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1
0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1
0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0
1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1
0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0
1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1
0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0
1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1
0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1
1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0
0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0
1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1
1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0
0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1

Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.


Leaderboard

Стьюи Гриффин
источник
1
Я хочу, чтобы вы знали, прямо сейчас я как-нибудь найду способ?
BlueRaja - Дэнни Пфлугхофт
25
Я дам награду за самый короткий код, который окрашивает вывод, используя красный и черный, чтобы сделать сердце
Beta Decay
Мне еще более любопытно узнать, что скрытое сообщение в заглавных буквах OS из строки вывода ASCII!
brandonscript,
Там нет никакого сообщения, или, по крайней мере, ничего не было обнаружено объясняющим xxcd.com, который говорит, что "Сочетание прописных и строчных букв" O "считается намеренным, чтобы избежать повторяющегося паттерна".
Петр Худечек
1
@WeeingIfFirst Хаха, ты переоцениваешь мои навыки программирования :). Я также награжу победителя премией в 100 представителей, когда смогу
Beta Decay

Ответы:

21

Желе , 36 33 32 байта

“ḅUɗaṚPXṙ’Bṁ484¬“½:J⁺ȤṾ‘Ḥ¤¦Ḋs21G

Спасибо @JonathanAllan за игру в 3 байта!

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

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

Основная ссылка

“ḅUɗaṚPXṙ’Bṁ484¬“½:J⁺ȤṾ‘Ḥ¤¦Ḋs21G

выполняется niladically (то есть, без каких-либо аргументов) при запуске программы. Его возвращаемое значение будет напечатано неявно.

“ḅUɗaṚPXṙ’

найти индексы цитируемых символов на кодовой странице желе и интерпретировать их как цифры биективного базового числа 250. Это дает целое число 13021639057551959994 .

          B

преобразует сгенерированное целое число в двоичное. В результате получается битовый массив 1011010010110110001001111011101100110010101111001010011110111010, который соответствует кодировке UTF-8 строки ilOveyOu , сдвинутой на один бит влево.

Сдвиг необходим, потому что Bне может вернуть битовый массив с начальным 0 . Другие варианты включают отрицание двоичных цифр или вычисление квадрата в обратном порядке, но этот подход экономит один байт.

            ṁ484

формирует сгенерированный массив, например, в диапазоне от 1 до 484 , то есть повторяет содержимое массива столько раз, сколько необходимо для достижения длины 484 .

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

                 “½:J⁺ȤṾ‘Ḥ¤

принимает кодовые точки символов между и ( [10, 58, 74, 138, 154, 186] ), затем «снимает их», т. е. умножает их на 2 ( [20, 116, 148, 276, 308, 372 ] ).

                ¬           ¦

условно отрицает биты в этих индексах. Это соответствует изменениям O / O в исходной схеме.

В заключение,

                             Ḋs21G

удаляет массив битов (удаляя первый бит), разделяет оставшийся массив на строки из 21 элемента и печатает полученную матрицу в виде сетки.

Деннис
источник
2
Вы можете сохранить еще 3 байта, используя заглавные буквы Oпо умолчанию, я думаю, что это делает это:“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Джонатан Аллан
Да, есть более прописной O «s , чем строчные них. Спасибо!
Деннис
4
Так вот как выглядит черная магия ..
Bassdrop Cumberwubwubwub
2
@BassdropCumberwubwubwub Теперь нужно приложить усилия, чтобы превратить его в красную и черную магию
Мэтью Ро
43

Желе , 41 40 35 33 байта

Спасибо @Dennis за то, что сделали конец ṖṖCG! (дополнить C= 1-xвместо логического нет ¬)

“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFs21ṖṖCG

TryItOnline

Как?

“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFs21ṖṖCG - Main link: no arguments
“ƝƓỊ⁹Ȥ⁶Ị⁺‘                        - code page indexes [150,147,176,137,154,134,176,138]
                                        (bitwise negated values of ordinals of "ilOveyOu")
          ẋ8                      - repeat eight times
            _                     - subtract
                     ¦            - apply to indexes
             “¤ÐŒ#'/‘             - code page indexes [3,15,19,35,39,47]
                                        (the indexes of the lowercase Os)
                      32          - literal 32 (subtracting 32 from the bitwise negated
                                                'O's makes them bitwise negated 'o's)
                        B         - binary (all are 8 bits, hence the negation)
                         F        - flatten list
                          s21     - split into slices of length 21
                             ṖṖ   - pop (remove the last two slices)
                               C  - complement (transform the bits to what they should be)
                                G - format as a grid
                                        (inserts both the spaces and line feeds)

«Цветная» версия, 77 байт

“¤Ɓ¥J¬ ¥ƲėNėR½5ðḃḍCṬ’b19‘“Y^‘jĖŒṙḂ
“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFż¢Ḅị“¹0°1”s21ṖṖG

TryItOnline

У желе отсутствует цветопередача, но мне все равно это легче увидеть (я дальтоник) ...

° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹ ° ° ° ¹ ¹ ° ¹
¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹ ° ° ¹ ° ¹ ° ¹
¹ ¹ ¹ ° ° ¹ ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ °
¹ ° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹ ° ° ° ¹ ° °
¹ ¹ ¹ ¹ ° 1 1 1 ° ¹ ¹ ° ° 1 1 0 ° ¹ ° ¹ °
¹ ¹ ¹ 1 0 0 1 0 1 1 ° 1 1 1 1 0 1 1 ¹ ° ¹
° ¹ ° 1 1 0 1 0 0 1 ° 1 1 0 1 1 0 0 ° ¹ ¹
° ¹ ¹ 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 ° ¹
° ¹ 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 ¹ °
¹ ° 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 ° ¹
° ° ¹ 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 ¹ °
¹ ° ¹ 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 ¹ ¹ ¹
° ¹ ° ¹ 0 1 1 0 1 0 0 1 0 1 1 0 ¹ ¹ ° ° °
¹ ¹ ° ¹ ¹ 1 1 0 1 1 1 0 1 1 0 0 ¹ ¹ ° ° ¹
° ¹ ° ¹ ¹ ¹ 1 0 0 1 0 1 1 0 1 ¹ ¹ ¹ ° ¹ ¹
¹ ° ¹ ° ¹ ° ¹ 1 0 1 0 0 1 0 ¹ ¹ ° ¹ ¹ ° °
° ¹ ° ° ¹ ¹ ¹ ¹ 0 1 1 1 0 ¹ ¹ ° ° ¹ ¹ ° °
¹ ° ¹ ° ¹ ¹ ¹ ¹ ° 0 1 0 ¹ ¹ ° ¹ ¹ ¹ ¹ ° ¹
¹ ¹ ° ¹ ° ¹ ° ¹ ¹ ° 1 ° ° ¹ ° ¹ ¹ ° ¹ ¹ °
° ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹ °
° ¹ ° ¹ ° ¹ ¹ ¹ ¹ ° ° ¹ ° ¹ ° ° ¹ ¹ ¹ ¹ °
¹ ¹ ¹ ° ¹ ° ¹ ° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹
° ° ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹

Как?

“¤Ɓ¥J¬ ¥ƲėNėR½5ðḃḍCṬ’b19‘“Y^‘jĖŒṙḂ - Link 1: no arguments
“¤Ɓ¥J¬ ¥ƲėNėR½5ðḃḍCṬ’              - base 250 of a big number
                     b19           - convert to base 19, yields a list of integers
                        ‘          - increment those numbers
                         “Y^‘      - get code page indexes [89,94]
                             j     - join: [89,3,5,3,8, ... ,3,19,1,94]
                                         - {left-right, top-bottom} runs of colours
                              Ė    - enumerate [[1,89],[2,3],[3,5],[4,3],[5,8], ...]
                               Œṙ  - run-length decode [89 1s, 3 2s, 5 3s, 3 4s, 8 5s, ...]
                                 Ḃ - mod 2

“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFż¢Ḅị“¹0°1”s21ṖṖG - Main link: no arguments
“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BF                 - same as the original to get 1s and 0s
                          ż                - zip with
                           ¢               - last link (1) as a nilad
                            Ḅ              - binary to integer (vectorises)
                             ị             - index into
                              “¹0°1”       - string "¹0°1"
                                    s21    - split into length 21 slices
                                       ṖṖ  - pop last two unused slices
                                         G - format as a grid
Джонатан Аллан
источник
27
Если вы удалите ¬, последние четыре байта могут стать ṖṖCG. :)
Денис
2
Ух ты, конечно - это просто нужно сделать!
Джонатан Аллан
1
Простите мою педантичность; возможно правильный термин есть complement?
Sherlock9
@ Sherlock9, да; исправлено и спасибо - я не могу написать все так хорошо, поэтому часто получаю неправильные слова, если проверка орфографии не дает флаг!
Джонатан Аллан
@WeeingIfFirst - я не проверял, но надеюсь, что это все еще достаточно хорошо, чтобы считаться цветным.
Джонатан Аллан
42

На самом деле, 58 байт

73*8╙:13542├`≈"÷≥"E`M"«%s₧ªn%s6û"7*%"♠n≥6û"+¿├`' +`M╪♂Σ♂Ri

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

объяснение

Здесь есть три основные части, поэтому я собираюсь разбить их соответствующим образом.

Часть 1. Построение строки base-256

На самом деле мы собираемся построить двоичную строку в обратном порядке, чтобы воспользоваться структурой на основе стека (LIFO) и избежать сложностей с ведущими нулями в двоичной строке. Таким образом, целевой двоичной строкой является 110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110, что эквивалентно 20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478десятичному. В base-256 ( для преобразования используется таблица символов CP437 ) соответствующая строка имеет вид ♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û. Чтобы создать исходную двоичную строку, мы создаем строку base-256 (используя преимущества шаблона в ней) и выполняем базовые преобразования в десятичную и двоичную.

Строка base-256 имеет следующий формат (для ясности добавлены пробелы и символы новой строки):

♠n≥6û
« (either ≥ or ÷) ₧ªn (either ≥ or ÷) 6û
  (7 times)

Таким образом, каждая из 7 средних секций может быть сформирована с помощью каркаса «%s₧ªn%s6ûи заменой %sчастей либо на, либо на ÷.

Конкретная последовательность s и ÷s нам нужна ≥≥÷≥÷÷≥≥≥÷÷≥≥÷. Так как нам нужно это как список строк длиной 1, наивным способом представления этого будет "≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#(нажать строку, превратить ее в список). Тем не менее, мы можем сделать немного лучше. Интерпретируя эту строку как двоичное число (где представляет 1и ÷представляет 0), мы получаем 13542в десятичном виде. Преобразовав это обратно в двоичный файл (используя традиционные 1s и 0s) и индексировав в строку длины 2, мы можем получить список, используя на один байт меньше, чем простой метод.

:13542├`≈"÷≥"E`M"«%s₧ªn%s6û"7*%"♠n≥6û"+
:13542├                                  push 13542, convert to binary
       `≈"÷≥"E`M                         for each bit:
        ≈                                  convert to integer (from string)
         "÷≥"E                             index into "÷≥"
                "«%s₧ªn%s6û"7*           push the scaffold for the middle section
                              %          old-style Python string formatting to fill in the scaffold
                               "♠n≥6û"+  prepend the beginning piece

Часть 2. Преобразование в двоичный файл

Эта часть намного проще. Если бы на самом деле была возможность напрямую конвертировать base-256 в двоичный файл, мы бы использовали это. К сожалению, это не так, поэтому нам придется использовать десятичный формат в качестве промежуточного формата.

В ,следующем коде представлен код из Части 1 - для пояснения я заменил код Части 1 на, ,чтобы прочитать вывод из Части 1 из STDIN. Это не часть фактического окончательного кода.

8╙,¿├
  ,    Part 1 result
8╙ ¿   convert from base-256 to decimal
    ├  convert to binary

Часть 3: Форматирование

Если бы задача состояла в том, чтобы просто вывести двоичную строку как есть, мы были бы готовы. Тем не менее, у нас еще есть некоторое форматирование, чтобы получить двоичную строку в прямоугольнике 21 x 23.

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

73*,`' +`M╪♂Σ♂Ri
   ,              output from Part 2
    `' o`M        insert a space after every character
73*       ╪       chunk into 21 pieces
           ♂Σ     concatenate each piece
             ♂R   reverse each piece
               i  flatten
                  (implicitly print)

Для тех, кто следит за домом, это эквивалентный код Python 3 (481 байт):

print('\n'.join([''.join(' '+c for c in bin(sum('\x00☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xa0'.index(c)*256**i for i,c in enumerate(("♠n≥6û"+("«%s₧ªn%s6û"*7)%tuple("÷≥"[int(b)]for b in bin(13542)[2:]))[::-1])))[2:])[i*42:-~i*42][::-1]for i in range(23)][::-1]))
Мего
источник
46
Вы знаете, именно такое программирование заставляет меня верить египтянам, где действительно очень продвинутые и успешные программисты и иероглифы были просто их языком выбора. +1
MonkeyZeus
На каком языке это было? Кроме того, этот ответ составлен?
Джек,
@ Джек Это на самом деле . Нет компиляции.
Mego
1
@Mego: 0 Тогда ты БОСС для написания этого кода
Джек,
1
Что произойдет, если вам понадобится цифра 34 в базовом номере 256? (символ, включающий строку)
Джонатан Аллан
22

JavaScript (ES6), 169 ... 136 135 байт

let f =

_=>"0213021203131214".replace(x=/./g,v=>0+[a=1768714102,a-8192,a-=66265089,a+8192,3][v].toString(2)).replace(x,(c,i)=>` 
`[+!(i%21)]+c)

console.log(f());

Сохраненные 2 байта благодаря Andrakis
сохраненных 4 байта благодаря Хеди
сохраненному - 5 байт благодаря Neil

Цветная версия, 249 байт (237 байт JS + 12 байт CSS)

Код JS выводит искусство ASCII с жирными метками для сердца. 12 байт CSS требуется для раскрашивания в красный цвет. (Это число байтов справедливо?)

let f =

_=>"0213021203131214".replace(x=/./g,v=>0+[a=1768714102,a-8192,a-=66265089,a+8192,3][v].toString(2)).replace(x,(c,i)=>` 
`[+!(y=i/21|0,x=i%21)]+([57568,a=261112,a,b=524280,b+4,b+4,b,a+1024,65520][y-4]&1<<x|y>12&x>y-9&x<29-y?c.bold():c))

document.getElementById("o").innerHTML = f();
b{color:red}
<pre id="o"></pre>

Arnauld
источник
2
Вы можете сохранить несколько байт, заменяя ваш заменить: s=>s.replace(/./g,'$& '). Я работал над идентичным решением.
Андракис
1
Не может s.replace(/./g,'$& ')быть заменено s.split``.join` `?
Хеди
2
[...s].join` `
Нил
1
Я думаю replace(/./g,(c,i)=>c+=++i%21?' ':'\n')(очевидно, используя буквальный перевод строки там) сохраняет еще один байт. Вполне возможно, есть еще лучший способ выразить эту идею.
Нил
20

05AB1E , 77 54 53 44 43 41 байт

Использует кодировку CP-1252 .

’i„΀î’8ו1žä¿*•S·£™J¦'iìÇb0ìJ011JSðý42ô»

объяснение

’i„Î€î’   # the string "iloveyou"
8×        # repeated 8 times
•1žä¿*•   # the number 3262264221 encoded in base 214
S·        # split to list and multiplied by 2, gives [6, 4, 12, 4, 4, 12, 8, 4, 4, 2]
£         # split the "iloveyou..." string into chunks of these lengths
™J        # title-case the chunks and join, giving the string with capitalized O's
¦'iì      # replace the faulty capitalized "I" in the beginning with a lower case "i"
Ç         # convert to list of ascii values
b0ì       # convert each to binary and prepend a 0 to each binary string
J011J     # join the strings and append "011"
Sðý       # add a space between each digit
42ô       # split in pieces of 42 (21 digits, 21 spaces)
»         # merge on newline

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

Emigna
источник
3
Похоже, у вас есть соответствующая фотография профиля
tomsmeding
3
@ tomsmeding: Действительно! Он нарисовал мне парня в шляпе, когда мы встретились пару лет назад, так вот кто я сейчас :)
Emigna
Я знаю , что это было 2,5 года, но вы можете играть в гольф Sðý42ô»к S21ô», так как »соединяет внутренние списки пробелами неявно (и •1žä¿*•теперь должно быть •Å¾$6•, так как целые числа кодируются в базе-255 теперь вместо базы-214).
Кевин Круйссен
15

CJam , 48 байтов

19560Yb"Oo"f="uilvey"8*3/.\s:i2fb0a*7>21/W<Sf*N*

Сотрудничество с @MartinEnder, который забрал хитрые 3 байта со "uilvey"3/строкой. Онлайн переводчик .

19560Yb        Convert 19560 to base 2
"Oo"f=         Index each bit into the string "Oo" to give "ooooOOooOOOooOoOOO"
"uilvey"8*3/   Repeat the string "uilvey" 8 times then split into chunks of 3
.\s            Vectorised swap (insert the Os into the right places) then stringify
:i2fb          Convert each char to int then take base 2
0a*            Join with 0s
7>             Remove the first 7 bits
21/            Split into chunks of length 21
W<             Drop the last row
Sf*            Join each row with spaces
N*             Join the rows with newlines
Sp3000
источник
12

Javascript ES6 REPL , 124 121 119 113 байтов

Сохранено 6 байт благодаря @ETHproductions

Это полная программа, которую можно вставить в REPL / консоль для получения правильного результата.

for(i=r='';i<483;)r+=(`il${"Oo"[21>>i/64&1]}vey${"oO"[77>>i/64&1]}u`.charCodeAt(i/8%8)>>7-i%8&1)+(++i%21?` `:`
`)

Более многословный

for (i=0, r='';                         // r == the result
     i < 483;)                          // 483 == 21 * 23
r+= (                                   // construct "iloveyou"
        `il${                           // il
            "Oo"[21 >> (a = i/64) & 1]  // position in the loop defines the o or O
         }vey${                         // vey
            "oO"[77 >> a & 1]           // position in the loop defines the o or O
         }u`                            // u
        .charCodeAt(                    // "i" == 105 == 01101001
            i / 8 % 8                   // find the correct bit to append
        ) >> 7-i%8 & 1                  // shift it to select 1 or 0
    )
+                                       // add a space or newline
    (
        ++i%21 == 0 ? `
` : ` `                                 // every 21 characters add a new line, 
                                           otherwise a space
    )
;                                       // Javascript implicitly returns the last value 
                                           edited in a for loop

Цветное JavaScript только сердце, 281 байт

for(i=z=r='',h=[],g=[90,...[...'353871767176G4H4H5G5F7CABB9D7F5H3J1'].map(n=>parseInt(n,20)),-1];i<483;)r+=`%c`+(`il${"Oo"[21>>i/64&1]}vey${"oO"[77>>i/64&1]}u`.charCodeAt(i/8%8,--g[+z]||z++,h[i]=z%2)>>7-i%8&1)+(++i%21?` `:`
`);console.log(r,...h.map(H=>`color:${H?'red':'black'}`))

Это работает путем переключения цветов каждые n бит и использует возможность console.log для регистрации цветов

Цветное CSS-сердце, 229 + 12 байт

Если использование css разрешено, цветное сердце может быть уменьшено до 229 байтов кода JavaScript и 12 байтов CSS

for(i=z=r='',g=[90,...[...'353871767176G4H4H5G5F7CABB9D7F5H3J1'].map(n=>parseInt(n,20)),-1];C=`il${"Oo"[21>>i/64&1]}vey${"oO"[77>>i/64&1]}u`.charCodeAt(i/8%8,--g[+z]||z++)>>7-i%8&1,i++<483;)r+=(z%2?(''+C).bold():C)+(i%21?` `:`
`)

Bassdrop Cumberwubwubwub
источник
Причина, по которой я сделал это, заключается в том, что это можно считать полной программой. Там нет жестко закодированных переменных, которые должны быть изменены пользователем, вместо этого это может быть скопировано и работает как есть. Я называю это фрагментом, но это может быть и полная программа. Мысли?
Bassdrop Cumberwubwubwub
Он основан на поведении REPL, что означает, что язык - «Javascript ES6 REPL» ( источник ).
Mego
@Mego Спасибо, соответственно отредактировал мой ответ
Bassdrop Cumberwubwubwub
1
Я уверен, что вы можете избавиться aи просто использовать num>>i/64&1в обоих местах, экономя 1 байт. Кроме того, так ++i%21==0?newline:spaceже, как ++i%21?space:newline.
ETHproductions
Другой совет: изменить i=0,r=''на i=r=''; ''автоматически приводится к 0.
ETHproductions
9

MATL, 56 55 байт

'!?u<TgGU*lB7SE1q3s.?Su(q6)iM'F'eilovyOu'Za8&B!FTTv21e!

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

объяснение

'!?u<TgGU*lB7SE1q3s.?Su(q6)iM'      % Previously compressed version of the string
F'eilovyOu'Za                       % Decompress this string
8&B                                 % Convert each char to 8-bit binary number
!                                   % Transpose the result
FTTv                                % Append [0 1 1] to the end to take care of 
                                    % the partial "e" bits
21e!                                % Reshape it into the appropriate shape
                                    % Implicitly display the result     
Suever
источник
9

PowerShell v2 +, (UTF-16) 300 байт

Исправлено ошибочное количество байтов благодаря @Mego

'ږƍ໬ƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮ૒ƱϝIJ˲ӷʴ˘ͻ֙ץŻ઴Ŭɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}

Не самый короткий, но другой подход. Я вручную взял каждую строку и разделил их на пары по 9 (11) разрядов. Преобразовал каждое из этих двоичных значений вchar (Примечание: PowerShell использует UTF-16 по умолчанию, а не UTF-8) и поместил его в строку. Это'...' в начале.

Затем мы разбираем -splitстроки длиной 2 и перебираем каждую пару. Эти пары разбиваются на char-array via $_[0,1], и каждая из них приводится к типу int +$_и [convert]редактируется в двоичный файл ( ,2) String. Это -joinобъединено в одну строку, затем PadLeftнужно получить правильную длину, затем каждый элемент - это -replaced с самим собой и пробел '$1 '.

Все эти строки остаются в конвейере, и вывод неявен, по умолчанию Write-Outputвставляется новая строка между элементами.

PS C:\Tools\Scripts\golfing> 'ږƍ໬ƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮ૒ƱϝIJ˲ӷʴ˘ͻ֙ץŻ઴Ŭɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}
0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 
1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1 
1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0 
1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0 
1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 
1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1 
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 
0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 
0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 
1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 
0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 
1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 
0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 
1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 
0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 
1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 
0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 
1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 
1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 
0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 
0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 
1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 
0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 
AdmBorkBork
источник
Я считаю 300 UTF-16 байтов. Питон 3:len("'ږƍ໬ƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮ૒ƱϝIJ˲ӷʴ˘ͻ֙ץŻ઴Ŭɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}".encode('utf-16be'))
Мего
@Mego Да, Дурр. То, что я считаю UTF-16 для строки, не означает, что я могу магически считать UTF-8 для остальной части кода. Хах. Спасибо за помощь.
AdmBorkBork
Рад помочь :)
Mego
Если бы это не выглядело так пугающе, я бы фактически открыл терминал PowerShell и запустил его.
DaveTheMinion
6

/// , 237 байт

/2/\/\///3/0 24/1 25/0
26/1
27/4428/3329/772A/432B/A732C/937A782D/B48B72E/8A4892F/98B93/373A3A737837367A7A7878AA674E37A45D83A5C78A45F7A63D83463C78A639E3745AD8368C7845A9E3763AD8573C7863AF46AAD35348C735AAF673AD5848C753AA9E57AAB48B468348C41

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

Эрик Outgolfer
источник
4

Python 3, 147 144 байта

lambda i=0:exec("print(' '.join(''.join('0'+bin(ord(chr(j+30)in' ,0@DL'and'o'or c))[2:]for j,c in enumerate('ilOveyOu'*8))[i:i+21]));i+=21;"*23)

Проверьте это на Ideone

Инициализирую iк 0в объявлении функции, а затем повторяет это 23 раз:
делает всю двоичную строку без пробелов (см ниже);
разрезает ряд изнутри использования [i:i+21];
вставляет пробелы с ' '.join(...);
печать; и
увеличивается iна 21 сi+=21

Чтобы сделать всю двоичную строку:
она повторяется "ilOveyOu"восемь раз; при необходимости
заменяется Oна o(по индексам [2,14,18,34,38,46]);
- - - это достигается с помощью chr(j+30)in' ,0@DL'сохранения 3 байтов,
преобразует каждый символ в его порядковый номер;
приводит каждый ординал к двоичной строке ( '0bxxxxxxx');
удаляет ведущие '0b'из каждого использования [2:];
дополняет каждый с '0'; и
объединяет все это с''.join(...)

Джонатан Аллан
источник
Вам не нужна лямбда. Делать i=0\nexec(...)или i=0;exec(...)за 137 байт.
mbomb007
Если вы на самом деле не нужно Python 3, вы можете использовать Python 2 , чтобы изменить exec("...")к exec"..."и print(...)кprint...
mbomb007
3

PHP + HTML + CSS, 173 байта, цветные 367 байтов

Только CLI PHP 173 байта

$o=2841;for($i=0;$i<16;)$t.=il.Oo[$o>>$i++&1].vey.Oo[$o>>$i++&1].u;foreach(str_split($t)as$c)$x.="0".decbin(ord($c));for($i=0;$i<504;$i++){$i%21?:print"\n";echo$x[$i]." ";}}

соответствует типу содержимого спецификации bounty text / html

<?=gzinflate(base64_decode("jVNbDoIwELwKJ9Ctn9hwF9HGmFQwiB+GeHcRd7ezvDQEAmWmMzuT+nv7jKG4dddDc75UOW124foqu0OM+aO6h3Z/rGPd5E04vfz2C/a3gjLXXzTcxG/pSem7xzr4hxhn2BZLZvfpDjRg/3FBjBWuL78fflsWAOVl0uWk8rmG3yDCMNnMLMsshHpq0jLVQLKj6RrIbHBCYoq6WclPHHJ+PNdqjEZlpLNgbaTy2xoTHAQ3kBasKZyg3/XUDAVV5urVcDE5mQXsGWugIJqikibVmcZTJIrL0Bq3NKdgjxhak2q5ukmpWuXS+QJPEBVi52vE025VJy7Yw18u3g==");

b{all:unset;color:red}а не b{all:unset;color:#911;background:red}в первой версии

PHP + HTML + CSS, 392 байта

сердце красное + черное, которое выглядит более симпатичным

Может быть, позвонить номер цвета в части CSS

<?=gzinflate(base64_decode("jVTLDoIwELyb+A8m3nXrzdrwL7xijAgG8GAI/67WdpktD00DoWWmMztLMU37LPLo3t3i+nwpNe0O+a1Purgo9KNs8vaUVkVV6+1RqVMSp9dzXT3KTNd51pv9l7xemXtEG/UeZC9yT8OdhrlFK3iLKCX4IZqEwngPcuh/vBCjPd8k34nZJxGA3TLxMip9hgWAkAP67cTyUBOhJluVXDYxWIKsBWgyRE9jEntayNL75CxdfYuRBkqB1ozBkdJvg46iRIiWNmOQCSQ6vpygIEmlqYZz1LAN1AQmhUFQUfBBhjVzbWE1SFIbNOi6NqUSHkI06JvtmjlqMzR37gSCMxEboicbG/wVpPbICzv5y8sL"));

добавить это, прежде чем это выглядит лучше

<style>*{word-spacing:1em;}</style>

Выведите первую версию, это самый уродливый HTML-код в моей жизни

красно-черное сердце

<style>*{word-spacing:1em;}</style><style>p{margin:0.2em}b{all:unset;color:#911;background:red}</style>
<p>0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
<p>1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
<p>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
<p>1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
<p>1 1 1 1 0 <b>1 1 1</b> 0 1 1 0 0 <b>1 1 0</b> 0 1 0 1 0
<p>1 1 1 <b>1 0 0 1 0 1 1</b> 0 <b>1 1 1 1 0 1 1</b> 1 0 1
<p>0 1 0 <b>1 1 0 1 0 0 1</b> 0 <b>1 1 0 1 1 0 0</b> 0 1 1
<p>0 1 1 <b>1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1</b> 0 1
<p>0 1 <b>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1</b> 1 0
<p>1 0 <b>1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0</b> 0 1
<p>0 0 1 <b>1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0</b> 1 0
<p>1 0 1 <b>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0</b> 1 1 1
<p>0 1 0 1 <b>0 1 1 0 1 0 0 1 0 1 1 0</b> 1 1 0 0 0
<p>1 1 0 1 1 <b>1 1 0 1 1 1 0 1 1 0 0</b> 1 1 0 0 1
<p>0 1 0 1 1 1 <b>1 0 0 1 0 1 1 0 1</b> 1 1 1 0 1 1
<p>1 0 1 0 1 0 1 <b>1 0 1 0 0 1 0</b> 1 1 0 1 1 0 0
<p>0 1 0 0 1 1 1 1 <b>0 1 1 1 0</b> 1 1 0 0 1 1 0 0
<p>1 0 1 0 1 1 1 1 0 <b>0 1 0</b> 1 1 0 1 1 1 1 0 1
<p>1 1 0 1 0 1 0 1 1 0 <b>1</b> 0 0 1 0 1 1 0 1 1 0
<p>0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
<p>0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
<p>1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
<p>0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1

    <style>p{margin:0.2em}b{all:unset;color:red}</style>
    <p>0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
    <p>1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
    <p>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
    <p>1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
    <p>1 1 1 1 0 <b>1 1 1</b> 0 1 1 0 0 <b>1 1 0</b> 0 1 0 1 0
    <p>1 1 1 <b>1 0 0 1 0 1 1</b> 0 <b>1 1 1 1 0 1 1</b> 1 0 1
    <p>0 1 0 <b>1 1 0 1 0 0 1</b> 0 <b>1 1 0 1 1 0 0</b> 0 1 1
    <p>0 1 1 <b>1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1</b> 0 1
    <p>0 1 <b>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1</b> 1 0
    <p>1 0 <b>1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0</b> 0 1
    <p>0 0 1 <b>1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0</b> 1 0
    <p>1 0 1 <b>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0</b> 1 1 1
    <p>0 1 0 1 <b>0 1 1 0 1 0 0 1 0 1 1 0</b> 1 1 0 0 0
    <p>1 1 0 1 1 <b>1 1 0 1 1 1 0 1 1 0 0</b> 1 1 0 0 1
    <p>0 1 0 1 1 1 <b>1 0 0 1 0 1 1 0 1</b> 1 1 1 0 1 1
    <p>1 0 1 0 1 0 1 <b>1 0 1 0 0 1 0</b> 1 1 0 1 1 0 0
    <p>0 1 0 0 1 1 1 1 <b>0 1 1 1 0</b> 1 1 0 0 1 1 0 0
    <p>1 0 1 0 1 1 1 1 0 <b>0 1 0</b> 1 1 0 1 1 1 1 0 1
    <p>1 1 0 1 0 1 0 1 1 0 <b>1</b> 0 0 1 0 1 1 0 1 1 0
    <p>0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
    <p>0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
    <p>1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
    <p>0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1

375 байт для создания HTML-страницы напрямую с PHP

<?$o=2841;for(;$i<16;)$t.=il.Oo[$o>>$i++&1].vey.Oo[$o>>$i++&1].u;foreach(str_split($t)as$c)$x.="0".decbin(ord($c));$a=[1,9,20,28,41,49,62,82,103,125,146,168,190,212,234,256,278,300];$z=[3,11,26,34,47,55,77,98,119,140,160,179,200,220,240,260,280,300];for($i=0;$i<483;$i++)echo $i%21?"":"<p>",in_array($i-88,$a)?"<b style=color:red>":"",$x[$i],in_array($i-88,$z)?"</b>":""," ";
Йорг Хюльсерманн
источник
2
Просто замена color:#911;background:redс color:red;делает его соответствуют стандарту баунти спецификации, а также экономия нескольких байт.
Emigna
3

Powershell, 110 байт

'uil','vey'*8|%{$s+=$_+'oOOooOOOooOoOOO'[$i++]}
-join(8..490|%{(+$s[$_-shr3]-shr(7-$_%8))%2
' 
'[!(++$j%21)]})

Объяснение:

Первая строка скрипта берет подстроки и вставляет Oмежду ними букву . Результатом является строка uiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey. Обратите внимание, что первый и последний символы являются избыточными.

Цикл выводит все необходимые (8..490)биты из символов строки, а также пробел или перевод строки.

Загадка получателя валентинки

Можно видеть, что маленький и большой символ Oсами составляют битовую кодировку. Всего 15 символов (битов). Есть только один раздел на биты для получения символов ASCII: oOOooOOO+ ooOoOOO[o]. Пришлось добавить маленькое, oа 0не в конце. Это символы ASCII:g.

Кто этот загадочный g.?

Mazzy
источник
2

PHP, 121 байт

for($n=5682;$i++<60;)for($b=8;$b;)$p.=(1&ord(~$i&3||($n/=2)&1?uiloveyo[$i%8]:O)>>--$b)." ";echo wordwrap($p."0 1 1",42);

сломать

$n=2*bindec("000101100011001"); // where to NOT replace o with O
for($i=1;$i<61;$i++)            // loop $i from 1 to 60
{
    $c=
        ~$i&3                       // $i%4!=3
        ||
        ($n/=2)&1                   // or (1. shift $n, 2. test bit 0)
        ? "uiloveyo"[$i%8]          // yes: character from string
        : "O"                       // no: uppercase "O"
    ;
    for($b=8;$b--;)                 // run from bit 7 to bit 0
        $p.=(1 & ord($c)>>$b). " ";     // append 1 or 0 plus space
}
$p.="0 1 1";                    // append the missing three bits
echo wordwrap($p,42);           // wrap at column 42 (actually 41; 42 is space -> gets cut)
Titus
источник
2

q / kdb +, 107 93 85 55 53 байта

Решение:

23 21#0 1(,/)0b vs'@[61#"ilOveyOu";0x020e1222262e;_:]

Пример:

q)23 21#0 1(,/)0b vs'@[61#"ilOveyOu";0x020e1222262e;_:]
0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0
1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1
0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1
0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0
1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1
0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0
1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1
0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0
1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1
0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1
1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0
0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0
1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1
1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0
0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1

Объяснение:

23 21#0 1(,/)0b vs'@[61#"ilOveyOu";0x020e1222262e;_:] / the solution
                   @[             ;              ;  ] / apply[input;indices;function]
                                                  _:  / lowercase
                                   0x020e1222262e     / 2 14 18 34 38 46 represented in hex
                    61#"ilOveyOu"                     / 61 take "ilOveyOu" (wraps around)
             0b vs'                                   / convert into 8-bit representation
         (,/)                                         / flatten
      0 1                                             / index into 0 / 1 (convert from booleans)
23 21#                                                / reshape

Примечания:

  • -2 байта благодаря ngn!
streetster
источник
1

Python 3, 199 байт:

z='01111011101'
a='011010010110110001'
b=z+'10011001010111100101'
[print(' '.join(''.join([a+i[0]+b+i[1]+z+'01'for i in'10 01 10 00 11 01 00'.split()])+a+'0'+b[:16])[i:i+41])for i in range(0,966,42)]
Тим
источник
1

Python 3, 170 байт

from textwrap import*
print('\n'.join(' '.join(list(i))for i in wrap(''.join(bin(ord(i)+256)[3:]for i in (7*"il%svey%su")%(tuple("oOOooOOOooOoOO"))+"ilOv"),21))+" 0 1 1")

делает строковое повторение «Il% svey% su», повторяет его требуемое количество раз, затем использует кортеж для подстановки всех o в. Затем он преобразует его в двоичный, использует модуль textwrap, преобразует каждый элемент нового список в список, объединяет с пробелом, затем добавляет 0 1 1, потому что это кажется заглушкой или чем-то

Разрушаемый Лимон
источник
1

Mathematica, 123 байта (275 с цветом)

Я не уверен, если Gridвместо вывода строки все в порядке (если нет, то это неконкурентная запись).

Ч / Б

Grid@Partition[ReplacePart[PadLeft[{},483,IntegerDigits[36^^nz4sp78k5qyb,2,64]],
Thread[51+32{0,1,4,5,6,9,11,12,13}->0]],21]

введите описание изображения здесь

цвет

Grid[Partition[ReplacePart[PadLeft[{},483,IntegerDigits[36^^nz4sp78k5qyb,2,64]],
Thread[51+32{0,1,4,5,6,9,11,12,13}->0]],21],ItemStyle->{{},{},Thread[Join@@MapIndexed[
Thread@{Range@@#,2+First@#2}&,Thread[Partition[IntegerDigits[36^^k32b741shmsoiwed4vnakt],
17]+{0,10}]]->Red]}]

введите описание изображения здесь

2012rcampion
источник
Можно ли скопировать / вставить результат gridв виде обычного текста и вставить его в блокнот? На что это похоже? Разделенный пробелом (один пробел) с символами новой строки, как показано на рисунке?
Стьюи Гриффин
1

Ruby 142 байта

(('iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv'.unpack('B*')[0]+'011').split(/(.{21})/)-['']).map{|i|puts(i.chars.join(' '))}

(Чуть больше) разборчиво:

(('iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv'.unpack('B*')[0]+'011') 
  # unpack turns it into a binary string, [0] takes the first element, and then we add on the trailing 011
.split(/(.{21})/) -['']) 
  # split it every group of 21 characters and remove the empty strings that are also included
.map { |i| puts(i.chars.join(' ')) } 
  # take each string of 21 characters, get its chars and join them with an empty string for formatting (puts takes care of the newlines)

Я еще не нашел способа сжать исходный текст в более лаконичную форму в Ruby - в нем есть несколько замечательных функций для манипуляции со строками, но во всех попытках я использовал больше символов, чем сама строка. Любые указатели оценили, это мой первый Code Golf на StackOverflow!

Smittles2003
источник
Добро пожаловать в Программирование Пазлов и Code Golf Stack Exchange! Вы пытались установить строку в переменную (например a), затем делаете a+a+a...? Еще лучше, если Ruby поддерживает умножение строк a*count,!
wizzwizz4
@ wizzwizz4, строка не является чистым повторением строки. :) (Хотя, вероятно, есть лучшие способы сделать это, но я не думаю a+a+a, что так)
Stewie Griffin
Я знаю! Сделайте сокращенную версию всего в нижнем регистре, повторите ее, затем замените n oна заглавную O!
wizzwizz4
1

Ржавчина, 195 байт

||for(c,i)in"iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOve".bytes().fold(String::new(),|a,c|format!("{}0{:b}",a,c)).chars().zip(1..484){print!("{}{}",c,if i%21!=0{' '}else{'\n'})}

Ungolfed:

fn main(){
    // convert bytes of the string to binary numerals.
    let s = "iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOve"
        .bytes()
        .fold(String::new(),|a,c|format!("{}0{:b}",a,c));

    // print them over the range with newlines/spaces as appropriate
    for(c,i) in s.chars().zip(1..484) {
        print!("{}{}",c,if i%21!=0{' '}else{'\n'})
    }
}
Харальд Корнелиусен
источник
1

C (gcc) , 102 байта

f(i){for(i=0;i<483;)printf("\n%2d"+!!(i++%21),(i/8%4^2|35609>>i/32&1?"iloveyou"[i/8%8]:79)>>7-i%8&1);}

Наезжать

f(i){
for(i=0;i<483;)         Loop through bits.
printf("\n%2d"
+!!(i++%21),            Decide if newline in format string should be skipped.
(i/8%4^2|               Are we at a non-'o' letter?
                        (They occur every 4th letter, starting at index 2.)
35609>>i/32&1?          Check with magic number if the 'o' should be capital.
"iloveyou"[i/8%8]:      If not-'o' or not capital, use current letter.
79)                     Otherwise, use the letter 'O'.
>>7-i%8&1               Extract bit to write.
);}

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

gastropner
источник
1

Pyth, 47 байтов

jPcjdsm+0.BCdtPs.i*8c"uil vey"dmr\o!djC\䱨2 42

Попробуйте это онлайн здесь .

jPcjdsm+0.BCdtPs.i*8c"uil vey"dmr\o!djC\䱨2 42   Implicit: d=" "
                    c"uil vey"d                  Chop "uil vey" on spaces, to yield ["uil" "vey"]
                  *8                             Repeat the above 8 times - {1}
                                      C\䱨       Character code of 䱨, yields 19560
                                     j    2      Convert the above to base 2
                               m                 Map the digits of the above, as d, using:
                                r\o!d            If d is 0, yield "O", otherwise "o" - {2}
                .i                               Interleave {1} with {2}
               s                                 Concatenate into a string
                                                   This yields "uiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey"
             tP                                  Remove first and last characters of the above
      m                                          Map each character, as d, using:
           Cd                                      Get character code
         .B                                        Convert to binary string
       +0                                          Prepend 0 (all binary strings will be length 7, so this pads to length 8)
     s                                           Flatten the result of the map
   jd                                            Join on spaces
  c                                        42    Chop into strings of length 42
 P                                               Discard the last, partial, string
j                                                Join on newlines, implicit print
Sok
источник
0

/// , 220 байт

/H/2E//G/CBDCC//F/ABC2C//E/AC//D/2B//C/A2//A/33//B/32//2/0 //3/1 /2G22C3
ABFDB3
ABDBHABB
BG2D2
EFDB
EDCEAB3
DG22A
HFD3
HDBHAB
BBG223
2HFD
BEDBHA3
DBG22
CEF23
DEDCEA
BBBG2
DHF2
BBEDCE3
CBBG
2DHF
DBEDBH
ABBBCBDCA
22DHABC2A

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

акролит
источник
0

C ++ 11, неконкурентный, 726 687 636 байт (* требуется NIX или W10 порог 2)

#include <iostream>
#include <string>
#ifdef  _WIN32
#include <Windows.h>
#endif
using namespace std;int main() {
#ifdef  _WIN32
HANDLE h=GetStdHandle(-11);DWORD m;GetConsoleMode(h,&m);SetConsoleMode(h,m|0x04);
#endif
cout<<"\033[47m\033[30m";string d("4fup8y8hihjyl9g1ifh9wpc4f52l5a8giosim2isj80xff814db9wmf958x4zlbl58x4zlbl6zxgjt9whbcz4mu91r0j5c4kfq48uxw53w1zvpdshv6ylrnl3t38qyiteyw0lphs3kx59vf4ezay145thrt7lkb80w83nz10ih27f77p0820wzr9");for(int s=0;s!=184;s+=8){unsigned long long n=stoull(d.substr(s,8),NULL,36),i=3;for(int p=40;p!=-2;p-=2){int r=(n&(i<<p))>>p;printf(r>1?"\033[31m %d\033[30m":" %d",r>1?r-2:r);}puts("");}return 0;}

Я знаю, что это может быть лучше в гольф. Я хочу увидеть короткий ответ C ++, черт побери!

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

Вывод (цвета фиксированы):

введите описание изображения здесь


источник
Я предполагал, что только сердечная секция содержала сообщение, поэтому я закодировал все это. Излишне говорить, что я чувствовал себя идиотом, когда перечитывал вызов и тестировал первые несколько строк вывода в ascii.
0

Python, 473 байта

Цветные!

r=str.replace;print r(r(r(r(r(r(r(r("""
jh0k1k1k0jk1
ikik1kjk0h1
ik0hjikih
k1h0k1k1k00k0
i1ksi1ejk0s1ke0h
i1sk0kie0si1kiek1
0ks1hje0s1k1k0ej1
j1s1kik1kjkjej
jsik0hjikiek
ksk1h0k1k1k0ej
0jsikik1kjk0ek
k1sik0hjikei1
0k1sjh0k1ke1k00
1kis1kik1k0e1kj
0ki1sk0k1k1eiki
hk1sh0ke1k1k0
0kji1sj1ke1kjk0
hi1ks0ke1ki1k1
1hk1ks1e00k1k1k
00kjikik1kjk
0hi1k0hjik
ihk1h0k1ki
000kjikik1kj1
""",'h','1010'),'i','11'),'j','01'),'k','10'),'1','1 '),'0','0 '),'s','\x1b[0;40;31m'),'e','\x1b[0m')
Оливер Ни
источник
1
str.translateможет быть лучшим выбором
Mego
0

FEU , 360 байт

m/a/0 1 /b/1 0 /c/1 1 /d/0 0 /e/0 /f/1 /g
__DATA__
afaeaafabeab1
cfacababaae1
cbaaeacfaca0
fafaeaafabeae0
ccacababaa0
cfbaafacfafb1
aafaeaafabea1
acfacababae1
acbaaeacfac0
faafaeaafabd1
eacfacababa0
facbaaeacfaf1
aaafaeaafabe0
cacfacababe1
aacbaafacfa1
faaafaeaafab0
aeacfacabab0
faacbaafacb1
caaafaeaafaf0
eaeacfacabaf0
aaacbaaeacf0
cfaaafaeaafa1
daeacfacaba1

Просто тупое сжатие

TuxCrafting
источник