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


58

XKCD №99 із заголовком "Бінарне серце" показує просте зображення одиниць і нулів, з деякими цифрами, пофарбованими червоним кольором.

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

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

Це кодовий гольф, тому найкоротша відповідь (у байтах) виграє.


Таблиця лідерів


1
Я хочу, щоб ти зараз знав, я якось знайду спосіб?
BlueRaja - Danny Pflughoeft

25
Я дам нагороду за найкоротший код, який забарвлює вихід, використовуючи червоний та чорний, щоб зробити серце
Beta Decay

Мені навіть цікавіше дізнатись, що приховане повідомлення у великих Oлітерах із вихідного рядка ASCII!
брендоскрипт

Немає жодного повідомлення, або принаймні жодного з них не було виявлено роз'яснювачами, які говорять про те, що "Суміш великих і малих букв" О "вважається навмисним, щоб уникнути повторюваного шаблону".
Петро Худечек

1
@WeeingIfFirst Haha, ви завищуєте мою навичку програмування :). Я також нагороджую переможця грошей у 100 повторень, коли зможу
Beta Decay

Відповіді:


21

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

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

Дякуємо @JonathanAllan за те, що виграли 3 байти!

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

Як це працює

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

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

виконується ніладично (тобто без жодних аргументів) під час запуску програми. Його повернене значення буде надруковано неявно.

“ḅUɗaṚPXṙ’

знайти індекси цитованих символів на кодовій сторінці Jelly та інтерпретувати їх як цифри біективної основної 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 , ніж малих. Дякую!
Денніс

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?
Шерлок9,

@ Шерлок9, так; виправлено & спасибі - я не можу все правильно написати, тому часто трапляються слова неправильно, якщо перевірка орфографії не дає прапор!
Джонатан Аллан

@WeeingIfFirst - Я не перевірив, але сподіваюся, що це все ще досить добре, щоб вважати кольоровим.
Джонатан Аллан

42

Власне, 58 байт

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

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

Пояснення

Тут є три основні частини, тому я збираюся її відповідно розбити.

Частина 1: Конструювання рядка base-256

Ми фактично збираємось бінарний рядок, перетворений на зворотній стороні, щоб скористатися структурою, заснованою на фактично стеці (LIFO), і уникнути ускладнень з провідними нулями в двійковому рядку. Таким чином, цільовим двійковим рядком є 110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110, що еквівалентно 20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478в десятковій. У базовій-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, ми можемо отримати список, використовуючи один менший байт, ніж метод naive.

: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: Перетворення на двійкове

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

У ,наведеному нижче коді представлений код з частини 1 - для пояснювальних цілей я замінив код частини 1 на, ,щоб прочитати вихід з частини 1 STDIN. Він не є частиною фактичного кінцевого коду.

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

Частина 3: Форматування

Якщо б завданням було просто вивести бінарний рядок таким, яким він є, ми б зробили це. Однак у нас ще є деяке форматування, щоб отримати бінарний рядок у прямокутник 21 х 23.

Як і в частині 2, ,представляє собою вихід з попередньої частини, а не є частиною фактичного коду.

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

Якою це була мова? Також складена ця відповідь?
Джек

@Jack Це насправді . Компіляція не бере участь.
Mego

1
@Mego: 0 Ви - BOSS, тоді для написання цього коду
Джек

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 байти завдяки Андракісу
Збережено 4 байти завдяки Хеди
збережено 3 5 байт завдяки Нілу

Кольорова версія, 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>


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

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


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

12

Javascript ES6 реплєї , 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

Він покладається на поведінку 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     

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масив через $_[0,1], і кожна з них передається у вигляді int +$_та [convert]ed у бінарний ( ,2) String. Це -joinоб'єднано в один рядок, потім PadLeft'd, щоб отримати належну довжину, тоді кожен елемент буде -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 

Я рахую 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


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]." ";}}

відповідати тексту тексту / 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;його відповідає специфікації Bounty, а також економії кількох байт.
Емінья

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.?


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)

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!

1

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

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


1

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

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


Чи можна скопіювати / вставити результат із gridпростого тексту та вставити його в блокнот? На що це схоже? Простір розділений (один простір) новими рядками, як показано на малюнку?
Стюі Гріффін

1

Рубін 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 - він має деякі чудові функції String маніпуляції, але всі способи я намагався використовувати більше символів, ніж сам рядок. Будь-які вказівники оцінені, це мій перший Code Golf на StackOverflow!


Ласкаво просимо до головоломки програмування та обміну стека коду! Ви спробували встановити рядок на змінну (наприклад a), потім робите a+a+a...? Ще краще, якщо Ruby підтримує множення рядків a*count!
wizzwizz4

@ wizzwizz4, рядок не є чистим повторенням рядка. :) (Є, мабуть, кращі способи це зробити, хоча я не думаю, що a+a+aце спосіб)
Стюі Гріффін

Я знаю! Створіть коротку версію для малих верств, повторіть її, а потім замініть 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'})}

Безголівки:

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

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



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


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

Я знаю, що це може бути краще для гольфу. Я хочу побачити коротку відповідь на прокляття!

Я, мабуть, також допустив кілька помилок, коли кодував відділ серця.

Вихід (кольори фіксовані):

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


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

Просто дурне стиснення

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