ฉันรักคุณฉันรักคุณฉันรักคุณ!


58

XKCD # 99 ที่มีชื่อ "Binary Heart" แสดงภาพง่าย ๆ ของภาพและเลขศูนย์โดยมีตัวเลขสีแดงเป็นตัวเลข

ป้อนคำอธิบายรูปภาพที่นี่

หัวใจสีแดงมองเห็นได้ด้วยตาเปล่า แต่ข้อความที่ซ่อนอยู่ในลำดับเลขฐานสองนั้นไม่ใช่ หากคุณลบช่องว่างและบรรทัดใหม่ทั้งหมดและตีความลำดับเลขฐานสองเป็นรหัส ASCII 8 บิตคุณจะได้รับข้อความ:

iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv

น่ารักใช่มั้ย

สดุดี ... สตริงไม่ใช่การทำซ้ำสตริงอย่างแท้จริง


ความท้าทายของคุณคือการสร้างภาพไบนารีด้วยตัวเลข 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!
brandonscript

ไม่มีข้อความหรืออย่างน้อยก็ไม่มีการค้นพบใด ๆ โดย explxkcd.com ที่พูดว่า "ส่วนผสมของตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก" O "สันนิษฐานว่ามีเจตนาที่จะหลีกเลี่ยงรูปแบบการทำซ้ำ"
Petr Hudeček

1
@ หากติดต่อก่อนอื่นฮ่าฮ่าคุณประเมินค่าทักษะการเขียนโปรแกรมของฉันสูงเกินไป :) ฉันจะให้รางวัลแก่ผู้ชนะด้วยค่าหัว 100 รางวัลเช่นกันเมื่อฉันสามารถ
Beta Decay

คำตอบ:


21

เยลลี่ , 36 33 32 ไบต์

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

ขอบคุณ @JonathanAllan สำหรับการเล่นกอล์ฟ 3 ไบท์!

ลองออนไลน์!

มันทำงานอย่างไร

ลิงค์หลัก

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

ถูกดำเนินการทาง niladically (เช่นไม่มีข้อโต้แย้งใด ๆ ) เมื่อเรียกใช้โปรแกรม ค่าส่งคืนจะถูกพิมพ์โดยปริยาย

“ḅUɗaṚPXṙ’

หาดัชนีของตัวละครที่ยกมาในหน้ารหัสของเยลลี่และตีความพวกเขาเป็นตัวเลขของตัวเลขฐาน bijective 250 นี้อัตราผลตอบแทนจำนวนเต็ม13021639057551959994

          B

แปลงจำนวนเต็มที่สร้างขึ้นเป็นไบนารี สิ่งนี้ให้ผลบิตเรย์ 1011010010110110001001111011101100110011101111001010011110111010ซึ่งสอดคล้องกับการเข้ารหัส UTF-8 ของสตริงilOveyOuเลื่อนไปทางซ้ายหนึ่งบิต

การเลื่อนเป็นสิ่งจำเป็นเนื่องจากBไม่สามารถส่งคืนบิตอาเรย์ด้วยค่า0นำหน้า ตัวเลือกอื่น ๆ รวมถึงการลบเลขฐานสองหรือคำนวณสี่เหลี่ยมในทางกลับกัน แต่วิธีนี้จะช่วยประหยัดหนึ่งไบต์

            ṁ484

แม่พิมพ์อาร์เรย์ที่สร้างเช่นช่วงจาก1ไป484คือมันซ้ำเนื้อหาของอาร์เรย์หลายครั้งเท่าที่จำเป็นเพื่อให้บรรลุความยาวของ484

นี่เป็นอีกหนึ่งบิตที่เราต้องการเพื่อพิจารณาการเปลี่ยนแปลง เราสามารถลบบิตแรกได้ในตอนนี้ แต่การทำเช่นนั้นในภายหลังหมายความว่าบิตทั้งหมดที่ต้องสลับสับเปลี่ยนดัชนีที่แม้กระทั่งซึ่งช่วยให้เราสามารถบันทึกไบต์ดังกล่าว

                 “½:J⁺ȤṾ‘Ḥ¤

ใช้คะแนนรหัสของตัวละครระหว่างและ( [10, 58, 74, 138, 154, 186] ) จากนั้น "unhalves" พวกเขากล่าวคือคูณด้วย2 ( [20, 116, 148, 276, 308, 372 ] )

                ¬           ¦

negates บิตที่ดัชนีตามเงื่อนไขเหล่านั้น สิ่งนี้สอดคล้องกับรูปแบบO / oในรูปแบบดั้งเดิม

สุดท้าย

                             Ḋs21G

dequeues บิตอาเรย์ (ลบบิตแรก) แยกอาร์เรย์ที่เหลือออกเป็นแถวขององค์ประกอบที่21และพิมพ์เมทริกซ์ที่เกิดเป็นตาราง


2
คุณสามารถบันทึกเพิ่มอีก 3 ไบต์โดยใช้ตัวพิมพ์ใหญ่Oเป็นค่าเริ่มต้นฉันคิดว่ามันเป็นเช่นนี้:“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Jonathan Allan

ใช่มีตัวพิมพ์ใหญ่ของOมากกว่าตัวพิมพ์เล็ก ขอบคุณ!
เดนนิส

4
ดังนั้นนี่คือสิ่งที่มนต์ดำมีลักษณะเช่น ..
Bassdrop Cumberwubwubwub

2
@BassdropCumberwubwubwub ตอนนี้ควรมีความพยายามที่จะเปลี่ยนมันให้เป็นเวทมนตร์สีแดงและสีดำ
Matthew Roh

43

เจลลี่ , 41 40 35 33 ไบต์

ขอบคุณ @Dennis ที่ทำให้ตอนจบṖṖCG! (complement 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
โอ้ว้าวแน่นอน - นั่นต้องทำ!
Jonathan Allan

1
ให้อภัยคนอวดของฉัน; บางทีคำที่เหมาะสมคือcomplementอะไร?
Sherlock9

@ Sherlock9, อ๋อ; คงที่ & ขอบคุณ - ฉันสะกดไม่ได้ทั้งหมดดังนั้นมักจะได้คำผิดถ้าการตรวจคำสะกดไม่ให้ธง!
Jonathan Allan

@ การประกวด IfFirst - ฉันไม่ได้ตรวจสอบ แต่หวังว่านี่ยังดีพอที่จะถือว่าเป็นสี
Jonathan Allan

42

ที่จริงแล้ว 58 ไบต์

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

ลองออนไลน์!

คำอธิบาย

มีสามส่วนหลักที่นี่ดังนั้นฉันจะทำลายมันลงตาม

ตอนที่ 1: การสร้างสตริงฐาน 256

เรากำลังจะสร้างไบนารี่สตริงกลับด้านเพื่อใช้ประโยชน์จากโครงสร้างสแต็ค (LIFO) ที่ใช้งานจริงและเพื่อหลีกเลี่ยงความยุ่งยากกับค่าศูนย์นำในสตริงไบนารี ดังนั้นสตริงไบนารีเป้าหมายคือ110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110ซึ่งเทียบเท่ากับเป็น20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478ทศนิยม ในฐาน-256 (โดยใช้ตารางตัวอักษร CP437สำหรับการแปลง) ♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6ûสตริงที่สอดคล้องกันคือ ในการสร้างสตริงไบนารีดั้งเดิมเราสร้างสตริงฐาน 256 (ใช้ประโยชน์จากรูปแบบในนั้น) และทำการแปลงฐานเป็นทศนิยมและไบนารี

สตริงฐาน 256 มีรูปแบบต่อไปนี้ (เพิ่มช่องว่างและบรรทัดใหม่เพื่อความชัดเจน):

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

ดังนั้นแต่ละ 7 ส่วนตรงกลางสามารถเกิดขึ้นโดยใช้นั่งร้าน«%s₧ªn%s6ûและเปลี่ยน%sชิ้นส่วนที่มีอย่างใดอย่างหนึ่งหรือ÷

ลำดับที่เฉพาะเจาะจงของและ÷s ≥≥÷≥÷÷≥≥≥÷÷≥≥÷ที่เราต้องการคือ เนื่องจากเราต้องการสิ่งนี้เป็นรายการของสายยาว -1 วิธีที่ไร้เดียงสาของการแทนค่านี้จะเป็น"≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#(ดันสตริงทำให้เป็นรายการ) อย่างไรก็ตามเราสามารถทำได้ดีกว่าเล็กน้อย โดยการตีความสตริงนั้นเป็นเลขฐานสอง (ซึ่งหมายถึง1และ÷หมายถึง0) เราจะได้รับ13542ในรูปทศนิยม ด้วยการแปลงกลับไปเป็นไบนารี่ (โดยใช้แบบดั้งเดิม1และ0เอส) และการจัดทำดัชนีเป็นสตริงความยาว 2 เราสามารถรับรายการโดยใช้หนึ่งไบต์น้อยกว่าเมธอดnaïve

: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 x 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 คุณเป็นบอสแล้วสำหรับการเขียนรหัสนี้
แจ็ค

1
จะเกิดอะไรขึ้นหากคุณต้องการตัวเลข 34 ในตัวเลขฐาน 256 (ตัวละครที่ล้อมรอบสตริง)
Jonathan Allan

22

JavaScript (ES6), 169 ... 136 135 ไบต์

let f =

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

console.log(f());

บันทึก 2 ไบต์ขอบคุณ Andrakis
บันทึก 4 ไบต์ขอบคุณ Hedi
บันทึก3 5 ไบต์ขอบคุณ Neil

รุ่นที่มีสี 249 ไบต์ (237 ไบต์ของ JS + 12 ไบต์ของ CSS)

รหัส JS แสดงผลงานศิลปะ ASCII ด้วยแท็กตัวหนาสำหรับหัวใจ 12 ไบต์ของ CSS จำเป็นต้องใช้สีแดง (ไบต์นั้นนับว่ายุติธรรมหรือไม่)

let f =

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

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


2
คุณสามารถบันทึกไบต์ได้โดยแทนที่การแทนที่: s=>s.replace(/./g,'$& '). ฉันทำงานเกี่ยวกับวิธีแก้ปัญหาที่เหมือนกันมาก
Andrakis

1
ไม่สามารถs.replace(/./g,'$& ')ถูกแทนที่ด้วยs.split``.join` `?
Hedi

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

1
ฉันคิดว่าreplace(/./g,(c,i)=>c+=++i%21?' ':'\n')(เห็นได้ชัดว่าใช้ newline ตัวอักษรที่นั่น) บันทึกไบต์เพิ่มเติม อาจมีวิธีที่ดีกว่าในการแสดงความคิดนั้น
Neil

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
@ ทอมอมซิง: แน่นอน! เขาดึงหมวกผู้ชายมาให้ฉันเมื่อเราพบกันสองสามปีที่ผ่านมาดังนั้นฉันคือใครตอนนี้ :)
Emigna

ฉันรู้ว่ามันได้รับ 2.5 ปี แต่คุณสามารถกอล์ฟSðý42ô»ไปS21ô»ตั้งแต่»ร่วมรายการภายในด้วยช่องว่างโดยปริยาย (และ•1žä¿*•ตอนนี้ควรจะเป็น•Å¾$6•ตั้งแต่จำนวนเต็มมีการเข้ารหัสในฐาน-255 ตอนนี้แทนที่จะฐาน 214)
Kevin Cruijssen

15

CJam , 48 ไบต์

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

การทำงานร่วมกันกับ @MartinEnder ซึ่งใช้"uilvey"3/สตริง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 REPL , 124 121 119 113 ไบต์

บันทึกแล้ว 6 ไบต์ด้วย@ETHproductions

นี่เป็นโปรแกรมเต็มรูปแบบที่สามารถวางใน REPL / console เพื่อสร้างผลลัพธ์ที่ถูกต้อง

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

จาวาสคริปต์ที่มีสีเท่านั้นหัวใจ 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?` `:`
`)


เหตุผลที่ฉันทำอย่างนี้ก็เพราะนี่ถือได้ว่าเป็นโปรแกรมเต็มรูปแบบ ไม่มีตัวแปร hardcoded ที่ควรเปลี่ยนโดยผู้ใช้แทนสามารถคัดลอกวางและทำงานตามที่เป็นอยู่ ฉันเรียกมันว่าข้อมูลโค้ด แต่อาจเป็นโปรแกรมเต็ม คิด?
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-array ผ่าน$_[0,1]และแต่ละคนถูกโยนเป็น int +$_และ[convert]ed เป็นไบนารี ( ),2 Stringที่-joined เข้าด้วยกันเป็นสายเดียวแล้วPadLeft'วันที่จะได้รับความยาวที่เหมาะสมแล้วแต่ละองค์ประกอบคือ-replaced '$1 'กับตัวเองและพื้นที่

สตริงเหล่านั้นจะถูกทิ้งไว้บนไพพ์ไลน์และเอาท์พุทจะมีความหมายโดยปริยายโดยค่าเริ่มต้นWrite-Outputจะขึ้นบรรทัดใหม่ระหว่างองค์ประกอบ

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

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

@Mego โอ้ durr เพียงเพราะฉันนับ 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(...);
พิมพ์; และ
เพิ่มขึ้นทีละi21 ด้วยi+=21

ในการสร้างสตริงไบนารีทั้งหมด:
มันทำซ้ำ"ilOveyOu"แปดครั้ง
แทนที่Oด้วยoตำแหน่งที่จำเป็น (ที่ดัชนี[2,14,18,34,38,46]);
- - - สิ่งนี้สามารถทำได้ด้วยchr(j+30)in' ,0@DL'การบันทึก 3 ไบต์
แปลงอักขระแต่ละตัวเป็นเลขลำดับ
ปลดเปลื้องแต่ละลำดับไปยังสตริงไบนารี ( '0bxxxxxxx');
ลบผู้นำ'0b'จากแต่ละใช้[2:];
prepends แต่ละอันด้วย'0'; และ
รวมสิ่งทั้งหมดเข้าด้วยกัน''.join(...)


คุณไม่ต้องการแลมบ์ดา ทำi=0\nexec(...)หรือi=0;exec(...)137 ไบต์
mbomb007

ถ้าคุณต้องการหลาม 3 จริงๆคุณสามารถใช้งูหลาม 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 Bytes สำหรับสร้างเพจ HTML ด้วย PHP โดยตรง

<?$o=2841;for(;$i<16;)$t.=il.Oo[$o>>$i++&1].vey.Oo[$o>>$i++&1].u;foreach(str_split($t)as$c)$x.="0".decbin(ord($c));$a=[1,9,20,28,41,49,62,82,103,125,146,168,190,212,234,256,278,300];$z=[3,11,26,34,47,55,77,98,119,140,160,179,200,220,240,260,280,300];for($i=0;$i<483;$i++)echo $i%21?"":"<p>",in_array($i-88,$a)?"<b style=color:red>":"",$x[$i],in_array($i-88,$z)?"</b>":""," ";

2
เพียงแค่แทนที่color:#911;background:redด้วยcolor:red;ทำให้สอดคล้องกับข้อมูลจำเพาะของเงินรางวัลรวมถึงบันทึกสองสามไบต์
Emigna

3

Powershell ขนาด 110 ไบต์

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

คำอธิบาย:

บรรทัดแรกของสคริปต์ใช้สตริงย่อยและแทรกตัวอักษรOระหว่างพวกเขา uiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOveyผลที่ได้คือสตริง โปรดทราบว่าอักขระตัวแรกและตัวสุดท้ายซ้ำซ้อน

การวนซ้ำเอาต์พุต(8..490)บิตที่จำเป็นทั้งหมดจากอักขระของสตริงรวมถึงช่องว่างหรือการป้อนบรรทัด

ปริศนาของผู้รับจดหมายวาเลนไทน์

จะเห็นได้ว่าสัญลักษณ์ขนาดเล็กและใหญ่นั้นมีOการเข้ารหัสบิต มี 15 สัญลักษณ์ (บิต) มีเพียงหนึ่งพาร์ติชันบนบิตที่จะได้รับอักขระ ASCII oOOooOOOคือooOoOOO[o]+ เราต้องเพิ่มขนาดเล็กoแทน0ในตอนท้าย สัญลักษณ์ ASCII นี้:g.

ใครเป็นคนลึกลับนี้g.?


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

Python 3, 199 ไบต์:

z='01111011101'
a='011010010110110001'
b=z+'10011001010111100101'
[print(' '.join(''.join([a+i[0]+b+i[1]+z+'01'for i in'10 01 10 00 11 01 00'.split()])+a+'0'+b[:16])[i:i+41])for i in range(0,966,42)]

1

Python 3, 170 ไบต์

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

ทำซ้ำสตริงของ "Il% svey% su" ทำซ้ำตามจำนวนครั้งที่ต้องการจากนั้นใช้ tuple เพื่อย่อยทุก o แล้วมันแปลงเป็นไบนารีใช้โมดูล textwrap แปลงแต่ละรายการของใหม่ list to list, รวมกับช่องว่าง, ต่อท้าย 0 1 1 เพราะนั่นดูเหมือนจะเป็น stub หรืออะไรบางอย่าง


1

Mathematica, 123 ไบต์ (275 สี)

ฉันไม่แน่ใจว่าใช้หรือไม่ Gridแทนการส่งออกสตริงหรือไม่เป็น OK

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]

ป้อนคำอธิบายรูปภาพที่นี่

สี

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ในข้อความล้วนและวางลงในแผ่นจดบันทึก? มันดูเหมือนอะไร? ช่องว่างแยก (ช่องว่างเดียว) กับบรรทัดใหม่เป็นรูปแสดง
Stewie Griffin

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 - มันมีฟังก์ชั่นการจัดการสตริงที่ยอดเยี่ยม แต่ทุกวิธีที่ฉันได้ลองใช้อักขระมากกว่าตัวสตริงเอง พอยน์เตอร์ใด ๆ ที่ชื่นชมนี่คือรหัสกอล์ฟครั้งแรกของฉันบน StackOverflow!


ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนาและการแลกเปลี่ยนรหัสกองกอล์ฟ! คุณลองตั้งค่าสตริงเป็นตัวแปร (เช่นa) จากนั้นทำa+a+a... ? ยิ่งไปกว่านั้นถ้า Ruby รองรับการคูณสตริงa*count!
wizzwizz4

@ wizzwizz4 สตริงไม่ใช่การทำซ้ำสตริงโดยแท้ :) (อาจมีวิธีที่ดีกว่าในการทำเช่นนี้ แต่ฉันไม่คิดว่าa+a+aเป็นวิธี)
Stewie Griffin

ฉันรู้ว่า! ทำให้เป็นเวอร์ชั่นย่อตัวพิมพ์เล็กซ้ำทั้งหมดทำซ้ำจากนั้นแทนที่ nth oด้วยทุนจดทะเบียนO!
wizzwizz4

1

สนิม 195 ไบต์

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

Ungolfed:

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

    // print them over the range with newlines/spaces as appropriate
    for(c,i) in s.chars().zip(1..484) {
        print!("{}{}",c,if i%21!=0{' '}else{'\n'})
    }
}

1

C (gcc) , 102 ไบต์

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

rundown

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

ฉันรู้ว่านี่สามารถเล่นกอล์ฟได้ดีกว่า ฉันต้องการเห็นคำตอบ c ++ สั้น ๆ !

ฉันอาจทำผิดพลาดเล็กน้อยเมื่อฉันเข้ารหัสส่วนของหัวใจ

เอาท์พุท (สีคงที่):

ป้อนคำอธิบายรูปภาพที่นี่


ฉันคิดว่ามีเพียงส่วนของหัวใจเท่านั้นที่มีข้อความดังนั้นฉันจึงเข้ารหัสทั้งหมด จำเป็นต้องพูดว่าฉันรู้สึกเหมือนคนงี่เง่าเมื่อฉันอ่านความท้าทายและทดสอบผลลัพธ์สองสามบรรทัดแรกใน ascii

0

Python 473 ไบต์

สี!

r=str.replace;print r(r(r(r(r(r(r(r("""
jh0k1k1k0jk1
ikik1kjk0h1
ik0hjikih
k1h0k1k1k00k0
i1ksi1ejk0s1ke0h
i1sk0kie0si1kiek1
0ks1hje0s1k1k0ej1
j1s1kik1kjkjej
jsik0hjikiek
ksk1h0k1k1k0ej
0jsikik1kjk0ek
k1sik0hjikei1
0k1sjh0k1ke1k00
1kis1kik1k0e1kj
0ki1sk0k1k1eiki
hk1sh0ke1k1k0
0kji1sj1ke1kjk0
hi1ks0ke1ki1k1
1hk1ks1e00k1k1k
00kjikik1kjk
0hi1k0hjik
ihk1h0k1ki
000kjikik1kj1
""",'h','1010'),'i','11'),'j','01'),'k','10'),'1','1 '),'0','0 '),'s','\x1b[0;40;31m'),'e','\x1b[0m')

1
str.translateอาจเป็นทางเลือกที่ดีกว่า
Mego

0

FEU , 360 ไบต์

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

เพียงแค่การบีบอัดโง่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.