나는 당신을 사랑합니다 나는 당신을 사랑합니다!


58

제목이 "Binary Heart"인 XKCD # 99 는 1과 0의 간단한 이미지를 나타내며 일부 숫자는 빨간색으로 표시됩니다.

여기에 이미지 설명을 입력하십시오

붉은 마음은 육안으로 볼 수 있지만 이진 시퀀스에 숨겨진 메시지는 보이지 않습니다. 모든 공백과 줄 바꿈을 제거하고 이진 시퀀스를 8 비트 ASCII 코드로 해석하면 다음과 같은 메시지가 나타납니다.

iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv

귀여워요?

Pssst ... 문자열은 순수한 문자열 반복이 아닙니다.


문제는이 이진 이미지를 21 자리, 23 자리로 만드는 것입니다. 각 행의 각 숫자 사이에 정확히 하나의 공백이 있어야하고 각 새 행에 대해 하나의 개행이 있어야합니다. 마지막 비트 문자의 시작에 불과합니다 e때문에, 21*238에 의해 당신은 그 비트가 너무 수정이 필요 나눌 수 없습니다.

기능이나 프로그램은 입력을 받아서는 안됩니다. 선행 및 후행 공백과 줄 바꾸기가 허용됩니다.

코드 결과는 다음과 같아야합니다.

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-대니 Pflughoeft

25
나는 어떤 색상 심장 만들기 위해 빨간색과 검은 색을 사용하여 출력 짧은 코드에 현상금 줄 것이다
베타 붕괴

숨겨진 메시지가 OASCII 출력 문자열에서 대문자로 된 것이 무엇인지 알고 싶습니다 .
brandonscript

describexkcd.com에서 "대문자와 소문자"O "의 혼합은 의도적으로 반복되는 패턴을 피하는 것으로 간주됩니다."라는 메시지가 없거나 전혀 발견되지 않았습니다.
Petr Hudeček

1
@WeeingIfFirst Haha, 당신은 내 프로그래밍 기술을 과대 평가합니다 :). 제가 할 수있을 때도 100 회 현상금으로 수상자에게 수여됩니다
Beta Decay

답변:


21

젤리 , 36 33 32 바이트

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

3 바이트를 골라 낸 @JonathanAllan에게 감사드립니다!

온라인으로 사용해보십시오!

작동 원리

메인 링크

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

프로그램이 실행될 때 niladically (즉, 인수없이) 실행됩니다. 반환 값은 암시 적으로 인쇄됩니다.

“ḅUɗaṚPXṙ’

Jelly의 코드 페이지 에서 인용 된 문자의 색인을 찾아 Bijective 기본 250 숫자의 숫자로 해석합니다. 정수 13021639057551959994가 생성 됩니다.

          B

생성 된 정수를 이진으로 변환합니다. 이것은 비트 배열 1011010010110110001001111011101100110010101111001010011110111010 을 생성하는데, 이는 문자열 ilOveyOu 의 UTF-8 인코딩에 해당 하며 , 1 비트 왼쪽으로 이동합니다.

B선행 0을 가진 비트 배열을 반환 할 수 없으므로 이동이 필요 합니다. 다른 옵션으로는 이진수를 무시하거나 정사각형을 역으로 계산하는 것이 포함되지만이 방법은 1 바이트를 절약합니다.

            ṁ484

생성 된 어레이를 1 내지 484 의 범위와 같이 성형한다 . 즉, 484 의 길이를 달성하기 위해 필요한만큼 어레이의 내용물을 반복한다 .

이것은 변화를 설명하기 위해 우리가 필요로하는 것보다 조금 더 있습니다. 이제 첫 번째 비트를 제거 할 수 있지만 나중에 그렇게하면 스왑해야하는 모든 비트가 인덱스에 놓여있어 위에서 언급 한 바이트를 저장할 수 있습니다.

                 “½:J⁺ȤṾ‘Ḥ¤

( [10, 58, 74, 138, 154, 186] 사이의 문자의 코드 포인트를 취한 다음) "반쪽을 끊습니다", 즉 2를 곱합니다 ( [20, 116, 148, 276, 308, 372). ] ).

                ¬           ¦

해당 인덱스에서 비트를 조건부로 무시합니다. 이것은 원래 패턴 의 O / O 변형에 해당합니다.

드디어,

                             Ḋs21G

비트 배열을 대기열에서 빼고 (첫 번째 비트 제거) 나머지 배열을 21 개 요소의 행으로 나누고 결과 행렬을 격자로 인쇄합니다.


2
대문자 O로 기본값을 설정 하면 3 바이트를 더 절약 할 수 있습니다 .“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Jonathan Allan

소문자 보다 대문자 O 가 더 많습니다. 감사!
Dennis

4
그래서 이것은 흑 마법의 모습입니다 ..
Bassdrop Cumberwubwubwub

2
@BassdropCumberwubwubwub 이제 빨간색과 검은 색 마법으로 바꾸려는 노력이 필요합니다
Matthew Roh

43

젤리 , 41 40 35 33 바이트

종료를 위해 @Dennis에게 감사드립니다 ṖṖCG! (보완 C= 1-x논리적이 아닌 장소 ¬)

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

TryItOnline

어떻게?

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

"컬러"버전, 77 바이트

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

TryItOnline

젤리는 컬러 출력이 없지만 어쨌든 쉽게 볼 수 있습니다 (나는 색맹입니다) ...

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

어떻게?

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

“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFż¢Ḅị“¹0°1”s21ṖṖG - Main link: no arguments
“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BF                 - same as the original to get 1s and 0s
                          ż                - zip with
                           ¢               - last link (1) as a nilad
                            Ḅ              - binary to integer (vectorises)
                             ị             - index into
                              “¹0°1”       - string "¹0°1"
                                    s21    - split into length 21 slices
                                       ṖṖ  - pop last two unused slices
                                         G - format as a grid

27
를 제거하면 ¬마지막 4 바이트가 될 수 있습니다 ṖṖCG. :)
Dennis

2
아, 물론 이죠. 그냥 끝내야합니다!
Jonathan Allan

1
내 pedantry를 용서하십시오. 아마도 적절한 용어는 complement?
Sherlock9

@ Sherlock9, ;; fixed & thanks-철자를 정확하게 입력 할 수 없으므로 맞춤법 검사에 플래그가 없으면 종종 단어가 잘못 표시됩니다!
Jonathan Allan

@WeeingIfFirst-나는 확인하지 않았지만 이것이 여전히 착색 된 것으로 간주되기를 바랍니다.
Jonathan Allan

42

실제로 58 바이트

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

온라인으로 사용해보십시오!

설명

여기에는 세 가지 주요 부분이 있으므로 그에 따라 분류하겠습니다.

1 부 : base-256 문자열 구성

실제로는 실제로는 스택 기반 (LIFO) 구조를 이용하고 이진 문자열에서 선행 0과의 복잡성을 피하기 위해 이진 문자열을 반대로 구성하려고합니다. 따라서 대상 이진 문자열은 10 진수 110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110와 같습니다 20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478. base-256 ( CP437 문자 테이블 을 변환에 사용)에서 해당 문자열은 ♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û입니다. 원래 이진 문자열을 구성하기 위해 base-256 문자열을 구성하고 (패턴을 활용하여) 10 진수 및 이진수로 기본 변환을 수행합니다.

base-256 문자열의 형식은 다음과 같습니다 (명백하게하기 위해 공백과 줄 바꿈이 추가됨).

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

따라서, 7 개의 중간 섹션 각각은 스캐 폴드를 사용 «%s₧ªn%s6û하고 %s부품을 또는로 대체 함으로써 형성 될 수있다 ÷.

의 특정 순서 의와 ÷우리가 필요로들입니다 ≥≥÷≥÷÷≥≥≥÷÷≥≥÷. 우리는 이것을 길이 1 문자열의 목록으로 필요로하기 때문에 이것을 나타내는 순진한 방법은 "≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#(문자열을 푸시하고 목록으로 만듭니다)입니다. 그러나 우리는 약간 더 잘할 수 있습니다. (이진수로 해당 문자열 해석하여 표현 1÷표현을 0), 우리가 얻을 13542진수로. 이것을 전통적인 바이너리 10s를 사용하여 다시 이진수로 변환 하고 길이 2 문자열로 인덱싱함으로써 naïve 메소드보다 1 바이트 적은 바이트를 사용하여 목록을 얻을 수 있습니다.

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

2 부 : 이진으로 변환

이 부분은 훨씬 더 간단합니다. 실제로 base-256을 이진으로 직접 변환하는 기능이 있다면이를 사용합니다. 불행히도, 그렇지 않기 때문에 10 진수를 중개 형식으로 사용해야합니다.

,다음 코드는 1 부에서 코드를 나타냅니다 - 설명을 위해, 내가 가진 1 부 코드 교체 한 ,STDIN에서 1 부에서 출력을 읽을합니다. 실제 최종 코드의 일부가 아닙니다.

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

3 부 : 서식

이진 문자열을 그대로 출력하는 것이 문제라면, 완료된 것입니다. 그러나 바이너리 문자열을 21 x 23 사각형으로 가져 오기 위해 여전히 몇 가지 형식이 있습니다.

Part 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

@Jack 이것은 실제로 입니다. 컴파일이 필요하지 않습니다.
Mego

1
@Mego : 0 당신은이 코드를 작성하는 보스입니다
Jack

1
기본 256 자리의 숫자 34가 필요한 경우 어떻게됩니까? (문자열 묶는 캐릭터)
Jonathan Allan

22

자바 스크립트 (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());

Andrakis 덕분에 2 바이트
절약 Hedi 덕분에 4 바이트
절약 Neil 덕분에 3 5 바이트 절약

컬러 버전, 249 바이트 (JS 237 바이트 + CSS 12 바이트)

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
replace :를 교체하여 일부 바이트를 절약 할 수 있습니다 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')분명히 리터럴 줄 바꿈을 사용하여 추가 바이트를 절약 한다고 생각 합니다. 그 아이디어를 표현하는 더 좋은 방법이있을 수 있습니다.
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
@tomsmeding : 참으로! 우리가 몇 년 전에 만났을 때 그는 나에게 모자를 썼다. 그래서 그것은 내가 지금 누구인가 :)
Emigna

나는 그것이 2.5 년이라는 것을 알고 있지만 , 내부 목록을 공백으로 암시 적으로 조인 Sðý42ô»하기 S21ô»때문에 to에 골프를 칠 수 있습니다 »( 정수는 base-214 대신 base-255로 인코딩되기 때문에 •1žä¿*•이제는이어야합니다 •Å¾$6•).
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

자바 스크립트 ES6 REPL , 124 121 119 113 바이트

@ETHproductions 덕분에 6 바이트 절약

이 프로그램은 REPL / 콘솔에 붙여 넣어 올바른 결과를 얻을 수있는 전체 프로그램입니다.

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

더 장황한

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

유색 JavaScript 전용 하트, 281 바이트

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

이것은 n 비트 마다 색상을 전환하여 작동하며 색상 을 기록하는 console.log 기능을 사용 합니다.

컬러 CSS 하트, 229 + 12 바이트

CSS 사용이 허용되면 채색 된 하트를 229 바이트의 JavaScript 코드와 12 바이트의 CSS로 더욱 줄일 수 있습니다.

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


내가 이런 식으로 한 이유는 이것이 전체 프로그램으로 간주 될 수 있기 때문입니다. 사용자가 변경해야하는 하드 코딩 된 변수가 없으며 대신 복사하여 붙여 넣을 수 있으며 그대로 작동합니다. 나는 그것을 스 니펫이라고 부르지 만 전체 프로그램 일 수도 있습니다. 생각?
Bassdrop Cumberwubwubwub

REPL 동작에 의존합니다. 이는 언어가 "Javascript ES6 REPL"( source ) 임을 의미합니다 .
Mego

@ Mego 감사합니다, 그에 따라 내 대답을 편집
Bassdrop Cumberwubwubwub

1
나는 당신이 1 바이트를 절약하면서 두 곳에서 제거 a하고 사용할 수 있다고 확신합니다 num>>i/64&1. 또한와 ++i%21==0?newline:space동일합니다 ++i%21?space:newline.
ETHproductions

또 다른 팁 : 변화 i=0,r=''i=r=''; ''
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-8이 아닌 UTF-16을 기본적으로 사용함)으로 변환하여 문자열로 숨겼습니다. 그게 '...'처음입니다.

그런 다음 -split길이 2의 문자열로 묶고 각 쌍을 반복합니다. 이러한 쌍은로 분할 char통해 -array $_[0,1], 그 각각 int로 주조되고 +$_, 그리고 [convert]이진로 에드 ( ,2) String. 그것은 -join하나의 문자열로 합쳐진 다음 PadLeft적절한 길이를 얻으려면 각 요소는 -replace자체와 공백으로 d입니다 '$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

@ 메고 오, 드루. 문자열에 대해 UTF-16을 계산한다고해서 나머지 코드에 대해 마술 적으로 UTF-8을 계산한다는 의미는 아닙니다. 하 도와 주셔서 감사합니다.
AdmBorkBork


협박하지 않으면 실제로 PowerShell 터미널을 열어서 실행합니다.
DaveTheMinion


4

파이썬 3, 147144 바이트

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)

이데온 에서 테스트

처음 상태 i0함수 선언에서,이 23 번 반복 :
공간 (아래 참조)없이 전체 이진 스트링을 만든다;
를 사용하여 내에서 행을 슬라이스합니다 [i:i+21]. ;로
공백을 삽입합니다 ' '.join(...).
인쇄물; 와 함께 21
씩 증가ii+=21

전체 이진 문자열을 만들려면 8 번
반복 "ilOveyOu"됩니다.
대체 Oo필요한 경우 (인덱스에서 [2,14,18,34,38,46]);
이것은 chr(j+30)in' ,0@DL'3 바이트를 저장
하여 각 문자를 서수로 변환 함으로써 달성된다 .
각 서수를 이진 문자열 ( '0bxxxxxxx') 로 캐스트합니다 .
를 사용하여 행간 '0b'을 제거합니다 [2:].
각각 앞에 '0'; 와
함께 모든 일을 조인''.join(...)


람다가 필요하지 않습니다. 수행 i=0\nexec(...)또는 i=0;exec(...)137 바이트.
mbomb007

당신이 정말로 파이썬 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

PHP로 직접 HTML 페이지를 생성하기위한 375 바이트

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

파워 쉘, 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

노트:

  • ngn 덕분에 -2 바이트!

1

파이썬 3, 199 바이트 :

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

1

파이썬 3, 170 바이트

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

"Il % svey % su"의 문자열 반복을 만들고, 필요한 횟수만큼 반복 한 다음, 튜플을 사용하여 모든 o의 서브를 가산합니다. 그런 다음이를 2 진으로 변환하고 textwrap 모듈을 사용하고 새 항목의 각 항목을 변환합니다 list to list, 공백으로 조인 한 다음 스터브 또는 무언가로 보이므로 0 1 1을 추가합니다.


1

Mathematica, 123 바이트 (컬러가있는 275)

Grid문자열을 출력하는 대신 사용 하는 것이 정상 인지 확실하지 않습니다 (그렇지 않으면 경쟁이 아닌 항목입니다).

흑백

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

여기에 이미지 설명을 입력하십시오

색깔

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

여기에 이미지 설명을 입력하십시오


결과를 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)

루비에서는 원래 텍스트를 좀 더 간결한 형식으로 압축하는 방법을 찾지 못했습니다. 훌륭한 문자열 조작 기능이 있지만 시도한 모든 방법은 문자열 자체보다 많은 문자를 사용합니다. 모든 의견에 감사드립니다. 이것은 StackOverflow의 첫 번째 코드 골프입니다!


프로그래밍 퍼즐과 코드 골프 스택 교환에 오신 것을 환영합니다! 문자열을 변수 (예 :)로 설정 a한 다음 a+a+a... 을 시도 했습니까 ? 루비가 문자열의 곱셈을 지원한다면 더 좋습니다 a*count!
wizzwizz4

@ wizzwizz4에서 문자열은 순수한 문자열 반복이 아닙니다. :) (하지만 더 나은 방법이 있지만, 그렇게 생각하지 않습니다 a+a+a)
Stewie Griffin

알아! 모두 소문자로 된 짧은 버전을 만들고 반복 한 다음 n 번째 o를 대문자 로 바꾸십시오 O!
wizzwizz4

1

녹, 195 바이트

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

언 골프 드 :

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

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

1

C (gcc) , 102 바이트

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

개요

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

온라인으로 사용해보십시오!



1

Pyth, 47 바이트

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

여기에서 온라인으로 사용해보십시오 .

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


0

C ++ 11, 비경쟁, 726 687636 바이트 (* 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 ++ 답변을보고 싶습니다.

나는 또한 심장 섹션을 인코딩 할 때 몇 가지 실수를했을 것입니다.

출력 (색상 고정) :

여기에 이미지 설명을 입력하십시오


나는 심장 부분에만 메시지가 들어 있다고 가정 했으므로 모든 것을 인코딩했습니다. 말할 것도없이 도전 과제를 다시 읽고 아스키에서 출력의 처음 몇 줄을 테스트했을 때 바보처럼 느껴졌습니다.

0

파이썬, 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.