“안녕하세요!”


419

그래서 ... 어 ... 이건 좀 창피 해요. 그러나 "Hello, World!"라는 평범한 것이 없습니다. (태그 35 개 변종에도 불구하고 아직 도전 , 그리고 계산). 이것이 공통 언어에서 가장 흥미로운 코드 골프는 아니지만 특정 esolang에서 가장 짧은 솔루션을 찾는 것은 심각한 도전이 될 수 있습니다. 예를 들어, 내가 아는 한 가장 짧은 Brainfuck 솔루션이 아직 발견되었는지 여부는 알 수 없습니다.

또한 모든 Wikipedia (Wikipedia 항목 이 삭제 되었지만 archive.org에 사본이 있음 ) 동안 esolangsRosetta Code 에는 "Hello, World!"목록이 있습니다. 프로그램에서 이들 중 어느 것도 각 언어에 대해 가장 짧은 것에 관심이 없습니다 ( 이 GitHub 리포지토리도 있습니다 ). 우리가 코드 골프 커뮤니티에서 중요한 사이트가되고 싶다면, 가장 짧은 "Hello, World!"의 궁극적 인 카탈로그를 만들어보아야한다고 생각합니다. 프로그램 ( 기본 퀴네 챌린지가 다양한 언어로 알려진 가장 짧은 퀴인 을 어떻게 포함 하는지와 유사 함). 자 이렇게하자!

규칙

  • 각 제출물은 전체 프로그램이어야합니다.
  • 프로그램은 입력을받지 않아야 Hello, World!하며 STDOUT (대문자 및 구두점을 포함한이 정확한 바이트 스트림)과 선택적인 후행 줄 바꿈 및 기타 옵션으로 인쇄해야합니다 .
  • 프로그램은 STDERR에 아무것도 쓰지 않아야합니다.
  • 빈 프로그램이 인쇄되는 언어를 만들어서 이것을 남용하고 싶을 경우 Hello, World!, 그들은 매우 지루한 답변을위한 길을 열었습니다.

    제출물을 테스트하려면 통역사가 있어야합니다. 이전에 구현되지 않은 언어에 대해이 통역사를 직접 작성할 수 있습니다.

  • 제출은 적절한 (기존의) 인코딩, 일반적으로 (필요하지는 않지만) UTF-8 로 바이트 단위 로 점수가 매겨 집니다. Folders 와 같은 일부 언어 는 점수를 얻기가 다소 까다 롭습니다. 의심스러운 경우 Meta에 문의하십시오 .
  • 이 찾는 것에 대해 아닙니다 최단와 언어 "안녕하세요, 세계!" 프로그램. 가장 짧은 "Hello, World!"를 찾는 것입니다. 모든 언어로 프로그램. 따라서 나는 어떤 대답을 "허용"으로 표시하지 않을 것이다.
  • 선택한 언어가 이미 답을 가지고있는 다른 (잠재적으로 더 널리 사용되는) 언어의 사소한 변형 인 경우 (BASIC 또는 SQL 방언, 유닉스 쉘 또는 Alphuck과 같은 사소한 Brainfuck-derivatives를 생각하십시오) 기존 답변에 메모를 추가하는 것이 좋습니다 동일하거나 매우 유사한 솔루션은 다른 언어에서도 가장 짧습니다.

부수적으로, 골프가 많지 않은 언어에서는 지루한 (그러나 유효한) 답변을 줄이지 마십시오 . 가능한 한 완전한 카탈로그를 컴파일하려고 시도 하므로이 질문에 여전히 유용합니다. 그러나, 이렇게 저자가 실제로 코드를 골프에 노력을했다 언어로 주로 upvote에 답변을.

영감을 얻으 려면 Hello World Collection을 확인 하십시오 .

카탈로그

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어별로 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

## Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들면 스 니펫에 표시됩니다.

## [><>](https://esolangs.org/wiki/Fish), 121 bytes


2
@isaacg 아닙니다. 우선 성 테스트가 가능한지 확실하지 않은 흥미로운 언어가 있다고 생각합니다.
Martin Ender

6
와 같은 동일한 프로그램 "Hello, World!"이 여러 다른 관련없는 언어로 가장 짧은 경우 별도로 게시해야합니까?
aditsu

2
@ mbomb007 3 개의 코드 블록이 많은 공간을 차지하기 때문에 기본적으로 숨겨져 있습니다. 나는 그것들을 각각 한 줄로 축소 할 수는 있지만 버그가 발생할 경우 코드를 유지 관리하기를 원합니다.
Martin Ender

7
@ETHproductions "일반 규칙과 달리이 문제보다 새로운 언어라도 언어 (또는 언어 버전)를 자유롭게 사용할 수 있습니다." 게시 하기 전에 언어 구현을 게시하면 도움이 될 것입니다.
Martin Ender

2
@MartinEnder ... 거의. 두 BF 솔루션의 크기가 동일한 경우 사전 순서가 작은 솔루션은 단항에서 더 적은 바이트 수를 사용합니다. 물론 BF로 변환 된 가장 작은 단항 솔루션은 가장 작습니다.
user202729

답변:


442

멈춤, 0 바이트

글쎄, 그보다 짧을 수는 없습니다 ... 빈 프로그램이 Stuck에 출력 Hello, World!됩니다 .


57
젠장, 나는 20 분 늦었다! : P
Kade

33
Noooo c'mon 서쪽 효과에서 가장 빠른 총;)
Beta Decay

30
@Zuck 글쎄, Stuck은 CJam / GolfScript / Pyth와 마찬가지로 코드 골프를 위해 만들어졌습니다. Hello, World!것은 내가 개발에 일찍 자리로 넣어하신 것이었다. 나는 그것을 너무 오래 남겨 두려는 의도가 없었습니다.
Kade

132
더 짧은 해결책을 찾으려고 노력했지만 멈췄습니다.
Cyoce

51
jQuery에서 -1 바이트 jQuery를 사용해 보셨습니까?
10 답변

244

PHP, 13 바이트

Hello, World!

예. 효과가있다.


261
평소와 마찬가지로, PHP는 항상 어떻게 작동하는지 궁금합니다.
Fatalize

95
물론 <?php코드 에는 없기 때문에 작동합니다. PHP로 전혀 해석되지 않습니다. :)
Lynn

58
이것은 이것이 단지 HTML 답변이라는 것을 의미합니다 ...
Nelson

82
@Nelson 아니오, 그렇지 않습니다. PHP를 반드시 HTML에 배치 할 필요는 없습니다. 그리고 플러스, HTML은 표준 출력에 인쇄되지 않습니다
georgeunix

26
이것은 가장 재미있는 답변입니다
Oliver Ni

241

Brainfuck, 78 바이트

개방형 현상금 : 누구나이 점수를 향상시킬 수 있으면 현상금 (+500)을 그들에게 전달합니다. @KSab 76 72 바이트 솔루션을찾았습니다!

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

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

처음 28 바이트 --<-<<+[+[<+>--->->->-<<<]>]는 다음과 같은 반복 관계로 테이프를 초기화합니다 (mod 256).

f n = 171 · (-f n-1 -f n-2 -f n-3 + 1)f 0 = 57 , f 1 = 123f 2 = 167 입니다.

(171)의 요인으로 인해 발생 3 -1 ≡ 171 MOD (256)를 . 현재 값이 변환 될 때 <+>---마다 매번 3을 빼는 1 개의 셀 백 (비아 )이 효과적으로 값에 171을 곱합니다.

에서는 N = 220 번역되는 제로 값이고, 반복 정지한다. 중지 점 앞의 10 바이트는 다음과 같습니다.

[130, 7, 43, 111, 32, 109, 87, 95, 74, 0]

여기에는 Hello, World!약간의 조정만으로 헌트 앤 페크 방식 으로 생산에 필요한 모든 구성 요소가 포함됩니다 .

또한 대체 78 바이트 솔루션을 찾았습니다.

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

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

나는 여러 가지 이유로 첫 번째보다 낫다고 생각합니다. 집에서 남은 셀을 적게 사용하고, 더 적은 셀을 수정하고, 더 빨리 종료합니다.


자세한 세부 사항

재발 관계는 놀랍게도 Brainfuck의 표현을 간직했습니다. 일반적인 레이아웃은 다음과 같습니다.

{...s3}<{s2}<{s1}[[<+>->{c1}>{c2}>{c3...}<<<]>{k}]

이는 다음을 나타냅니다.

f n = c 1 · f n-1 + c 2 · f n-2 + c 3 · f n-3 + ... + k

f 0 = s 1 , f 1 = s 2 + c 1 · f 0 + k , f 2 = s 3 + c 2 · f 0 + c 1 · f 1 + k

또한,는 <+>정지 점에 영향을주지 않고 범위에 상수를 곱하도록 변경 될 수 있으며 >{k}, 다시 정지 점에 영향을 미치지 않고 범위를 상수로 이동 시키기 위해 항이 추가 될 수있다 .


다른 예

피보나치 수열

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

N- 곤수

삼각수

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

중도 F , N = 2 · f를 N-1 - F를 N-2 + 1F 0 = 0 , F (1) = 1 .

제곱 숫자

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

오각형 숫자

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

기타


BF 크런치

github 에서이 솔루션 중 일부를 찾는 데 사용한 코드를 게시했습니다 . .NET 4.0 이상이 필요합니다.

Usage: bfcrunch [--options] text [limit]

Arguments
------------------------------------------------------------
  text              The text to produce.
  limit             The maximum BF program length to search for. If zero, the length of the
                    shortest program found so far will be used (-r). Default = 0

Options
------------------------------------------------------------
  -i, --max-init=#  The maximum length of the initialization segment. If excluded, the
                    program will run indefinitely.
  -I, --min-init=#  The minimum length of the initialization segment. Default = 14
  -t, --max-tape=#  The maximum tape size to consider. Programs that utilize more tape than
                    this will be ignored. Default = 1250
  -T, --min-tape=#  The minimum tape size to consider. Programs that utilize less tape than
                    this will be ignored. Default = 1
  -r, --rolling-limit
                    If set, the limit will be adjusted whenever a shorter program is found.
  -?, --help        Display this help text.

출력은 세 줄로 제공됩니다.

  1. 발견 된 프로그램의 전체 길이 및 초기화 세그먼트.
  2. 현재 테이프 포인터로 시작하는 경로입니다. 각 노드는 (포인터, 비용)으로 표시되는 하나의 출력 문자에 해당합니다.
  3. 사용 된 테이프 세그먼트.

예를 들어, 최종 결과 bfcrunch "hello world" 70 -r -i23는 다음과 같습니다.

64: ++++[[<+>->+++++>+<<]>]
49, (45, 5), (44, 3), (45, 6), (45, 1), (45, 4), (42, 4), (43, 5), (45, 3), (45, 4), (46, 2), (44, 4)
32, 116, 100, 104, 108, 132, 0, 0, 132, 0

이것은 전체 프로그램에 해당합니다.

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

다른 기록들

안녕, 월드!

랩핑, 78 바이트 :

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

또는

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

랩핑되지 않은 87 바이트 (이전 92 바이트 (mitchs) ) :

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

안녕, 세상!

랩핑, 80 바이트 :

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

랩핑되지 않은 81 바이트 (이전 92 바이트 (히로세) ) :

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

안녕, 세상!

랩핑, 74 바이트 :

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

랩핑되지 않은 84 바이트 :

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

에 솔랑 버전

안녕하세요 세계! \ n

줄 바꿈, 76 바이트 :

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

이것은 집 왼쪽에 하나의 셀을 사용하므로 77로 간주됩니다.

랩핑되지 않은 83 바이트 :

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

Rdebath가 승인되었습니다 . profilebf 출력 :

Hello World!
Program size 83
Final tape contents:
 :   0   0  73 101 109 115 112  88  33  10   0
                                         ^
Tape pointer maximum 10
Hard wrapping would occur for unsigned cells.
Counts:     +: 720          -: 79           >: 221          <: 212
Counts:     [: 9            ]: 84           .: 13           ,: 0
Total:         1338

inversed.ru (피터 카 포프)

안녕하세요 세계!

랩핑, 70 바이트 (이전 78 1 ) :

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

랩핑되지 않은 77 바이트 (이전 89?) :

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

저자는 가장 짧은 손으로 코딩 한 "Hello World!" 89 바이트이지만 참조를 제공하지 않습니다. 본인도 이에 대한 기록을 주장합니다.

안녕 세상!

랩핑, 65 바이트 (이전 66 바이트) :

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

이것은 실제로 수동으로 코딩됩니다 (크 런칭으로 찾을 수있는 최선은 68 바이트입니다 ). 첫 번째 셀은 259 (3)로 초기화되고 각 반복마다 7 씩 감소하여 37 회 반복됩니다. 다음 셀은 6 씩 감소하여 256-6 · 37 = 34가 됩니다. 나머지 셀은 매번 4 씩 감소하여 각 반복마다 하나의 셀을 추가하고 각 새 셀은 252 (-4)로 초기화됩니다. 결과는 다음과 같습니다.

[  3,   0,   0,   0,   0,   0,   0, ...]
[252, 250, 248,   0,   0,   0,   0, ...]
[245, 244, 244, 248,   0,   0,   0, ...]
[238, 238, 240, 244, 248,   0,   0, ...]
[231, 232, 236, 240, 244, 248,   0, ...]
[224, 226, 232, 236, 240, 244, 248, ...]
...
[ 35,  64, 124, 128, 132, 136, 140, ...]
[ 28,  58, 120, 124, 128, 132, 136, ...]
[ 21,  52, 116, 120, 124, 128, 132, ...]
[ 14,  46, 112, 116, 120, 124, 128, ...]
[  7,  40, 108, 112, 116, 120, 124, ...]
[  0,  34, 104, 108, 112, 116, 120, ...]

1 주어진 솔루션 (79 바이트)을 1 씩 줄일 수 있습니다.

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

39
이것은 견과류입니다. 여러분 중 한 명이 82 바이트 버전을 무정부 상태 골프에 제출해야합니다.
Martin Ender

117
이 질문에 가장 적합한 Java 솔루션은 76 바이트입니다. Java 개발자가 Brainfuck로 전환해야한다는 것을 증명하기 위해 9 바이트 만 더 사용하십시오.
레벨 리버 St

9
@LevelRiverSt 작은 문자 하나는 Java보다 2 바이트 짧습니다. 끝이 왔습니다.
코너 오브라이언

13
"Java 개발자가 Brainfuck로 전환해야한다는 것을 증명하기 위해 9 바이트 만 더 추가해야합니다." interface a{static void main(String[]A){System.out.print("No!");}}
dorukayhan


222

ArnoldC , 71 바이트

IT'S SHOWTIME TALK TO THE HAND "Hello, World!" YOU HAVE BEEN TERMINATED

롤스 만 ..


4
나를 위해 일했다. 첫 번째 라인에 상영 시간을 표시하고 마지막 라인에서 종료되었습니다.
JelloDude

72
이 언어를 사용하는 법을 배워야합니다.
버즈

3
공백과 줄 바꿈이 동일한 바이트 수를 차지하지 않습니까? 그리고 기술적으로, IT'S SHOWTIME그리고 TALK TO THE HAND첫 번째와 마지막 줄에 있어야합니다.
wizzwizz4

5
@AlCode 그러나 더 정확하고 동일한 바이트 수를 차지하고 더 많은 호환성이 있으며 더 좋아 보이며 왜 소란을 피우는 지 PPCG의 코드 골프 도전이며 코드를 읽을 수 있고 잘 읽는 것이 놀랍습니다. 읽을 수 있고 +1 인 골프를 치는 대답을 했습니까?
wizzwizz4

11
@ wizzwizz4 대단히 감사합니다, 나는 ArnoldC와 미래의 언어로 가능한 한 전문적이 되려고 노력합니다!
AlCode

203

시드 , 6016 4234 4203 바이트

20 854872453003476740699221564322673731945828554947586276010721089172712854441839676581917455319274850944955030258951339804246125714958815519550291630078076933441706558540342671975808828643360922071900333028778314875248417953197990571991784126564752005357199892690656368640420204822142316716413192024742766282266114842280731756458212469988291309261528542889299297601723286769284159107438930448971911102280330101196758384815655479640836157495863547199726234352265518586460633795171196315255736880028338460236768181141732764911402112878175632130129852788301009582463631290071329795384336617491655825493435803011947670180368458659271192428341035912236946048939139042310380278430049252171822721598175984923434205610723412240162418996808671543770639111617709604242882388664919702606792443015941265168129550718541372361144081848761690730764968771245566074501485020726368378675085908872608679630368472956274468410052703615106090238423979678950131481176272880569100533049143775921798055136871254424261001442543122666701145111965968366507060931708140304772342855064834334129143038575569044150428480231956133612367393837580345180691911525531699573096952433882387811884727975431823620782822755161559988205401134640722220804177812794328129589949692446031008866917615922944976151073653201316255518389496411696741029209242119521978920200314572718584995265523235225587228975886710511855501710470163649632761488899317729943053884132314641377747687975638119132094777769497069556255954031537245957811105217875011509899497752696062748928963281605780942517262774976217663461063680912331030221981433051827519906741285738915397005702326447635845195923640649166530310494885569783989508000344280715868581532826832242144647203531393142251025361866506821695860883605004105862208004440476654027574832078603305884731766236740069411566854496824754558761536201352147934963241039597221404341132342297870517293237489233057335406510464277610336142382379135365550299895416613763920950687921780736585299310706573253951966294045814905727514141733220565108490291792987304210662448111170752411153136765318541264632854767660676223663544921028492602135525959428999005153729028491208277493747933069008199074925710651071766675870081314909460661981433426167330215548196538791617762566403934129026219366764038390123622134753742930729751695349588862441999672547791630729398908283091638866715502470152431589429837867944760012419885615525232399584379209285060418518373512154801760060312646951597932345591416241634668119867158079946680321131213357200382937049485606706114467095019612014749723443159443363662563254359712162432143334612180576945072905749883870150120687696027984317320305291407322779803583395375616762530641605634303022155218169343410634115050596030685041633824154135240376022159918501703555881290333205131375705406831260759974112248490451605422031345264183102048614606636275942039438138959188478277971377232005036301145411215067576576667743288951344423152531417111852584846747428443123174595987315325304540564683047858415059703724263652136185848573853965992798725654430360647040362341567082462847275277303225817689141675391972818943419663764371222973269129542760661385278009266471167618553065823580448848795731295589715602705860758954890415040763604082216728159486423396295188510311881004469017351709060492844398219491990895826924575575549615118821417543037296628825303328056839433114519945243963946989899508355224823109677424196639930153649890175062456649384605721510239142861693109687536600667811037619175927995599388547421689316110236566026931360164495251160997857372500940728057700473763884480342708897319990346726967220426504612260565552531158509215849649565188655100774748485416791517853427613458459889062942881409801879085054494129489535044719193283409051007851153504224002807392992520076910314763705776345053922387355156981872691537772657428096384535960466923475731297217863371650154415835785630016335858514130863258775100537612371430357576913148500310344278511588325852376442503898849856566716198848377379400158332792027967216204970114516984638014129252882482309132898416484525230488700253065644547798869056136044415413099076332059572505138116227535024546891015836838323022822272664771489129085797354578016574544759934333471793

(에 기초하여 얻어진 비 펀지-98 프로그램 ) 인

"9!dlroW ,olleH"ck,@

35
와! 이것을 어떻게 찾았습니까?
ETHproductions

31
무엇 . 미쳤다.
Conor O'Brien

47
골프는 어떻게 했습니까?
Destructible Lemon

39
메르 센 트위스터를 리버스 엔지니어링 했습니까? 그리고 이것이 보안에 영향을 미칩니 까?
primo

68
자세한 (이론적) 설명을 위해 +500을 더 줄 것입니다.
primo

155

모닝 턴 초승달 , 3614 3568 바이트

더 짧은 줄 이름을 사용하여 46 바이트를 저장해 준 NieDzejkob에게 감사드립니다.

Take Northern Line to Hendon Central
Take Northern Line to Bank
Take Circle Line to Bank
Take District Line to Gunnersbury
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Gunnersbury
Take District Line to Paddington
Take District Line to Acton Town
Take Piccadilly Line to Holloway Road
Take Piccadilly Line to Acton Town
Take District Line to Acton Town
Take District Line to Gunnersbury
Take District Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take District Line to Upminster
Take District Line to Gunnersbury
Take District Line to Mile End
Take District Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Upminster
Take District Line to Mile End
Take District Line to Paddington
Take Circle Line to Paddington
Take District Line to Acton Town
Take Piccadilly Line to Heathrow Terminals 1, 2, 3
Take Piccadilly Line to Holborn
Take Central Line to Holborn
Take Central Line to Mile End
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Barking
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Gunnersbury
Take District Line to Barking
Take District Line to Gunnersbury
Take District Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Wood Lane
Take Circle Line to Victoria
Take Circle Line to Victoria
Take District Line to Gunnersbury
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Gunnersbury
Take District Line to Paddington
Take Circle Line to Paddington
Take District Line to Mile End
Take Central Line to Fairlop
Take Central Line to Mile End
Take District Line to Barking
Take District Line to Upminster
Take District Line to Upminster
Take District Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Mile End
Take District Line to Gunnersbury
Take District Line to Paddington
Take Circle Line to Paddington
Take Circle Line to Hammersmith
Take District Line to Mile End
Take District Line to Richmond
Take District Line to Mile End
Take District Line to Paddington
Take Circle Line to Paddington
Take District Line to Richmond
Take District Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Stepney Green
Take District Line to Hammersmith
Take District Line to Stepney Green
Take District Line to Upney
Take District Line to Notting Hill Gate
Take Circle Line to Notting Hill Gate
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Upney
Take District Line to Upminster
Take District Line to Bank
Take Circle Line to Bank
Take Northern Line to Charing Cross
Take Bakerloo Line to Charing Cross
Take Bakerloo Line to Paddington
Take Circle Line to Bank
Take Circle Line to Bank
Take Northern Line to Mornington Crescent

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

이것은 확실히 차선책이지만, esolang 솔루션 크기의 절반입니다.

Hello, World 다음 스테이션 이름을 슬라이스하고 결과를 연결하여 구성됩니다.

Hendon Central
▀▀
Holloway Road
  ▀▀▀
Heathrow Terminals 1, 2, 3
                       ▀▀
Wood Lane
▀▀
Fairlop
   ▀▀
Richmond
       ▀

마지막으로, 나는의 문자 코드 계산하고있어 !등을 (2<<4)+1 == 33. 이 모든 부품은 Paddington에 연결되고 Mornington Crescent에 인쇄됩니다.

참고 : 언어는 동일한 역을 두 번 연속으로 이동할 수 있는지 여부를 지정하지 않지만 통역사가 허용하므로 사용했습니다.


44
이다 절대적으로 화려한 : D
베타 붕괴

32
나는이 언어를 좋아한다. 실례합니다,이 언어로 시스템 프로그래밍을 하면서요.
고양이

4
지구상 어디에서이 언어가 평생 있었습니까?
ScottMcGready

30
Camden Town과 Euston 사이의 @ScottMcGready.
Martin Ender

3
모닝 턴 초승달은 지금 TIO에 있습니다. tio.run/#mornington-crescent
Dennis

123

이블 , 70 바이트

aeeeaeeewueuueweeueeuewwaaaweaaewaeaawueweeeaeeewaaawueeueweeaweeeueuw

다음 네 가지 명령을 사용합니다.

a - increment the register
u - decrement the register
e - interweave the register's bits (01234567 -> 20416375)
w - write the value of the register as an ASCII character

61
그건 악하다 ...
David Grinberg

61
특히 아바타가 Black Hat이기 때문에.
TheDoctor

5
엮어 짜는 과정을 설명해 주시겠습니까?
Kishan Kumar

4
@KishanKumar yes
grc

30
이 프로그램을 크게 읽으면 덥 스텝베이스처럼 들립니다.
Joe Z.

112

brainfuck, 72 바이트

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

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

그리고 원래 비 랩핑 76 바이트 솔루션 :

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

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

내가 찾은 다른 가장 짧은 (내 지식) 솔루션

'안녕하세요!' 77 바이트 :

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

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

'안녕 세상!' 70 바이트 :

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

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


이것들은 내가 작성한 C ++ 프로그램을 사용하여 발견되었습니다 : https://github.com/ksabry/bfbrute

참고 : 원래이 코드를 실제로 읽기 쉽고 사용하기 쉽도록 게시하기 전에 코드를 정리하고 싶었지만 1 년이 지나지 않아서 그대로 게시 할 것이라고 생각합니다. 잠재적 인 최적화를 위해 템플릿을 많이 사용하고 컴파일 시간 상수를 컴파일하며 테스트에서 주석 처리 된 코드가 많이 있지만 유용한 주석은 없으므로 죄송하지만 약간 끔찍합니다.

코드에 대해별로 영리한 것은 없으며 핵심은 무자비하지만 매우 최적화되어 있습니다. 주요 최적화는 먼저 지정된 길이 (현재 16)까지 루프 (아니오 [또는 ]) 없이 모든 프로그램을 반복 하고 데이터 배열에서 수행 할 모든 변경 사항의 배열을 캐시하는 것입니다. 단지 예를 들면 단지 하나의 변화 때문에 독특한 어레이 당 하나의 프로그램을 저장하는 것 >+<<-><->>+<저장 될 것이다. 그런 다음이 캐시에있는 모든 프로그램으로 구성된 가능한 모든 프로그램을 반복합니다. 각 프로그램을 실행 한 후에는 캐릭터에 대한 간단한 탐욕스러운 사냥과 펙을 수행하고이를 프로그램 끝에 추가합니다.

모든 프로그램의 공간을 통해 이것을 실행 한 후 나는 거의 모든 가장 짧은 프로그램 (최대 길이 ~ 19)이 형태라는 것을 알았습니다 *[*[*]*]. 이 형식의 프로그램으로 검색을 제한하면 검색 속도가 상당히 빨라졌습니다. 현재 기록 보유자는이 일이 실제로 길이 (74)로 계산 된 길이 27에서 찾았지만 나는 특정 시퀀스 발견 된 .>.>.>.그것에 데이터 셀에 0이 바로이 단순화 될 수있어이 정도로 운이 좋았어요 [.>]<아래로 데려를 ~ 72.

나는 꽤 오래 동안 실행하고 최대 29까지의 현재 매개 변수로 검색을 완료했습니다. 단순히 더 높아서 현재 매개 변수를이기는 것이 어렵다고 생각합니다. 가장 유망한 접근법은 아마도 검색 공간을 늘리는 것이라고 생각합니다 지적인 방법.


32
지구상에서 이것을 어떻게 찾았습니까?
Dennis

2
@Dennis 나는 아마도 내가 사용한 소스 코드와 함께 (한 번 정리하면) 기회를 얻을 때 내 프로세스에 대한 설명을 게시 할 것이다.
KSab

32
이봐, 당신은 자바를 이길.
Poke

18
그것은 일부 장치이며, 심지어 셀을 감쌀 필요조차 없습니다. ó_Ò
primo

5
이 뒤에 알고리즘을보고
싶습니다

84

Piet, 90 개 코덱

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

30 x 3 이미지입니다. 또는 코덱 크기 10에서 :

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

는 3 번의 레이아웃을 사용하므로 한 번만 포인터하면됩니다. 이것이 여전히 골프 가능하다면 거기에 푸쉬 팝이 없기 때문에 다른 열을 면도 할 수 있습니다.

편집 : @ primo 's 84 codel solution .


6
현상금을 받으려고하십니까? 나는 당신의 더 많은 생각 Sp3000;)
Beta Decay

7
하, 현상금을 설정
했다고

9
푸시 팝은 나에게 아무런 문제가 아닙니다. 그것은이다 .
mbomb007

1
이 "언어"는 대체 무엇입니까? 나는 그것을 좋아한다!
Zoltán Schmidt

8
"push-pop no-op"는 제가 가장 좋아하는 문구입니다
BobTheAwesome

82

건초 더미 , 17 바이트

Haystack은 |스택 기반 작업을 수행하는 동안 haystack에서 바늘을 찾을 때까지 실행되는 2D 프로그래밍 언어입니다 . 모든 프로그램은 왼쪽 상단에서 시작하며 방향 문자 ><^v를 사용 하여 프로그램을 이동할 수 있습니다 . 방향이 상속되므로 계속 사용 >하기 위해 계속 사용할 필요가 없으며 방향이 다른 방향 문자에 닿을 때만 방향이 변경됩니다.

기본적으로 통역사는 왼쪽 위에서 오른쪽으로 읽으므로 "Hello, World!" 스택에 놓고 o인쇄에 사용한 다음 바늘을 놓아 실행을 마칩니다.

"Hello, World!"o|

보너스 : 더 흥미로운 버전 :

v      >;+o|
v      "
v      !
v      d
v      l
v      r
>>"Hello, ">>>v
       W      v
       "      v
       ^<<<<<<<

호기심으로 문자열에 문자 중 하나를 포함 시키면 어떻게됩니까?
Random832

@ Random832 문자열에서 방향 문자는 일반 문자로 처리됩니다. 즉 문자열에 포함 할 수 있습니다.
Kade

38
>] + O
bjb568

3
나는 여기의 모든 사람보다 반 영리하기를 원하지만 "문서"(읽기 : 일부 사람의 포럼 게시물)에는 o출력이 숫자로 표시됩니다. 그것은해야하지 c말? 적절한 문서가 어디에 있습니까? 이것은 매우 흥미 롭습니다!
악마의 옹호자

2
@Scott Super이 답변에 늦게 답변했습니다. 포럼 게시물은 아마 저였습니다! o상단 스택 항목을 그대로 출력합니다. 즉, 숫자가 있으면 해당 항목을 인쇄합니다. c단순히 그것을 숯으로 던질 것입니다. 따라서 스택의 맨 위에 문자열이나 문자가 o있으면 원하는 것입니다.) 결국 이러한 문서는 업데이트됩니다.
Kade

70

도와주세요! , 1 바이트

H

도움 뿐만 아니라 WarDoq! 문구의 가장 일반적인 철자를 위해 내장되어 있으며 프로그래밍 언어에 대한 일반적인 정의를 충족합니다.

공식 온라인 통역사 에서 시도하십시오 (코드는 입력으로 이동 ).


7
HQ9 ++는 본질적으로 어? ;-)
AdmBorkBork

6
@TimmyD Nope, HQ9 ++ 아님 .
Dennis

30
큰소리로 외쳐서 아무것도 거기에 없는 이 시점에서 esolang은? :)
AdmBorkBork

97
"Space: Begin a comment. The next non-space character ends the comment and is interpreted as usual."따라서 공백으로 작성된 주석 만 가질 수 있습니까 ??? 나는 세계에서 가장 유용한 언어조차도 쓸모없는 기능 +1을 가져야한다고 생각합니다.
Level River St

29
@steveverrill 어쩌면 탭이 주석으로 간주되면 주석을 공백 프로그램으로 작성할 수 있습니다
Optimizer

66

MarioLANG , 259 249 242 240 235 바이트

+>+>)+)+)+++)++++((((-[!)>->.
+"+"===================#+".")
+++!((+++++++++)++++++)<.---+
++=#===================")---.
++((.-(.)).+++..+++++++.<---
 !+======================---
=#>++++++++++++++.).+++.-!>!
  =======================#=#

이것은 Ruby 구현에서 테스트되었습니다 .

"Hello, World!"를 난독 처리 한 후 MarioLANG에서 나는 골프를 조금 보았다. 위는 내가 지금까지 찾은 가장 짧은 것입니다.

이전과 마찬가지로 Brainfuck 솔루션에서 시작하여 4 개의 셀을 10의 가장 가까운 배수로 문자 He,와 공백으로 설정 하고 MarioLANG으로 변환했습니다 . 그런 다음 루프 너비를 거의 반으로 줄이는 루프에서 보조 바닥을 사용하여 코드를 약간 단축 할 수 있습니다. 하단은 상단보다 한 번만 실행되므로 더 이상 4 개의 셀 모두에서 초기 카운터의 정확한 배수를 얻지 못합니다.

마지막으로 루프 앞의 낭비되는 공간을 사용하고 싶었 기 때문에 수직 공간을 사용하기 위해 많은 엘리베이터를 추가했습니다. 그런 다음 루프 아래의 루프 (이전 개정판 참조) 뒤에 코드를 접어 더 많은 수직 공간을 사용하여 5 바이트를 더 절약 할 수 있음을 깨달았습니다 .

이것은 여전히 ​​완벽하지는 않지만 순진한 솔루션보다 괜찮은 개선이라고 생각합니다.

메타 골프

자동화를위한 시간 ...

최적의 솔루션을 찾기 위해 Mathematica에서 솔버를 설정하기 시작했습니다. 현재 코드의 구조가 고정되어 있다고 가정합니다. 카운터는 12, 4 셀로 설정되어 인쇄가 고정되어 He,<space>있고 해당 셀의 순서는 동일합니다. 변화하는 것은 +루프 의 s 수와 나중에 필요한 수정 사항입니다.

n = 12;
Minimize[
 {
  3(*lines*)+
   12(*initialiser base*)+
   Ceiling[(n - 6)/2] 3(*additional initialiser*)+
   8(*loop ends*)+
   18(*cell moves*)+
   26(*printing*)+
   43*2(*steps between letters in one cell*)+
   -2(*edge golf*)+
   4 Max[4 + a + d + g + j + 2 Sign[Sign@g + Sign@j] + 2 Sign@j + 2,
     4 + b + e + h + k + 2 Sign[Sign@h + Sign@k] + 2 Sign@k] +
   2 (Abs@c + Abs@f + Abs@i + Abs@l),
  a >= 0 && d >= 0 && g >= 0 && j >= 0 &&
   b >= 0 && e >= 0 && h >= 0 && k >= 0 &&
   n*a + (n - 1) b + c == 72 &&
   n*d + (n - 1) e + f == 101 &&
   n*g + (n - 1) h + i == 44 &&
   n*j + (n - 1) k + l == 32
  },
 {a, b, c, d, e, f, g, h, i, j, k, l},
 Integers
 ]

초기 카운터 12의 경우 내 손수 만든 솔루션이 이미 최적임을 알 수 있습니다. 그러나 11을 대신 사용하면 2 바이트가 절약됩니다. 6에서 20까지의 모든 카운터 값을 포함하여 다음과 같은 결과를 얻었습니다.

6: {277,{a->7,b->6,c->0,d->16,e->1,f->0,g->0,h->9,i->-1,j->0,k->6,l->2}}
7: {266,{a->6,b->5,c->0,d->11,e->4,f->0,g->2,h->5,i->0,j->0,k->5,l->2}}
8: {258,{a->2,b->8,c->0,d->3,e->11,f->0,g->5,h->0,i->4,j->4,k->0,l->0}}
9: {253,{a->8,b->0,c->0,d->5,e->7,f->0,g->2,h->3,i->2,j->0,k->4,l->0}}
10: {251,{a->0,b->8,c->0,d->3,e->8,f->-1,g->4,h->0,i->4,j->3,k->0,l->2}}
11: {240,{a->1,b->6,c->1,d->1,e->9,f->0,g->4,h->0,i->0,j->3,k->0,l->-1}}
12: {242,{a->6,b->0,c->0,d->6,e->3,f->-4,g->0,h->4,i->0,j->0,k->3,l->-1}}
13: {257,{a->1,b->5,c->-1,d->6,e->2,f->-1,g->3,h->0,i->5,j->0,k->3,l->-4}}
14: {257,{a->1,b->4,c->6,d->0,e->8,f->-3,g->3,h->0,i->2,j->2,k->0,l->4}}
15: {242,{a->1,b->4,c->1,d->3,e->4,f->0,g->1,h->2,i->1,j->2,k->0,l->2}}
16: {252,{a->0,b->5,c->-3,d->4,e->2,f->7,g->0,h->3,i->-1,j->2,k->0,l->0}}
17: {245,{a->4,b->0,c->4,d->5,e->1,f->0,g->0,h->3,i->-4,j->0,k->2,l->0}}
18: {253,{a->4,b->0,c->0,d->1,e->5,f->-2,g->2,h->0,i->8,j->0,k->2,l->-2}}
19: {264,{a->0,b->4,c->0,d->5,e->0,f->6,g->2,h->0,i->6,j->0,k->2,l->-4}}
20: {262,{a->0,b->4,c->-4,d->5,e->0,f->1,g->2,h->0,i->4,j->0,k->2,l->-6}}

참고 : 이 솔버는 루프 뒤의 선형 코드가 모두 최상위 라인에 있고 위 코드는 솔루션이 접힌 것으로 가정합니다. 솔버가 폴딩을 인식하게하여 전체 솔루션이 짧아 질 수 있습니다. 이제 +첫 번째 부분에서 무료로 3 개를 더 얻고 다음 4 개의 명령은 2 대신 1 바이트 만 소비하기 때문입니다.


2
@justhalf 내 Pada 답변이 표시됩니다. : P
Martin Ender

마틴 나는이 대답을 좋아한다. 공식 포럼 에서 이에 대한 게시물을 작성 하시겠습니까 ? 우리는 stackexchange 편집기와 동일하게 사용합니다. 편집자가 Staff Picks 에 추가하고 싶습니다 .
Vitaliy Kaurov

61

다크 , 106 바이트

+h hell
h$twist sign s
s$scrawl " Hello, World!
s$read
h$twist stalker o
o$stalk
o$personal
o$echo
h$empty

언어 사양의 인용문에서이 esolang의 광채를 말해 주겠습니다.

Dark는 목표를 달성하고 가능한 최고의 고문 현실을 구축하기 위해 전 세계와 차원을 조작하는 데 기반을 둔 언어입니다.

구문 오류가 발생할 때마다 프로그램의 정상 성은 1 씩 감소합니다. [...] 프로그램의 정상이 0에 도달하면 인터프리터는 미쳤습니다.

손상은 변수가 발생할 때 단일 비트를 뒤집습니다.

마스터가 죽으면 해당 마스터에 연결된 모든 하위 변수도 죽습니다. 변수를 그룹화하고 대량 죽이는 데 유용합니다.

변수가 강제로 변수를 강제로 강제로 해제합니다 (부패 될 수 있음을 기억하십시오).

변수를 임의의 값으로 설정합니다. Global Chaos Generator를 사용합니다.

스토커가 초기화되지 않은 경우 IO를 수행하려고하면 오류 메시지가 콘솔에 기록됩니다.


37
이 언어는 너무 금속 적입니다.
Alex A.

6
우리가 악의 순서로 프로그래밍 언어를 나열해야한다면 Dark는 악한 일입니다.
LukStorms

35
헬로에 지옥이있다
Khaled.K

슈퍼 악, 당신은 심지어 고
토스

59

요리사 , 465 바이트

H.

Ingredients.
72 l h
101 l e
108 l l
111 l o
44 l C
32 l S
87 l w
114 l r
100 l d
33 l X

Method.
Put X into mixing bowl.Put d into mixing bowl.Put l into mixing bowl.Put r into mixing bowl.Put o into mixing bowl.Put w into mixing bowl.Put S into mixing bowl.Put C into mixing bowl.Put o into mixing bowl.Put l into mixing bowl.Put l into mixing bowl.Put e into mixing bowl.Put h into mixing bowl.Pour contents of the mixing bowl into the baking dish.

Serves 1.

Ruby 인터프리터로 테스트했습니다. 알파벳 수프를 만듭니다.

내가 할 수있는 한 원래 사양 을 준수하려고 노력 했으므로 사용한 인터프리터를 사용 the하여 Pour contents명령에 s를 놓을 수 는 있지만 그렇게하지 않았습니다.

믹싱 보울은 꽤 비싸므로 더 나은 접근 방법이있을 수 있습니다. 메시지를 인코딩하기 위해 기본 변환을 사용하려고 시도했지만 불행히도 사양 Divide은 정수 또는 부동 소수점 나누기를 사용 할지 여부를 명확하게 나타내지 않으며 해석기가 후자를 사용합니다. 모듈로 연산자도 없으므로 도움이되지 않습니다.


19
누군가가 Chef에서 골프를 타면 Sp.
Alex A.

11
이제 실제 생활에서 골프 레시피를 시도하십시오. : D
mbomb007

2
롤, 이것은 먹을뿐만 아니라 비표준 측정 장치를 사용합니다. XD
thepiercingarrow

59

가정 스프링 , 58 바이트

Universe net hatchery Hello,. World!  powers a b snowmelt 

후행 공간이 중요합니다.

이야기를하겠습니다. 한때 근처 연어 부화장에 전력을 공급하는 발전소가있었습니다. 연어 부화장은 봄을 찾기 위해 강을 따라 여행을 떠난 어린 노숙자 연어를 부화 시켰습니다. 그것은 "Hello, World!"라는 시적 이름을 가진 그런 봄을 발견하여 새로운 어린 연어를 성숙 시켰습니다. 두 물고기는 이제 넓은 바다를 찾아 하류에서 수영했습니다. 그러나 강 어귀가 얼마되지 않아 강에 그물이있었습니다. 성숙한 물고기는 잡히고 어린 물고기 만이 미끄러 져 바다와 나머지 우주에 도달했습니다. 그동안 부화장은 연어를 더 부화 시켰으며, 연어는 상류로 이동하여 산란하는 등의 일이있었습니다.

그러나 방대한 양의 눈이 강의 다른 팔을 타고 내려 갔다. 그리고 "Hello, World!"의 샘에서 우리의 첫 번째 어린 연어 바로 다음에! 바다에 닿아 눈보라가 우주를 강타하고 ... 어 .. 그리고 그들은 행복하게 살았거나 ... 그렇지 않은 것 같아요.

그것들은 실제로 위 프로그램의 의미론이었습니다. 가정은 이상하다.


15
이것은 ... 이상한 ...
kirbyfan64sos

10
나는 연어가 가장 좋아하는 새로운 우주 파괴자를 발견했다. 프로그램. +1
ETHproductions

7
내가 다시 올 때마다, 나는 좋은 웃음을 가지고 있습니다. 가장 재미있는 Hello, World를 만들어 주셔서 감사합니다! 모든 시간의 프로그램.
ETHproductions

2
이것은 내가 가장 좋아하는 새로운 언어입니다.
Mega Man


53

Piet, 84 개 코덱

Piet Hello World

28x3, 여기에 코울 너비 10이 표시됩니다.

하여 만든 PietDev , 테스트 npiet . 프로그램의 레이아웃은 다음과 같습니다.

피펫 레이아웃

노란색 채우기는 경로가 겹치는 코덱을 나타내고 주황색 채우기는 제어 흐름을 위해 동일한 색상이어야하는 코덱을 나타냅니다.

이것의 작성을 돕기 위해, 나는 "pasm"( source ) 라고 불리는 piet와 같은 명령으로 스택 기반 언어에 대한 기초 해석기를 작성했습니다 . 이 인터프리터의 출력 ( 이 입력 사용 )은 다음과 같습니다.

    1 nop     blu1 []
    4 push 3  blu2 [3]
    5 dup     grn2 [3, 3]
    6 add     cyn2 [6]
    7 dup     ylw2 [6, 6]
    8 mul     grn1 [36]
    9 dup     red1 [36, 36]
   10 dup     blu1 [36, 36, 36]
   11 add     mgn1 [36, 72]
H  12 putc    blu0 [36]
   15 push 3  blu1 [36, 3]
   16 sub     mgn2 [33]
   17 dup     cyn2 [33, 33]
   20 push 3  cyn0 [33, 33, 3]
   21 mul     blu2 [33, 99]
   22 push 1  blu0 [33, 99, 1]
   23 add     mgn0 [33, 100]
   24 dup     cyn0 [33, 100, 100]
   25 push 1  cyn1 [33, 100, 100, 1]
   26 add     blu1 [33, 100, 101]
e  27 putc    cyn0 [33, 100]
   28 dup     ylw0 [33, 100, 100]
   32 push 4  ylw1 [33, 100, 100, 4]
   33 dup     mgn1 [33, 100, 100, 4, 4]
   34 add     red1 [33, 100, 100, 8]
   35 add     ylw1 [33, 100, 108]
   36 dup     mgn1 [33, 100, 108, 108]
l  37 putc    blu0 [33, 100, 108]
   38 dup     grn0 [33, 100, 108, 108]
l  39 putc    ylw2 [33, 100, 108]
   40 dup     mgn2 [33, 100, 108, 108]
   43 push 3  mgn0 [33, 100, 108, 108, 3]
   44 add     red0 [33, 100, 108, 111]
   45 dup     blu0 [33, 100, 108, 111, 111]
o  46 putc    cyn2 [33, 100, 108, 111]
   47 dup     ylw2 [33, 100, 108, 111, 111]
   48 dup     mgn2 [33, 100, 108, 111, 111, 111]
   53 push 5  mgn0 [33, 100, 108, 111, 111, 111, 5]
   54 div     ylw0 [33, 100, 108, 111, 111, 22]
   55 dup     mgn0 [33, 100, 108, 111, 111, 22, 22]
   56 add     red0 [33, 100, 108, 111, 111, 44]
   57 dup     blu0 [33, 100, 108, 111, 111, 44, 44]
,  58 putc    cyn2 [33, 100, 108, 111, 111, 44]
   59 dup     ylw2 [33, 100, 108, 111, 111, 44, 44]
   60 add     grn2 [33, 100, 108, 111, 111, 88]
   64 push 4  grn0 [33, 100, 108, 111, 111, 88, 4]
   65 dup     red0 [33, 100, 108, 111, 111, 88, 4, 4]
   66 mul     ylw2 [33, 100, 108, 111, 111, 88, 16]
   67 dup     mgn2 [33, 100, 108, 111, 111, 88, 16, 16]
   68 add     red2 [33, 100, 108, 111, 111, 88, 32]
   69 putc    mgn1 [33, 100, 108, 111, 111, 88]
   70 push 1  mgn2 [33, 100, 108, 111, 111, 88, 1]
   71 sub     red0 [33, 100, 108, 111, 111, 87]
W  72 putc    mgn2 [33, 100, 108, 111, 111]
o  73 putc    blu1 [33, 100, 108, 111]
   76 push 3  blu2 [33, 100, 108, 111, 3]
   77 add     mgn2 [33, 100, 108, 114]
r  78 putc    blu1 [33, 100, 108]
l  79 putc    cyn0 [33, 100]
d  80 putc    grn2 [33]
!  81 putc    ylw1 []

포인터, 스위치 또는 롤 명령이 사용되지 않습니다. 어떤 코덱도 낭비되지 않습니다. 실제로 두 개가 재사용됩니다.


축하합니다, 내 현상금을 받았습니다 :)
LegionMammal978

고마워, 작업하는 것이 즐거웠다. 그리고 merry christmas :)
primo

7
할리우드가 "해커"화면에 표시해야하는 내용입니다.
휴 버트 Grzeskowiak

50

공백 , 192 (150) 146 바이트

공백은 공백, 탭 및 줄 바꿈 만 필요한 반면 다른 문자는 무시됩니다.
여기에 표시하기가 어려울 수 있습니다.
따라서 아래 코드에서 공백 및 탭이 교체되었습니다.
그리고 ';' 명확성을 위해 줄 바꿈 앞에 배치했습니다.
코드를 실행하려면 먼저 교체하십시오. 및> 공백 및 탭별로.

...;
..>>..>.>.;
..>>>>;
...>;
...>>>;
...>..;
..>>.>..;
..>>..>.>>;
..>>>>>>>;
...>..;
...>;
.;
...>>>.;
..>>...>>;
;
..;
.;
.;
>.>;
...>>.>.>>;
>...>;
..;
.;
;
;
..>;
;
;
;

코드의 덤프

00000000: 2020 200a 2020 0909 2020 0920 0920 0a20
00000010: 2009 0909 090a 2020 2009 0a20 2020 0909
00000020: 090a 2020 2009 2020 0a20 2009 0920 0920
00000030: 200a 2020 0909 2020 0920 0909 0a20 2009
00000040: 0909 0909 0909 0a20 2020 0920 200a 2020
00000050: 2009 0a20 0a20 2020 0909 0920 0a20 2009
00000060: 0920 2020 0909 0a0a 2020 0a20 0a20 0a09
00000070: 2009 0a20 2020 0909 2009 2009 090a 0920
00000080: 2020 090a 2020 0a20 0a0a 0a20 2009 0a0a
00000090: 0a0a

공백 어셈블리 코드 :

push 0      ;null
push -74    ;! chr(33)
push -7     ;d chr(100)
push 1      ;l chr(108)
push 7      ;r chr(114)
push 4      ;o chr(111)
push -20    ;W chr(87)
push -75    ;  chr(32)
push -63    ;, chr(44)
push 4      ;o
push 1      ;l
dup         ;l
push -6     ;e chr(101)
push -35    ;H chr(72)
p:
 dup jumpz e
 push 107 add printc
 jump p
e:
 exit

비고 :

107을 추가하면 문장에 최적의 골프를 제공한다는 것을 계산하는 프로그램을 작성해야했습니다. 정수가 코드 변경을 취하는 바이트 크기이므로 : 4 + int (abs (log2 ($ n))) whitespace.kauaveel.ee
의 "e :"레이블 및 종료 부분없이 코드가 계속 실행됩니다 . 그러나 다른 공백 컴파일러에서는 공백 코드가 유효하지 않을 수 있습니다. 따라서 해당 바이트는 솔루션에서 골치 아프지 않았습니다.

주의해야합니다

Kevin Cruijssen이 메타에서 "오류 별 종료"를 허용함으로써 주석에서 지적했듯이 공백은 126 자 이상으로 골프 코딩 될 수 있습니다 .

..>>..>.>.;
..>>>>;
...>;
...>>>;
...>..;
..>>.>..;
..>>..>.>>;
..>>>>>>>;
...>..;
...>;
.;
...>>>.;
..>>...>>;
;
..;
...>>.>.>>;
>...>;
..;
.;
;

어셈블리:

push -74
push -7
push 1
push 7
push 4
push -20
push -75
push -63
push 4
push 1
dup
push -6
push -35
label_0:
push 107
add 
printc
jmp label_0

나는 그것이 오래되었다는 것을 알고 있으며, 대부분의 컴파일러에서 종료 레이블없이 실행된다는 것을 언급하지만, (푸시 0 ) 대신 (오류 값)을 사용하여 오류로 종료 하여 129 바이트 로 줄일 수 있습니다 )되는 메타 따른 허용 . 강조 표시 및 설명을 추가 하여 온라인으로 시도 하거나 온라인 raw로 시도하십시오 . SSNSSSN
Kevin Cruijssen

@KevinCruijssen 나는 마침내 당신의 버전을 확인했습니다. 기본적으로 어셈블리 dup jumpz ee: exit제거되고 제거 된 이전 버전입니다 . 그러나 적어도 whitespace.kauaveel.ee에서는 브라우저가 불평 할 때까지 계속 반복됩니다. 골프가 적고 메타가 "오류로 빠져 나감"을 허용하더라도 내 버전을 변경하지는 않겠습니다. 그러나 버전을 새로운 답변으로 자유롭게 제출할 수 있습니다.
LukStorms

아니요, 별도의 답변을 게시하지 않습니다. 기본적으로 귀하와 동일하며 오류로 인해 종료되므로 조금 짧습니다. 또한 SSN시작 부분에서을 제거하여 129 대신 126로 낮출 수 있다는 것을 깨달았습니다 .이 경우 스택에 단일 항목 (107)이있는 경우 Infix Plus를 수행 할 수 없습니다 . ( 온라인으로 시도하십시오. ) 누군가 같은 제안이있을 때 여기에 의견을 남기겠습니다. 그리고 나는 이미 1 년 전에 당신의 대답을 +1했습니다. ;)
Kevin Cruijssen

1
@KevinCruijssen이 경우 귀하의 솔루션이 이제 답변에 언급되었습니다. 공백은 골프에서 가장 가능성이 적은 언어 중 하나입니다. 그러나 바이트를 절약하기 위해 발견 한 내용은 언급 할 가치가 있습니다.
LukStorms

49

자바, 79

class H{public static void main(String[]a){System.out.print("Hello, World!");}}

이전 버전의 Java에서는 정적 블록 (51 바이트)을 사용할 수 있지만 현재 main메소드 를 우회하는 방법을 모르겠습니다 .


7
enum대신에 사용하십시오 class.
Thomas Eding

6
@ThomasEding 실제로 어떤 컴파일러에서 작동합니까? 나는 이 팁 을 여러 가지 시도했지만 바이트를 저장할 수 없었습니다.
Geobits

4
@ Luminous Ah, 1.5 일했을 수도 있습니다. 나는 그것을 찾기 위해 설치하지 않을 것이지만 지난 10 년 동안 발표 된 것을 고수합니다. Java 5를 다시 보지 않으면 멋진 삶이 될 것입니다. :)
Geobits

2
@TheDoctor 내가 본 것에서 처리는 일반적으로 별도의 언어로 표시됩니다. 답변으로 게시하거나 최소한 OP에 설명을 요청해야합니다.
Geobits

5
사용자 OptiFine지정자 를 사용 interface하고 도랑 을 사용하여 3 바이트를 절약 할 것을 제안했습니다 public. 다음 수정 정책을 거부 했지만 댓글을 작성할 수 없으므로 원하는 경우 사용할 수 있도록 알려 주겠다고 생각했습니다.
Martin Ender

48

CSS, 30 바이트

:after{content:"Hello, World!"

CSS (Cascading Style Sheets)는 일반적인 프로그래밍 언어는 아니지만 고정 출력을 상당히 잘 수행 할 수 있습니다. 이것은 content가있는 모든 요소 다음에 의사 요소 를 작성하여 수행됩니다 Hello, World!. 따라서 하나의 요소 ( <html>) 만 선택하면 가장 기본적인 HTML 문서를 사용한다고 가정합니다.

<html><style>:after{content:"Hello, World!"</style></html>

이것은 대부분의 주요 브라우저에서 작동하며, Firefox를 제외하고 셀렉터를 <html>and <body>요소에 적용합니다 . 스타일도 항상 본문 요소가 있기 때문에 스택 스 니펫이 작동하지 않는 이유도 있습니다. 아래는 테스트 할 약간 수정 된 버전입니다.

* :after{content:"Hello, World!"


3
* *을 선택하여 사용할 수도 있습니다 body.
jimmy23013 년

18
너무 비효율적으로 들립니다. 감사합니다
NinjaBearMonkey

1
어떤 이유로 든 * :after작동하는 것처럼 보였습니다.
jimmy23013

12
CSS에서 어떤 글자가 "언어"의 약어인지 스스로에게 묻습니다.
Zaibis

10
@zaibis PHP와 같은 문자 일 것입니다 :)
fcalderan

48

HTML, 13 바이트

Hello, World!

텍스트가에 자동으로 삽입되어 <body>표시됩니다.


159
와. 그것은 정말로 하드 코어 코딩 기술입니다
BlueWizard

46
HTML은 프로그래밍 언어가 아니라 마크 업 언어입니다 (ML로 끝나는 이유).
CoDEmanX

31
그러나 HTML은 STDOUT으로 인쇄되지 않습니다.
Harshil Sharma

25
-1 HTML이 유효한 언어 요구 사항을 충족하지 못합니다
Downgoat

123
-1 충분하지 않은 jQuery
Valentin Lorentz 2016 년

45

Linux 용 x86_64 머신 코드, 32 바이트

Linux가 새로운 프로세스를 시작할 때 모든 레지스터 (RSP 제외)는 0이므로 하위 바이트 만 수정하여 RAX = 1을 얻을 수 있습니다. x86-64 System V ABI는이를 보증하지는 않지만 Linux가 실제로하는 것입니다. 이 코드 _start는 정적 실행 파일 에서만 작동합니다 .

0000000000000000 <_start>:
   0:   e8 0d 00 00 00          call   12 <hello>
   5:   48 65 6c 6c 6f
   a:   2c 20 57 6f 72
   f:   6c 64 21 5e 40

0000000000000012 <hello>:
  12:   5e                      pop    rsi
  13:   40 b7 01                mov    dil,0x1
  16:   b2 0d                   mov    dl,0xd
  18:   b0 01                   mov    al,0x1
  1a:   0f 05                   syscall
  1c:   b0 3c                   mov    al,0x3c
  1e:   0f 05                   syscall

호출 명령어는 hello world 문자열을 포함하는 다음 주소를 스택으로 푸시합니다. 문자열의 주소를에 넣습니다 rsi.

그런 다음 다른 인수는 syscallto에 설정되어 sys_write문자열을 인쇄합니다.

프로그램은 a syscall로 종료 됩니다 sys_exit. sys_write기록 된 바이트 수를 반환, 그래서 RAX의 상위 바이트가 첫 번째 이후 제로인 syscall(가 오류를 반환하지 않는 한), 그래서 mov al, 60RAX는 = 우리에게주는 __NR_exit단지 2 바이트.

stdout ( ./a.out >&-)을 닫아서이 프로그램을 segfault로 만들 수 있으므로 sys_write()return -EBADF, 두 번째 syscall는 return -ENOSYS, 실행은 끝납니다. 그러나 write()오류를 정상적으로 처리 할 필요는 없습니다 .


특히에이 유일한 작품 리눅스__NR_write이 다른 x86-64의 유닉스 시스템에서 표준 아닌 1이다. 또한 새로운 공정 (에 진입하기 전에 RSP를 제외한 모든 레지스터를 제로의 리눅스 행동을 따라하고 당신이 그렇지 않으면 동적 링커가의 상위 바이트에 쓰레기를 떠나, 정적 실행 파일로 만들 경우 그래서 이것은에만 작동 rax당신과 ' LL 수 -ENOSYS). x86-64 System V ABI에 따르면 레지스터는에 진입 할 때 임의의 가비지 값을 보유 할 수 _start있으며 Linux 커널 자체는 정보 유출을 피하기 위해 0을 선택합니다.
피터 코 데스

당신이 가진 바이트 저장할 수 있습니다 mov al, 1/ mov edi, eax때문에, 대신 DIL에 대한 REX 접두사를 필요로 (2 바이트)__NR_write == STDOUT_FILENO = 1
피터 코르

이것은 Linux 정적 실행 파일에서만 작동하므로 문자열 주소는 2G의 가상 주소 공간이 낮아야합니다 ( PIE 이외의 실행 파일 의 기본 메모리 모델 은 모든 기호를 0 또는 부호로 사용할 수있는 위치에 배치합니다). 확장 된 32 비트 즉시). 따라서 5 바이트 mov esi, msg(NASM) 일명 mov esi, OFFSET msg(GAS .intel_syntax)을 사용할있습니다 . 마지막 뒤에 문자열을 넣습니다 syscall. call/pop64 비트 RIP 상대 LEA보다 1 바이트 짧지 만 mov가 가장 좋습니다.
Peter Cordes

30 바이트 버전의 NASM 소스 (내 데스크탑에서 확인 된 크기), tio.run/##TY8/…
Peter Cordes

42

헥사 고니 , 37 32 바이트

주의 사항 : 나는 길이 3의 육각형 또는 측면 길이 4의 아마도 최적의 솔루션에서 유효한 솔루션을 찾는 첫 번째 사람에게 500의 현상금을 줄 것입니다. 측면 길이 4 육각형에서 내 점수를 이길 수 있습니다 (소스 코드에서 생략 할 수있는 프로그램이 끝날 때 더 많은 No-ops를 얻음). .

H;e;P1;@/;W;o;/l;;o;Q/r;l;d;2;P0

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

저는 제 2D 프로그래밍 언어 6 각형 그리드에 최초의 2D 언어를 자랑스럽게 소개 합니다.

소스 코드가 2D로 보이지 않습니까? 글쎄, 공백은 Hexagony에서 선택 사항입니다. 먼저, 소스 코드는 ops ( ) 없이 다음 중심의 육각형 숫자 로 채워집니다 .. 다음 숫자는 37이므로 끝에 5 개의 no-ops를 삽입합니다. 그런 다음 소스 코드는 일반 육각형으로 재 배열됩니다.

   H ; e ;
  P 1 ; @ /
 ; W ; o ; /
l ; ; o ; Q /
 r ; l ; d ;
  2 ; P 0 .
   . . . .

이것은 또한 실행 가능합니다. 온라인으로 사용해보십시오!

Hexagony는 6 개의 다른 명령 포인터와 6 각형 그리드의 선 그래프 인 메모리 레이아웃을 포함하여 매우 펑키 한 기능을 가지고 있지만이 코드는 하나의 IP와 하나의 메모리 에지 만 사용하므로 지금은 걱정하지 마십시오.

다음은 관련 명령에 대한 개요입니다.

  • 문자는 현재 메모리 가장자리를 ASCII 값으로 설정합니다.
  • ; 현재 값, 모듈로 256을 바이트로 STDOUT에 인쇄합니다.
  • / IP가 120도 회전하기 때문에 예상대로 작동하는 미러입니다.
  • 숫자는 Labyrinth 에서와 같이 작동 합니다. 현재 셀에 10을 곱한 다음 추가합니다.
  • @ 프로그램을 종료합니다.

이제 마지막 캐치는 소스가 3 쌍의 가장자리를 모두 감싸는 것입니다. 또한 IP가 6 개의 모서리 중 하나를 통해 그리드를 벗어나면 두 개의 가능한 행으로 이동할 수 있습니다. 어떤 값을 선택하면 현재 값이 양수인지 양수인지에 따라 달라집니다. 다음 주석이 달린 버전은 IP가 그리드를 떠날 때마다 다시 들어가는 위치를 보여줍니다.

         H ; e ;     -> 1
5 ->    P 1 ; @ /    -> 4
3 ->   ; W ; o ; /   -> 2
1 ->  l ; ; o ; Q /
4 ->   r ; l ; d ;   -> 5
2 ->    2 ; P 0 .    -> 3
         . . . .

따라서 모든 방향 변경을 제거하면이 프로그램은 다음 선형 코드로 요약됩니다.

H;e;l;;o;Q2;P0;W;o;r;l;d;P1;@

무슨과의 Q2, P0그리고 P1? 가장자리를 해당 값으로 설정할 수 있으므로 글자가 쉽게 인쇄됩니다. 쉼표, 공백 및 느낌표의 경우 작동하지 않습니다. 우리는 또한 단지 자신의 값을 설정할 수 없습니다 44, 32, 33메모리 가장자리로 시작하는 제로가 아닌, 인해 혼란의 모든 종류를 과시 할 개별 숫자의 의미에 있기 때문에, 각각. 우리가 그렇게 원한다면, 우리는 같은과 제로 가장자리 값을 다시 설정해야 할 것 *, +, -, &또는 ^첫번째. 그러나, 값이 인쇄되기 전에 모듈 (256)을 가지고 있기 때문에, 우리는, 예를 들어 44, 32 또는 33에 정확하게 값을 설정하지 않아도 Q2상기 에지 값을 설정하는 것 81*10 + 2 = 812인,44모듈로 촬영시 256. 이런 식으로 우리는이 세 문자 각각에 바이트를 저장할 수 있습니다. (불행하게도, 그것은 어디 셀이 이미. 재미있게, 한 값에서 하나의 숫자로도 얻을 수 결코 않는 작품은이다 o인이 World그도에서 얻을 수 있기 때문에 W9.)

이 CJam 스크립트사용 하여 주어진 문자를 생성하는 모든 문자-숫자 조합을 찾을 수 있습니다 .

이것이 최적인지 확실하지 않습니다. 측면 길이 3의 육각형 (19 문자 만 사용할 수있는)으로 할 수는 없지만 32 길이 미만의 명령으로 측면 길이 4의 육각형으로 해결할 수 있습니다. 그리드의 끝에 더 많은 no-ops가 있다는 것.


1
젠장, 넌 날 이겼어 나는 직접 추기경과 비슷한 육각형 언어를 연구하고 있습니다.
ML

이 솔루션을 어떻게 찾았습니까? 손으로 또는 무차별 적으로? 어쨌든, +1 :)
Adnan

1
Q2, P0그리고 P1매우 영리하다. 나는 모듈로 256 부분을 몰랐다.
Adnan

1
@Adnan GitHub에서 mod-256 부분을 제안한 사람은 실제로 줄 바꿈이 M8;(또는 g4;) 로 인쇄 될 수 있다는 예와 함께 실제로 그렇게했습니다 . 내가 그 변경을 한 후에이 답변을 다시 방문하는 것은 지금까지 결코 일어나지 않았습니다.
Martin Ender 2016 년

2
참고 : 이것은 얼마 전에 31 로 줄었습니다 . H;e;P;2Q/d;l;r/l;$@;o];o;W;03&;
Mitch Schwartz

38

Malbolge, 112 바이트

('&%:9]!~}|z2Vxwv-,POqponl$Hjihf|B@@>,=<M:9&7Y#VV2TSn.Oe*c;(I&%$#"mCBA?zxxv*Pb8`qo42mZF.{Iy*@dD'<;_?!\}}|z2VxSSQ

더 짧은 것이 있는지 볼 것입니다. 지난번 이후로 더 나은 컴퓨터를 얻었으므로 좀 더 빠르게 생성 할 수 있습니다.

예를 들어, "Hello World!"입니다. 쉼표없이

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc

37

푸리에 , 15 바이트

푸리에의 큰 변화!

`Hello, World!`

FourIDE에서 사용해보십시오!

예, 각 문자의 ASCII 코드를 입력하던 시절은 영원히 사라졌습니다. 푸리에는 이제 일종의 문자열 지원합니다. 문자열을 백틱으로 묶으면 해당 문자열이 출력됩니다.

해당 문자열 출력 이외의 다른 작업은 수행 할 수 없습니다. 변수에 저장할 수 없으며 누적기에 저장되지 않으며 문자열 조작 도구가 없습니다.


여기에서 오래된 푸리에 (Fourier) 의 열차 잔해를 찾을 수 있습니다 . ;)

72a101a+7aa+3a44a32a87a111a+3a-6a-8a33a

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

이제 여러분 중 일부는 아마도 푸리에를 만났을 것이고 아마도 그 언어에 상당히 익숙 할 것입니다. 전체 언어는 어큐뮬레이터를 기반으로합니다. 거의 모든 연산자가 사용하는 전역 변수입니다.

코드에서 가장 중요한 부분은 a연산자입니다. 이것은 누산기의 숫자 값을 받아서 파이썬 코드를 사용하여 문자로 변환합니다 chr(accumulator). 그런 다음 STDOUT에 인쇄됩니다.

불행히도, 나는 주로 문자열과 문자열 연산자가 없기 때문에 푸리에 ( nudge nudge , wink wink ) 를 사용할 기회가 없었습니다 . 그럼에도 불구하고 여전히 많은 다른 도전에 사용할 수 있습니다 (EsoLangs 페이지의 예제 섹션 참조).

내가 더 이상 골프를 칠 수 있다고 생각하지 않았기 때문에 이것은 Esolangs 목록에 들어가는 것보다 짧습니다 . 그리고 푸리에 스트링 골프 챌린지를 쓸 때, 나는 조금 더 짧게 갈 수 있다는 것을 깨달았습니다.

노트

변수 구문에 대해 궁금하다면 Geobits는 변수를 사용 하고 길이가 같은 프로그램을 작성했습니다 .

72a101a+7aa+3~za44a32a87aza+3a-6a-8a/3a

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


쓸모있는 것은 무엇입니까? 쓸모 있나요?
CalculatorFeline

35

C-- 155 바이트

target byteorder little;import puts;export main;section"data"{s:bits8[]"Hello, World!\0";}foreign"C"main(){foreign"C"puts("address"s);foreign"C"return(0);}

불행하게도, 알려진 C (컴파일러) 인 Quick C 는 더 이상 유지되지 않습니다. 목에 통증 생길 수 있지만 가능합니다 ...


8
정말 매혹적인 언어-전에는 들어 본 적이 없으며 확실히 그들이하고 있던 야심 찬 프로젝트입니다. 그러나 코드 골프 측면에서는 경쟁자가 될 것이라고 생각하지 않습니다. 내 말은 ... 댕, 이건 자바를 잃는다 ...
AdmBorkBork

11
@TimmyD 정말 어셈블러입니다. Java에 잃는 이유가 있습니다 ... :)
kirbyfan64sos

좋은 소식이 있습니다. C- 프로젝트 자체는 상당히 죽어있는 것처럼 보이지만 한 가지 변형이 존재합니다. Glasgow Haskell Compiler (GHC)는 조립 또는 최종 LLVM 이전의 최종 단계로 C--를 사용하며 해당 버전은 여전히 ​​활발하게 유지됩니다. GHC의 나머지 부분과 함께 설치해도 문제가되지 않습니다.
dfeuer

@dfeuer 실제로 전에 Cmm 백엔드를 직접 사용해 보았지만 이상한 문제가 발생하여 실제로 더 이상 살펴 보지 않았습니다. ¯ \\ _ (ツ) _ / ¯
kirbyfan64sos

Haskell 메일 링리스트에서 도움을받을 수 있습니다. glasgow-haskell-users@haskell.org 또는 아마도 haskell-cafe@haskell.org를 사용해보십시오.
dfeuer

33

C, 30 바이트

main(){puts("Hello, World!");}

공정하게 바닐라이지만, 일반적으로 컴파일 할 수있는 더 짧은 방법을 생각할 수는 없습니다 (어쩌면 일종의 원시 asm 트릭이 작동하지 않는 한?). 아직도, 대부분의 esolangs를 친다!


3
별도의 답변은 가치가 없지만 완전히 ISO 호환 C89 및 C99 답변은 각각 39 main(){puts("Hello, World!");return 0;}및 53 #include <stdio.h> int main(){puts("Hello, World!");}바이트입니다. main (void)이 필요하다고 생각하면 약간 더 있습니다.
Random832

20
@ Random832 : 전자의 경우 main(){return!puts("Hello, World!");}2 바이트가 짧습니다.
Lynn

15
프로그램 h은 29 바이트 더 짧습니다. 참고 : -Dh='main(){puts("Hello, World!");}'반 트롤링 으로 컴파일하고 컴파일러 남용으로 절반을 즐겁게해야합니다.
matega

19
@matega 분명히 부정 행위입니다. 부정 행위를 피하려면 파일에 __FILE__(8 바이트) 만 포함 시키고 파일 이름을 지정해야합니다 main(){puts("Hello, World!");}. 그 다음입니다 완전히 ) 부정하지
C0deH4cker

실제로 2017 년에는 각각 34 바이트와 38 바이트가됩니다.
CalculatorFeline

32

읽을 수 , 843 755 732 666 645 629 577 바이트

' "'" " '" "'" " '"' " '" "" "" "" "" "" "" "" ""' "" ' "" "" "'" " '" "" "" "" ' "'" "" "" "" "" ' ""' "" "" "" "" "" ' ""' "" ' "" "" "" "" "" "" "" "" ""' ' "" ' "" "" "'" " '" "'" "" "" "" "" ' "" "" ""' "" "" "" "" "" "" "" "" "" ' "" '" "" ""' "" ' ""' "" ' "" "" "" ""' " '" "" "" "" "" "" "" "" "" "'" "" "" " '" "" ""' "" ' ""' "" ' "" "" "" ""' "" ' ""' "" "" "" "" "" " '" "" "" "' "" ' "" "" "'" "" "" "" "" "" "" "" "" "" "" "" "" " '" "" "" "" "'" "" "" " ' "" '" "" ""' "" ' ""' "" ' "" "" ""' "" "" "" ' ""' "" "" "" "" ' "" "" "" "" " '" "" ""' "" ' ""' "" ' "" "" "" ""' "" ' ""' "" "" "" "" "" " '" "" "" "' "" ' "" "" "'" " '" "'" " '" "" "" "'" ' "" "" "" "" "" "" "" "" "" "" "" "' '"" "" "" " '" ""' " '" "" "" "" "" "'" "" "" "" "" "" "" "" "" "" "" "" "" "" ' "" "" "" "" ""' "" ' "" "" "" "" "" "" "" "" "'" "" "" "" "" "" "" "" "" "" " " '" "'" "" ' "'" " '" "" "" "" "" "" """ ' "" "'" ' ""' "" ' ""' " '" "" ""' "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ' "'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" ' "" "'" ' ""' "" ' ""' " '" "" ""' "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ' "'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" ' "'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" " '" "" "" "" "" "" "" "" "" "" "'" "" "" "" "" "" "" "" "" "" "" "" ""

읽을 수없는 프로그램은 가변 폭 글꼴로 표시되어야하므로 언어 ​​이름을 존중합니다. 좀 더 정교한 접근 방식이 훨씬 길어 졌다는 것에 약간 실망했습니다. 읽을 수없는 루프는 엄청나게 비쌉니다 ...

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

작동 원리

읽을 수없는 기능은 10 가지입니다. 이 코드에는 6 개가 사용됩니다.

'"        p Print.
'""       + Increment.
'"""      1 Return 1.
'""""""   : Set.
'"""""""  = Get.
'"""""""" - Decrement.

단일 문자 표기법을 사용하고 공백과 주석을 추가 한 후 위 코드는 다음과 같습니다. 여러 줄로 된 문장이 아래에서 위로 실행됩니다.

p+++                                        Print 3 + variable 2 (o).
 pp                                         Print variable 2 two times (l).
  :+1+++++++                                Save 8 + variable 3 in variable 2.
   p+                                       Print 1 + variable 3 (e).
    :++1+++++++++++++                       Save 13 + variable 4 in variable 3.
     :+++1+++++++++++++++                   Save 43 + variable 0 in variable 4.
      p++++++++++++++++++++++++++++         Print 28 + variable 0 (H).
       :-1++++++++++++                      Save 44 in variable 0.
        :1+++++++++++++++++++++++++++++++1  Save 32 in variable 1.
p=-1                                        Print variable 0 (,).
p=1                                         Print variable 1 ( ).
p=+++1                                      Print variable 4 (W).
p+++                                        Print 6 + variable 2 (r).
 p+++=+1                                    Print 3 + variable 2 (o).
p=+1                                        Print variable 2 (l).
p=++1                                       Print variable 3 (d).
p+=1                                        Print 1 + variable 1 (!).

이 CJam 프로그램을 통해 위의 의사 코드의 주석 처리되지 않은 버전을 실행하여 실제 소스 코드를 생성했습니다 .


3
무슨 소리 야? 꽤 읽을 수 있습니다!
Optimizer

19
@Optimizer 수정되었습니다.
Dennis

4
여전히 읽을 수 있습니다! (물론 나는 진실을 말하고 있습니다. 왜 믿지 않습니까?)
Optimizer

5
이 언어는 크기와 가독성 측면에서 더 나은 허프만 코딩의 이점이 있다고 생각합니다.
primo

30

Befunge 98 , 19 18 바이트

새로운 답변 (지하 모노레일에서)

"ck,@!dlroW ,olleH

설명

  • " 문자열 모드를 시작합니다
  • 뒤 따르는 모든 것이 스택으로 푸시됩니다. 스택은 이제Hello, World!@,kc
  • 끝을 친 후 통역사는 처음으로 돌아갑니다.
  • 그것은 발생 "문자열 모드를 종료, 다시
  • 12가 스택으로 밀림 ( c)
  • k 스택의 최상위 값을 가져와 명령어 포인터가 여러 번 볼 수있는 다음 명령을 실행합니다.
  • ,스택에서 값을 팝하여 char로 출력합니다. 마지막 k명령으로 12 번 실행되었으며 , 인터프리터가 실제로 ,명령을 읽을 때 한 번 더 실행되었습니다.
  • @ 프로그램을 끝내다

이전 답변과의 차이점은 "Befunge의 반복 동작이 줄의 끝에 도달 하면 문자를 영리하게 재사용한다는 것 입니다. 덜 직관적 일 수 있기 때문에 이전 버전도 사용하고 있습니다. 또한 ck,@이 멋진 트릭으로 인해 스택에 여전히 일부 문자 ( ) 가 포함되어 있음을 알았을 수 있습니다 .

기존 답변

"!dlroW ,olleH"ck,@

이것은 funge와 befunge 98에서 작동합니다

설명

  • 사이의 모든 것이 ""스택으로 푸시됩니다. ( 'H'이제 상단에 있습니다.)
  • c (12)가 스택으로 밀려남
  • k stack의 최상위 값을 가져와 명령어 포인터가 여러 번 볼 수있는 다음 명령을 실행합니다.
  • ,스택에서 값을 팝하여 char로 출력합니다. 마지막 k명령으로 12 번 실행되었으며 , 인터프리터가 실제로 ,명령을 읽을 때 한 번 더 실행되었습니다.
  • @ 프로그램을 끝내다

2
난 생각하지 않습니다 93k
Sp3000

1
글쎄, 지금은 98 있다고 만 사용할 수 있습니다 c에 대한 93+.
PurkkaKoodari

3
18 :"ck,@!dlroW ,olleH
undergroundmonorail

1
그것은 명중 "문자열을 시작하는 방법은, 해당 문자열에 줄의 전체 나머지를 추가 감싸는 같은 안타 "문자열을 종료합니다. 이제 그 프로그램을 제외한 모든 프로그램 "이 스택에 푸시되었습니다 !dlroW ,olleH. 그런 다음 사용자와 동일한 방식으로 상위 12자를 인쇄하고에서 멈 춥니 다 @.
undergroundmonorail

1
18 바이트 솔루션의 경우 통역사는 'Hello, World'(리딩 스페이스, 느낌표 없음)를 생성합니다. 무정부 골프 인터프리터 (사용 형태는, 비 펀지-98, 붙여 넣기 코드를 선택 제출) 같은 작업을 수행합니다.
primo September

29

JSFuck , 6293 6289 6277 바이트

이것은 가장 긴 " Hello, World! 프로그램" 중 하나로서 언급 될 수 있습니다 (실제로는 이것이 최적인지는 모르겠지만 가장 짧은 시간입니다).

경고 : Firefox 및 Safari에서만 작동

[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]([(![]+[])[+!![]]+(![]+[])[!![]+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[!![]+!![]+!![]]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(!![]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]()[+!![]+[!![]+!![]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]]+[])[!![]+!![]+[+[]]]+([][(!![]+[])[!![]+!![]+!![]]+([][[]]+[])[+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([![]]+[][[]])[+!![]+[+[]]]+(!![]+[])[!![]+!![]+!![]]+(![]+[])[!![]+!![]+!![]]]()+[])[!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(![]+[])[+!![]])()(!![])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(![]+[])[+!![]]+(!![]+[])[+[]]](([][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]]+[])[!![]+!![]+[+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]]+[])[!![]+!![]+[+[]]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[!![]+!![]+!![]]+(![]+[])[!![]+!![]]+(![]+[])[+[]])())[+!![]+[+!![]]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]+(![]+[])[!![]+!![]]+([][[]]+[])[!![]+!![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]][([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!![]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]]+[])[!![]+!![]+[+[]]]+(![]+[])[+!![]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][(!![]+[])[!![]+!![]+!![]]+([][[]]+[])[+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([![]]+[][[]])[+!![]+[+[]]]+(!![]+[])[!![]+!![]+!![]]+(![]+[])[!![]+!![]+!![]]]()+[])[!![]+!![]])()((+(+!![]+(!![]+[])[!![]+!![]+!![]]+(+!![])+(+[])+(+[])+(+[]))+[])[+[]]+![])[+[]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+([][[]]+[])[+!![]]+(!![]+[])[+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[+!![]+[+[]]]+(!![]+[])[+!![]]]()[+!![]+[!![]+!![]]]+(+[]+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!![]+[+[]]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]]])[!![]+!![]+[+[]]]))()

Chrome 및 Microsoft Edge에서도 작동하는 약간 더 긴 버전 (+4 바이트)이 있습니다.

JSFuck에 익숙하지 않은 사용자에게는 6 자만있는 것처럼 JavaScript를 작성하는 것이 중요합니다.

이 표는 Hello, World! 프로그램은 JSFuck으로 인코딩됩니다. 일반 텍스트 코드는 단지 alert("Hello, World!")입니다.

+----------+--------------------------------------+---------------------------+
|JavaScript|               write as               |           JSFuck          |
+----------+--------------------------------------+---------------------------+
|     a    | (false+[])[1]                        | (![]+[])[+!![]]           |
|     l    | (false+[])[2]                        | (![]+[])[!![]+!![]]       |
|     e    | (true+[])[3]                         | (!![]+[])[!![]+!![]+!![]] |
|     r    | (true+[])[1]                         | (!![]+[])[+!![]]          |
|     t    | (true+[])[0]                         | (!![]+[])[+[]]            |
|     (    | ([]+[]["fill"])[13]                  | 114 bytes                 |
|     "    | ([]+[])["fontcolor"]()[12]           | 539 bytes                 |
|     H    | btoa(true)[1]                        | 1187 bytes                |
|     o    | (true+[]["fill"])[10]                | 105 bytes                 |
|   space  | ([]["fill"]+[])[20]                  | 107 bytes                 |
|     W    | (NaN+self())[11]                     | 968 bytes                 |
|     d    | (undefined+[])[2]                    | ([][[]]+[])[!![]+!![]]    |
|     !    | atob((Infinity+[])[0]+false)[0]      | 1255 bytes                |
|     )    | (0+[false]+[]["fill"])[20]           | 114 bytes                 |
+----------+--------------------------------------+---------------------------+

여기서, 문자열은 "fill", "fontcolor"등으로 작성한다 "f"+"i"+"l"+"l", "f"+"o"+"n"+"t"+"c"+"o"+"l"+"o"+"r"부호화한다.

전역 식별자 self는 다음 atobbtoa같이 작성 Function("return self")()됩니다.

Function그 자체가이어야합니다 []["fill"]["constructor"].

쉼표 ","는 까다 롭습니다. 어떻게 작동하는지 100 % 확실하지 않지만 []["concat"]함수를 사용하여 배열을 만듭니다. 더 많은 테스트를 할 시간이있을 때 업데이트를 게시 할 것입니다.


JScrewIt을 사용하여 이것을 인코딩했습니다- 정교한 도구를 만들기 위해 GOTO 0 에 크레딧을 제공합니다 .

  • Firefox 열기 (다른 브라우저를 선택할 수 있지만 Firefox 만 코드가 가장 짧습니다.)
  • JScrewIt으로 이동 하십시오 : http://jscrew.it
  • 입력: alert("Hello, World!")
  • 실행 코드 : 확인
  • 호환성 : 이 브라우저 만

이것은 "Hello"다음에 쉼표가 있는지에 대한 이 질문에 대한 나의 대답과 다릅니다 .

흥미롭게도 ES6 구문

alert`Hello, World!`

("및 보다 두 개의 백틱을 인코딩하는 데 더 복잡하기 때문에 인코딩하는 데 더 많은 바이트가 필요합니다 (+1500 정도) ").


글쎄 그것은 안드로이드에 크롬에서 작동
베타 붕괴

너무 OS X에 크롬에서 작동
C0deH4cker

1
당신은 여기서 훌륭한 일을했습니다! 마지막 업데이트를 확인하십시오.
GOTO 0

4
@ GOTO0 잠깐만 ... 당신은 JScrewIt의 저자입니다.
나와 내 고양이

1
이걸로 어떻게 함수를 호출합니까?

29

Pada , 83 68 바이트

~.O~Ow~q~Owo~O~Oww~Q~qwo~q~O~wQ~q~w~q~q~Q~Ow~Q~Q~wo~q~w.~q~w.~.wO~qw

나는이 선형 프로그램 (제어 흐름 연산자를 사용하지 않는 즉, 하나를위한 최적의 판단 ?*). 전반적으로 최적 일 수는 있지만 그러한 작은 양의 코드에서 추가 연산자를 사용하는 방법 (또는 프로그래밍 방식으로 가능성을 탐색하는 방법)을 모르겠습니다.

이메일로 저자와 토론을 시작한 후 최근에 언어가 약간 변경되었습니다. 그러나 지난 주 언어 사양의 현재 상태에 대한 참조 구현작성 했으므로 위의 코드는 실제로 실행할 수 있습니다.

메타 골프

원래 저는이 구현 참조 구현 결과를 사용하여 이를 바탕으로 수공 솔루션을 만들었습니다. 그러나 이것은 휴리스틱 접근법이었습니다.

대신 Mathematica에서 최적의 솔루션을 찾기 위해 Pada 데이터 구조와 연산자에 대해 실제로 알고있는 솔버를 작성했습니다. 평균적으로 문자열 길이에 따라 선형으로 증가하지만 (일부 문자 조합은 다른 문자 조합보다 약간 느리지 만) 약 1.5 시간이 걸렸습니다 Hello, World!.

솔버를 작성하는 방법은 무엇입니까? 먼저 6 개의 연산자 만 고려하면됩니다 ~.oOqQ(및 w인쇄 된 각 문자에 필요함 ). 스택 또는 비트 잠금을 사용하여 선형 코드에서 유용하지 않습니다, 나는 그렇게 생각하지 않습니다 ?*보다 68 바이트에서 효과적으로 사용할 수 있습니다.

Pada의 상태 (스택 및 잠금 무시)는 다음과 같이 배열 된 7 개의 스위치와 8 비트로 구성됩니다.

       /
   /       \
 /   \   /   /
0 1 0 0 1 0 0 0

그래서 그건 가능한 상태. 첫 번째 전처리 단계는 각 에지가 단일 작업에 해당하는 상태의 방향 그래프를 설정하는 것이 었습니다. 즉, 그래프에는 32 도의 정점이 있으며 각각 6도 (고려 6 개 작업마다 하나의 나가는 가장자리)를 갖습니다. 이 그래프를 사용하여 두 상태 사이의 최단 경로를 찾을 수 있습니다 (이 그래프만으로도 Pada 골프에 매우 유용 할 수 있습니다).215 = 32768

이제 각 문자마다 w해당 문자를 인쇄 하는 상태에 도달하려고합니다 . 그러한 상태는 몇 개입니까? w삭제 된 비트에서 바이트를 읽습니다 (순환 적으로). 따라서 캐릭터의 비트를 8 회 회전 할 수 있으며, 그 캐릭터 모두를 프린트 할 수 있습니다. 이러한 각 회전에 대해 3 개의 스위치가 고정됩니다 ( w올바른 위치에 놓기 위해 ). 4 개의 임의 스위치가 남습니다. 따라서 코드에서 가능한 상태가 각각 있습니다.8 * 24 = 128w

이것으로 우리는 또 다른 그래프 문제를 해결할 수 있습니다 : 소스 버텍스, 각 문자에 대해 하나의 "레이어"및 싱크 버텍스를 갖는 그래프를 구성하십시오. 계층은 각 정점에 대해 128 개의 상태로 구성되며 소스 노드는 프로그램의 초기 상태에 해당합니다 (모든 스위치는 왼쪽으로 전환되고 모든 비트는 0 임). 싱크 노드는 특히 상태가 없음에 해당합니다. 한 레이어의 모든 꼭짓점에서 다음 레이어의 모든 꼭짓점으로 가장자리를 지정했습니다. 여기서 가장자리 가중치는 이전 그래프에서 두 상태 사이의 거리입니다. 마지막 레이어에서 싱크까지의 가장자리 가중치는 모두 0입니다. 즉, 모든 가장자리 가중치를 미리 계산할 수 있습니다. 이것은 계산에서 가장 비싼 단계이며에 1.5 시간이 걸렸습니다 Hello, World!.

이 그래프를 설정하면 소스에서 싱크까지 가장 짧은 경로를 매우 빠르게 찾을 수 있습니다 (시스템에서 0.05 초 소요). 들어 Hello, World!원하는 상태입니다 :

0, 16960, 22052, 13828, 13828, 30389, 12487, 8307, 27299, 23450, 18922, 22778, 18682, 18459

여기서 최하위 7 비트는 스위치에 해당하고 최상위 8 비트는 Pada의 비트에 해당합니다.

이제 첫 번째 그래프로 돌아가서 각 후속 상태 쌍 사이의 최단 경로에 해당하는 실제 모서리 (예 : 연산)를 찾고 각 끝을로 끝냅니다 w. 최적의 솔루션 인 Voilà (위의 가정을 기반으로 함).

Pada에서 다른 문자열을 metagolf하려는 경우 전체 Mathematica가 있습니다.

string = "Hello, World!";
width = StringLength@string;
getState[letter_, state_] := (
  {shift, switchState} = IntegerDigits[state - 1, 16, 2];
  bits = RotateRight[
    IntegerDigits[ToCharacterCode[letter][[1]], 2, 8], shift];
  switchState = IntegerDigits[switchState, 2, 4];
  switches = {-1, -1, -1, -1, -1, -1, -1};
  {top, middle, bottom} = IntegerDigits[shift, 2, 3];
  switches[[1]] = top;
  If[top < 1,
   switches[[2]] = middle;
   If[middle < 1,
    switches[[4]] = bottom,
    switches[[5]] = bottom
    ],
   switches[[3]] = middle;
   If[middle < 1,
    switches[[6]] = bottom,
    switches[[7]] = bottom
    ]
   ];
  For[i = 1, i <= 7, ++i,
   If[switches[[i]] < 0,
    switches[[i]] = First@switchState;
    switchState = Rest@switchState
    ]
   ];
  {bits, switches}
  )
encode[state_] := FromDigits[Join @@ state, 2]
decode[id_] := Partition[IntegerDigits[id, 2, 15], 8, 8, 1, {}]
getBitFromSwitches[switches_] := (
  If[switches[[1]] < 1,
   If[switches[[2]] < 1,
    1 + switches[[4]],
    3 + switches[[5]]
    ],
   If[switches[[3]] < 1,
    5 + switches[[6]],
    7 + switches[[7]]
    ]
   ]
  )
toggle[list_, index_] := ReplacePart[list, index -> 1 - list[[index]]]
stateEdges = Flatten@Table[
    {bits, switches} = decode@id;
    bit = getBitFromSwitches@switches;
    {
     Labeled[id \[DirectedEdge] encode@{bits~toggle~bit, switches}, 
      "~"],
     Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~1}, "."],
     If[switches[[1]] < 1,
      {
       Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~2}, 
        "o"],
       Labeled[
        id \[DirectedEdge] encode@{bits, switches~toggle~1~toggle~3}, 
        "q"],
       If[switches[[2]] < 1,
        Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~4}, 
         "O"],
        Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~5}, 
         "O"]
        ],
       If[switches[[3]] < 1,
        Labeled[
         id \[DirectedEdge] 
          encode@{bits, switches~toggle~1~toggle~3~toggle~7}, "Q"],
        Labeled[
         id \[DirectedEdge] 
          encode@{bits, switches~toggle~1~toggle~3~toggle~6}, "Q"]
        ]
       },
      {
       Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~3}, 
        "o"],
       Labeled[
        id \[DirectedEdge] encode@{bits, switches~toggle~1~toggle~2}, 
        "q"],
       If[switches[[3]] < 1,
        Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~6}, 
         "O"],
        Labeled[id \[DirectedEdge] encode@{bits, switches~toggle~7}, 
         "O"]
        ],
       If[switches[[2]] < 1,
        Labeled[
         id \[DirectedEdge] 
          encode@{bits, switches~toggle~1~toggle~2~toggle~5}, "Q"],
        Labeled[
         id \[DirectedEdge] 
          encode@{bits, switches~toggle~1~toggle~2~toggle~4}, "Q"]
        ]
       }
      ]
     }
    ,
    {id, 0, 2^15 - 1}];
stateGraph = 
  Graph[# & @@@ stateEdges, EdgeLabels -> Rule @@@ stateEdges];
uid = 0;
layers = Join[{{{uid++, 0}}}, 
   Table[{uid++, encode@getState[#, i]}, {i, 128}] & /@ 
    Characters@string, {{{uid++, -1}}}];
edges = Flatten[Table[
      from \[DirectedEdge] to
      ,
      {from, #},
      {to, #2}
      ] & @@@ Partition[layers, 2, 1], 2];
Timing[weights = (
     {from, to} = Last /@ List @@ #;
     If[to < 0,
      0,
      GraphDistance[stateGraph, from, to]
      ]
     ) & /@ edges;]
characterGraph = Graph[edges, EdgeWeight -> weights];
Timing[path = 
  Last /@ Most@
    FindShortestPath[characterGraph, {0, 0}, layers[[-1]][[1]]]]
(PropertyValue[{stateGraph, #}, EdgeLabels] & /@ 
      DirectedEdge @@@ 
       Partition[FindShortestPath[stateGraph, ##], 2, 1] <> "w" & @@@ 
   Partition[path, 2, 1]) <> ""

=)에서 metagolf를 수행하는 흥미로운 언어입니다. 오늘 하루는 어때요? oO
justhalf

4
@ justhalf 나는 현재 석사 학위와 PhD 연구 사이에서 림보 상태에 있습니다 (따라서 내 생각에 너무 많은 시간이 걸렸습니다). (이것은 일반적으로 채팅에 대한 더 많은 토론 입니다. )
Martin Ender

Pada는 바 하사 인도네시아 / 말레이어를 의미합니다. 관련이 있습니까?
XiKuuKy

@XiKuuKy afaik, 언어는 크로아티아어로 "떨어짐"을 의미하기 때문에 Pada라고 불립니다.
Martin Ender

그리고이 답변은 ( 여기 참조 ). 이 멋진 Hello World 문제를 일반적으로 설명하기 위해 두 개의 답변을 하나로 결합 할 수 있습니다.
Vitaliy Kaurov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.