「Hello、World!」を出力するプログラムを作成します。ただし、プログラムの最初、3番目、5番目などの文字のみを使用する場合も、結果のプログラムは「Hello、World!」を出力するはずです。
プログラムが次の場合:
abc
def
「Hello、World!」と出力されるはずですが、そうであるべきです
acdf
2文字未満のソリューションはありません。
「Hello、World!」を出力するプログラムを作成します。ただし、プログラムの最初、3番目、5番目などの文字のみを使用する場合も、結果のプログラムは「Hello、World!」を出力するはずです。
プログラムが次の場合:
abc
def
「Hello、World!」と出力されるはずですが、そうであるべきです
acdf
2文字未満のソリューションはありません。
回答:
rant="partisn't"
print(("HHeelllloo,, WWoorrlldd!!"""[::2]))
print
Python 3の関数であるという事実を悪用する:)
PPCGでここにある最もパルチザンなソリューション。
になる
rn=print
rn("Hello, World!"[:])
[:]
実際に働いたとは知りませんでした:oいいね!
%
"
H
e
l
l
o
,
W
o
r
l
d
!
他のすべての文字を削除すると、すべての改行が削除されHello, World!
ます。
%"Hello, World!
これが機能する理由%
は、4つの基本方向のそれぞれに移動する4つの命令ポインターを作成するためです。ソースコードを残すIPは単に削除されます。したがって、最初のケースでは南に行くIPのみが残り、2番目のケースでは東に行くIPのみが残り、他のすべては単にドロップされます。どちらの場合でも、実行されたプログラムはちょうど"Hello, World!
です。"
各セルは単にSTDOUTに印刷される文字列モードにトグルします。ソースコードを残すとプログラムが終了するため、文字列を終了する必要はありません。
同じアイデアがBeeswaxでも機能することに注意してください。*
代わりに%
との`
代わりに使用します"
(これはBeeswaxが主にCardinalに触発されたが、六角形のグリッドを使用しているためです)。
オンラインでお試しください!(垂直)| | オンラインでお試しください!(水平)
xpxuxtxs( ) { }xuxs ( ) { } main( ) {puts ( "Hello, World!" ) ; } mxaxixn ( ) {xpxuxtxs ( " H e l l o , W o r l d ! " ) ; }
偶数文字を削除した場合:
xxxx(){}us(){}mi(){us("el,Wrd");}main(){puts("Hello, World!");}
HH
説明:
H
、ご想像のとおりHello, World!
、スタックにプッシュします。
メインプログラム(HH
)は最初のプログラムに遭遇し、スタックにH
プッシュHello, World!
します。H
ただし、2番目では、2つの引数を使用しようとし(スタックをプッシュするには空にする必要があるためHello, World!
)、失敗します。ただし、このエラーは無視され、Hello, World!
暗黙的に出力されます。
2番目のプログラム(H
)はHello, World!
1回プッシュされ、暗黙的に出力されます。
これはFatalizeの2バイトの答えに似ていますが、これは実際には「チート」ではありません。
H
プッシュするだけHello, World!
であり、スタックが空でない場合、2つの引数を期待するため、エラーが発生し、エラーは無視されます。実際、最上位の要素のみを暗黙的に印刷するわけではありません。
--- [ [
print("Hello, World!")
--[[ ] ]
pCrAiLnCtU(L"AHTeOlRlFoE,L IWNoEr:lDd !:"D)
---]]
オンラインでお試しください!構文の強調表示が示すように、これは大量のコメントの乱用です。
代わりの:
--[[pit"el,Wrd"
-[]]print("Hello, World!")--]
そして、便宜上、プログラムを他のすべての文字形式に変換するプログラム:オンラインで試してみてください!
HHeelllloo WWoorrlldd!!
ちょっと退屈です:P
HHeelllloo,, WWoorrlldd!!
(.).x?
$1
他のすべてのキャラクターを取得すると、以下が得られます。
Hello, World!
()x
1
最初のプログラムは、グリーティングを複製した文字列を作成します。次に、文字の各ペアを最初の文字に置き換えます。すべての空の文字列をその間にある空の文字列に置き換える空のステージもありますが、それは何もしません。2番目のプログラムは、文字「x」と一致しないため、グリーティングの作成後に何も置き換えられません。
おそらくもっと面白いことに、3番目の段階がわずかに変更された場合、最初の文字セットは同じメッセージである必要はありません。これは、fullやhalfedなど、多くの同一の長さのソリューションにつながる可能性があります。
H→e→l→l→o→,→ →W→o→r→l→d→!
偶数文字を削除する場合、次のテキストの方向を示す矢印コマンドを削除するだけで、次のコードが残ります。
Hello, World!
それはまた挨拶を印刷します。
{--}main=putStr"Hello, World!"--} m a i n = p u t S t r " H e l l o , W o r l d ! "
1文字おきに削除:
{-mi=uSrHlo ol!-}main=putStr"Hello, World!"
これは、Haskellの2つのコメント形式を活用します。{- -}
インラインまたは複数行のコメント用と--
、残りの行のコメント用です。
/**/alert`Hello, World`// * / a l e r t ` H e l l o , W o r l d `
1文字おきに削除:
/*aetHlo ol`/*/alert`Hello, World`
LaikoniのHaskellの答えと同じように、これはコメントを悪用します。
// * /
た//**/
(残念ながら/**/alert`Hello, World`
、私の場合のように奇数のバイトであるため、これは不可能です)。
Ḥ~wḤ
~w
右側の変数をに書き込み、STDOUT
左側の引数を無視します。Ḥ
です"Hello, World!"
ので、これは印刷されHello, World!
ます。
1番目と3番目の文字だけを取得すると、が得られḤw
ます。その場合w
、左の変数を書き込み、右の変数を無視するため、を出力しHello, World!
ます。
ḤḤ
これは技術的には有効な答えですが、これはに出力するのではなく、プログラムの出力変数を統一しますSTDOUT
。したがって、4バイトのプログラムは挑戦の精神にあると思います。
完全なプログラム:
main= putStr"Hello, World!";;
putSt x ="p u t S t r \" H e l l o , W o r l d !\"";
mmaaiin = main
そして、他のすべての文字を削除した場合:
mi=ptt"el,Wrd";ptt x=putStr "Hello, World!";main=mi
p u t S t r
との間のスペースを削除することにより、2バイトを削除できます\"
。
PROG.COM MS-DOSエミュレーター、たとえばDOSBoxでダウンロードして実行します。
90 B3 B4 B4 02 90 90 B3 B2 B2 48 90 90 B3 CD CD 21 90 90 B3 B2 B2 65 90
90 B3 CD CD 21 90 90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 CD CD 21 90
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 2C 90 90 B3 CD CD 21 90
90 B3 B2 B2 20 90 90 B3 CD CD 21 90 90 B3 B2 B2 77 90 90 B3 CD CD 21 90
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 72 90 90 B3 CD CD 21 90
90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 B2 B2 64 90 90 B3 CD CD 21 90
90 B3 B2 B2 21 90 90 B3 CD CD 21 90 90 B3 CD CD 20 90
削除後MINI.COM ダウンロード
90 B4 02 90 B2 48 90 CD 21 90 B2 65 90 CD 21 90 B2 6C 90 CD 21 90 CD 21
90 B2 6F 90 CD 21 90 B2 2C 90 CD 21 90 B2 20 90 CD 21 90 B2 77 90 CD 21
90 B2 6F 90 CD 21 90 B2 72 90 CD 21 90 B2 6C 90 CD 21 90 B2 64 90 CD 21
90 B2 21 90 CD 21 90 CD 20
Ubuntu / Debian用のDOSBoxをインストールします
sudo apt install dosbox
それを実行します
dosbox
DOSBOXで
mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM
機械操作コードは、アセンブリ言語命令を表します。
MS-DOSで文字を出力するには、レジスタを設定して割り込みを作成します。AHレジスタは0x02になり、DLレジスタには文字が含まれます。割り込みベクトルは0x21です。
mov ah,0x2 ;AH register to 0x2 (B4 02)
mov dl,0x48 ;DL register to "H" (B2 48)
int 0x21 ;0x21 interrupt (CD 21)
MS-DOS COMファイルの小さなモデルは適切な選択です。ヘッダーがないためです。64Kに制限されていますが、この場合は重要ではありません。
プログラムを停止するには、0x20割り込みを使用します
int 0x20 ;0x20 interrupt (CD 20)
1つのパラメーター0xCDで0xAB opcodeコマンドを実行する場合、次のように記述します。
AB CD
ではPROG.COM
90 B3 AB AB CD 90
nop ; No operation (90)
mov bl,0xb4 ; BL register to AB (B3 AB)
AB CD command (AB CD)
nop ; No operation (90)
ではMINI.COM
90 AB CD
nop ; No operation (90)
AB CD command (AB CD)
BL registerを使用しない場合、マシンコードは同じです。
16進数のテキストファイルを16進数のバイナリに変換する
cat hex_file | xxd -r -p > exec.com
p% 2"HHeelllloo,, WWoorrlldd!!
になる
p "Hello, World!
エラーを指摘して1バイトを削除してくれた@CalculatorFelineに感謝します。
i;H;e;l;l;o;,; ;w;o;r;l;d;!;<esc>;Ó;
<esc>
が単一の文字であることに注意してください、例えば0x1b
他のすべてのキャラクターを削除すると:
iHello, world!<esc>Ó
”™ ,ï‚‚ï ! ”# ¦2 ä ø¨øJð ý
説明
”™ ,ï‚‚ï ! ” # push the string "Weekly Hello , Changed World ! "
# # split on spaces
# RESULT: ['Weekly','Hello',',','Changed','World','!','']
¦ # remove the first element (Weekly)
2ä # split in 2 parts
# RESULT: [['Hello', ',', 'Changed'], ['World', '!', '']]
ø # zip
# RESULT: [['Hello', 'World'], [',', '!'], ['Changed', '']]
¨ # remove the last element
ø # zip
# RESULT: [['Hello', ','], ['World', '!']]
J # join each inner list
ðý # join on space
他のすべての文字を削除すると、コードが残ります
”Ÿ™,‚ï!” 2äøøðý
説明
”Ÿ™,‚ï!” # push the string "Hello, World!"
2ä # split in 2 parts
# RESULT: ['Hello, ', 'World!']
ø # zip, as the string has an odd length the space is lost
# RESULT: ['HW', 'eo', 'lr', 'll', 'od', ',!']
ø # zip again
# RESULT: ['Hello,', 'World!']
ðý # join on space
““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »
1文字おきに削除すると、次のコードが残ります。
“3a;»“3ḅaė;œ»
““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ » Main link.
““3ḅaė;œ» Index into Jelly's dictionary to yield
["", "Hello, World!"].
“ 3 ḅ a ė ; œ » Index into Jelly's dictionary to yield.
" FullERebitingBEfluffiest adoptable".
ḷ Take the left result.
“3a;»“3ḅaė;œ» Main link.
“3a;» Index into Jelly's dicrionary to yield " N-".
Set the argument and the return value to the result.
“3ḅaė;œ» Index into Jelly's dicrionary to yield "Hello, World!".
Set the return value to the result.
+0503 @@6 :22 //1 +050501 @@6 :55 +0502 @@6@6 :33 //1 +050502 @@6 :55 +03 //1 +04 @@6 :55 //1 +03 @@6 :55 +01 //1 +0504 @@6 :33 //1 +050502 @@6 :55 +01 //1 +050502 @@6 :55 +0502 @@6 :11 //1 +050501 @@6 :55 +01 //1 +03 @@6
他のすべての手紙:
+53@6:2/1+551@6:5+52@66:3/1+552@6:5+3/1+4@6:5/1+3@6:5+1/1+54@6:3/1+552@6:5+1/1+552@6:5+52@6:1/1+551@6:5+1/1+3@6
Hi
H
プリントはHello, World!
、i
何もしません。
助けて、WarDoq!2つの数値を追加して素数をテストできるため、このメタ投稿ごとに有効なプログラミング言語と見なされます。
Octaveはインデックス作成にブラケットを必要としないため、4バイトを節約しました。
'HHeelllloo,, WWoorrlldd!! ' (1:2 : 3 ^ 3)''
そして、削減されたもの:
'Hello, World!'(: )'
最初のコードには、文字列内の文字が複製されているためHello, World!
、1秒ごとに削除されるときに残ります。ブラケットとアポストロフィが保持されるように、いくつかのスペースが追加されます。
インデックスは本当に1:2:end
です。27文字あり、使用できないend
か27
、文字を削除する必要があるため、3 ^ 3
代わりに使用します。3文字ごとに削除すると、インデックス付けが(:)
(およびいくつかの追加スペース)になります。
(:)
「平坦化して垂直ベクトルに変換する」ことを意味します。そのため、を使用して転置する必要があり'
ます。元のコードで文字列を転置する必要はありませんが、二重転置は機能するため、最初の文字列はを使用''
して2回転置され、2番目は1回だけ転置されます。
-1 Martin Enderに感謝します。
'0H0e0l0l0o0,0 0W0o0r0l0d0!0'~ ⍕ 0
'0H0e0l0l0o0,0 0W0o0r0l0d0!0'
削除可能なフィラー文字としてゼロを含むメッセージ
~
を除く
⍕
フォーマット済み(文字列化)
0
ゼロ
奇妙な文字だけを残して、これはになり
'Hello, World!'
ます。
---
PRINT 'Hello, World!'
/*
-P-R-I-N-T-'-H-e-l-l-o-,- -W-o-r-l-d-!-'
---*/
CalculatorFelineのLUAバージョンに触発された、単一行および複数行のコメントの乱用。
すべての偶数番号の文字を削除した後、そのうちのいくつかは改行です:
--PIT'el,Wrd'/
PRINT'Hello, World!'--/
a ='a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/';eval(a.replace(/0/g,''))
文字列を作成しa
たコンテンツをa0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/
、すべて削除されます0
「が与える秒alert`Hello, World!`//
である、eval
D」。
プログラムの他のすべてのキャラクターを取得すると、
a=alert`Hello, World!`//;vlarpae//,')
これHello, World
は、完全なプログラムで評価されたものと同じ方法でテンプレート文字列構文を使用して警告し、呼び出しの結果を保存しa
、洞察に富んだコメントを含め//;vlarpae//,')
ます。
元の:
| v~" H e l l o , W o r l d ! "
~o<< ;!!!? l
1文字おきに削除:
|v"Hello, World!"
o<;!?l
元のプログラムは、「Hello、World!」のキャラクターをプッシュします スタックに(逆順で)スペースを散在させてから、スタックの長さがゼロになるまで文字を交互に印刷して削除します。2番目のプログラムも同じことを行います~
が、削除の指示はなくなります。
エラーで停止することを気にしない場合は、Martin EnderのCardinalブックからリーフを取り出すことができます。変更されたコードは
\"!dlroW ,olleH"!#o#
元の文字は同じですが、39バイトの場合、すべての文字の間に改行が挿入されます。それらをオンラインで試してください:original、modified。
2"Hteoltlaol,l yWhourmladn!! "⟛
偶数番号の文字を削除するには...
"Hello, World!"
すべての文字で:
2"..."⟛
no-op
2 push 2 to the stack
"..." push "Hteoltlaol,l yWhourmladn!! " to the stack
⟛ pop 2 and the string and push every 2nd character of the string
implicit output
偶数文字なし:
"..."
no-op
"..." push "Hello, World!" to the stack
implicit output
- - < - < < + [ + [ < + > - - - > - > - > - < < < ] > ] < < - - . < + + + + + + . < < - . . < < . < + . > > . > > . < < < . + + + . > > . > > - . < < < + .
1文字おきに削除:
--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.