"Hello, World!"를 인쇄하는 프로그램을 작성하십시오. 또한 프로그램의 첫 번째, 세 번째, 다섯 번째 등의 문자 만 사용하더라도 결과 프로그램은 여전히 "Hello, World!"를 인쇄해야합니다.
프로그램이 다음과 같은 경우 :
abc
def
"Hello, World!"를 출력해야합니다.
acdf
2 자 미만의 솔루션이 없습니다.
"Hello, World!"를 인쇄하는 프로그램을 작성하십시오. 또한 프로그램의 첫 번째, 세 번째, 다섯 번째 등의 문자 만 사용하더라도 결과 프로그램은 여전히 "Hello, World!"를 인쇄해야합니다.
프로그램이 다음과 같은 경우 :
abc
def
"Hello, World!"를 출력해야합니다.
acdf
2 자 미만의 솔루션이 없습니다.
답변:
rant="partisn't"
print(("HHeelllloo,, WWoorrlldd!!"""[::2]))
print
파이썬 3에서 함수 라는 사실을 남용 :)
PPCG에서 찾을 수있는 가장 당당한 솔루션입니다.
된다
rn=print
rn("Hello, World!"[:])
[:]
실제로 일하는 것을 몰랐다 : O Nice!
%
"
H
e
l
l
o
,
W
o
r
l
d
!
다른 모든 문자를 제거하면 모든 줄 바꿈이 제거되어 Hello, World!
다음과 같은 결과가 나타납니다 .
%"Hello, World!
이것이 작동하는 이유 %
는 네 개의 기본 방향으로 이동하는 네 개의 명령 포인터 를 생성하기 때문 입니다. 소스 코드를 떠나는 IP는 간단히 제거됩니다. 따라서 첫 번째 경우에는 남쪽으로가는 IP 만 남고 두 번째 경우에는 동쪽으로가는 IP 만 남고 나머지는 모두 삭제됩니다. 두 경우 모두 실행 된 프로그램은 그냥 "Hello, World!
입니다. "
각 셀은 단순히 STDOUT에 출력되는 문자열 모드로 전환합니다. 소스 코드를 그대로두면 프로그램이 종료되므로 문자열을 종료 할 필요가 없습니다.
같은 생각에서 작동합니다 밀랍 사용 *
대신 %
하고 `
대신 "
(밀랍 크게 추기경에 의해 영감을하지만, 육각형 격자를 사용하고 있기 때문입니다).
온라인으로 사용해보십시오! (세로) | | 온라인으로 사용해보십시오! (가로)
xpxuxtxs( ) { }xuxs ( ) { } main( ) {puts ( "Hello, World!" ) ; } mxaxixn ( ) {xpxuxtxs ( " H e l l o , W o r l d ! " ) ; }
짝수 문자 제거 :
xxxx(){}us(){}mi(){us("el,Wrd");}main(){puts("Hello, World!");}
HH
설명:
H
예상대로 푸시 Hello, World!
스택으로 합니다.
메인 프로그램 ( HH
)은 첫 번째 프로그램 H
과 만나 Hello, World!
스택으로 푸시 됩니다. H
그러나 두 번째 로 스택을 비우기 위해 두 개의 인수를 사용하려고 시도 Hello, World!
하고 실패합니다. 그러나이 오류는 무시되고 Hello, World!
암시 적으로 인쇄됩니다.
두 번째 프로그램 ( H
)은 Hello, World!
한 번만 누르면 인쇄됩니다.
이것은 Fatalize의 2 바이트 답변과 비슷하지만 실제로는 "속임수"가 아닙니다.
H
만 푸시 Hello, World!
하고 스택이 비어 있지 않으면 2 개의 인수가 필요하므로 오류가 발생하고 오류는 무시됩니다. 그리고 실제로는 최상위 요소 만 암시 적으로 인쇄하지 않습니다.
--- [ [
print("Hello, World!")
--[[ ] ]
pCrAiLnCtU(L"AHTeOlRlFoE,L IWNoEr:lDd !:"D)
---]]
온라인으로 사용해보십시오! 구문 강조 표시에서 알 수 있듯이 이것은 대량의 주석 남용입니다.
번갈아 하는:
--[[pit"el,Wrd"
-[]]print("Hello, World!")--]
그리고 편의상 프로그램을 다른 모든 문자 형식으로 변환하는 프로그램 : 온라인으로 사용해보십시오!
HHeelllloo WWoorrlldd!!
좀 지루한 : P
HHeelllloo,, WWoorrlldd!!
(.).x?
$1
다른 모든 인물을 복용하면 다음과 같은 효과가 있습니다.
Hello, World!
()x
1
첫 번째 프로그램은 인사말이 복제 된 문자열을 만듭니다. 그런 다음 각 문자 쌍을 첫 번째 문자로 바꿉니다. 모든 빈 문자열을 빈 문자열로 바꾸는 빈 스테이지도 있지만 아무것도하지 않습니다. 두 번째 프로그램은 문자 "x"와 일치하지 않으므로 인사말을 만든 후에는 아무것도 대체하지 않습니다.
아마도 세 번째 단계가 약간 변경되면 첫 번째 문자 집합이 동일한 메시지 일 필요는 없습니다. 이로 인해 full 및 halved 와 같은 동일한 길이의 솔루션이 생성 될 수 있습니다 .
H→e→l→l→o→,→ →W→o→r→l→d→!
짝수 문자를 제거하면 다음 텍스트의 방향을 나타내는 화살표 명령 만 제거하면 다음 코드가 남습니다.
Hello, World!
인사말도 인쇄됩니다.
{--}main=putStr"Hello, World!"--} m a i n = p u t S t r " H e l l o , W o r l d ! "
두 번째 문자가 모두 제거되었습니다.
{-mi=uSrHlo ol!-}main=putStr"Hello, World!"
이것은 Haskell의 두 가지 주석 형식을 활용합니다 : {- -}
인라인 또는 여러 줄 주석 및 --
나머지 줄 주석 .
/**/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 답변과 마찬가지로 의견을 악용합니다.
// * /
에 //**/
불행하게도 인해 귀하의 경우 가능하지 않은 ( /**/alert`Hello, World`
대신 심지어 내 경우처럼, 바이트의 홀수 금액 인 .
Ḥ~wḤ
~w
오른쪽 변수를에 쓰고 STDOUT
왼쪽 인수는 무시합니다. Ḥ
이다 "Hello, World!"
, 그래서 이것은 인쇄한다Hello, World!
.
첫 번째와 세 번째 문자 만 가져 오면을 얻습니다 Ḥw
. 이 경우 w
왼쪽 변수를 쓰고 오른쪽 변수를 무시하므로 인쇄합니다.Hello, World!
.
ḤḤ
이것은 기술적으로 유효한 답변이지만 인쇄하지 않고 프로그램의 출력 변수를 통합 STDOUT
하므로 4 바이트 프로그램이 더 큰 도전이라고 생각합니다.
전체 프로그램 :
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 바이트를 제거 할 수 있습니다 \"
.
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
p% 2"HHeelllloo,, WWoorrlldd!!
된다
p "Hello, World!
오류를 지적하고 1 바이트를 제거 한 @CalculatorFeline에게 감사드립니다.
i;H;e;l;l;o;,; ;w;o;r;l;d;!;<esc>;Ó;
그 참고 <esc>
단일 문자, 예를 들면이다0x1b
다른 모든 캐릭터를 제거하면 다음이 제공됩니다.
iHello, world!<esc>Ó
”™ ,ï‚‚ï ! ”# ¦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
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!
.
““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.
+0503 @@6 :22 //1 +050501 @@6 :55 +0502 @@6@6 :33 //1 +050502 @@6 :55 +03 //1 +04 @@6 :55 //1 +03 @@6 :55 +01 //1 +0504 @@6 :33 //1 +050502 @@6 :55 +01 //1 +050502 @@6 :55 +0502 @@6 :11 //1 +050501 @@6 :55 +01 //1 +03 @@6
다른 모든 편지 :
+53@6:2/1+551@6:5+52@66:3/1+552@6:5+3/1+4@6:5/1+3@6:5+1/1+54@6:3/1+552@6:5+1/1+552@6:5+52@6:1/1+551@6:5+1/1+3@6
Octave는 인덱싱을 위해 대괄호가 필요하지 않기 때문에 4 바이트를 절약했습니다.
'HHeelllloo,, WWoorrlldd!! ' (1:2 : 3 ^ 3)''
그리고 축소 된 것 :
'Hello, World!'(: )'
초기 코드에는 문자열의 문자가 복제되어 Hello, World!
매 초마다 제거 될 수 있습니다. 대괄호와 아포스트로피가 유지되도록 일부 공간이 추가되었습니다.
인덱싱은 실제로 1:2:end
입니다. 이 27 개 문자는, 우리는 사용할 수 없습니다 end
또는 27
우리가 문자를 제거해야하기 때문에, 그래서 우리는 함께 가야 3 ^ 3
대신. 세 번째 문자를 모두 제거하면 인덱싱이 (:)
(및 일부 추가 공백)됩니다.
(:)
"평평하게하고 수직 벡터로 바꾼다"를 의미 합니다. 따라서를 사용하여 전치해야합니다 '
. 원래 코드에서 문자열을 바꿀 필요는 없지만 이중 전치 작업이 가능하므로 첫 번째 문자열은을 사용하여 두 번 전치되고 두 번째 문자열은 ''
한 번만 전치됩니다.
Martin Ender에게 -1 감사합니다.
'0H0e0l0l0o0,0 0W0o0r0l0d0!0'~ ⍕ 0
'0H0e0l0l0o0,0 0W0o0r0l0d0!0'
제거 가능한 필러 문자로 0이있는 메시지
~
외
⍕
형식화 (문자열)
0
숫자 0
홀수 문자 만 남겨두면이됩니다
'Hello, World!'
.
---
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!'--/
a ='a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/';eval(a.replace(/0/g,''))
a
content 가 포함 된 문자열 을 a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/
구성한 다음 모두 제거0
'를 수득들 alert`Hello, World!`//
인 eval
D'.
프로그램의 다른 모든 특성을 취하면
a=alert`Hello, World!`//;vlarpae//,')
Hello, World
전체 프로그램에서 평가 된 것과 동일한 방식으로 템플릿 문자열 구문을 사용하여 경고 한 다음 호출 결과를 저장 a
하고 통찰력있는 주석을 포함합니다 //;vlarpae//,')
.
기발한:
| 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 .
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
- - < - < < + [ + [ < + > - - - > - > - > - < < < ] > ] < < - - . < + + + + + + . < < - . . < < . < + . > > . > > . < < < . + + + . > > . > > - . < < < + .
두 번째 문자가 모두 제거되었습니다.
--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.