"こんにちは世界!"


419

だから...ええと...これは少し恥ずかしいです。しかし、「Hello、World!」という単純なものはありません。まだ挑戦しています(35個のバリアントがでタグ付けされ、カウントされています)。これは一般的な言語で最も興味深いコードゴルフではありませんが、特定のエソランで最短の解決策を見つけることは深刻な課題です。たとえば、私の知る限り、可能な限り最短のBrainfuckソリューションがまだ見つかっているかどうかはわかりません。

さらに、すべてのウィキペディア(ウィキペディアのエントリは削除されていますが、archive.orgにコピーがあります )で、エソランロゼッタコードには「Hello、World!」のリストがあります。プログラム、これらのどれも各言語の最短時間に興味がありません(このGitHubリポジトリもあります)。コードゴルフコミュニティの重要なサイトになりたい場合は、最短の「Hello、World!」の究極のカタログを作成してみてください。プログラム(基本的なクインチャレンジに、さまざまな言語で知られている最短のクインが含まれていることに似ています)。それでは、これをしましょう!

ルール

  • 各提出は完全なプログラムでなければなりません。
  • プログラムは入力Hello, World!を受け取らず、STDOUT(大文字と句読点を含むこの正確なバイトストリーム)に加えて、オプションの末尾の改行のみを出力します。
  • プログラムは、STDERRに何も書き込まないでください。
  • 空のプログラムが印刷する言語を作成することでこれを悪用したい人はHello, World!、おめでとう、彼らは非常に退屈な答えへの道を開いただけです。

    提出物をテストできるように、通訳が必要であることに注意してください。以前に実装されていない言語用にこのインタープリターを自分で作成することは許可されています(さらには推奨されています)。

  • 送信は、適切な(既存の)エンコーディングで、通常(必ずしもではありませんが)UTF-8 で、バイト単位でスコアリングされますFoldersのような一部の言語は、スコアを付けるのが少し難しいです。疑問がある場合は、Metaで質問してください。
  • これは、「Hello、World!」という最短言語を見つけることではありません。プログラム。これは、最短の「Hello、World!」を見つけることです。すべての言語のプログラム。したがって、回答を「承認済み」としてマークしません。
  • 選択した言語が、すでに回答を持っている別の(潜在的により人気のある)言語の些細な変形である場合(BASICまたはSQL方言、Unixシェル、またはAlphuckのような些細なBrainfuck派生語を考えてください)、既存の回答にメモを追加することを検討してください同じまたは非常に類似したソリューションは、他の言語でも最短です。

サイドノートとして、ゴルフにそれほど多くない言語で退屈な(しかし有効な)答えに投票しないでください-可能な限り完全なカタログをコンパイルしようとするので、これらはまだこの質問に役立ちます。しかし、著者が実際にコードをゴルフすることに努力しなければならなかった言語では、主に回答を支持してください

インスピレーションについては、Hello World Collectionを確認してください。

カタログ

この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からカタログを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、スニペットに表示することもできます。

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


2
@isaacgいいえ、そうではありません。素数性テストが可能かどうかが明らかでないいくつかの興味深い言語があると思います。
マーティンエンダー

6
のような同じプログラムが、"Hello, World!"多くの異なる無関係な言語の中で最も短い場合、別々に投稿すべきですか?
-aditsu

2
@ mbomb007 3つのコードブロックが多くのスペースを占めるため、デフォルトでは非表示になっています。それらを1行にするように縮小することもできますが、バグが発生した場合に備えて、コードを保守しやすくしたいと思います。
マーティンエンダー

7
@ETHproductions「通常のルールとは異なり、このチャレンジよりも新しい言語(または言語バージョン)を使用しても構いません。」しかし、投稿する前に言語実装を公開することは間違いなく役立ちます。
マーティンエンダー

2
@MartinEnder ...ほとんど。2つのBFソリューションのサイズが同じである場合、辞書編集順序が小さいソリューションは、単項のバイト数が少なくなります。もちろん、BFに変換された最小の単項ソリューションは最小であることが保証されています。
user202729

回答:


442

スタック、0バイト

まあ、それより短くなることはできません...空のプログラムはStuckに出力さHello, World!れます。


57
くそー、20分遅れた!:P
カデ

33
Noooo c'mon西の効果で最速の銃;)
ベータ崩壊

30
@Zuckええ、StuckはCJam / GolfScript / Pythと同じように、コードゴルフのために作られました。これHello, World!は、開発の初期段階でプレースホルダーとして入れたものです。そんなに長く放置するつもりはありませんでした。
カデ

132
私はもっ​​と短い解決策を考え出そうとしましたが、行き詰っています。
チョイス

51
jQueryで-1バイト。jQueryを試しましたか?
10返信

244

PHP、13バイト

Hello, World!

はい。できます。


261
PHPでいつものように、あなたはいつもそれがどのように機能するのかと不思議に思っています
Fatalize

95
もちろん機能<?phpします。コードにないため、PHPによって解釈されないからです。)
Lynn

58
つまり、これは単なるHTMLの答えです
ネルソン

82
@Nelsonいいえ、そうではありません。PHPは必ずしもHTMLに配置する必要はありません。さらに、HTMLは標準出力に出力されません
-georgeunix

26
これは、これまでで最も陽気な答えである
オリバー・ニッケル

241

Brainfuck、78バイト

無制限の報奨金:誰でもこのスコアを改善できる場合、報奨金(+500)を渡します。 @KSab 76 72バイトのソリューションを見つけました!

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

オンラインでお試しください!

最初の28バイト--<-<<+[+[<+>--->->->-<<<]>]は、次の繰り返し関係(mod 256)でテープを初期化します。

F N = 171・(-f N-1 - F N-2 - F 3 N- 1 +)F 0 = 57F 1 = 123、及びF 2 = 167

ので、171の係数が生じる3 -1 ≡171(256 MOD) 。現在の値が変換<+>---されると、毎回1セルずつ(を介して)3が減算され、値に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 1f 1 = s 2 + c 1・f 0 + kf 2 = s 3 + c 2・f 0 + c 1・f 1 + kなど

さらに、<+>停止点に影響を与えることなく範囲を定数で乗算するように変更でき、停止点に>{k}影響を与えずに定数で範囲をシフトする前に項を追加できます。


その他の例

フィボナッチ数列

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

N角形の数字

三角数字

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

f n = 2・f n-1 -f n-2 + 1として定義され、f 0 = 0f 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.

出力は3行で提供されます。

  1. 見つかったプログラムの全長、および初期化セグメント。
  2. 現在のテープポインターから始まるパス。各ノードは、出力の1文字に対応し、(ポインター、コスト)として表されます。
  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バイト(ミッチ)):

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

こんにちは世界!

ラッピング、80バイト

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

非ラッピング、81バイト(以前は92バイト(hirose)):

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

こんにちは世界!

ラッピング、74バイト

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

非ラッピング、84バイト

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

Esolangsバージョン

Hello World!\ n

ラッピング、76バイト

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

これは家の左側にある1つのセルを使用するため、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(Peter Karpov)

"こんにちは世界"

ラッピング、70バイト(以前は78 1):

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

非ラッピング、77バイト(以前は89?):

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

著者は、最短の手書きの「Hello World!」89バイトですが、参照を提供しません。私もこれの記録を主張します。

こんにちは世界!

ラッピング、65バイト(以前は66バイト):

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

これも実際には手作業でコーディングされています(クランチで見つけることができる最高のサイズは68バイトです)。最初のセルは259(3)に初期化され、繰り返しごとに7ずつ減少し、37回ループします。次のセルは6減分され、256-6 ・37 = 34になります。残りのセルは毎回4ずつデクリメントされ、各反復ごとに1つのセルが追加され、新しいセルはそれぞれ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
これはナッツです。そのうちの1人は、82バイトバージョンをアナーキーゴルフに提出する必要があります。
マーティンエンダー

117
この質問に対する最適なJavaソリューションは76バイトです。Java開発者がBrainfuckに切り替える必要があることを証明するために、あと9バイトだけです。
レベルリバーセント

9
@LevelRiverSt小文字の文字は、Javaより2バイト短いです。終わりの時が来ました。
コナーオブライエン

13
「Java開発者がBrainfuckに切り替える必要があることを証明するために、あと9バイトだけです。」interface a{static void main(String[]A){System.out.print("No!");}}
ドルカハン


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で可能な限りプロフェッショナルになるように心がけています!
アルコード

204

シード6016 4234 4203バイト

20 854872453003476740699221564322673731945828554947586276010721089172712854441839676581917455319274850944955030258951339804246125714958815519550291630078076933441706558540342671975808828643360922071900333028778314875248417953197990571991784126564752005357199892690656368640420204822142316716413192024742766282266114842280731756458212469988291309261528542889299297601723286769284159107438930448971911102280330101196758384815655479640836157495863547199726234352265518586460633795171196315255736880028338460236768181141732764911402112878175632130129852788301009582463631290071329795384336617491655825493435803011947670180368458659271192428341035912236946048939139042310380278430049252171822721598175984923434205610723412240162418996808671543770639111617709604242882388664919702606792443015941265168129550718541372361144081848761690730764968771245566074501485020726368378675085908872608679630368472956274468410052703615106090238423979678950131481176272880569100533049143775921798055136871254424261001442543122666701145111965968366507060931708140304772342855064834334129143038575569044150428480231956133612367393837580345180691911525531699573096952433882387811884727975431823620782822755161559988205401134640722220804177812794328129589949692446031008866917615922944976151073653201316255518389496411696741029209242119521978920200314572718584995265523235225587228975886710511855501710470163649632761488899317729943053884132314641377747687975638119132094777769497069556255954031537245957811105217875011509899497752696062748928963281605780942517262774976217663461063680912331030221981433051827519906741285738915397005702326447635845195923640649166530310494885569783989508000344280715868581532826832242144647203531393142251025361866506821695860883605004105862208004440476654027574832078603305884731766236740069411566854496824754558761536201352147934963241039597221404341132342297870517293237489233057335406510464277610336142382379135365550299895416613763920950687921780736585299310706573253951966294045814905727514141733220565108490291792987304210662448111170752411153136765318541264632854767660676223663544921028492602135525959428999005153729028491208277493747933069008199074925710651071766675870081314909460661981433426167330215548196538791617762566403934129026219366764038390123622134753742930729751695349588862441999672547791630729398908283091638866715502470152431589429837867944760012419885615525232399584379209285060418518373512154801760060312646951597932345591416241634668119867158079946680321131213357200382937049485606706114467095019612014749723443159443363662563254359712162432143334612180576945072905749883870150120687696027984317320305291407322779803583395375616762530641605634303022155218169343410634115050596030685041633824154135240376022159918501703555881290333205131375705406831260759974112248490451605422031345264183102048614606636275942039438138959188478277971377232005036301145411215067576576667743288951344423152531417111852584846747428443123174595987315325304540564683047858415059703724263652136185848573853965992798725654430360647040362341567082462847275277303225817689141675391972818943419663764371222973269129542760661385278009266471167618553065823580448848795731295589715602705860758954890415040763604082216728159486423396295188510311881004469017351709060492844398219491990895826924575575549615118821417543037296628825303328056839433114519945243963946989899508355224823109677424196639930153649890175062456649384605721510239142861693109687536600667811037619175927995599388547421689316110236566026931360164495251160997857372500940728057700473763884480342708897319990346726967220426504612260565552531158509215849649565188655100774748485416791517853427613458459889062942881409801879085054494129489535044719193283409051007851153504224002807392992520076910314763705776345053922387355156981872691537772657428096384535960466923475731297217863371650154415835785630016335858514130863258775100537612371430357576913148500310344278511588325852376442503898849856566716198848377379400158332792027967216204970114516984638014129252882482309132898416484525230488700253065644547798869056136044415413099076332059572505138116227535024546891015836838323022822272664771489129085797354578016574544759934333471793

結果のBefunge-98プログラム(これに基づく)は

"9!dlroW ,olleH"ck,@

35
うわー!これはどうやって見つけたの?
ETHproductions

31
なに。それは非常識です。
コナーオブライエン

47
これをどのようにゴルフしましたか?
破壊可能なレモン

40
メルセンヌツイスターをリバースエンジニアリングしましたか?また、これにはセキュリティ上の意味がありますか?
プリモ

68
詳細な(理論的な)説明のために、さらに+500を提供します。
プリモ

156

モーニングトンクレセント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

オンラインでお試しください!

これは間違いなく最適ではありませんが、エソランのソリューションの半分のサイズです。

Hello, World 以下のステーション名をスライスし、結果を連結することにより構築されます:

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

最後に、!as の文字コードを計算してい(2<<4)+1 == 33ます。これらの部品はすべてパディントンで連結され、最終的にモーニングトンクレセントで印刷されます。

注:この言語では、同じ駅に2回連続して旅行できるかどうかは指定されていませんが、インタープリターは許可していますので、それを利用しました。


44
これは絶対に素晴らしいです:D
ベータ崩壊

32
この言語が大好きです。この言語でシステムプログラミングを行っている間、すみません。

4
地球上のどこで、この言語は私の人生でしたか?
-ScottMcGready

30
@ScottMcGreadyカムデンタウンとユーストンの間。
マーティンエンダー

3
Mornington Crescentは現在TIOにいます。tio.run/#mornington-crescent
デニス

123

、70バイト

aeeeaeeewueuueweeueeuewwaaaweaaewaeaawueweeeaeeewaaawueeueweeaweeeueuw

次の4つのコマンドを使用します。

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
それは悪である...
デヴィッドGrinberg

61
特にあなたのアバターはブラックハットなので。
TheDoctor

5
織り方のプロセスを説明してもらえますか。
のKishanクマール

4
@KishanKumar はい
-grc

30
このプログラムを読み上げると、ダブステップベースのように聞こえます。
ジョーZ.

112

brainfuck、72バイト

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

オンラインでお試しください!

元の非ラッピング76バイトソリューション:

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

オンラインでお試しください!

私が見つけた他の最短の(私の知る限り)既知のソリューション

'こんにちは世界!' 77バイト:

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

オンラインでお試しください!

'こんにちは世界!' 70バイト:

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

オンラインでお試しください!


これらは、私がここで書いたC ++プログラムを使用して発見されました:https//github.com/ksabry/bfbrute

注:私は元々、このコードを投稿する前にクリーンアップして、実際に多少読みやすく使用できるようにしたかったのですが、1年以上経っていないので、そのまま投稿するつもりです。潜在的な最適化のためにテンプレートとコンパイル時定数を多用し、テストから大量のコメントアウトされたコードがありますが、有用なコメントはありませんが、すみませんが、少し恐ろしいです。

コードについて何もひどく巧妙なものは何もありません、それは中核であるのは強引ですが、非常に最適化されています。主要な最適化は、最初にループなしですべてのプログラム(no [または])を指定された長さ(現在16)まで反復し、データ配列に対して行うすべての変更の配列をキャッシュすることです。それだけで、例えば、それほど変化のユニーク配列ごとに単一のプログラムのいずれか一方のみを格納する>+<<->と、<->>+<保存されます。次に、このキャッシュ内の任意のプログラムと、それらの間のループの任意の組み合わせで構成されるすべての可能なプログラムを反復処理します。各プログラムを実行した後、キャラクターの単純な貪欲な狩りとペックを行い、これをプログラムの最後に追加します。

これをすべてのプログラムのスペースで実行した後、私はほとんどすべての最短プログラム(長さ〜19まで)が形式であることに気付きました*[*[*]*]。この形式のプログラムに検索を制限すると、検索が大幅に高速化されました。現在のレコードホルダーは長さ27で見つかりました。これは実際には長さ74であると計算されましたが.>.>.>.、データセルに0が含まれている幸運な特定のシーケンスに気付き[.>]<ました。 72まで。

私はそれをかなり長い間実行させ、29までの現在のパラメータで検索を完了しました。単に高くするだけで現在のパラメータを打つことは難しいと思います、最も有望なアプローチはおそらく検索スペースを増やすことだと思いますインテリジェントな方法。


32
一体どうやってこれを見つけたの?
デニス

2
@Dennis機会があれば、プロセスの説明と使用したソースコードを(
おそらく

32
ねえ、Javaを破った。
ポケ

18
それはいくつかのデバイスであり、セルをラップする必要さえありませんó_Ò–
primo

5
この背後にあるアルゴリズムを見てみたい:)
musicman523

84

Piet、90コーデル

ここに画像の説明を入力してください

これは30 x 3の画像です。または、コーデックサイズ10で:

ここに画像の説明を入力してください

は、高さ3のレイアウトを使用しているため、ポインターを1回だけ付けるだけです。これがまだゴルフに適している場合は、プッシュポップノーオペレーションがありますので、せいぜい他のコラムを削ることができるでしょう。

編集:@primoの84コードソリューション


6
あなた自身の報奨金を取得しようとしていますか?Sp3000をもっと考えました;)
ベータ崩壊

7
ああ

9
プッシュポップは私にとってノーオペレーションではありません。それはだ、この
mbomb007

1
この「言語」とは一体何なのでしょうか?大好きです!
ゾルタンシュミット

8
「プッシュ・ポップ無opが」今、私の好きなフレーズではありません
BobTheAwesome

82

Haystack、17バイト

Haystackは2Dプログラミング言語で|、スタックベースの操作を実行しながら、haystack で針を見つけるまで実行されます。すべてのプログラムは左上隅から始まり、方向文字><^vを使用してプログラム内を移動できます。方向は継承されるので、>右に進むために使用し続ける必要はありません。方向は、異なる方向のキャラクターにヒットしたときにのみ変化します。

デフォルトでは、インタプリタは左上から右に読みますので、「Hello、World!」スタックoに印刷し、針を置いて実行を終了します。

"Hello, World!"o|

ボーナス:よりエキサイティングなバージョン:

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

好奇心から、文字列に文字の1つを含めるとどうなりますか?
Random832

@ Random832文字列では、方向文字は通常の文字として扱われます。つまり、文字列に含めることができます。
ケード

38
>; + O
bjb568

3
私はここにいる全員の半分ほど頭が良かったのにと思いますが、「ドキュメンテーション」(ある人のフォーラムの投稿を読んでください)ではo、数値としての出力を示しています。c最後にすべきではないでしょうか?適切なドキュメントはどこにありますか?これはとても面白いです!
悪魔の擁護者

2
@Scott Superはこれに返信するのが遅かった、そのフォーラム投稿はおそらく私だった!o一番上のスタック項目をそのまま出力します。つまり、数値がある場合はそれを出力します。cそれを単純にcharにキャストします。あなたは、スタックの一番上に文字列または文字を持っているのであれば、o何をしたいだろう:)最終的には、これらのドキュメントが更新されます...
カーデ

70

助けて、WarDoq!、1バイト

H

ヘルプだけでなく、WarDoq!フレーズの最も一般的なつづりのためのビルトインがあり、それはプログラミング言語の通常の定義さえ満たします。

公式オンラインインタープリターで試してみてください(コードはInputに入ります)。


7
それで、HQ9 ++、本質的には、ええ?;-)
AdmBorkBork

6
@TimmyDいいえ、HQ9 ++ではありません。
デニス

30
大声で叫ぶために。この時点でエソランではないものはありますか?:)
AdmBorkBork

97
"Space: Begin a comment. The next non-space character ends the comment and is interpreted as usual."だから、あなたはスペースで作られたコメントのみを持つことができますか?私は、世界でも、最も有用な言語が1つの役に立たない機能1を持っているとし、
レベル川セント

29
@steveverrillタブもコメントと見なされる場合、ホワイトスペースプログラムとして記述されたコメントを持つことができます
オプティマイザー

66

MarioLANG259 249 242 240 235バイト

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

これはRuby実装でテストされました

「Hello、World!」を難読化した後 MarioLANGでは、ゴルフを少し調べました。上記は、私がこれまでに見つけた最短のものです。

前と同じように、4つのセルを文字He,とスペースに最も近い10の倍数に設定し、それをMarioLANGに変換するBrainfuckソリューションから始めました。その後、ループの幅をほぼ半分にするループ内の補助フロアを使用して、コードを少し短くすることができます。下部は上部よりも1回だけ実行されるため、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
マーティンエンダー

マーティン私はこの答えが大好きです。これについての公式フォーラムでの投稿を検討してください。StackExchange Editorと同じものを使用します。私たちの社説では、スタッフピックに追加したいと思います。
ビタリーカウロフ

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

言語仕様からの引用をいくつかこのエソランの素晴らしさについて話させてください。

ダークは、世界全体と次元を操作して目標を達成し、可能な限り最高の拷問的な現実を構築することに基づいた言語です。

構文エラーが発生するたびに、プログラムの正気度は1減少します。[...]プログラムの正気度がゼロに達すると、インタプリタは非常識になります。

破損が発生すると、変数の1ビットが反転します。

マスターが死ぬと、そのマスターにアタッチされているすべてのサーバント変数も死にます。これは、変数のグループ化と大量削除に役立ちます。

変数を強制的に強制終了させ、変数を解放します(ただし、変数は減衰したままになることに注意してください)。

変数をランダムな値に設定します。Global Chaos Generatorを使用します。

ストーカーが初期化されていない場合、IOを実行しようとすると、エラーメッセージが押し下げられてコンソールに書き込まれます。


37
この言語はとても金属的です。
アレックスA.

6
プログラミング言語を悪の順にリストしなければならない場合、ダークは悪のトップになります。
-LukStorms

35
こんにちは地獄があります
Khaled.K

超悪、あなたは歩行ゴトの軍隊を上げることさえできます
bobrobbob

60

Homespring、58バイト

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

末尾のスペースは重要です。

話を聞かせてください。かつて近くのサケのhatch化場に電力を供給する発電所がありました。サーモンhatch化場は、春を見つけるために上流への旅に出た若いホームレスサーモンをhatch化しました。「Hello、World!」という詩的な名前の春が見つかったため、成熟して新しい若いサーモンが生まれました。両方の魚は現在、広い海を求めて下流に泳ぎました。しかし、川の河口の少し手前で、川の中に網がありました-成熟した魚が捕らえられ、若い魚だけがなんとか抜けて海と宇宙の残りの部分に到達しました。その間、hatch化場は、同様に上流に移動して産卵したなど、より多くのsalをhatch化させました。

しかし、大量の雪解け水が別の川を流れていました。そして、「Hello、World!」の湧き水からの最初の若いサーモンの直後。海に到達すると、雪解け水が宇宙にぶつかり、...えーと... そして彼らは幸せに暮らしました...または私はそうではなかったと思います。

これらは実際には上記のプログラムのセマンティクスでした。Homespringは奇妙です。


15
これは...奇妙です
...-kirbyfan64sos

10
私は新しいお気に入りのサーモンを搭載した宇宙駆逐艦を見つけました...ええと...私は「こんにちは、世界!」を意味します プログラム。+1
ETHproductions

7
これに戻るたびに、私は大笑いします。おそらく最も面白いHello、World!を作成してくれてありがとう すべての時間のプログラム。
ETHproductions

2
これは私の新しいお気に入りの言語です。
メガマン


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
誰かがシェフでゴルフをすることができたら、それはSpです。
アレックスA.

11
実生活でゴルフのレシピを試してみてください。:D
mbomb007

2
笑、これは食べて良いだけでなく、非標準の測定単位を使用しています。XD
thepiercingarrow

53

Piet、84コーデル

ピートハローワールド

28x3、ここではコーデル幅10

PietDevで作成し、npietでテストしました。プログラムのレイアウトは次のとおりです。

ピエットレイアウト

黄色の塗りつぶしはパスが重複するコーデルを示し、オレンジ色の塗りつぶしは制御フローの目的で同じ色でなければならないコーデルを示します。

この作成を支援するために、スタックベースの言語用の初歩的なインタープリターを、「pasm」(source)と名付けたパイエットのようなコマンドで作成しました。このインタープリターからの出力(この入力を使用)は次のとおりです。

    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 []

ポインター、スイッチ、またはロールコマンドは使用されません。コーデルも無駄になりません。実際、2つは再利用されます。


おめでとう、あなたは私の賞金を得た:)
LegionMammal978

@ LegionMammal978ありがとう、作業するのは楽しかったです。そしてメリークリスマス:)
primo

7
これは、ハリウッドが「ハッカー」画面に表示するものです。
ヒューバート・グジェスコヴィアック

50

空白192の 150 146バイト

空白にはスペース、タブ、改行のみが必要ですが、他の文字は無視されます。
ここに表示するのは面倒です。
そのため、以下のコードではスペースとタブが置き換えられました。
そして、「;」わかりやすくするために、ラインフィードの前に配置されました。
コードを実行するには、まずを置き換えます。および>スペースとタブ。

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

コードのHexdump

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)))
コードは、「e:」ラベルなしで実行され、whitespace.kauaveel.eeの一部を終了します。しかし、これにより、他の空白コンパイラで空白コードが無効になる可能性があります。そのため、これらのバイトはソリューションから除外されませんでした。

注意すべきこと

Kevin Cruijssenがコメントで指摘したように、メタごとに「エラーによる終了」を許可することにより、Whitespaceは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

私はそれがしばらくしている知っている、と私はあなたが、それはほとんどのコンパイラの出口ラベルなしで実行しない言及しているが、あなたがそれを下げることができます参照してください129バイト使用してエラーで終了することにより、SSN代わりに(エラー値)をSSSN(プッシュ0 )、これはmetaに従って許可されます。(強調表示と説明を追加して)オンラインで試すか、生でオンラインで試します
ケビンクルイッセン

@KevinCruijssen最終的にあなたのバージョンをチェックしました。基本的には、アセンブリdup jumpz ee: exit削除された古いバージョンです。しかし、少なくともwhitespace.kauaveel.eeでは、ブラウザから苦情が出るまでループし続けます。低めのゴルフとメタが「エラーによる終了」を許可しているにもかかわらず、私はそれをバージョンに変更したくない。ただし、新しい回答としてバージョンを自由に送信できます。
-LukStorms

いや、別の回答を投稿しません。基本的にはあなたのものと同じですが、エラーで終了するため、ほんの少し短くなっています。またSSN、最初にを削除することで、129ではなく126に下げることができることに気付きました。この場合、スタックに1つのアイテムしかない場合(107)、Infix Plusを実行できないというエラーが発生します。(オンラインで試してみてください。)誰かが同じ提案をしたときは、ここにコメントを残します。そして、私は私が思うに約1年前にあなたの答えをすでに+1しました。;)
ケビンクルーイッセン

1
@KevinCruijssenその場合、あなたの解決策は答えで指摘されています。空白は、ゴルフをするのに最もありそうもない言語の1つです。しかし、バイトを節約するために、あなたの発見は言及する価値があります。
LukStorms

49

Java、79

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

Javaの以前のバージョンでは、静的ブロック(51バイト)を使用できる場合がありますが、現時点ではmainメソッドをバイパスする方法がわかりません。


7
enum代わりに使用しますclass
トーマスエディング

6
@ThomasEding実際に動作するコンパイラは何ですか?このヒントをいくつか試しましたが、バイトを節約することはできませんでした。
ジオビット

4
@Luminousああ、それは1.5のために働いたかもしれません。しかし、私はそれを見つけ出すためにそれをインストールするつもりはありませんが、過去10年間にリリースされたものに固執します。私がJava 5を二度と見ないなら、それは素晴らしい人生になるでしょう:)
Geobits

2
@TheDoctor私が見たことから、Processingは通常ここでは別個の言語と見なされます。回答として投稿するか、少なくともOPに説明を求めてください。
ジオビット

5
ユーザーOptiFineは、を使用しinterfacepublic指定子を捨てることで3バイトを節約することを提案しました。ポリシーに従って編集を拒否しましたが、コメントできないため、必要に応じて使用できるようにお知らせします。
マーティンエンダー

48

CSS、30バイト

:after{content:"Hello, World!"

Cascading Style Sheets(CSS)は典型的なプログラミング言語ではありませんが、固定出力をかなりうまく行うことができます。これは、contentを持つすべての要素の後に擬似要素を作成することにより行われますHello, World!。そのため、1つの要素(<html>)のみが選択されます。これは、最も基本的なHTMLドキュメント、つまり、

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

これはほとんどの主要なブラウザーで機能しますが、Firefoxの顕著な例外はセレクター<html><body>要素に適用されます。スタックスニペットが機能しない理由もこれです。スタイル設定されたbody要素が常に存在するためです。以下は、テストするためにわずかに変更されたバージョンです。

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


3
を使用* *して選択することもできますbody
jimmy23013

18
@ jimmy23013それは見事に非効率的ですね。ありがとう
NinjaBearMonkey

1
どんな理由で* :afterも、うまくいくように見えました。
jimmy23013

12
私は、CSSのどの文字が「言語」の略語であるかを自問しています。
ザイビス

10
@zaibis PHPの同じ文字:)
fcalderan

48

HTML、13バイト

Hello, World!

テキストはに自動的に挿入され、<body>表示されます。


159
ワオ。それはいくつかの本当にハードコアのコーディングスキルだ
BlueWizard

46
HTMLはプログラミング言語ではなく、マークアップ言語です(これがMLで終わる理由です)。
-CoDEmanX

31
ただし、HTMLはSTDOUTでは印刷されません。
Harshilシャルマ

25
-1 HTMLは有効な言語の要件を満たしていません
-Downgoat

123
-1不十分なjQuery
バレンティンローレンツ

45

Linux用のx86_64マシンコード、32バイト

Linuxが新しいプロセスを開始すると、すべてのレジスタ(RSPを除く)がゼロになるため、下位バイトを変更するだけで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

call命令は、hello world文字列を含む次のアドレスをスタックにプッシュします。文字列のアドレスをにポップしますrsi

次に、syscallto sys_writeに他の引数が設定され、文字列が出力されます。

プログラムはsyscalltoで終了しsys_exitます。 sys_write書き込まれたバイト数を返します。したがって、RAXの上位バイトは最初syscall(エラーを返さない限り)の後にゼロであるため、mov al, 60RAX = __NR_exitが2バイトのみになります。

stdout(./a.out >&-)を閉じることにより、このプログラムをセグメンテーション違反にすることができます。したがって、sys_write()戻り-EBADF、2番目syscallが戻り-ENOSYS、実行が終了します。ただし、write()エラーを適切に処理する必要はありません。


具体的には、これはLinuxでのみ機能し__NR_writeます(1)。これは、異なるx86-64 Unixシステムでは標準ではありません。また、新しいプロセスに入る前にRSPを除くすべてのレジスタをゼロにするというLinuxの動作にも依存しています(したがって、これは静的実行可能ファイルとしてビルドする場合にのみ機能します。そうしないと、動的リンカーは上位バイトにゴミを残してraxしまいます」取得します-ENOSYS)。x86-64 System V ABIは、レジスタがにエントリする_startときに任意のガベージ値を保持できると述べており、Linuxカーネル自体は情報漏えいを避けるためにゼロを選択します。
ピーター

DILのREXプレフィックスを必要とせずに、mov al, 1/ mov edi, eax(2バイト)を使用してバイトを保存できます。なぜなら、__NR_write == STDOUT_FILENO = 1
Peter Cordes

これはLinuxの静的実行可能ファイルでのみ機能するため、文字列のアドレスは仮想アドレス空間の低い2Gにあることが保証されます(非PIE実行可能ファイルのデフォルトのメモリモデルは、すべてのシンボルをゼロまたは符号として使用できます-拡張32ビット即値)。したがって、5バイトmov esi, msg(NASM)別名mov esi, OFFSET msg(GAS .intel_syntax使用できます。最後の後に文字列を入れてくださいsyscallcall/pop64ビットRIP相対LEAより1バイト短いですが、movが最適です。
ピーター

30バイトバージョンのNASMソース(デスクトップでサイズを確認)、tio.run / ## TY8 /…
ピーター

42

六角形37 32バイト

注意:辺の長さが3の六角形または辺の長さが4の証明可能な最適な解で有効な解を見つけた最初の人に500の報奨金を与えます。サイドレングス4の六角形でスコアを破ることができます(ソースコードから省略できるプログラムの最後にノーオペレーションを取得することにより)、私はそれに対してより小さな報奨金を差し上げます。

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

オンラインでお試しください!

私は誇らしげに、2番目の2Dプログラミング言語、および(私の知る限りでは)初めての2D言語を六角形のグリッド上に提示します。

ソースコードはあまり2Dに見えませんか?さて、Hexagonyでは空白はオプションです。最初に、ソースコードは、no-ops()で次の中央の六角形の数字に埋め込まれ.ます。次の番号は37なので、最後に5つのno-opを挿入します。次に、ソースコードは通常の六角形に再配置されます。

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

これも実行可能です。オンラインでお試しください!

Hexagonyには、6種類の命令ポインターと六角形グリッドの折れ線グラフであるメモリレイアウトなど、かなりファンキーな機能がたくさんありますが、このコードは1つのIPと1つのメモリエッジのみを使用するので、今は心配しないでください。

関連コマンドの概要は次のとおりです。

  • 文字は、現在のメモリエッジをASCII値に設定するだけです
  • ; 256を法とする現在の値をバイトとしてSTDOUTに出力します。
  • / 期待どおりに動作するミラーです(IPが120度回転するようにします)。
  • 数字は、ラビリンスと同じように機能します。現在のセルに10を掛けてから、自分で加算します。
  • @ プログラムを終了します。

最後の問題は、ソースが3組のエッジすべてをラップすることです。さらに、IPが6つのコーナーの1つを介してグリッドを離れる場合、ジャンプする可能性のある2つの行があります。どちらを選択するかは、現在の値が正か非正かによって異なります。次の注釈付きバージョンは、グリッドを離れるたびに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;@

何でだQ2P0P1?エッジを対応する値に設定するだけなので、文字は簡単に印刷されます。カンマ、スペース、感嘆符については、機能しません。我々はまた、ちょうどでその値を設定することはできません443233メモリエッジは、及びによる大混乱のすべての種類をwreakなり、個々の数字の意味論にして開始するためにゼロであるため、それぞれ。我々はそれをやってみたかった場合、我々は次のようにゼロにエッジ値をリセットする必要があるだろう*+-&または^最初。しかし、値が印刷される前に、モジュロ256を取っているので、我々は、例えば44、32、又は33に正確な値を設定する必要はありませんQ2にエッジ値を設定します81*10 + 2 = 812であり、44モジュロをとったとき256。このようにして、これら3つの文字のそれぞれに1バイトを保存できます。(残念ながら、それはどこのセルが既に。面白いこと、している値から、単一の数字であり得ることが可能ことはない作品があるo中でWorld、それはまた、から入手することができますのでW9。)

このCJamスクリプト使用して、特定の文字をもたらすすべての文字と数字の組み合わせを見つけることができます

これが最適かどうかわかりません。サイドレングス3の六角形(19文字しか使用できない場合)でそれを行うことはできませんが、32未満のコマンドで、サイドレングス4の六角形で解決できる場合がありますグリッドの最後にノーオペレーションが多いこと。


1
くそー、あなたはそれに私を打った。私自身は、枢機inalに似た六角形の言語に取り組んでいます。
ML

この解決策をどのように見つけましたか?手でまたは総当たりで?とにかく、+ 1 :)
アドナン

1
Q2P0そしてP1非常に賢いです。256を法とする部分は知りませんでした。
アドナン

1
@Adnan GitHubでmod-256パーツを提案した人は、実際にラインフィードをM8;(またはg4;)として印刷できる例とともにそうしました。その変更を加えた後、この答えを再訪することは、今まで私には決して起こりませんでした。
マーティンエンダー

2
注:これは少し前に31に削減されました。H;e;P;2Q/d;l;r/l;$@;o];o;W;03&;
ミッチシュワルツ

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

これはどう?('<;_#"~6Z|{y1UTvt,PrpMo,llj"Fgge{A??P=^t:8&7YtFVqjSQ@PNM)u(I8%$#"D2AA/[TYXQu88MLp3n1Gk.D-ge(92バイト)
dingledooper

37

フーリエ、15バイト

フーリエへの大きな変更!

`Hello, World!`

FourIDEでお試しください!

はい、各文字のASCIIコードを入力する時代は永遠に終わりました。フーリエは文字列サポートするようになりました。文字列をバックティックで囲むと、その文字列が出力されます。

文字列を出力する以外には何もできないことに注意してください。変数に保存することはできません。アキュムレータには保存されず、文字列操作ツールはありません。


ここでは、古いフーリエであった列車の残骸を見つけることができます。;)

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

オンラインでお試しください!

今、あなたのいくつかはおそらく持っているでしょう 以前にフーリエに会ったことがあり、言語にかなり精通しているかもしれません。言語全体は、アキュムレーターに基づいています:ほとんどすべてのオペレーターが使用するグローバル変数。

コードの最も重要な部分は a演算子です。これは、アキュムレータの数値を取得し、Pythonコードを使用して文字に変換しますchr(accumulator)。これは、STDOUTに出力されます。

残念ながら、まだフーリエを使用する機会がありません(nudge nudge主に文字列と文字列演算子がないため wink wink)。そうであっても、他の多くの課題にも引き続き使用できます(EsoLangsページの例のセクションを参照)。

これは、Esolangsリストへの私のエントリよりも短いことに注意してください実際にゴルフをすることができるとは思っていなかったため。そして、フーリエ弦ゴルフの挑戦を書くとき、私はかなり短くすることができることに気づきました。

注意

あなたは、変数の構文に疑問を抱いていた場合、Geobitsは、変数を使用するプログラムを書いた同じ長さですが。

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

オンラインでお試しください!


使用できるものは何ですか?使えるの?
電卓

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
本当に魅力的な言語-私はそれを聞いたことがありませんでしたし、彼らが行っていた(やった)野心的なプロジェクトであることは確かです。しかし、コードゴルフに関しては、競合相手になるとは思いません。私は一顧、この事はに失う...意味のJava ...
AdmBorkBork

11
@TimmyDそれは本当にアセンブラーです。Javaに負ける理由があります... :)
kirbyfan64sos

良い知らせがあります。C--プロジェクト自体はかなり死んでいるように見えますが、1つのバリアントがかなり生きています。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トリックが機能する可能性がある場合を除きます)。それでも、ほとんどのエソランを打ち負かす!


3
別に答える価値はありませんが、完全にISOに準拠したC89およびC99の答えはmain(){puts("Hello, World!");return 0;}#include <stdio.h> int main(){puts("Hello, World!");}それぞれ39 バイトと53 バイトです。main(void)が必要だと思われる場合はもう少し。
Random832

20
@ Random832:前者の場合、main(){return!puts("Hello, World!");}2バイト短くなります。
リン

15
プログラムhは29バイト短くなっています。注:-Dh='main(){puts("Hello, World!");}'私は半分をトローリングしてコンパイルする必要がありますが、半分はコンパイラーの乱用で面白がっています。
マテガ

19
@mategaそれは明らかに不正です。不正行為をしないためには、ファイルに__FILE__(8バイト)のみを含め、ファイルに名前を付ける必要がありますmain(){puts("Hello, World!");}。その後、それは完全に不正行為ではありません;)
C0deH4cker

実際、2017年の規則では、これらはそれぞれ34バイトと38バイトになります。
電卓

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
あなたは何について話していますか?とても読みやすい!
オプティマイザー

19
@Optimizerが修正されました。
デニス

4
まだ読みやすい!(もちろん、私は真実を語っています。なぜ私を信じないのですか?)
オプティマイザー

5
この言語は、サイズと読みやすさの両方の点で、より良いハフマンコーディングの恩恵を受けると感じています。
primo

30

Befunge 9819 18バイト

新しい回答(undergroundmonorailから)

"ck,@!dlroW ,olleH

説明

  • " 文字列モードを開始します
  • 続くものはすべてスタックにプッシュされます。スタックは今Hello, World!@,kc
  • 終わりに達した後、通訳は最初に戻ります
  • "再び出会い、ストリングモードを終了
  • 12がスタックにプッシュされます(c
  • k スタックの一番上の値を取得し、命令ポインタが何度も見ることができる次のコマンドを実行します
  • ,スタックから値をポップし、charとして出力します。最後のk命令で12回実行され、インタプリタが実際に,命令を読み取ったときにもう1 回実行された
  • @ プログラムを終了します

古い答えとの違いは、"Befungeが行末に達したときのループ動作を使用して、文字を巧みに再利用することです。それは直観的ではないかもしれないので、私は古いものも同様にさせています。また、スタックにまだいくつかの文字が含まれていることに気づいたかもしれません(ck,@この素晴らしいトリックのために)ません。

古い答え

"!dlroW ,olleH"ck,@

これはfungeとbefunge 98で機能します

説明

  • 間のすべてが""スタックにプッシュされます。('H'今、一番上にあります。)
  • c (12)スタックにプッシュされます
  • k スタックの最上位の値を取得し、命令ポインターがそれを何度も見ることができる次のコマンドを実行します。
  • ,スタックから値をポップし、charとして出力します。最後のk命令で12回実行され、インタプリタが実際に,命令を読み取ったときにもう1 回実行された
  • @ プログラムを終了します

2
93とは思わないk
-Sp3000

1
まあ、今では98だけが使用できるということcのために93+
-PurkkaKoodari

3
18年:"ck,@!dlroW ,olleH
地下

1
これはヒット"、文字列を開始するには、その文字列にラインの全体の残りの部分を追加し、ラップアラウンドと同じにヒットし"た文字列を終了します。これを除いて、プログラム全体"がスタックにプッシュされ、上になり!dlroW ,olleHました。それから、あなたと同じように上位12文字を印刷し、で停止し@ます。
地下

1
18バイトのソリューションの場合、私のインタープリターは `Hello、World`(先頭のスペース、感嘆符なし)を生成します。アナーキーゴルフインタプリタは(使用形態、Befunge-98を選択し、貼り付けコードは、提出)同じこと。
primo

29

JSFuck6293 6289 6277バイト

これは、最も長い「最短Hello、World!プログラム」の1つとして言及される可能性があります (実際、これが最適であるかどうかはわかりませんが、私が取得した最短です)。

警告: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"エンコードします。

グローバル識別子selfatob、のbtoaように記述されFunction("return self")()ます。

Functionそれ自体がする必要があります[]["fill"]["constructor"]

コンマ","はトリッキーです、私はそれがどのように[]["concat"]機能するか100%確信していませんが、配列を作成するために関数を使用します。さらにテストを行う時間があるときに、更新を投稿します。


JScrewItを使用してこれをエンコードしました。このような洗練されたツールを作成したGOTO 0の功績です。

  • Firefoxを開きます(他のブラウザを選択できますが、Firefoxのみのコードが最短です)。
  • 移動しJScrewIthttp://jscrew.it
  • 入力: alert("Hello, World!")
  • 実行可能コード:チェック
  • 互換性:このブラウザのみ

これは、「Hello」の後にカンマが存在するという点で、この質問に対する私の答えとは異なります。

興味深いことに、ES6構文

alert`Hello, World!`

("およびではなく、2つのバックティックをエンコードする複雑さが高いため、エンコードするのにさらに多くのバイト(+1500程度)が必要です")


それはAndroidのChromeで動作します
ベータ崩壊

OS XのChromeでも動作する
-C0deH4cker

1
あなたはここで素晴らしい仕事をしました!必ず最後の更新を確認してください。
GOTO 0

4
@ GOTO0待って...あなたはJSCrewItの作者ですよね?
私と私の猫

1
これでどのように関数を呼び出すのですか?

29

パダ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

これは線形プログラム(つまり、制御フロー演算子を使用しないプログラム)に最適だと思います ?とを*。全体的に最適かもしれませんが、このような少量のコードでこれらの追加演算子を使用する方法(またはプログラムで可能性を探索する方法)はわかりません。

この言語は、著者とメールで話し合い始めてから、最近いくつかの変更が加えられています。しかしながら、リファレンス実装を作成しました先週、言語仕様の現在の状態のをため、上記のコードは実際に実行可能です。

メタゴルフ

もともと、私はこのチャレンジにリファレンス実装の出力を使用し、それに基づいて手作りのソリューションを作成していました。ただし、それは単なるヒューリスティックなアプローチでした。

その代わりに、最適なソリューションを見つけるためにPadaデータ構造と演算子を実際に知っているMathematicaでソルバーを作成しました。平均して、文字列の長さに比例して増加します(ただし、一部の文字の組み合わせは他の文字の組み合わせよりも少し遅くなります)ため、約1.5時間かかりましたHello, World!

それで、ソルバーをどのように書きましたか。最初に、6つの演算子~.oOqQ(およびw各印刷文字に必要なもの)のみを考慮する必要があることに気付きます。スタックまたはビットロックを使用することは、線形コードでは有用ではありません。?*未満68バイトで効果的に使用することができます。

Padaの状態(スタックとロックを無視)は、次のように配置された7つのスイッチと8ビットで構成されます。

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

だから〜だ 215 = 32768可能な状態です。私の最初の前処理ステップは、各エッジが単一の操作に対応する状態の有向グラフを設定することでした。つまり、グラフには32768個の頂点があり、各頂点には次数6(検討中の6つの操作ごとに1つの出力エッジ)があります。このグラフを使用して、2つの状態間の最短経路を見つけることができます(このグラフだけでも、Padaのゴルフに非常に役立ちます)。

次に、各キャラクターについて、wそのキャラクターを印刷する状態に到達したいと考えています。そのような州はいくつありますか?w(周期的に)ドロップされたビットからバイトを読み取ります。したがって、すべての文字を印刷できる文字のビットの8つの可能な回転があります。これらの回転ごとに、3つのスイッチが固定さwれています(正しい位置にドロップするため)。これにより、4つの任意のスイッチが残ります。したがって、コードにはそれぞれの状態があります。8 * 24 = 128w

これらを使用して、別のグラフの問題を解決できます。ソース頂点、次に各文字の1つの「レイヤー」、およびシンク頂点を持つグラフを作成します。レイヤーは各頂点の128の状態で構成され、ソースノードはプログラムの初期状態に対応します(左へのスイッチはすべて、ビットはすべてゼロです)。シンクノードは特に状態に対応しません。1つのレイヤーのすべての頂点から次のレイヤーのすべての頂点にエッジを向けました。エッジの重みは、前のグラフの2つの状態間の距離です。最後のレイヤーからシンクまでのエッジの重みはすべて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で別の文字列をメタゴルフしたい場合の完全な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]) <> ""

=)でメタゴルフを行う興味深い言語。これは、あなたの日課は何ですか?オブジェクト指向
justhalf

4
@justhalf私は現在、修士号と博士号の研究の中間にいます(もしそれがあなたの含意であるなら、私は間違いなく私の手に余りにも多くの時間を持っています;))。(これは一般的にチャットの議論の詳細です:))
マーティンエンダー

パダとは、インドネシア/マレー語でバハサを意味します。それは関連していますか?
-XiKuuKy

@XiKuuKy afaik、この言語はクロアチア語で「落下」を意味するため、Padaと呼ばれます。
マーティンエンダー

そして、この回答(こちらをご覧ください)。この素晴らしいHello Worldの問題を一般的に説明するには、2つの回答を1つにまとめることができます。
ビタリーカウロフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.