“Hello, World!”(다른 모든 캐릭터, 2 부)


18

안녕하세요, 월드 2의 일종으로 ! (다른 모든 문자) , 있도록하는 프로그램을 작성 이러한 프로그램의 인쇄 "안녕하세요, 세계!"전체 프로그램, 1, 3, 5, 등 프로그램의 문자 2, 4, 6, 기타

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

abc
def

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

acdf

b
e

"Hello, World!"가 내장 된 솔루션이 없습니다.


6
"Hello, World!"에서 텍스트를 바꾸는 것이 어떻습니까? 다른 것에?
코너 오브라이언

1
허점을 충분히 피하고 "Hello, World!"라고 생각합니다. 정식입니다.
레오 Tenenbaum

24
IMO "Hello, World!"와 다른 문자열을 보는 것이 좋습니다.
코너 오브라이언

1
공백과 줄 바꿈은 문자로 계산됩니까?
officialaimm

6
@ ConorO'Brien 유쾌한 부작용으로 거의 모든 언어에 문자 그대로 다른 문자열이 내장 될 것입니다.
Dennis

답변:


24

x86 기계 코드, 378 바이트

데모

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

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

LEFT.COMRIGHT.COM도 다운로드 할 수 있습니다.

작동 방식 및 실행 방법

1 부 답변보기

마법

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

마법

발전기

코드를 실행하고 16 진수를 얻으십시오. 이진수로 변환

cat prog.hex | xxd -r -p > PROG.COM


13

파이썬 3 , 115 바이트

print=="partisn't";
"ran" >="partisn't" ;
print((""" "HHeelllloo,,  wwoorrlldd!! """[" ) #2">"1":: 3- 1] [ 1:-1 ]))

모든 이상한 캐릭터

pit=print;"a">"ats'";pit(" Hello, world! "[  2>1: -1  :1])

모든 짝수 캐릭터

rn="ats'"
rn =print 
rn("""Hello, world!""")#""":3 ][1- )

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

아마도 훨씬 짧아 질 수는 있지만 파이썬에서 작동하게 된 것을 기쁘게 생각합니다. 첫 번째 부분에 대한 vroomfondel의 답변 과 유사합니다 .

지루한 93 바이트 답변

""""""
print("Hello, world!")
""""""#
""""

pprriinntt((""HHeelllloo,,  wwoorrlldd!!""))
#"""

모든 이상한 캐릭터

"""pit"el,wrd"
"""
""
print("Hello, world!")#"

모든 짝수 캐릭터

"""
rn(Hlo ol!)"""#""
print("Hello, world!")
""

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


9

> <> , 45 바이트

! """!!ddllrrooWW  oolllleeHH"!!"" >~o <> o <

아니면 그냥 문자 :

 "!dlroW olleH"!">o<  

아니면 이상한 문자 :

!""!dlroW olleH!" ~ >o<

온라인으로 시도하십시오 : original , evens , odds .

원래 버전은 " !!ddllrrooWW oolllleeHH"를 스택으로 푸시 한 다음, 물고기가 사이 >~o <에 튀어 오릅니다. 그러면 글자를 삭제하고, 두 개를 인쇄하고, 두 개를 삭제하고, 두 개를 인쇄하고, 두 개를 삭제합니다. 두 개의 반 프로그램은 표준 문자열 인쇄 프로그램입니다. 까다로운 부분이 결합 된 "!올바르게 세 프로그램에서 문자열 모드에서 전환 할 수 있습니다.


7

Befunge-98 , 43 바이트

120 x""!!ddllrrooWW  ,,oolllleeHH""cckk,,@@

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

이상한 것만 :

10x"!dlroW ,olleH"ck,@

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

짝수 만 :

2 "!dlroW ,olleH"ck,@

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

설명

전체 프로그램 :

120               Push 1, push 2, push 0.
x                 Pop 0 (y) and 2 (x) and set the instruction pointer's movement
                  delta to (x,y). That is, run the remainder of the code
                  by skipping every other cell.
"!dlroW ,olleH"   Push the code points of the output.
ck,               Print 13 characters from the top of the stack.
@                 Terminate the program.

홀수 프로그램에서는 2없어 졌으므로 10x실제로는 아무것도하지 않습니다 ( (1,0)어쨌든 델타를 기본값으로 설정합니다). 프로그램의 나머지 부분은 동일합니다.

짝수 프로그램에서, 우리 2는 완전히 무시할 수있는 시작 부분을 밀어 넣습니다 . 프로그램의 나머지 부분은 이전과 동일합니다.



5

Mathematica, 65 바이트

PPrriinntt[[""HHeelllloo,,  WWoorrlldd!!""]]Print@"Hello, World!"

경고를 표시하고 인쇄 Hello, World!하고를 반환합니다 Null PPrriinntt[["" HHeelllloo, Null, "" WWoorrlldd!!]]. REPL이 아닌 프로그램으로 실행하면 리턴 값이 인쇄되지 않습니다.

짝수 문자를 제거한 후 :

Print["Hello, World!"]Pit"el,Wrd"

인쇄 Hello, World!하고를 반환합니다 "el,Wrd" Null Pit.

홀수 문자를 제거한 후 :

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

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


5

x86 기계 코드, 73 바이트

Евгений Новиков 의 솔루션에서 영감을 얻은이 방법을 사용하면 세 가지 변형에 대한 "분리 된"코드로 건너 뛸 수 있습니다. 여전히 lodsb; lodsb중심점으로 사용하는 스마트 변형을 사용하려고 합니다 (따라서 모든 변형에 대해 하나의 문자열 상수 만 필요합니다)

EB 14 00 00 8A 8A 17 16 01 01 B4 B4 09 09 CD CD
21 21 CD CD 20 20 8A 1f 01 B4 09 CD 21 CD 20 48
65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 00 48 48 65
65 6c 6c 6c 6c 6f 6f 2c 2c 20 20 57 57 6f 6f 72
72 6c 6c 64 64 21 21 00 00

어린 시절부터 올바르게 기억한다면 COM의 작은 모델부터 시작 DS=CS=SS하여 코드는에서 시작됩니다 CS:0100h. 코드가 제로 메모리 블록에로드되었다고 보장되지는 않습니다 (보증 된 경우 2 바이트를 삭제할 수 있음).

긴 코드의 분해는

  JMP *+14h
  ; 20 irrelevant bytes
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
message:
  DB "Hello, World!\0"
  DB "HHeelllloo,,  WWoorrlldd!!\0\0"

홀수 코드의 분해

  JMP *+00h
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
  ; some irrelevant bytes
message:
  DB "Hello, World!\0"

짝수 코드의 분해 :

  ADC AL,00h
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
  ; some irrelevant bytes
message:
  DB "Hello, World!\0"

잘 했어! DOSBox 프로그램에서 작동하지 않습니다. 왜이 코드가있는 com 파일이 시작시 시스템을 정지시키는 지 모르겠습니다.
Евгений Новиков

다음에 코드를 테스트하십시오. 8A0116에서이해야 BA하는 대신, 문자열은 종료된다 $,하지 NULL.
NieDzejkob

4

레티 나 , 48 바이트

G |`

HHeelllloo,,  WWoorrlldd!!
$_&

(.)\1t?
$1

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

홀수 위치 :

G|
Hello, World!
_
()1?$

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

짝수 위치 :

 `
Hello, World!$&
.\t
1

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

설명

전체 프로그램 :

G |`

이것은 전혀 아무것도하지 않습니다. 는 |기존 구성 옵션이 아닙니다. 는 G이것을 그렙 단계를 만들지 만,이 grepped 할 것도 정말없는이 아무것도하지 않도록 정규식, 어떤 비어 있습니다. 이 단계의 목적은 메인 "Hello, World!"앞에 두 개의 줄 바꿈을 두는 것입니다. 그들 중 하나는 항상 감소에서 살아남을 수 있습니다. 이것을 grep stag로 만드는 이유는 라인의 패리티를 상쇄해야하고 grep 스테이지에는 단일 라인 만 필요하기 때문입니다.


HHeelllloo,,  WWoorrlldd!!

이것은 (빈) 작업 문자열을 각 문자가 두 배로 필요한 출력으로 바꿉니다.

$_&

이것은 아무것도하지 않습니다. 정규 표현식 은 문자열의 끝에 a _와 a 를 일치 시키려고 시도합니다 &. 물론 불가능합니다. 줄 바꿈을 없애기 위해 축소 버전의 문자가 필요합니다.

(.)\1t?
$1

마지막으로, 우리는 대체하여 중복 문자를 제거 (.)\1와 함께 $1. 는 t?사용되지 않습니다하지만 다시 감소 버전에서 필요합니다.

홀수 프로그램 :

G|
Hello, World!

G빈 입력과 일치하지 수 있지만, 우리는이 이유는 |다른 빈 일치 할 수 있도록. 빈 작업 문자열을 원하는 출력으로 바꿉니다.

_
()1?$

밑줄이로 바뀌지 ()1?$만 문자열에 밑줄이 없으므로 아무 것도 수행하지 않습니다.

짝수 프로그램 :

 `
Hello, World!$&

`우리가 다시 출력 작업 문자열을 대체하기 위해 빈 정규식을 사용하므로 그냥 빈 구성 문자열을 의미한다. 이번에는 삽입 $&하지만 일치하는 항목이므로 비어 있습니다. 물론 아무것도하지 않습니다.

.\t
1

이것은 문자 뒤에 탭이있는로 대체 1되지만 탭이 없으므로 아무 것도 없습니다.




2

PHP, 70 바이트

"";echo'Hello, World!'.""//pprriinntt''HHeelllloo,,  WWoorrlldd!!''
;;

홀수 문자 :

";coHlo ol!."/print'Hello, World!';

짝수 문자 :

"eh'el,Wrd'"/print'Hello, World!'
;

2

하스켈 , 92 바이트

{---- }

mmaaiinn==ppuuttSSttrr""HHeelllloo,,  WWoorrlldd!!""----}main=putStr"Hello, World!"

온라인으로 사용해보십시오! 구문 강조 표시가 처리하기에 주석 남용이 너무 많은 것 같습니다. {- ... -}인라인 또는 여러 줄 주석 인 반면 --줄 주석을 시작합니다.

홀수 문자 :

{--}
main=putStr"Hello, World!"--mi=uSrHlo ol!

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

짝수 문자 :

-- 
main=putStr"Hello, World!"--}anptt"el,Wrd"

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


2

Zsh , 54 바이트

<<<Hello\ world!||eecchhoo  HHeelllloo\\  wwoorrlldd!!

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

기본 프로그램은 첫 번째 명령문을 성공적으로 실행하므로 부울 이후의 명령문 ||은 무시됩니다.

홀수 / 짝수의 <<<Hello\ world!경우 종료되지 <<heredoc않거나 <filestdin 에서 제공됩니다. 어느 쪽이든은이 ||되고 |, 그래서 첫 번째 명령에 의해 출력에 파이프와 무시는 무엇이든 echo.


1

로고 , 71 바이트

;;\\
pr[Hello, World!]er "|

pprr[[HHeelllloo,,  WWoorrlldd!!]]
;;\\
|

(프로그램에는 줄 바꿈이 있습니다)

제거 된 두 가지 버전 :

;\p[el,Wrd]r"
pr[Hello, World!]
;\|

;\
rHlo ol!e |
pr[Hello, World!];\

(프로그램에는 줄 바꿈이 있습니다)

무엇에 대한 설명 prer수행, 볼 이 게시물을 . 이 경우 er단어 결정 프로 시저 이름이 제공됩니다.

\로고 의 is 이스케이프 문자는 주석이 끝난 후 개행을 이스케이프하므로 rHlo ol!e |제거 된 두 번째 프로그램의 두 번째 줄 ( )을 주석으로 만듭니다.


1

자바 스크립트, 68 바이트

//**
alert`Hello, World`//**//aalleerrtt``HHeelllloo,,  WWoorrlldd``

홀수 문자 :

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

짝수 문자 :

/*
lr`el,Wrd/*/alert`Hello, World`

다른 답변에 대한 내 수정 버전.


1
처음에 공간이 필요한 이유는 무엇입니까?
CalculatorFeline

첫 번째, 세 번째 등의 문자를 사용할 때 구문 상 유효하지 않은 것 같습니다. 또한에서 누락 l되었습니다 HHeelllloo.
Arnauld

@ CalculatorFeline, @ Arnauld 고정
SuperStormer


1

BotEngine , 180 178 바이트

질문 에 대한 나의 대답을 바탕으로 합니다.

 vv 
 v < 
 eHH 
 eee 
 ell 
 ell 
 eoo 
 e,, 
 e   
 eWW 
 eoo 
 err 
 ell 
 edd 
 e!! 

>>P          e     e     e     e     e     e     e     e     e     e     e     e     e P

홀수 문자 (마지막 줄의 여러 후행 공백에 유의) :

 v
v<
eH
ee
el
el
eo
e,
e 
eW
eo
er
el
ed
e!
>P                                          

짝수 문자 :

v     H  e  l  l  o  ,     W  o  r  l  d  ! 
>     e  e  e  e  e  e  e  e  e  e  e  e  eP  

0

룬문자 마법 부여 , 52 바이트

 L @""H!edlllroo,W  W,oorlllde!H"" ~@"!dlroW ,olleH"

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

룬 문자는 흐름 제어 문자를 무작위로 제거하면 추적이 큰 고통을 겪지 만 다른 모든 문자와 같이 예측 가능한 방사선을 생성하므로 일반적으로 방사선 처리에 능숙하지 않습니까? 쉽고, 우리는 서로 반대로 바뀌어 인터리브 된 두 개의 프로그램을 인코딩 한 다음 기본 실행을 위해 세 번째 사본에 고정하고 하나의 문자로 실행되는 프로그램을 제어합니다. 프로그램 2에서 세 번째 사본은 볼 수없는 쓰레기이며 프로그램 3에서는 따옴표를 유지하여 인쇄하지 않고 튀어 나올 수 있습니다.

프로그램 1은이 부분 만 실행합니다.

 L                                  @"!dlroW ,olleH"

프로그램 2는이 부분 만 실행합니다.

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

이처럼 :

  "Hello, World!" @!lo olH

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

프로그램 3은이 부분 만 실행합니다.

 L @ " ! d l r o W   , o l l e H " ~ " d r W , l e "

이처럼 :

L@"!dlroW ,olleH"~"drW,le"

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

"drW,le"부분이 실행되지만,이 ~즉시 원하는 출력을 유지, 그 스택에서 팝.

순전히> <> 응답을 변환하면 프로그램이 더 짧아지고 45 바이트의 무게가 나타납니다.

! ```!!ddllrrooWW  oolllleeHH`!!`` R~$ LR $ L

그러나 Runic에는> <>에는 최대 스택 크기 10 + IP 마나 (처음 10)의 제한이 있습니다. 또한 !!ddllrrooWW oolllleeHH24자를 포함하여 R명령 실행 직전에 만료 될 때까지 IP가 마나를 흘리게 하여 기본 프로그램에 대한 출력이 없습니다.

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

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