안녕, 월드! (다른 모든 캐릭터)


129

"Hello, World!"를 인쇄하는 프로그램을 작성하십시오. 또한 프로그램의 첫 번째, 세 번째, 다섯 번째 등의 문자 만 사용하더라도 결과 프로그램은 여전히 ​​"Hello, World!"를 인쇄해야합니다.

프로그램이 다음과 같은 경우 :

abc
def

"Hello, World!"를 출력해야합니다.

acdf

2 자 미만의 솔루션이 없습니다.


2
출력 주위에 공백이있을 수 있습니까?
vroomfondel

18
놀라운 첫 번째 게시물!
Adám

11
"Heelllloo"로 답을 모두보고 고래를 떠올리게했습니다.
Brian Minton

32
"Hello, World!"피하기위한 팁 이와 같은 과제에 기본 제공 : "Greetings, Earthlings!"와 같이 약간 다른 유사한 복잡성 문자열을 사용하십시오.
Martin Ender 2018 년

6
"2 자 미만의 솔루션은 없습니다." 놀랄 만한.
Robert Grant

답변:


195

파이썬 3 , 61 바이트

rant="partisn't"
print(("HHeelllloo,,  WWoorrlldd!!"""[::2]))

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

print파이썬 3에서 함수 라는 사실을 남용 :)

PPCG에서 찾을 수있는 가장 당당한 솔루션입니다.

된다

rn=print
rn("Hello, World!"[:])

48
이것은 아름답다.
musicman523

1
@ musicman523 그러나 텍스트를 작은 따옴표로 묶지 마십시오.
officialaimm

1
@officialaimm 예, 가능하다고 생각합니다
musicman523 2016 년

1
@ yamboy1 다른 모든 편지를 삭제하십시오
vroomfondel

1
나는 [:]실제로 일하는 것을 몰랐다 : O Nice!
HyperNeutrino

56

추기경 , 29 바이트

%
"
H
e
l
l
o
,
 
W
o
r
l
d
!

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

다른 모든 문자를 제거하면 모든 줄 바꿈이 제거되어 Hello, World!다음과 같은 결과가 나타납니다 .

%"Hello, World!

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

이것이 작동하는 이유 %는 네 개의 기본 방향으로 이동하는 네 개의 명령 포인터 를 생성하기 때문 입니다. 소스 코드를 떠나는 IP는 간단히 제거됩니다. 따라서 첫 번째 경우에는 남쪽으로가는 IP 만 남고 두 번째 경우에는 동쪽으로가는 IP 만 남고 나머지는 모두 삭제됩니다. 두 경우 모두 실행 된 프로그램은 그냥 "Hello, World!입니다. "각 셀은 단순히 STDOUT에 출력되는 문자열 모드로 전환합니다. 소스 코드를 그대로두면 프로그램이 종료되므로 문자열을 종료 할 필요가 없습니다.

같은 생각에서 작동합니다 밀랍 사용 *대신 %하고 `대신 "(밀랍 크게 추기경에 의해 영감을하지만, 육각형 격자를 사용하고 있기 때문입니다).

온라인으로 사용해보십시오! (세로) | | 온라인으로 사용해보십시오! (가로)



31

실제로 2 바이트

HH

설명:

H예상대로 푸시 Hello, World! 스택으로 합니다.

메인 프로그램 ( HH)은 첫 번째 프로그램 H과 만나 Hello, World!스택으로 푸시 됩니다. H그러나 두 번째 로 스택을 비우기 위해 두 개의 인수를 사용하려고 시도 Hello, World!하고 실패합니다. 그러나이 오류는 무시되고 Hello, World!암시 적으로 인쇄됩니다.

두 번째 프로그램 ( H)은 Hello, World!한 번만 누르면 인쇄됩니다.

이것은 Fatalize의 2 바이트 답변과 비슷하지만 실제로는 "속임수"가 아닙니다.

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


4
좋은 해결책이지만, 이것이 한 글자 솔루션과 너무 커서 계산에 포함되지 않아야한다고 생각합니다.
레오 Tenenbaum

32
@LeoTenenbaum 왜 안돼? 규칙을 완벽하게 준수합니다.
Okx

2
당신이 설명하는 것은 사실이 아니며, 빈 스택 H만 푸시 Hello, World!하고 스택이 비어 있지 않으면 2 개의 인수가 필요하므로 오류가 발생하고 오류는 무시됩니다. 그리고 실제로는 최상위 요소 만 암시 적으로 인쇄하지 않습니다.
Outgolfer Erik

@EriktheOutgolfer 죄송합니다. 해결됩니다.
Okx

이것이 실제로 내가 가장 좋아하는 골프 언어입니다. 그것은 바보 같은 완벽한 수준에 있습니다.
RShields

22

루아 , 89 바이트

--- [ [
print("Hello, World!")
--[[ ] ]
pCrAiLnCtU(L"AHTeOlRlFoE,L IWNoEr:lDd !:"D)
---]]

온라인으로 사용해보십시오! 구문 강조 표시에서 알 수 있듯이 이것은 대량의 주석 남용입니다.

번갈아 하는:

--[[pit"el,Wrd"
-[]]print("Hello, World!")--]

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

그리고 편의상 프로그램을 다른 모든 문자 형식으로 변환하는 프로그램 : 온라인으로 사용해보십시오!


난이게 좋아! Lua의 주석 형식은 T-SQL과 비슷해 보입니다. 해당 언어를 위해 노력하고 있습니다.
BradC

3
이러한 종류의 트릭은 블록 주석과 라인 주석 (C, JS 등)이있는 모든 언어에서 작동합니다.
CalculatorFeline

2
CALCULATORFELINE : D : D
Riking

2
HHeelllloo WWoorrlldd!!좀 지루한 : P
CalculatorFeline

19

망막 , 39 바이트


HHeelllloo,,  WWoorrlldd!!


(.).x?
$1

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

다른 모든 인물을 복용하면 다음과 같은 효과가 있습니다.


Hello, World!
()x
1

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

첫 번째 프로그램은 인사말이 복제 된 문자열을 만듭니다. 그런 다음 각 문자 쌍을 첫 번째 문자로 바꿉니다. 모든 빈 문자열을 빈 문자열로 바꾸는 빈 스테이지도 있지만 아무것도하지 않습니다. 두 번째 프로그램은 문자 "x"와 일치하지 않으므로 인사말을 만든 후에는 아무것도 대체하지 않습니다.

아마도 세 번째 단계가 약간 변경되면 첫 번째 문자 집합이 동일한 메시지 일 필요는 없습니다. 이로 인해 fullhalved 와 같은 동일한 길이의 솔루션이 생성 될 수 있습니다 .




16

자바 스크립트, 67 바이트

/**/alert`Hello, World`// * / a l e r t ` H e l l o ,   W o r l d `

매 초마다 제거 된 편지 :

/*aetHlo ol`/*/alert`Hello, World`

Laikoni의 Haskell 답변과 마찬가지로 의견을 악용합니다.


좋은 대답, +1! 당신의 대답의 포트를 작성하여 2 바이트를 저장 한 내 자바 8 대답 하고, 추가 바이트 나 변경시 // * ///**/불행하게도 인해 귀하의 경우 가능하지 않은 ( /**/alert`Hello, World` 대신 심지어 내 경우처럼, 바이트의 홀수 금액 인 .
케빈 Cruijssen

14

Brachylog , 4 바이트

Ḥ~wḤ

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

설명

~w오른쪽 변수를에 쓰고 STDOUT왼쪽 인수는 무시합니다. 이다 "Hello, World!", 그래서 이것은 인쇄한다Hello, World! .

첫 번째와 세 번째 문자 만 가져 오면을 얻습니다 Ḥw. 이 경우 w왼쪽 변수를 쓰고 오른쪽 변수를 무시하므로 인쇄합니다.Hello, World! .

2 바이트

ḤḤ

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

이것은 기술적으로 유효한 답변이지만 인쇄하지 않고 프로그램의 출력 변수를 통합 STDOUT하므로 4 바이트 프로그램이 더 큰 도전이라고 생각합니다.


챌린지 상태가 print 이므로 2 바이트 답변이 '기술적으로'유효하다고 생각하지 않습니다 .
Okx

1
@Okx로 종이에 인쇄합니까?
theonlygusti

@theonlygusti STDOUT으로 인쇄하는 것을 의미합니다.
Okx

5
@theonlygusti Sigh ... 그것은 기본적 으로 인쇄 의 의미 입니다.
Okx

3
@ Okk 솔루션을 무효화하기 위해 pedantic하려고 노력하고 있지만 실제로는 아무것도 유효하지 않습니다. 도전 과제는 "출력"이라고 말합니다.
theonlygusti

11

하스켈, 102 바이트

전체 프로그램 :

main= putStr"Hello, World!";;
putSt   x ="p u t S t r  \" H e l l o ,   W o r l d !\"";
mmaaiin = main

그리고 다른 모든 캐릭터가 제거 된 상태에서 :

mi=ptt"el,Wrd";ptt x=putStr "Hello, World!";main=mi

p u t S t r와 사이의 공백을 제거하여 2 바이트를 제거 할 수 있습니다 \".
Sriotchilism O'Zaic

11

x86 기계 코드, 162 바이트

데모

PROG.COM MS-DOS 에뮬레이터 에서 다운로드 하여 실행하십시오 . 예 : DOSBox) .

90 B3 B4 B4 02 90 90 B3 B2 B2 48 90 90 B3 CD CD 21 90 90 B3 B2 B2 65 90 
90 B3 CD CD 21 90 90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 2C 90 90 B3 CD CD 21 90 
90 B3 B2 B2 20 90 90 B3 CD CD 21 90 90 B3 B2 B2 77 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 72 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 B2 B2 64 90 90 B3 CD CD 21 90 
90 B3 B2 B2 21 90 90 B3 CD CD 21 90 90 B3 CD CD 20 90

제거 후 MINI.COM 다운로드

90 B4 02 90 B2 48 90 CD 21 90 B2 65 90 CD 21 90 B2 6C 90 CD 21 90 CD 21 
90 B2 6F 90 CD 21 90 B2 2C 90 CD 21 90 B2 20 90 CD 21 90 B2 77 90 CD 21 
90 B2 6F 90 CD 21 90 B2 72 90 CD 21 90 B2 6C 90 CD 21 90 B2 64 90 CD 21 
90 B2 21 90 CD 21 90 CD 20

달리는 방법?

Ubuntu / Debian 용 DOSBox 설치

sudo apt install dosbox

그것을 실행

dosbox

DOSBOX에서

mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM

어떻게 작동합니까?

기계 작동 코드어셈블리 언어 명령어를 나타냅니다. .

MS-DOS에서 문자인쇄 하려면 레지스터를 설정하고 인터럽트합니다. AH 레지스터는 0x02이며 DL 레지스터에는 문자가 포함됩니다. 인터럽트 벡터는 0x21입니다.

mov ah,0x2  ;AH register to 0x2 (B4 02)
mov dl,0x48 ;DL register to "H" (B2 48)
int 0x21    ;0x21 interrupt     (CD 21)

MS-DOS COM 파일 작은 모델은 헤더가 없기 때문에 좋은 선택입니다. 입니다. 64K로 제한되지만 우리의 경우에는 중요하지 않습니다.

프로그램을 중지하려면 0x20 인터럽트를 사용하십시오

int 0x20    ;0x20 interrupt     (CD 20)

마법

하나의 매개 변수 0xCD로 0xAB opcode 명령 을 실행하려면 다음을 작성하십시오.

AB CD

에서 PROG.COM

90 B3 AB AB CD 90
nop         ; No operation (90)
mov bl,0xb4 ; BL register to AB (B3 AB)
AB CD command (AB CD)
nop         ; No operation (90)

에서 MINI.COM

90 AB CD
nop         ; No operation (90)
AB CD command (AB CD)

그것은이다 동일한 사용하지 않는 경우, 기계 코드 BL 레지스터 .

발전기

16 진 텍스트 파일을 16 진 2 진으로 변환

cat hex_file | xxd -r -p > exec.com


-52 바이트에 대해`90 90`을 모두 제거하십시오.
NieDzejkob

또한 맨 끝에 nop에 도달하지 않습니다.
NieDzejkob

10

Pyth , 31 바이트

p% 2"HHeelllloo,,  WWoorrlldd!!

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

된다

p "Hello, World!

오류를 지적하고 1 바이트를 제거 한 @CalculatorFeline에게 감사드립니다.


문자는 두 번째가 아닌 첫 번째부터 시작합니다. 선행 공간을 삭제할 수 있습니다.
CalculatorFeline

아, 감사합니다 @CalculatorFeline. 사양에서 "Take"를 "Remove"로 읽습니다.
vroomfondel


7

05AB1E , 29 바이트

”™ ,ï‚‚ï ! ”# ¦2 ä ø¨øJð ý

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

설명

”™ ,ï‚‚ï ! ”                # push the string "Weekly Hello , Changed World ! "
               #               # split on spaces
                               # RESULT: ['Weekly','Hello',',','Changed','World','!','']
                ¦              # remove the first element (Weekly)
                 2ä            # split in 2 parts
                               # RESULT: [['Hello', ',', 'Changed'], ['World', '!', '']]
                   ø           # zip
                               # RESULT: [['Hello', 'World'], [',', '!'], ['Changed', '']]
                    ¨          # remove the last element
                     ø         # zip
                               # RESULT: [['Hello', ','], ['World', '!']]
                      J        # join each inner list
                       ðý      # join on space

다른 모든 문자를 제거한 후 코드가 남습니다.

”Ÿ™,‚ï!” 2äøøðý

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

설명

”Ÿ™,‚ï!”       # push the string "Hello, World!"
        2ä     # split in 2 parts
               # RESULT: ['Hello, ', 'World!']
          ø    # zip, as the string has an odd length the space is lost
               # RESULT: ['HW', 'eo', 'lr', 'll', 'od', ',!']
           ø   # zip again
               # RESULT: ['Hello,', 'World!']
            ðý # join on space

7

수학, 62 바이트

P0r0i0n0t0@0"0H0e0l0l0o0,0 0W0o0r0l0d0!0"Print@"Hello, World!"

를 반환 "0H0e0l0l0o0,0 0W0o0r0l0d0!0" Null P0r0i0n0t0[0]하고 인쇄합니다.Hello, World! 하고 부작용으로 합니다. REPL이 아닌 프로그램으로 실행하면 리턴 값이 인쇄되지 않습니다.

다른 모든 캐릭터를 제거한 후 :

Print@"Hello, World!"rn@Hlo ol!

반환 Null ol! rn[Hlo]하고 인쇄합니다 Hello, World!.


7

젤리 , 26 25 바이트

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »

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

두 번째 문자를 모두 제거한 후에 다음 코드가 남습니다.

“3a;»“3ḅaė;œ»

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

작동 원리

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »  Main link.

““3ḅaė;œ»                  Index into Jelly's dictionary to yield
                           ["", "Hello, World!"]. 
          “ 3 ḅ a ė ; œ »  Index into Jelly's dictionary to yield.
                          " FullERebitingBEfluffiest adoptable".
         ḷ                 Take the left result.
“3a;»“3ḅaė;œ»  Main link.

“3a;»          Index into Jelly's dicrionary to yield " N-".
               Set the argument and the return value to the result.
     “3ḅaė;œ»  Index into Jelly's dicrionary to yield "Hello, World!".
               Set the return value to the result.



6

도와주세요! , 2 바이트

Hi

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

H인쇄는 Hello, World!, i조작은 행해지 지 않습니다.

도와주세요! 는 두 개의 숫자를 더하고 소수를 테스트 할 수 있으므로이 메타 포스트 마다 유효한 프로그래밍 언어로 간주됩니다 .


이것이 왜 다운 보트입니까?
Uriel

NOP와 거대한 공간은 정신에 위배됩니다.
RShields

1
결과 소스 코드가 출력되는 메시지를 다시 강조하는 방법에 대한 참신함 때문에 +1.
TOOGAM


6

PHP, 53 바이트

#
echo date(
$e_c_h_o='\H\e\l\l\o\,\ \W\o\r\l\d\!
');

다른 모든 캐릭터를 제거하면 :

#eh ae
echo'Hello, World!';

6

옥타브, 49 45 바이트

Octave는 인덱싱을 위해 대괄호가 필요하지 않기 때문에 4 바이트를 절약했습니다.

'HHeelllloo,,  WWoorrlldd!! ' (1:2 : 3 ^ 3)''

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

그리고 축소 된 것 :

'Hello, World!'(:    )'

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

설명:

초기 코드에는 문자열의 문자가 복제되어 Hello, World!매 초마다 제거 될 수 있습니다. 대괄호와 아포스트로피가 유지되도록 일부 공간이 추가되었습니다.

인덱싱은 실제로 1:2:end입니다. 이 27 개 문자는, 우리는 사용할 수 없습니다 end또는 27우리가 문자를 제거해야하기 때문에, 그래서 우리는 함께 가야 3 ^ 3대신. 세 번째 문자를 모두 제거하면 인덱싱이 (:)(및 일부 추가 공백)됩니다.

(:)"평평하게하고 수직 벡터로 바꾼다"를 의미 합니다. 따라서를 사용하여 전치해야합니다 '. 원래 코드에서 문자열을 바꿀 필요는 없지만 이중 전치 작업이 가능하므로 첫 번째 문자열은을 사용하여 두 번 전치되고 두 번째 문자열은 ''한 번만 전치됩니다.


6

APL (Dyalog) , 35 34 바이트

Martin Ender에게 -1 감사합니다.

'0H0e0l0l0o0,0 0W0o0r0l0d0!0'~  0

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

'0H0e0l0l0o0,0 0W0o0r0l0d0!0' 제거 가능한 필러 문자로 0이있는 메시지

~ 외

 형식화 (문자열)

0 숫자 0

홀수 문자 만 남겨두면이됩니다 'Hello, World!' .


5

T-SQL, 75 바이트

---
PRINT 'Hello, World!'
/*
-P-R-I-N-T-'-H-e-l-l-o-,- -W-o-r-l-d-!-'
---*/

CalculatorFeline의 LUA 버전 에서 영감을받은 단일 및 다중 회선 주석 남용 .

짝수 번호의 모든 문자를 제거한 후 일부는 줄 바꿈입니다.

--PIT'el,Wrd'/
PRINT'Hello, World!'--/

5

자바 스크립트, 73 바이트

a ='a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/';eval(a.replace(/0/g,''))

acontent 가 포함 된 문자열 을 a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/구성한 다음 모두 제거0 '를 수득들 alert`Hello, World!`//evalD'.

프로그램의 다른 모든 특성을 취하면

a=alert`Hello, World!`//;vlarpae//,')

Hello, World전체 프로그램에서 평가 된 것과 동일한 방식으로 템플릿 문자열 구문을 사용하여 경고 한 다음 호출 결과를 저장 a하고 통찰력있는 주석을 포함합니다 //;vlarpae//,').


5

> <> , 47 바이트

기발한:

| v~" H e l l o ,   W o r l d ! "

~o<< ;!!!? l

두 번째 문자가 제거 될 때마다 :

|v"Hello, World!"
o<;!?l

온라인에서 사용해보십시오 : 원본 , 수정

오리지널 프로그램은 "Hello, World!" 공백이있는 스택에 (역순으로), 교대로 문자를 인쇄하고 스택 길이가 0이 될 때까지 문자를 삭제합니다. 두 번째 프로그램은 삭제 명령을 제외하고 동일하게 수행합니다.~ 이 사라 졌다는 됩니다.

오류가 발생해도 중단하지 않으려면 Martin Ender 's Cardinal book 에서 리프를 가져 옵니다. 수정 된 코드는 다음과 같습니다.

\"!dlroW ,olleH"!#o#

원본은 동일하지만 모든 문자 사이에 줄 바꿈이 39 바이트 동안 삽입됩니다. 온라인으로 수정 하십시오 : original , modified .


5

,,,, 34 바이트

 2"Hteoltlaol,l yWhourmladn!! "⟛

짝수의 문자를 제거 할 때 ...

 "Hello, World!"

설명

모든 문자로 :

 2"..."⟛

               no-op
 2             push 2 to the stack
  "..."        push "Hteoltlaol,l yWhourmladn!! " to the stack
       ⟛      pop 2 and the string and push every 2nd character of the string
               implicit output

짝수 문자없이 :

 "..."

               no-op
 "..."         push "Hello, World!" to the stack
               implicit output

5
이것은 이것이 경쟁이 아니라고 말할 필요가 없음을 의미합니다.
FryAmTheEggman 2016 년

2
그러나 당신은 모든 짝수 색인 문자를 유지해야합니다 ... (0 색인) ...
HyperNeutrino

맞아요. 다른 캐릭터 LOL을 추가하십시오.
전적으로 인간

4

Brainfuck, 155 바이트

- - < - < < + [ + [ < + > - - - > - > - > - < < < ] > ] < < - - . < + + + + + + . < < - . . < < . < + . > > . > > . < < < . + + + . > > . > > - . < < < + .

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

두 번째 문자가 모두 제거되었습니다.

--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.