kocham cię kocham cię kocham cię!

58

XKCD # 99 , zatytułowany „Serce binarne”, pokazuje prosty obraz jedynek i zer, z niektórymi cyframi w kolorze czerwonym.

wprowadź opis zdjęcia tutaj

Czerwone serce jest widoczne gołym okiem, ale komunikat ukryty w sekwencji binarnej nie jest. Jeśli usuniesz wszystkie spacje i znaki nowej linii i zinterpretujesz sekwencję binarną jako 8-bitowy kod ASCII, otrzymasz komunikat:

iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv

Urocze, prawda?

Pssst ... Ciąg nie jest czystym powtórzeniem ciągu.


Wyzwanie polega na utworzeniu tego obrazu binarnego z 21 cyframi i 23 cyframi w dół. Powinna być dokładnie jedna spacja między każdą cyfrą w każdym rzędzie i jedna nowa linia dla każdego nowego wiersza. Zauważ, że ostatnie bity to tylko początek litery e, ponieważ 21*23nie można go podzielić przez 8. Te bity również są poprawne.

Funkcja lub program nie powinny pobierać żadnych danych wejściowych. Wiodące i końcowe spacje oraz znaki nowej linii są akceptowane.

Wynik twojego kodu powinien wyglądać następująco:

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

To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).


Tabela liderów

Stewie Griffin
źródło
1
Chcę, żebyś wiedział teraz, że jakoś znajdę sposób?
BlueRaja - Danny Pflughoeft
25
Daję nagrodę za najkrótszy kod, który zabarwia wyjście za pomocą czerwieni i czerni, aby serce
Beta Decay
Jeszcze bardziej ciekawi mnie, jaka jest ukryta wiadomość w wielkiej litery Oz ciągu wyjściowego ASCII!
brandonscript
Nie ma wiadomości, a przynajmniej żadna nie została odkryta przez wyjaśnienie xxccd.com, które mówi: „Zakłada się, że kombinacja wielkich i małych liter„ O ”ma na celu uniknięcie powtarzającego się wzoru.”
Petr Hudeček
1
@WeeingIfFirst Haha, przeceniasz moją umiejętność programowania :). Przyznam także zwycięzcy nagrodę w wysokości 100 powtórzeń, kiedy będę mógł
Beta Decay

Odpowiedzi:

21

Galaretka , 36 33 32 bajtów

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

Dzięki @JonathanAllan za grę w golfa z 3 bajtów!

Wypróbuj online!

Jak to działa

Główny link

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

jest wykonywany niladycznie (tzn. bez żadnych argumentów) podczas uruchamiania programu. Jego wartość zwrotna zostanie wydrukowana niejawnie.

“ḅUɗaṚPXṙ’

znajdź indeksy cytowanych znaków na stronie kodowej Jelly i zinterpretuj je jako cyfry dwuskładnikowej liczby podstawowej 250. Daje to liczbę całkowitą 13021639057551959994 .

          B

konwertuje wygenerowaną liczbę całkowitą na binarną. Daje to tablicę bitów 1011010010110110001001111011101100110010101111001010011110111010, która odpowiada kodowaniu UTF-8 ciągu ilOveyOu , przesuniętego o jeden bit w lewo.

Przesunięcie jest konieczne, ponieważ Bnie może zwrócić tablicy bitów z wiodącym 0 . Inne opcje obejmują negowanie cyfr binarnych lub obliczanie kwadratu w odwrotnej kolejności, ale takie podejście oszczędza jeden bajt.

            ṁ484

formuje wygenerowaną tablicę w zakresie od 1 do 484 , tj. powtarza zawartość tablicy tyle razy, ile jest to konieczne do osiągnięcia długości 484 .

To jeszcze jeden bit, niż potrzebujemy, aby uwzględnić zmianę. Możemy teraz usunąć pierwszy bit, ale później to oznacza, że ​​wszystkie bity, które muszą zostać zamienione, leżą na równych indeksach, co pozwala nam zachować wspomniany bajt.

                 “½:J⁺ȤṾ‘Ḥ¤

pobiera punkty kodowe znaków pomiędzy i ( [10, 58, 74, 138, 154, 186] ), a następnie „unhalves” je, tj. pomnaża je przez 2 ( [20, 116, 148, 276, 308, 372 ] ).

                ¬           ¦

warunkowo neguje bity przy tych indeksach. Odpowiada to zmianom we / wy w oryginalnym wzorze.

Wreszcie,

                             Ḋs21G

usuwa kolejkę z tablicy bitów (usuwając pierwszy bit), dzieli pozostałą tablicę na rzędy 21 elementów i drukuje wynikową macierz jako siatkę.

Dennis
źródło
2
Możesz zapisać jeszcze 3 bajty, używając wielkich liter Ojako domyślnych, myślę, że to robi:“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Jonathan Allan
Racja, jest więcej wielkich liter O niż małych liter. Dzięki!
Dennis
4
Tak właśnie wygląda czarna magia ..
Bassdrop Cumberwubwubwub
2
@BassdropCumberwubwubwub Teraz należy podjąć wysiłek, aby przekształcić go w czerwoną i czarną magię
Matthew Roh
43

Galaretka , 41 40 35 33 bajtów

Dzięki @Dennis za zakończenie ṖṖCG! (uzupełnienie C= 1-xzamiast logicznego braku ¬)

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

TryItOnline

W jaki sposób?

“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ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)

Wersja „kolorowa”, 77 bajtów

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

TryItOnline

Galaretka nie ma kolorów, ale i tak jest mi znacznie łatwiej to zobaczyć (jestem ślepy na kolory) ...

° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹ ° ° ° ¹ ¹ ° ¹
¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹ ° ° ¹ ° ¹ ° ¹
¹ ¹ ¹ ° ° ¹ ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ °
¹ ° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹ ° ° ° ¹ ° °
¹ ¹ ¹ ¹ ° 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 ° ° ¹ ° ¹ ¹ ° ¹ ¹ °
° ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹ °
° ¹ ° ¹ ° ¹ ¹ ¹ ¹ ° ° ¹ ° ¹ ° ° ¹ ¹ ¹ ¹ °
¹ ¹ ¹ ° ¹ ° ¹ ° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹
° ° ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹

W jaki sposób?

“¤Ɓ¥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
Jonathan Allan
źródło
27
Jeśli usuniesz ¬, cztery ostatnie bajty mogą się stać ṖṖCG. :)
Dennis
2
Och, wow, oczywiście - to po prostu trzeba zrobić!
Jonathan Allan
1
Wybacz mi, moja pedanteria; może właściwym terminem jest complement?
Sherlock9
@ Sherlock9, tak; naprawiono i dziękuję - nie potrafię tak dobrze przeliterować, więc często źle wpisuję słowa, jeśli sprawdzanie pisowni nie daje flagi!
Jonathan Allan
@WeeingIfFirst - Nie sprawdziłem, ale mam nadzieję, że to wciąż wystarczająco dobre, aby uznać za kolorowe.
Jonathan Allan
42

Właściwie 58 bajtów

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

Wypróbuj online!

Wyjaśnienie

Są tutaj trzy główne części, więc odpowiednio je podzielę.

Część 1: Konstruowanie ciągu base-256

Zamierzamy skonstruować odwrócony ciąg binarny, aby skorzystać ze struktury opartej na stosie (LIFO) i uniknąć komplikacji związanych z zerami wiodącymi w ciągu binarnym. Zatem docelowym łańcuchem binarnym jest 110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110, co jest równoważne z 20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478dziesiętną. W bazie-256 (przy użyciu tabeli znaków CP437 do konwersji) odpowiednim ciągiem jest ♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û. Aby skonstruować oryginalny ciąg binarny, konstruujemy ciąg base-256 (wykorzystując wzorzec w nim) i wykonujemy konwersje bazowe na dziesiętne i binarne.

Ciąg base-256 ma następujący format (spacje i znaki nowej linii zostały dodane dla zachowania przejrzystości):

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

Tak więc, każda z 7 środkowych sekcji może być utworzona przy użyciu rusztowania «%s₧ªn%s6ûi zastąpienia %sczęści jednym lub ÷.

Konkretna sekwencja si ÷jest nam potrzebna ≥≥÷≥÷÷≥≥≥÷÷≥≥÷. Ponieważ potrzebujemy tego jako listy ciągów o długości-1, naiwnym sposobem przedstawiania tego byłoby "≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#(popchnij ciąg, ułóż go na liście). Możemy jednak zrobić trochę lepiej. Interpretując ten ciąg jako liczbę binarną (gdzie reprezentuje 1i ÷reprezentuje 0), otrzymujemy 13542dziesiętnie. Konwertując to z powrotem na binarne (używając tradycyjnych 1s i 0s) i indeksując w łańcuch długości 2, możemy uzyskać listę używając jednego mniej bajtu niż naiwna metoda.

: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

Część 2: Konwersja na binarną

Ta część jest znacznie prostsza. Gdyby rzeczywiście miał możliwość bezpośredniej konwersji base-256 na binarną, skorzystalibyśmy z tego. Niestety tak nie jest, więc będziemy musieli użyć dziesiętnego jako formatu pośredniego.

,Poniższy kod reprezentuje kod z części 1 - do celów informacyjnych, jakie otrzymuje kod Część 1 z ,czytać wyjście z części 1 ze standardowego wejścia. Nie jest częścią rzeczywistego kodu końcowego.

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

Część 3: Formatowanie

Gdyby wyzwanie polegało jedynie na wyprowadzeniu łańcucha binarnego w niezmienionej postaci, bylibyśmy gotowi. Jednak nadal mamy trochę do sformatowania, aby uzyskać ciąg binarny w prostokąt 21 x 23.

Podobnie jak w części 2, ,reprezentuje dane wyjściowe z poprzedniej części i nie jest częścią rzeczywistego kodu.

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)

Dla tych, którzy śledzą w domu, jest to równoważny kod Python 3 (481 bajtów):

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]))
Mego
źródło
46
Wiesz, takie programowanie pozwala mi wierzyć Egipcjanom, że tak naprawdę bardzo zaawansowani i odnoszący sukcesy programiści i hieroglify byli po prostu wybranym przez nich językiem. +1
MonkeyZeus
Jaki to był język? Czy ta odpowiedź jest kompilowana?
Jack
@Jack To jest właściwie . Kompilacja nie jest wymagana.
Mego
1
@Mego: 0 Jesteś BOSS za pisanie tego kodu
Jack
1
Co się stanie, jeśli potrzebujesz cyfry 34 w podstawowej liczbie 256? (ciąg zamykający ciąg znaków)
Jonathan Allan
22

JavaScript (ES6), 169 ... 136 135 bajtów

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

Zapisano 2 bajty dzięki Andrakis
Zapisano 4 bajty dzięki Hedi
Zapisano 3 5 bajtów dzięki Neil

Wersja kolorowa, 249 bajtów (237 bajtów JS + 12 bajtów CSS)

Kod JS generuje grafikę ASCII pogrubionymi znacznikami serca. 12 bajtów CSS jest wymaganych do pokolorowania na czerwono. (Czy liczba bajtów jest uczciwa?)

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
źródło
2
Można zaoszczędzić kilka bajtów przez zastąpienie wymienić: s=>s.replace(/./g,'$& '). Pracowałem nad prawie identycznym rozwiązaniem.
Andrakis,
1
Nie s.replace(/./g,'$& ')można zastąpić s.split``.join` `?
Hedi
2
[...s].join` `
Neil
1
Myślę, że replace(/./g,(c,i)=>c+=++i%21?' ':'\n')(oczywiście używając dosłownego nowego wiersza) zapisuje kolejny bajt. Może istnieć jeszcze lepszy sposób na wyrażenie tego pomysłu.
Neil
20

05AB1E , 77 54 53 44 43 41 bajtów

Wykorzystuje kodowanie CP-1252 .

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

Wyjaśnienie

’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

Wypróbuj online!

Emigna
źródło
3
Wygląda
3
@tomsmeding: Rzeczywiście! Narysował mi czapkę, kiedy spotkaliśmy się kilka lat temu, więc teraz nim jestem :)
Emigna
Wiem, że minęło 2,5 roku, ale można Golf Sðý42ô»celu S21ô», ponieważ »łączy list wewnętrzne spacjami niejawnie (i •1žä¿*•powinno być teraz •Å¾$6•, ponieważ całkowite są kodowane w base-255, teraz zamiast bazy-214).
Kevin Cruijssen
15

CJam , 48 bajtów

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

Współpraca z @MartinEnder, który ściągnął trudne 3 bajty za pomocą "uilvey"3/łańcucha. Tłumacz online .

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
źródło
12

JavaScript ES6 REPL , 124 121 119 113 bajtów

Zaoszczędź 6 bajtów dzięki @ETHproductions

Jest to pełny program, który można wkleić w REPL / konsoli, aby uzyskać poprawny wynik.

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?` `:`
`)

Więcej pełnych słów

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

Kolorowe serce tylko JavaScript, 281 bajtów

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'}`))

Działa to poprzez przełączanie kolorów co n bitów i korzysta z funkcji console.log do rejestrowania kolorów

Kolorowe serce CSS, 229 + 12 bajtów

Jeśli dozwolone jest używanie css, kolorowe serce można jeszcze bardziej zmniejszyć do 229 bajtów kodu JavaScript i 12 bajtów 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
źródło
Powód, dla którego to zrobiłem, jest taki, ponieważ można to uznać za pełny program. Nie ma na stałe żadnych zmiennych, które użytkownik powinien zmienić, zamiast tego można je wkleić i wkleić. Nazywam to urywkiem, ale równie dobrze może to być pełny program. Myśli?
Bassdrop Cumberwubwubwub
Opiera się na zachowaniu REPL, co oznacza, że ​​językiem jest „Javascript ES6 REPL” ( źródło ).
Mego
@Mego Dzięki, odpowiednio zredagowałem moją odpowiedź
Bassdrop Cumberwubwubwub
1
Jestem prawie pewien, że możesz się pozbyć ai po prostu użyć num>>i/64&1w obu miejscach, oszczędzając 1 bajt. Ponadto ++i%21==0?newline:spacejest taki sam jak ++i%21?space:newline.
ETHproductions
Kolejna wskazówka: zmień i=0,r=''na i=r=''; ''jest automatycznie wymuszane na 0.
ETHprodukcje
9

MATL, 56 55 bajtów

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

Wypróbuj online

Wyjaśnienie

'!?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
źródło
9

PowerShell v2 +, (UTF-16) 300 bajtów

Poprawiono błędną liczbę bajtów dzięki @Mego

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

Nie najkrótsze, ale inne podejście. Ręcznie wziąłem każdą linię i pokroiłem na pary, każda (z grubsza) o długości 9-11 znaczących bitów. Przekształciłem każdą z tych wartości binarnych na char(Uwaga: PowerShell domyślnie używa UTF-16, a nie UTF-8) i zamienił to w ciąg. To jest '...'początek.

Następnie -splitdzielimy to na łańcuchy o długości 2 i zapętlamy każdą parę. Te pary są dzielone na char-array przez $_[0,1], a każda z nich jest rzutowana jako int +$_i edytowana [convert]na binarną ( ,2) String. To jest -joinpołączone razem w jeden ciąg, a następnie PadLeftd, aby uzyskać odpowiednią długość, a następnie każdy element jest -replaced ze sobą i spacją '$1 '.

Wszystkie te ciągi są pozostawione w potoku, a dane wyjściowe są niejawne, przy domyślnym Write-Outputprzyklejaniu nowego wiersza między elementami.

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
źródło
Liczę 300 bajtów UTF-16. Python 3:len("'ږƍ໬ƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮ૒ƱϝIJ˲ӷʴ˘ͻ֙ץŻ઴Ŭɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}".encode('utf-16be'))
Mego
@Mego Oh, durr. To, że liczę UTF-16 dla ciągu, nie oznacza, że ​​muszę magicznie policzyć UTF-8 dla reszty kodu. Hah Dziękuję za pomoc.
AdmBorkBork
Miło mi pomóc :)
Mego
Gdyby nie wyglądało to tak zastraszająco, otworzyłbym terminal PowerShell i uruchomiłem go.
DaveTheMinion 30.09.16
6

/// , 237 bajtów

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

Wypróbuj online!

Erik the Outgolfer
źródło
4

Python 3, 147 144 bajtów

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)

Przetestuj to w ideone

Inicjuje ido 0w deklaracji funkcji, a następnie powtarza to 23 razy:
tworzy cały ciąg binarny bez spacji (patrz poniżej);
wycina rząd od wewnątrz za pomocą [i:i+21];
wstawia spacje za pomocą ' '.join(...);
odciski; i
przyrosty io 21 zi+=21

Aby utworzyć cały ciąg binarny:
powtarza się "ilOveyOu"osiem razy;
zastępuje Ow orazie potrzeby (w indeksach [2,14,18,34,38,46]);
- - - osiąga się chr(j+30)in' ,0@DL'to poprzez zapisanie 3 bajtów
konwertuje każdy znak na jego porządek;
rzutuje każdą liczbę porządkową na ciąg binarny ( '0bxxxxxxx');
usuwa wiodące '0b'z każdego użycia [2:];
dodaje każdy z '0'; i
łączy się z tym wszystkim''.join(...)

Jonathan Allan
źródło
Nie potrzebujesz lambda. Do i=0\nexec(...)lub i=0;exec(...)dla 137 bajtów.
mbomb007
Chyba że naprawdę musisz Python 3, można użyć Python 2, aby zmienić exec("...")się exec"..."i print(...)doprint...
mbomb007
3

PHP + HTML + CSS, 173 bajtów Kolorowe 367 bajtów

CLI tylko PHP 173 bajtów

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

zgodne z typem nagrody bounty text / html

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

b{all:unset;color:red}zamiast b{all:unset;color:#911;background:red}w pierwszej wersji

PHP + HTML + CSS, 392 bajtów

serce czerwone + czarne, które wygląda ładniej

Może zadzwoń pod numer koloru w części CSS

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

dodaj to, zanim będzie ładniej

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

Pierwsza wersja wyjściowa to najbrzydszy kod HTML w moim życiu

czerwono-czarne serce

<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 bajtów do bezpośredniego utworzenia strony HTML za pomocą 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>":""," ";
Jörg Hülsermann
źródło
2
Wystarczy wymianie color:#911;background:redz color:red;sprawia, że odpowiadają specyfikacji nagród, a także oszczędność kilka bajtów.
Emigna
3

PowerShell, 110 bajtów

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

Wyjaśnienie:

Pierwszy wiersz skryptu pobiera podciągi i wstawia Omiędzy nimi literę . Wynikiem jest ciąg uiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey. Pamiętaj, że pierwsze i ostatnie znaki są zbędne.

Pętla wyprowadza wszystkie niezbędne (8..490)bity ze znaków ciągu, a także spację lub linię.

Zagadka odbiorcy listu walentynkowego

Można zauważyć, że Osame małe i duże symbole składają się na kodowanie bitów. Istnieje 15 symboli (bitów). Jest tylko jedna partycja na bitach, aby uzyskać znaki ASCII: oOOooOOO+ ooOoOOO[o]. Musieliśmy dodać małe ozamiast 0na końcu. Te symbole ASCII to:g.

Kto jest taki tajemniczy g.?

mazzy
źródło
2

PHP, 121 bajtów

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

awaria

$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)
Tytus
źródło
2

q / kdb +, 107 93 85 55 53 bajtów

Rozwiązanie:

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

Przykład:

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

Wyjaśnienie:

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

Uwagi:

  • -2 bajty dzięki ngn!
streetster
źródło
1

Python 3, 199 bajtów:

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)]
Tim
źródło
1

Python 3, 170 bajtów

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

wykonuje powtórzenie ciągu „Il% svey% su”, powtarza go wymaganą liczbę razy, a następnie używa krotki do podciągania wszystkich znaków „o”. Następnie konwertuje je na binarne, używa modułu zawijania tekstu, konwertuje każdy nowy element lista do listy, łączy się ze spacją, a następnie dodaje 0 1 1, ponieważ wydaje się, że to skrót lub coś takiego

Zniszczalna cytryna
źródło
1

Mathematica, 123 bajty (275 z kolorem)

Nie jestem pewien, czy użycie Gridzamiast wyprowadzania łańcucha jest w porządku (jeśli nie, to jest to pozycja niekonkurująca).

Czarno-biały

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

wprowadź opis zdjęcia tutaj

Kolor

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

wprowadź opis zdjęcia tutaj

2012 rcampion
źródło
Czy można skopiować / wkleić wynik gridzwykłym tekstem i wkleić go do notatnika? Jak to wygląda? Spacja oddzielona (pojedyncza spacja) nowymi liniami, jak pokazano na rysunku?
Stewie Griffin,
1

Ruby 142 bajty

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

(Nieco więcej) czytelnie:

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

Nie znalazłem jeszcze sposobu na zagęszczenie oryginalnego tekstu w bardziej zwięzłą formę w Ruby - ma kilka świetnych funkcji manipulacji ciągami, ale na wszystkie sposoby próbowałem używać więcej znaków niż samego ciągu. Doceniam wszystkie wskazówki, to mój pierwszy Code Golf na StackOverflow!

Smittles2003
źródło
Witamy w Programowaniu łamigłówek i wymianie stosów kodów golfowych! Czy próbowałeś ustawić ciąg na zmienną (np. a), A następnie a+a+a... Jeszcze lepiej, jeśli Ruby obsługuje mnożenie strun a*count!
wizzwizz4,
@ wizzwizz4, ciąg nie jest czystym powtórzeniem ciągu. :) (Są jednak prawdopodobnie lepsze sposoby na zrobienie tego, ale nie wydaje mi się, żeby a+a+atak było)
Stewie Griffin
Wiem! Stwórz krótką wersję z małymi literami, powtórz ją, a następnie zamień literę n ona wielką O!
wizzwizz4,
1

Rdza, 195 bajtów

||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'})}

Nie golfowany:

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'})
    }
}
Harald Korneliussen
źródło
1

C (gcc) , 102 bajty

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

Zniszczony

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

Wypróbuj online!

gastropner
źródło
1

Pyth, 47 bajtów

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

Wypróbuj online tutaj .

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
źródło
0

/// , 220 bajtów

/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

Wypróbuj online!

acrolith
źródło
0

C ++ 11, niekonkurencyjny, 726 687 636 bajtów (* wymagany NIX lub W10 próg 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;}

Wiem, że można lepiej grać w golfa. Chcę zobaczyć krótką odpowiedź c ++ cholera!

Prawdopodobnie popełniłem też kilka błędów podczas kodowania sekcji serca.

Wyjście (kolory ustalone):

wprowadź opis zdjęcia tutaj


źródło
Założyłem, że wiadomość zawierała tylko sekcja serca, więc wszystko zakodowałem. Nie trzeba dodawać, że czułem się jak idiota, kiedy ponownie przeczytałem wyzwanie i przetestowałem kilka pierwszych linii wyjścia w ascii.
0

Python, 473 bajty

Kolorowy!

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')
Oliver Ni
źródło
1
str.translatemoże być lepszym wyborem
Mego
0

FEU , 360 bajtów

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

Po prostu głupia kompresja

TuxCrafting
źródło