「Hello、World!」(他のすべてのキャラクター、パート2)


18

Hello、World!のパート2として (他のすべての文字が)、というようなプログラムを書く3つのすべてのこれらのプログラムの印刷「こんにちは、世界!」:プログラム全体、第一、第三、第五、などあなたのプログラムの文字及び第二、第四、第六、等

プログラムが次の場合:

abc
def

「Hello、World!」と出力されるはずですが、そうであるべきです

acdf

そして

b
e

「Hello、World!」が組み込まれたソリューションはありません。


6
テキストを「Hello、World!」から変更しないでください。他に何か?
コナーオブライエン

1
それは抜け穴を十分に避け、「Hello、World!」正規です。
レオテネンバウム

24
IMO「Hello、World!」とは異なる文字列が表示されると便利です。
時々

1
空白と改行は文字としてカウントされますか?
officialaimm

6
@ ConorO'Brien文字通り他のすべての文字列に組み込まれている言語はほとんどないという心地よい副作用があります。
デニス

回答:


24

x86マシンコード、378バイト

demo

PROG.COM MS-DOSエミュレーター、たとえばDOSBoxダウンロードして実行します。

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

LEFT.COMRIGHT.COMもダウンロードできます

仕組みと実行方法

パート1の回答を見る

マジック

1つのパラメーター0xCD0xAB opcodeコマンドを実行する場合、次のように記述します。

Magic

発生器

コードを実行し、16進数を取得します。バイナリに変換

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


13

Python 3、115バイト

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

すべての奇妙なキャラクター

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

すべての偶数文字

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

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

これはおそらくもっと短くなる可能性がありますが、Pythonで動作させることができてうれしいです。最初の部分のvroomfondelの答えに似ています。

退屈な93バイトの回答

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

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

すべての奇妙なキャラクター

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

すべての偶数文字

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

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


9

> <>、45バイト

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

または単なる文字:

 "!dlroW olleH"!">o<  

または奇妙な文字:

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

オンラインで試してください:originalevensodds

元のバージョンは「!!ddllrrooWW oolllleeHH」をスタックにプッシュし、次に魚がをバウンスします>~o <。これにより、文字の削除、2つの印刷、2つの削除、2つの印刷、2つの削除などが行われます。トリッキーな部分は、3つすべてのプログラムで文字列モードを組み合わせ"たり!、切り替えたりすることでした。


7

Befunge-98、43バイト

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

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

奇妙なものだけ:

10x"!dlroW ,olleH"ck,@

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

偶数のもののみ:

2 "!dlroW ,olleH"ck,@

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

説明

完全なプログラム:

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

奇妙なプログラムでは、2はなくなっているため、10x実際には何もしません((1,0)とにかくデフォルトのデルタを設定します)。プログラムの残りの部分は同じです。

偶数プログラムでは2、最初にプッシュするだけで、完全に無視できます。プログラムの残りの部分は以前と同じです。



5

Mathematica、65バイト

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

いくつかの警告をスローし、出力しHello, World!、リターンしますNull PPrriinntt[["" HHeelllloo, Null, "" WWoorrlldd!!]]。(REPLではなく)プログラムとして実行すると、戻り値は出力されません。

偶数文字を削除した後:

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

印刷しHello, World!、返します"el,Wrd" Null Pit

奇数の文字を削除した後:

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

印刷Hello, World!して戻りますNull ol! rn[Hlo]


5

x86マシンコード、73バイト

ЕвгенийНовиковからの着想のソリューション、私はそれだけですべての3つのバリエーションのためのそれ以外の場合は『互いに素』コードに周りのジャンプ、すなわち少ないトリック、となんとかべきであると思いました。私はまだlodsb; lodsb中心点として使用するスマートなバリアントを試しています(したがって、すべてのバリアントに必要な文字列定数は1つだけです)

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

私が子供の頃から正しく思い出せば、COMの小さなモデルはから始まりDS=CS=SS、コードはCS:0100hます。コードがゼロのメモリブロックにロードされることが保証されているとは思いません(保証されている場合、2バイトをドロップできます)。

長いコードの分解は

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

奇数コードの分解

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

偶数コードの分解:

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

よくやった!DOSBoxプログラムでは動作しません。起動時にこのコードフリーズシステムでcomファイルを使用する理由はわかりません。
ЕвгенийНовиков

次回コードをテストします。8A0116にはする必要がありますBA代わりに、文字列がで終了し$、ないNULL。
NieDzejkob

4

網膜、48バイト

G |`

HHeelllloo,,  WWoorrlldd!!
$_&

(.)\1t?
$1

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

奇数の位置:

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

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

偶数ポジション:

 `
Hello, World!$&
.\t
1

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

説明

完全なプログラム:

G |`

これは何もしません。これ|は既存の構成オプションではありません。これGによりgrepステージになりますが、grepを実行するものは実際には何もなく、正規表現は空なので、これは何もしません。このステージの目的は、メインの「Hello、World!」の前に2つの改行を入れることです。それらのいずれかが常に削減を生き残るようにライン。これをgrep stagにする理由は、行のパリティをオフセットする必要があり、grepステージでは1行しか必要ないためです。


HHeelllloo,,  WWoorrlldd!!

これにより、(空の)作業文字列が必要な出力に変換され、各文字が2倍になります。

$_&

これは何もしません。正規表現は、文字列の末尾のa _とa を一致させようとし&ますが、これはもちろん不可能です。ただし、ラインの消失に対処するために、縮小版ではこれらのキャラクターが必要になります。

(.)\1t?
$1

最後に、で置き換えること(.)\1で重複文字を削除し$1ます。t?使用されることはありませんが、再び減少のバージョンで必要になります。

奇妙なプログラム:

G|
Hello, World!

G空の入力と一致することはできませんが、我々が持っている理由です|代替空の試合を許可します。これにより、空の作業文字列が目的の出力に変わります。

_
()1?$

これはアンダースコアを()1?$に置き換えますが、文字列にはアンダースコアがないため、何もしません。

偶数プログラム:

 `
Hello, World!$&

`単に空の構成文字列を示しているため、再び空の正規表現を使用して作業文字列を出力に置き換えます。今回も挿入します$&が、それ自体が一致であり、もちろん空なので、何もしません。

.\t
1

これにより、タブに続く任意の文字がに​​置き換えられますが、タブ1はないため、これも操作なしです。




2

PHP、70バイト

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

奇数文字:

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

偶数文字:

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

2

Haskell、92バイト

{---- }

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

オンラインでお試しください!コメントの乱用は、構文の強調表示で処理するには多すぎるようです。{- ... -}インラインまたは複数行のコメントですが、--開始するの行のコメントです。

奇数文字:

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

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

偶数文字:

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

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


2

Zsh、54バイト

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

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

メインプログラムは最初のステートメントを正常に実行するため、ブール値の後のステートメント||は無視されます。

奇数/偶数の場合、は標準入力で終了または提供の<<<Hello\ world!いずれかになります。いずれにしても、はになり、最初のコマンドによって出力されたものはすべてにパイプされ、無視されます。<<heredoc<file|||echo


1

ロゴ、71バイト

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

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

(プログラムの末尾には改行があります)

削除された2つのバージョン:

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

そして

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

(プログラムの末尾には改行があります)

何の説明についてはprer行う、参照この記事を。この場合、erワードはプロシージャ名を決定するフィードです。

これ\は、ロゴのエスケープ文字です。コメントの終了後に改行をエスケープするため、2 rHlo ol!e |番目に削除されたプログラムの2行目()をコメントにします。


1

Javascript、68バイト

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

奇妙なキャラクター:

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

偶数文字:

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

私の答えのもう一つの修正版。


1
なぜ最初にスペースが必要なのですか?
電卓

これは、1番目、3番目などの文字を使用する場合、構文的に有効ではないようです。また、linが欠落していHHeellllooます。
アーナルド

@ CalculatorFeline、@アルノー固定
SuperStormer


1

BotEngine180 178バイト

この質問に対する私の答えに基づきます。

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

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

奇数文字(最後の行に複数の末尾スペースがあることに注意してください):

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

偶数文字:

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

0

ルーン文字のエンチャント、52バイト

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

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

Runicは、フロー制御文字をランダムに削除すると、実行のトレースが非常に苦痛になりますが、他のすべての文字と同様に予測可能な放射であるため、通常、放射線の処理にはあまり適していませんか?簡単です。2つのプログラムを互いに逆向きにインターリーブしてエンコードし、その後、3番目のコピーを追加して基本実行を行い、どちらを1つの文字で実行するかを制御します。プログラム2では、3番目のコピーは決して見られないごみであり、プログラム3では引用符を保持するため、印刷せずにポップできます。

プログラム1はこの部分のみを実行します。

 L                                  @"!dlroW ,olleH"

プログラム2はこの部分のみを実行します。

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

このような:

  "Hello, World!" @!lo olH

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

プログラム3はこの部分のみを実行します。

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

このような:

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

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

この"drW,le"部分は実行されますが、~すぐにスタックからポップされ、目的の出力が保持されます。

単純に、> <>回答を変換すると、プログラムが短くなり、45バイトになります:

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

ただし、Runicには、> <>にはない制限が1つあります。最大スタックサイズは10 + IPのマナ(最初は10)です。また!!ddllrrooWW oolllleeHH、24文字が含まれているため、Rコマンドを実行する直前に期限が切れるまでIPからマナが流出し、ベースプログラムの出力がなくなります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.