tôi yêu bạn, tôi yêu bạn, tôi yêu bạn!


58

XKCD # 99 , với tiêu đề "Trái tim nhị phân" hiển thị hình ảnh đơn giản của người và số không, với một số chữ số được tô màu đỏ.

nhập mô tả hình ảnh ở đây

Trái tim màu đỏ có thể nhìn thấy bằng mắt thường, nhưng thông điệp ẩn trong chuỗi nhị phân thì không. Nếu bạn xóa tất cả các khoảng trắng và dòng mới và diễn giải chuỗi nhị phân dưới dạng mã ASCII 8 bit, bạn sẽ kết thúc bằng thông báo:

iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv

Đáng yêu phải không?

Pssst ... Chuỗi không phải là sự lặp lại chuỗi thuần túy.


Thử thách của bạn là tạo ra hình ảnh nhị phân này với 21 chữ số và 23 chữ số trở xuống. Cần có chính xác một khoảng trắng giữa mỗi chữ số trong mỗi hàng và một dòng mới cho mỗi hàng mới. Lưu ý rằng các bit cuối cùng chỉ là phần đầu của chữ cái e, vì 21*23không chia hết cho 8. Bạn cũng cần các bit đó đúng.

Các chức năng hoặc chương trình không nên có bất kỳ đầu vào. Không gian hàng đầu và dấu và dòng mới được chấp nhận.

Kết quả mã của bạn sẽ trông như thế này:

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

Đây là mã golf, vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.


Bảng xếp hạng


1
Tôi muốn bạn biết ngay bây giờ tôi sẽ tìm cách nào đó?
BlueRaja - Daniel Pflughoeft

25
Tôi sẽ đưa tiền thưởng cho mã ngắn nhất tô màu đầu ra bằng cách sử dụng màu đỏ và đen để tạo trái tim
Beta Decay

Tôi thậm chí còn tò mò hơn khi biết thông điệp ẩn trong chữ viết hoa Otừ chuỗi đầu ra ASCII là gì!
brandonscript

Không có tin nhắn, hoặc ít nhất không có tin nhắn nào được phát hiện bởi Explxkcd.com, người nói rằng "Sự pha trộn giữa chữ hoa và chữ thường" O "được cho là cố ý để tránh mô hình lặp lại."
Petr Hudeček

1
@Weeing IfFirst Haha, bạn đánh giá quá cao kỹ năng lập trình của tôi :). Tôi cũng sẽ trao giải cho người chiến thắng với tiền thưởng 100 rep, khi tôi có thể
Beta Decay

Câu trả lời:


21

Thạch , 36 33 32 byte

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

Cảm ơn @Jonathan ALLan vì đã chơi golf 3 byte!

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Liên kết chính

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

được thực thi một cách đơn giản (nghĩa là không có bất kỳ đối số nào) khi chương trình được chạy. Giá trị trả lại của nó sẽ được in ngầm.

“ḅUɗaṚPXṙ’

tìm các chỉ số của các ký tự được trích dẫn trong trang mã của Jelly và diễn giải chúng dưới dạng các chữ số của một số cơ sở 250. Điều này mang lại số nguyên 13021639057551959994 .

          B

chuyển đổi số nguyên được tạo thành nhị phân. Điều này mang lại mảng bit 1011010010110110001001111011101100110010101111001010011110111010 tương ứng với mã hóa UTF-8 của chuỗi ilOveyOu , dịch chuyển một bit sang trái.

Việc thay đổi là cần thiết vì Bkhông thể trả về một mảng bit có 0 đứng đầu . Các tùy chọn khác bao gồm phủ định các chữ số nhị phân hoặc tính ngược lại hình vuông, nhưng phương pháp này tiết kiệm được một byte.

            ṁ484

tạo khuôn cho mảng được tạo như phạm vi từ 1 đến 484 , nghĩa là nó lặp lại nội dung của mảng nhiều lần nếu cần để đạt được độ dài 484 .

Đây là một chút nhiều hơn chúng ta cần, để tính đến sự thay đổi. Chúng ta có thể loại bỏ bit đầu tiên ngay bây giờ, nhưng làm như vậy sau đó có nghĩa là tất cả các bit phải hoán đổi nằm ở các chỉ số chẵn, cho phép chúng ta lưu byte đã nói ở trên.

                 “½:J⁺ȤṾ‘Ḥ¤

lấy các điểm mã của các ký tự nằm giữa ( [10, 58, 74, 138, 154, 186] ), sau đó "gỡ bỏ" chúng, tức là nhân chúng với 2 ( [20, 116, 148, 276, 308, 372 ] ).

                ¬           ¦

điều kiện phủ định các bit tại các chỉ số đó. Điều này tương ứng với O / o biến thể trong mẫu ban đầu.

Cuối cùng,

                             Ḋs21G

loại bỏ mảng bit (loại bỏ bit đầu tiên), chia mảng còn lại thành các hàng gồm 21 phần tử và in ma trận kết quả dưới dạng lưới.


2
Bạn có thể lưu thêm 3 byte bằng cách đặt chữ hoa Olàm mặc định, tôi nghĩ điều này sẽ xảy ra:“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Jonathan Allan

Phải, có nhiều chữ hoa chữ O hơn chữ thường. Cảm ơn!
Dennis

4
Vì vậy, đây là những gì ma thuật đen trông giống như ..
Bassdrop Cumberwubwubwub

2
@BassdropCumberwubwubwub Bây giờ cần phải nỗ lực để biến nó thành ma thuật đỏ và đen
Matthew Roh

43

Thạch , 41 40 35 33 byte

Cảm ơn @Dennis vì đã kết thúc ṖṖCG! (bổ sung C= 1-xthay cho logic không ¬)

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

Dùng thử

Làm sao?

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

Phiên bản "Màu", 77 byte

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

Dùng thử

Jelly không có đầu ra màu, nhưng dù sao thì điều này cũng dễ nhìn hơn nhiều (tôi bị mù màu) ...

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

Làm sao?

“¤Ɓ¥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
Nếu bạn loại bỏ ¬, bốn byte cuối cùng có thể trở thành ṖṖCG. :)
Dennis

2
Ồ wow, tất nhiên - điều đó phải được thực hiện!
Jonathan Allan

1
Xin tha thứ cho tôi có lẽ thuật ngữ thích hợp là complement?
Sherlock9

@ Sherlock9, vâng; đã sửa và cảm ơn - Tôi không thể đánh vần tốt tất cả, vì vậy thường sẽ bị sai từ nếu kiểm tra chính tả không có cờ!
Jonathan Allan

@Weeing IfFirst - Tôi đã không kiểm tra, nhưng hy vọng nó vẫn đủ tốt để được coi là màu.
Jonathan Allan

42

Trên thực tế, 58 byte

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

Hãy thử trực tuyến!

Giải trình

Có ba phần chính ở đây, vì vậy tôi sẽ chia nó ra cho phù hợp.

Phần 1: Xây dựng chuỗi cơ sở-256

Chúng tôi thực sự sẽ xây dựng chuỗi nhị phân đảo ngược, để tận dụng cấu trúc dựa trên ngăn xếp (LIFO) trên thực tế và để tránh các biến chứng với các số 0 đứng đầu trong chuỗi nhị phân. Do đó, chuỗi nhị phân đích là 110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110, tương đương với 20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478số thập phân. Trong cơ sở-256 (sử dụng bảng ký tự CP437 để chuyển đổi), chuỗi tương ứng là♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û . Để xây dựng chuỗi nhị phân ban đầu, chúng tôi xây dựng chuỗi cơ sở-256 (tận dụng lợi thế của mẫu trong chuỗi đó) và thực hiện chuyển đổi cơ sở sang thập phân và nhị phân.

Chuỗi cơ sở-256 có định dạng sau (khoảng trắng và dòng mới được thêm vào cho rõ ràng):

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

Do đó, mỗi trong số 7 phần giữa có thể được hình thành bằng cách sử dụng giàn giáo «%s₧ªn%s6ûvà thay thế các %sbộ phận bằng hoặc÷ .

Trình tự cụ thể của s và ÷s chúng ta cần là ≥≥÷≥÷÷≥≥≥÷÷≥≥÷. Vì chúng ta cần đây là danh sách các chuỗi có độ dài 1, nên cách biểu diễn ngây thơ này sẽ là "≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#(đẩy chuỗi, biến nó thành một danh sách). Tuy nhiên, chúng ta có thể làm tốt hơn một chút. Bằng cách diễn giải chuỗi đó dưới dạng số nhị phân ( đại diện 1÷đại diện 0), chúng ta có được 13542số thập phân. Bằng cách chuyển đổi trở lại thành nhị phân (sử dụng 1s và s truyền thống 0) và lập chỉ mục thành chuỗi có độ dài 2, chúng ta có thể lấy danh sách bằng cách sử dụng một byte ít hơn phương thức ngây thơ.

: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

Phần 2: Chuyển đổi thành nhị phân

Phần này đơn giản hơn nhiều. Nếu Trên thực tế có khả năng chuyển đổi trực tiếp cơ sở 256 thành nhị phân, chúng tôi sẽ sử dụng điều đó. Thật không may, nó không có, vì vậy chúng tôi sẽ phải sử dụng thập phân như một định dạng trung gian.

Đoạn ,mã sau biểu thị mã từ Phần 1 - với mục đích giải thích, tôi đã thay thế mã Phần 1 bằng ,để đọc đầu ra từ Phần 1 từ STDIN. Nó không phải là một phần của mã cuối cùng thực tế.

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

Phần 3: Định dạng

Nếu thử thách chỉ đơn thuần là xuất chuỗi nhị phân như hiện tại, chúng ta sẽ hoàn thành. Tuy nhiên, chúng tôi vẫn có một số định dạng phải làm để có được chuỗi nhị phân thành hình chữ nhật 21 x 23.

Như trong Phần 2, phần ,thể hiện đầu ra từ phần trước và không phải là một phần của mã thực tế.

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)

Đối với những người theo dõi tại nhà, đây là mã Python 3 tương đương (481 byte):

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
Bạn biết đấy, chính việc lập trình như thế này khiến tôi tin rằng người Ai Cập nơi các lập trình viên và chữ tượng hình thực sự rất tiên tiến và thành công chỉ đơn giản là ngôn ngữ họ chọn. +1
MonkeyZeus

Ngôn ngữ này là gì? Ngoài ra, câu trả lời này được biên soạn?
Jack

@Jack Đây là thực tế . Không có phần tổng hợp liên quan.
Mego

1
@Mego: 0 Bạn là BOSS sau đó để viết mã này
Jack

1
Điều gì xảy ra nếu bạn cần chữ số 34 trong một số cơ sở 256? (ký tự bao quanh chuỗi)
Jonathan Allan

22

JavaScript (ES6), 169 ... 136 135 byte

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

Đã lưu 2 byte nhờ Andrakis
Lưu 4 byte nhờ Hedi
Đã lưu 3 5 byte nhờ Neil

Phiên bản màu, 249 byte (237 byte JS + 12 byte CSS)

Mã JS xuất ra nghệ thuật ASCII với các thẻ in đậm cho trái tim. Cần 12 byte CSS để tô màu đỏ. (Số byte đó có công bằng không?)

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
Bạn có thể lưu một số byte bằng cách thay thế : s=>s.replace(/./g,'$& '). Tôi đã làm việc trên một giải pháp khá giống nhau.
Andrakis

1
Không thể s.replace(/./g,'$& ')được thay thế bởi s.split``.join` `?
Hedi

2
[...s].join` `
Neil

1
Tôi nghĩ replace(/./g,(c,i)=>c+=++i%21?' ':'\n')(rõ ràng là sử dụng một dòng chữ mới ở đó) sẽ tiết kiệm thêm một byte. Cũng có thể có một cách tốt hơn để thể hiện ý tưởng đó.
Neil

20

05AB1E , 77 54 53 44 43 41 byte

Sử dụng mã hóa CP-1252 .

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

Giải trình

’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

Hãy thử trực tuyến!


3
Bạn dường như có một hình ảnh hồ sơ có liên quan
tomsmeding

3
@tomsmeding: Thật vậy! Anh ấy đã vẽ cho tôi một anh chàng đội mũ khi chúng tôi gặp nhau vài năm trước, vì vậy đó là tôi bây giờ :)
Emigna

Tôi biết nó được 2,5 năm, nhưng bạn có thể golf Sðý42ô»đến S21ô», kể từ khi »gia nhập danh sách bên trong bằng dấu cách ngầm (và •1žä¿*•nên bây giờ được •Å¾$6•, vì số nguyên được mã hóa trong cơ sở-255 hiện nay thay vì cơ sở-214).
Kevin Cruijssen

15

CJam , 48 byte

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

Cộng tác với @MartinEnder, người đã lấy ra 3 byte khó khăn với "uilvey"3/chuỗi. Phiên dịch trực tuyến .

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 REPL , 124 121 119 113 byte

Đã lưu 6 byte nhờ @ETHproductions

Đây là một chương trình đầy đủ có thể được dán trong REPL / console để tạo ra kết quả chính xác.

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

Dài dòng hơn

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

Trái tim chỉ có màu JavaScript, 281 byte

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

Điều này hoạt động bằng cách chuyển đổi màu sắc mỗi n bit và sử dụng khả năng của console.log để ghi lại màu sắc

CSS màu tim, 229 + 12 byte

Nếu sử dụng css được cho phép, trái tim màu có thể giảm hơn nữa xuống còn 229 byte mã JavaScript và 12 byte 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?` `:`
`)


Lý do tôi làm theo cách này là vì đây có thể được coi là một chương trình đầy đủ. Không có biến số mã hóa nào cần được thay đổi bởi người dùng, thay vào đó, biến này có thể được sao chép và nó hoạt động như bình thường. Tôi gọi nó là một đoạn trích nhưng nó cũng có thể là một chương trình đầy đủ. Suy nghĩ?
Bassdrop Cumberwubwubwub

Nó phụ thuộc vào hành vi REPL, có nghĩa là ngôn ngữ là "Javascript ES6 REPL" ( nguồn ).
Mego

@Mego Cảm ơn, đã chỉnh sửa câu trả lời của tôi cho phù hợp
Bassdrop Cumberwubwubwub

1
Tôi khá chắc chắn rằng bạn có thể thoát khỏi avà chỉ sử dụng num>>i/64&1ở cả hai nơi, tiết kiệm 1 byte. Ngoài ra, ++i%21==0?newline:spacelà giống như ++i%21?space:newline.
Sản phẩm ETH

Một mẹo khác: đổi i=0,r=''sang i=r=''; ''được tự động ép buộc về 0.
Sản phẩm điện tử

9

MATL, 56 55 byte

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

Dùng thử trực tuyến

Giải trình

'!?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 byte

Đã sửa số byte bị lỗi nhờ @Mego

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

Không phải là ngắn nhất, nhưng một cách tiếp cận khác nhau. Tôi tự lấy từng dòng và cắt chúng thành từng cặp (khoảng) 9-11 bit có chiều dài đáng kể. Chuyển đổi từng giá trị nhị phân đó thành một char(Lưu ý: PowerShell sử dụng UTF-16 theo mặc định, không phải UTF-8) và kết hợp nó thành một chuỗi. Đó là '...'lúc bắt đầu.

Chúng tôi sau -splitđó thành chuỗi có độ dài 2 và lặp qua từng cặp. Các cặp đó được chia thành một char-array thông qua $_[0,1], và mỗi cặp được tạo thành một int +$_[convert]ed thành một nhị phân ( ,2) String. Điều đó được -joinkết hợp thành một chuỗi, sau đó PadLeft'để có được độ dài phù hợp, sau đó mỗi phần tử là-replace d với chính nó và một khoảng trắng '$1 '.

Các chuỗi đó đều được để lại trên đường ống và đầu ra là ẩn, với mặc định Write-Outputgắn một dòng mới giữa các phần tử.

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 

Tôi đếm 300 byte UTF-16. Python 3:len("'ږƍ໬ƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮ૒ƱϝIJ˲ӷʴ˘ͻ֙ץŻ઴Ŭɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}".encode('utf-16be'))
Mego

@Mego ơi, durr. Chỉ vì tôi đang đếm UTF-16 cho chuỗi không có nghĩa là tôi sẽ đếm UTF-8 một cách kỳ diệu cho phần còn lại của mã. Hah Cảm ơn sự giúp đỡ.
admBorkBork

Rất vui được giúp đỡ :)
Mego

Nếu nó trông không đáng sợ lắm, tôi thực sự sẽ mở một thiết bị đầu cuối PowerShell và chạy nó.
DaveTheMinion


4

Python 3, 147 144 byte

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)

Kiểm tra nó tại ideone

Initialises iđến 0trong phần khai báo hàm, sau đó lặp đi lặp lại này 23 lần:
làm cho các chuỗi toàn bộ nhị phân mà không có dấu (xem dưới đây);
lát một hàng từ bên trong sử dụng [i:i+21];
chèn các khoảng trắng với ' '.join(...);
bản in; và
gia tăngi 21 vớii+=21

Để tạo toàn bộ chuỗi nhị phân:
nó lặp lại "ilOveyOu"tám lần;
thay thế Obằng onơi cần thiết (tại các chỉ mục [2,14,18,34,38,46]);
- - - điều này đạt được với chr(j+30)in' ,0@DL'việc lưu 3 byte
chuyển đổi mỗi char thành thứ tự;
biến mỗi thứ tự thành một chuỗi nhị phân ( '0bxxxxxxx');
loại bỏ hàng đầu '0b'từ mỗi sử dụng [2:];
chuẩn bị mỗi cái với một '0'; và
tham gia toàn bộ''.join(...)


Bạn không cần lambda. Làm i=0\nexec(...)hoặc i=0;exec(...)cho 137 byte.
mbomb007

Trừ khi bạn thực sự cần Python 3, bạn có thể sử dụng Python 2 thay đổi exec("...")để exec"..."print(...)đểprint...
mbomb007

3

PHP + HTML + CSS, 173 byte màu 367 byte

CLI chỉ có PHP byte byte

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

phù hợp với văn bản loại tiền thưởng văn bản / html

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

b{all:unset;color:red}thay vì b{all:unset;color:#911;background:red}trong phiên bản đầu tiên

PHP + HTML + CSS, 392 byte

trái tim màu đỏ + màu đen trông đẹp hơn

Có thể gọi số màu trong Phần CSS

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

thêm cái này trước khi nó đẹp hơn

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

Đầu ra phiên bản đầu tiên, nó là Mã HTML xấu nhất trong cuộc sống của tôi

trái tim đỏ đen

<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 byte để tạo trang HTML bằng PHP trực tiếp

<?$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
Chỉ cần thay thế color:#911;background:redbằng color:red;làm cho nó phù hợp với thông số tiền thưởng cũng như tiết kiệm một vài byte.
Emigna

3

Powershell, 110 byte

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

Giải trình:

Dòng đầu tiên của tập lệnh lấy các chuỗi con và chèn một chữ cái Ogiữa chúng. Kết quả là chuỗi uiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey. Lưu ý rằng các ký tự đầu tiên và cuối cùng là dư thừa.

Vòng lặp xuất ra tất cả những gì cần thiết (8..490) bit từ các ký tự của chuỗi, cũng như một khoảng trắng hoặc nguồn cấp dữ liệu.

Câu đố của người nhận thư valentine

Có thể thấy rằng Ochính biểu tượng nhỏ và lớn tạo nên mã hóa bit. Có 15 ký hiệu (bit). Chỉ có một phân vùng trên các bit để nhận các ký tự ASCII: oOOooOOO+ ooOoOOO[o]. Chúng tôi đã phải thêm một othay vì nhỏ vào 0cuối. Các ký hiệu ASCII này là:g.

Người bí ẩn này là ai g.?


2

PHP, 121 byte

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

phá vỡ

$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 byte

Giải pháp:

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

Thí dụ:

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

Giải trình:

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

Ghi chú:

  • -2 byte nhờ ngn!

1

Python 3, 199 byte:

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 byte

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

tạo một chuỗi lặp lại "Il% svey% su", lặp lại số lần cần thiết, sau đó sử dụng một tuple để phụ tất cả các o. Sau đó chuyển đổi nó thành nhị phân, sử dụng mô-đun textwrap, chuyển đổi từng mục của mới liệt kê danh sách, tham gia với không gian, sau đó thêm 0 1 1 vì đó có vẻ là một sơ khai hoặc một cái gì đó


1

Mathicala, 123 byte (275 có màu)

Tôi không chắc nếu sử dụng Grid thay vì xuất ra một chuỗi là OK (nếu không thì đây là một mục không cạnh tranh).

B / W

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

nhập mô tả hình ảnh ở đây

Màu sắc

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

nhập mô tả hình ảnh ở đây


Có thể sao chép / dán kết quả từ gridvăn bản đơn giản và dán nó vào notepad không? Nó trông như thế nào? Không gian được phân tách (không gian đơn) với dòng mới, như hình minh họa?
Stewie Griffin

1

Ruby 142 byte

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

(Hơi nhiều hơn) rõ ràng:

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

Tôi chưa tìm được cách cô đọng văn bản gốc thành một dạng cô đọng hơn trong Ruby - nó có một số hàm thao tác Chuỗi tuyệt vời, nhưng tất cả các cách tôi đã thử sử dụng nhiều ký tự hơn chính chuỗi. Bất kỳ con trỏ nào được đánh giá cao, đây là Code Golf đầu tiên của tôi trên StackOverflow!


Chào mừng bạn đến với Câu đố lập trình và trao đổi mã Golf Stack! Bạn đã thử đặt chuỗi thành một biến (ví dụ a), sau đó thực hiện a+a+a...? Thậm chí tốt hơn, nếu Ruby hỗ trợ nhân chuỗi , a*count!
wizzwizz4

@ wizzwizz4, chuỗi không lặp lại chuỗi thuần túy. :) (Có nhiều cách tốt hơn để làm điều này mặc dù, nhưng tôi không nghĩ a+a+alà cách đó)
Stewie Griffin

Tôi biết! Tạo một phiên bản ngắn hoàn toàn viết thường, lặp lại nó, sau đó thay thế thứ n obằng một số vốn O!
wizzwizz4

1

Rust, 195 byte

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

Ung dung:

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 byte

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

Chạy xuống

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

Hãy thử trực tuyến!



1

Bình thường, 47 byte

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

Hãy thử trực tuyến tại đây .

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

/// , 220 byte

/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

Hãy thử trực tuyến!


0

C ++ 11, Không cạnh tranh, 726 687 636 byte (yêu cầu * NIX hoặc W10 ngưỡng 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;}

Tôi biết điều này có thể được chơi golf cách tốt hơn. Tôi muốn xem một câu trả lời ngắn gọn c ++ chết tiệt!

Tôi cũng có thể đã mắc một vài sai lầm khi mã hóa phần trái tim.

Đầu ra (màu cố định):

nhập mô tả hình ảnh ở đây


Tôi cho rằng chỉ có phần trái tim chứa thông điệp, vì vậy tôi đã mã hóa toàn bộ. Không cần phải nói tôi cảm thấy như một thằng ngốc khi đọc lại thử thách và thử nghiệm một vài dòng đầu ra trong ascii.

0

Python, 473 byte

Màu sắc rực rỡ!

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.translatecó thể là một lựa chọn tốt hơn
Mego

0

FEU , 360 byte

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

Chỉ cần nén ngu ngốc

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.