テキスト「Hello World」を表示する、最短の難読化プログラムを作成します。
難読化されたプログラムと見なされるには、次の要件のうち少なくとも2つを満たす必要があります。
- 文字が含まれていません:
h
、l
、w
そしてd
どのような場合には - :文字が含まれていません
e
、o
、r
、0
、そして1
どのような場合には - 文字が含まれていません:
2
または7
入力:
なし
出力:
Hello World
72
あり"H"
、私はそれらの2を選んだ理由である
テキスト「Hello World」を表示する、最短の難読化プログラムを作成します。
難読化されたプログラムと見なされるには、次の要件のうち少なくとも2つを満たす必要があります。
h
、l
、w
そしてd
どのような場合には e
、o
、r
、0
、そして1
どのような場合には 2
または7
入力:
なし
出力:
Hello World
72
あり"H"
、私はそれらの2を選んだ理由である
回答:
'・š““ ??ߨ????”›' {〜}%
この送信をテストするときは、ファイルをUTF-8ではなくストレートバイナリとして保存してください。ファイルの再作成に問題がありますか?以下がその16進ダンプです。
00000000 27 b7 9a 93 93 90 df a8 90 8d 93 9b 27 7b 7e 7d |'...........'{~}|
00000010 25 |%|
明らかな答えはある種のシフトを使用しているので、Acme :: EyeDropsを使用して何かを投稿する義務がありますが、余分な力があれば、私のものはもう少し楽しいはずだと思いました。
''=~('('."\?".
'{'.('`'|'%').('['^'-'
).('`'|'!'). ("\`"| ','
).'"'.('['^'.'). ((( '['
))^'(').('`'|('%')).( '{'
^'[').('{'^'/').('`'|')') .+(
'`'|'-').('`'|'%').':'.':'.( '`'
^'(').('`'|')').('{'^')').( '`'
|(( '%'))).('['^'(').'\\'.'"' .+(
'[' ^'.').('['^'(').("\`"| ','
).( '`'|'%').('`'|"\%").( '['
^(( '+'))).'\\'.'"'.';'. (((
((( '\\')))))).('$'). '|'
.(( '+')).'+'.(';'). (((
((( '\\')))) ) ).+
'$' .'\\'. '"'
.(( '=') ). "'". "'"
.(( (';'))). '\\' .((
'@' )).('`'| '#'
).+ '=' .+(
'`' |+ "\-").( '`'
|(( '!'))).("\["^ '+'
).+ '\\'.'{'."\[". (((
((( '\\'))))))."\$". '_'
.(( ',')).'\\'.'$'.('`'| '*'
).+ ','.('^'^('`'|('+'))).( '^'
^+( '`'|'.')).'+'.('^'^('`' |((
'+' )))).'*'.'\\'.('$').( '`'
|(( '*'))).'+'.'+'.']'. (((
((( '\\'))))))."\}".( '['
^(( '('))).('['^'+') .+(
'`' |',').('`'|')') .+(
'[' ^'/').('/'). '/'
.(( ',')).'\\'. '"'
.+( '`'^'('). (((
'`' ))|'%') .+(
'`' |','). (((
'`' ))|',' ).(
'`' |'/') .+(
'{' ^'[' ).(
'{' ^(( ','
))) .( ( '`'
)|+ (( '/'
))) .+(
'[' ^((
')'))).(('`')|
',').('`'|'$')
.(( '\\')).'"'.
';' . ('['^',').(('`')|
'(' ). ('`'|')').('`'|',').(
'`' |'%').'('.('^'^('`'|'/'))
.(( ')')).'\\'.'{'.('`'|'-').('['^
'"' ).(( ( '\\'))).'$'.('`'|('*')).
';' .+( ( ( '`'))|'-').('['^('"')).
'\\' .+ '@'.('['^'(').'='.("\`"|
'-'). ('`'|'!' ).('['^'+').'\\'.'{'.
"'".( '{'^"\["). (( "'")).'\\'.'}'.('(').(
'^'^( '`'|'.')).'.'.'.'.('^'^('`'|'+')).('^'^('`'|
'.')) .')'.';'.('`'|'&').('`'|'/').('['^')').'('.'\\'
.'@' .('`'|'#').')'.'\\'.'{'.'\\'."\$".( '['^"\(").
'[' .'\\'.'$'.'_'.'-'.'>'.'['.('^'^('`' |',') ).+
']' .']'.'='.'\\'.'$'.'_'.'-'.'>'."\[".( '^'^ (((
'`' ))|'.')).']'.('`'|')').('`'|('&')). ((( (((
((( '\\'))))))))).'$'.'_'.'-'.'>'.'['. +( '^'
^+( '`'|',')).']'.'<'.'='.('^'^('`'| ( ( '+'
))) ).('^'^('`'|'.')).';'.'\\'.'$'.'_'. ( ( '-'
)). '>'.'['.('^'^('`'|'/')).']'."\>". ( (((
((( '\\') )))))).'$'.'_'.'-'.'>' .((
'[' )).('^'^('`'|(','))). ']'
.(( '?')).'\\'.'$'.('`'| '*'
).(( '+')).'+'.':'.'\\'. '$'
.('_'). '-'.'>'.'['.('^'^ (((
'`'))|',' )).']'.'-'."\-". (((
'\\'))).+ '}'.('['^'+').( '['^
"\)").( '`'|')').("\`"| ( '.')
).('['^ '/').'\\'."\"". (((
'\\')) ).'\\'.('['^')' ) .((
'\\')). '@'.('['^"\("). (( (((
'\\')) ))).'"'.';'.( '[' ^ '.'
).('[' ^'(').('`'| (( ( ','
)))). ('`'|'%') . (((
'`') )|'%').( '['
^(( '+'))) .((
'(' )). (((
'^' ) )^(
'`' | '/'
)). ('`'
|(( '%'
))) .+(
'^' ^+(
'`' |((
'+')))).(')').
';'.('`'|',').
('`'|'!').('['^ '('
).('['^'/').(('{')^ '['
).('`'|')').("\`"| ( '&'
)).'\\'.'$'.('`'|"\*"). '='
.'='.'\\'.'@'.('`'|"\#"). (((
'\\'))).'}'.('['^'+').('['^ ( ')'
)).('`'|')').('`'|'.').('['^ ( '/'
)).'\\'.'"'.'\\'.'\\'.('`' |+ '.'
).'\\'.'"'.('!'^'+').'"'.'}'. ')' );(
$:)='.'^'~';$~='@'|'(';$^=')'^ '['
;$/='`'|'.';$,='('^'}';$\="\`"| '!'
;$:=')'^'}';$~='*'|'`';$^=('+')^ '_'
;($/) ='&'|'@';$,='['&'~';$\ =((
"\,"))^ '|';$: ='.'^'~'; $~ =((
'@'))| "\("; $^=')'^ '['
;($/)= '`'| '.';$, =((
'(') )^+ '}';$\ =((
'`') )| "\!"; ( ( $:)
)=')' ^+ ( ( ( ( '}'
)))); ( ( ( $~)
))=( ( ( ( ( '*'
)))) ) | (( ( '`'
))) ; $^= ( '+'
)^+ (( (( (( '_' )))
))) ;($/) =((
'&' ) ) |'@'; $,=
'[' &((
'~' )) ; $\=
',' ^"\|"; $: =((
'.' ))^"\~"; $~= '@'
|(( '('));$^=')'^ ( '['
);( $/)='`'|"\.";$,= ( '('
)^+ '}';$\='`'|'!';$: =((
')' ))^'}';$~='*'|'`' ;$^
=(( '+'))^'_';$/='&' |((
'@' ));$, =('[')& '~'
;$\ =','^ '|'
;$: =( (( '.'
))) ^+ '~'
;$~ =( '@'
)|+ '('
;$^ =((
')' ))^
'[' ;$/
='`'|('.');#;#
警告
Perlバージョン5.18以降、このコードの実行を許可するメカニズムは非常に強力になり、誤用を防ぐためにデフォルトで無効になっています。したがって、バージョン5.18以降use re 'eval';
では、スクリプトの先頭に追加するか、スクリプトに名前が付けられているworld.pl
場合は、次のように実行できますperl -Mre=eval world.pl
。これらの見苦しいキャラクターを追加しなければならないのは残念ですが、そうではありません。(注:この機能を有効にするとライブラリまたはアドオンが使用されず、表示されるコードは有効なPerlコードであり、メカニズムはデフォルトで有効にならないことを強調したい)。
(?{ code })
を使用して、正規表現の照合中にカスタムPerlコードを評価します。カスタムPerlコードがメッセージを出力します。ルールに違反しないのでいいです。
C#でこれを行うことは非常に困難でした。制限により、非常に多くの一般的なキーワードの使用が禁止されているためです。C#では、識別子に\ uxxxx Unicodeエスケープシーケンスを使用できますが、残念ながらキーワードには使用できません。
このソリューションは、.NET 4.0に対してコンパイルされた場合にのみ機能すると思われます。理由の説明を参照してください。
using System;struct a{static int Main(){object[]c={"\u0048e\x6c\x6co "+(C\u0068ar)(86+1)+"or\x6c\x64"};typeof(Conso\u006ce).GetMet\u0068o\u0064s()[101].Invoke(c,c);return 0;}}
// I won’t be able to get anywhere without using “System”.
// Even if I write it as “Syst\u0065m”, it still violates rule 2.
// Therefore, that is the rule we’ll violate.
using System;
// Thus, we can’t use: H L W D 2 7
// We can’t write “class”, so the Main type must be a struct.
struct a
{
// We can’t write “void”, so Main needs to return an int.
static int Main()
{
// We can’t write “new”, but we can instantiate an array
// using the initialisation syntax.
object[] c = {
"\u0048e\x6c\x6co " + (C\u0068ar) (86 + 1) + "or\x6c\x64"
};
// We can use the character escape sequence to write “Console”, but not
// “Write” because W is \u0057, which contains a 7. Therefore, we have to
// use Reflection to get it. This relies on the fact that Console.Write(string)
// is the 102nd method of the type Console in my copy of the framework.
// Also, the first argument to Invoke can be anything for a static method
// (needn’t be null). The second one is the actual argument to Console.Write.
typeof(Conso\u006ce).GetMet\u0068o\u0064s()[101].Invoke(c, c);
// Since Main returns int, we have to return something.
return 0;
}
}
Uri
代わりにするobject
ためにb
。明確な場所(可変長)の\xHH
代わりに、文字列で使用できます。考え直してみると、まったく必要なく、の最初の引数として再利用できます。MSDNは、静的メソッドの場合、最初の引数は無視されると述べています。これにより、175になります。\u00HH
\x
b
c
Invoke
Invoke
が何でもよい場合、それである必要さえありませんがc
、0
... :)
c
以来、悲しげに動作しない(new
必要とe
し、.Split('x')
長すぎる()177で出てきた。
GetMethods
。+1
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.
すべてのルールを満たしており、確かに難読化されています。
++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.
わずか100ストロークです。私のものはあなたのものよりも優れています
これはルール2に違反するだけです。
゚ω゚ノ=/`m´)ノ~┻━┻//*´∇`*/['_'];o=(゚ー゚)=_=3;c=(゚Θ゚)=(゚ー゚)-(゚ー゚);(゚Д゚)=(゚Θ゚)=(o^_^o)/(o^_^o);(゚Д゚)={゚Θ゚:'_',゚ω゚ノ:((゚ω゚ノ==3)+'_')[゚Θ゚],゚ー゚ノ:(゚ω゚ノ+'_')[o^_^o-(゚Θ゚)],゚Д゚ノ:((゚ー゚==3)+'_')[゚ー゚]};(゚Д゚)[゚Θ゚]=((゚ω゚ノ==3)+'_')[c^_^o];(゚Д゚)['c']=((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)-(゚Θ゚)];(゚Д゚)['o']=((゚Д゚)+'_')[゚Θ゚];(゚o゚)=(゚Д゚)['c']+(゚Д゚)['o']+(゚ω゚ノ+'_')[゚Θ゚]+((゚ω゚ノ==3)+'_')[゚ー゚]+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+((゚ー゚==3)+'_')[゚Θ゚]+((゚ー゚==3)+'_')[(゚ー゚)-(゚Θ゚)]+(゚Д゚)['c']+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+(゚Д゚)['o']+((゚ー゚==3)+'_')[゚Θ゚];(゚Д゚)['_']=(o^_^o)[゚o゚][゚o゚];(゚ε゚)=((゚ー゚==3)+'_')[゚Θ゚]+(゚Д゚).゚Д゚ノ+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+((゚ー゚==3)+'_')[o^_^o-゚Θ゚]+((゚ー゚==3)+'_')[゚Θ゚]+(゚ω゚ノ+'_')[゚Θ゚];(゚ー゚)+=(゚Θ゚);(゚Д゚)[゚ε゚]='\\';(゚Д゚).゚Θ゚ノ=(゚Д゚+゚ー゚)[o^_^o-(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ+'_')[c^_^o];(゚Д゚)[゚o゚]='\"';(゚Д゚)['_']((゚Д゚)['_'](゚ε゚+(゚Д゚)[゚o゚]+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚)+(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚)+(゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚ー゚)+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚)+(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)-(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚ー゚)+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚)+(゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚o゚])(゚Θ゚))('_');
. That's followed by a comment and the expression
voidコンテキストで`゚ω゚ ノ['_']` という名前の変数に割り当てます。次に、変数o
(_
およびとともに(゚ー゚)
)に値3が割り当てられます。それはその効果を継続し、実質的に無操作である無害な余分な作業を多く行い、迂回方法を使用して意図しない作業(を呼び出すalert("Hello world")
)ファッション。
ルールIおよびIII(34文字)
print'Uryyb Jbeyq'.decode('rot13')
ルールIおよびIII、代替(39文字)
print"\110e\154\154o %cor\154\144"%~-88
ルールIIおよびIII(37文字)
input("H\x65ll\x64 W\x64%cld"%(3*38))
ルールIおよびII(50文字)
input('\x48\x65\x6c\x6c\x6f \x57\x6f\x72\x6c\x64')
3つのルールすべて(58文字)
input("\x48\x65\x6c\x6c\x6f %c\x6f%c\x6c\x64"%(84+3,3*38))
import codecs
前にする必要がありますcodecs.decode
Joel BergerのPerlソリューションを見た後、私は自分でASCIIアートのかわいさをやらなければならないと感じました...
$$
=-~-
~[];$_
=$$+ $$;
_$=$$+$$+-
~[];_=-~[];$
=!![]+[];__={}
+[];$$_=/\\ /+[]
_$$=(![]+[])[_]+(!
[]+[])[$$]+$[$_+~[]]
+$[_]+$[+[]];$=__[_$]+
__[_]+($[$]+[])[_]+(![]+
[])[$_+~[]]+$[+[]]+$[_]+$[
$$]+__[_$]+$[+[]]+__[_]+$[_]
_=$$_[_]+-~[];$[$][$](_$$+'("'
+_+-~[]+-[]+_+$_+_$+_+_$+$_+_+_$
+$_+_+_$+[$$+_$]+$$_[-~[]]+$_+-[]+
_+$$+[$$+_$]+_+_$+[$$+_$]+_+[$$+$_]+
$$+ _+_$
+$_+_+$_
+$_+'")'
)($)
($)
は空白になっています()
($
対称性のために追加したため)。
3番目の規則を破ります。
\^^5pp^^%^^2^^#^^!^^3^^%{^^(}^^%^^,^^,^^/
\^^5pp^^%^^2^^#^^!^^3^^%{^^7}^^/^^2^^,^^$!
\^^%^^.^^$
with tex filename.tex
を実行して、dvi出力pdftex filename.tex
を取得するか、pdfを取得します。
($OFS='')+('Qnuux)`x{um'|% t*y|%{"[convert]::"+([convert]|gm -s t*r).name+"($($_-9))"|iex})
ルールIIのみに違反します。
char
すでに2つのルールに違反しているのは非常に悪いことです。
そして、これはうまくいくのが大変でした。
$OFS
し''
ます。char
実際にキャストすることはすべての中で最も困難な部分でした、そして私は方法を探すために一日中過ごします。私は残りのすべてをうまく動作させましたが、それらについて計算すると、int
sではなくchar
sがあります。それらを文字列に戻すのはちょっと大変でした。私Invoke-Expression
も必要とせずに呼び出す方法を見つけましたe
:
&(gcm i?x)
しかし、それはまだ議論に欠けていました。そして、それまでに3つのルールをすべて満たすという目標を捨てました。また、それはにキャストするのに特に役立ちませんでしたchar
。
新しいPowerShellバージョンで少し短くなりました。残念ながら、結果を作成するための便利な方法はありませんでした。
以前のPHPの例では難読化が不十分であることに気付いたので、もっと露骨に難読化された例(警告、難読化!)を見てみましょう。また、GolfScriptのサンプルを露骨にコピーしますが、サイズを小さくすることは可能です(可能ですか?)。このエントリには、PHP 5.4またはshort_open_tag
有効が必要です。これを行っている間、ルールは破られませんでした。実際、このエントリにはASCII文字や数字は含まれていません。
この例は、どの規則にも違反しません。楽しんで。ファイルを生成するには、次のコマンドを実行します。
printf "<?=~\xb7\x9a\x93\x93\x90\xdf\xa8\x90\x8d\x93\x9b;" > obfus.php
または、実行中のprintf
コマンドを信頼できない場合に備えて、ファイルのBase64ダンプを準備しました。
PD89freak5OQ36iQjZObOw==
それを生成する両方の方法がルールを破ると思うなら、私もDropboxでファイルを生成しました。
そしてそれを実行します。
php obfus.php
結果のファイルには16バイトが必要です。それを実行して楽しんでください。E_NOTICE
警告を有効にしている場合、通知が表示されることに注意してください。無視してください。修正すると無駄になります。二文字1文字(@
結局演算子を使用できます)、結果のBase64の見栄えが悪くなります。
WSプログラムを取得するには、次の文字列のS、T、Lをそれぞれスペース、タブ、または改行文字に置き換えます。
SSSTSSTSSSLTLSSSSSTTSSTSTLTLSSSSSTTSTTSSLTLSSSSSTTSTTSSLTLSSSSSTTSTTTTLTLSSSSSTSSSSSLTLSSSSSTSTSTTTLTLSSSSSTTSTTTTLTLSSSSSTTTSSTSLTLSSSSSTTSTTSSLTLSSSSSTTSSTSSLTLSSLLL
または、テキストファイルhello.wsにある「生の」空白のみのプログラムをダウンロードします。
このWSインタープリターによって実行されると、このプログラムは「Hello World」を出力します。
説明(ここの空白は無視してください!):
SSS TSSTSSSL TLSS <-- output H (ascii code 72 in decimal, 1001000 in binary)
SSS TTSSTSTL TLSS <-- output e (ascii code 101 in decimal, 1100101 in binary)
SSS TTSTTSSL TLSS <-- etc
SSS TTSTTSSL TLSS
SSS TTSTTTTL TLSS
SSS TSSSSSL TLSS
SSS TSTSTTTL TLSS
SSS TTSTTTTL TLSS
SSS TTTSSTSL TLSS
SSS TTSTTSSL TLSS
SSS TTSSTSSL TLSS
LLL <-- end the program
「中間」の文字列(例TSSTSSSL
:)は、「Hello World」の連続する文字のASCIIコード(バイナリ、S
0をT
表し、1を表す)です。接頭辞SSS
は、それに続く番号(で終わるL
)をスタックにプッシュします。TLSS
asciiコードがスタックの一番上にある文字を出力します。最後に、このチュートリアルによれば、プログラムLLL
はインタプリタによるクリーンな終了のために終了する必要があります。
注:別のWSプログラムエントリは「Hello、world of space!」を出力する1287文字のプログラムであるため、これを別の回答として入力しています。必要な「Hello World」の代わりに。
C、160文字
4バイトintのリトルエンディアンマシンでのみ機能します。
main(){int a='a',b=a/a,c=b+b,f=c+c,g=f+f,i=g+g,j=i*i,k=j*j,m=a+g+b+c,n=m+b+c;int p[]={a+g-b+(a+f)*j+m*k*(j+b),n+i*c*j+k*(n+g+n*j),a+i+b+m*j+(a+f-b)*k};puts(p);}
3つのすべてのルールを満たします。
p[];main(){p={(5*5*5*5*5*64+96696)*(443+5688),(5*3*4*3+4-3)*(66*45*6-6*6-4+3)*83*(3+4),6544494+36868};puts(p);}
文字。
x[]={45483*39994-3958,48465*38543-5584,6584695-3333};main(){puts(x);}
-69文字。リテラルをもう少し数学化するために、より多くの時間を与えられれば、私はもう少し削ることができると確信しています。とにかく数時間を過ごすのは楽しい方法でした:)
正確には難読化されていませんが、非常に短く明白です:)。文字を制限する場合でも、プログラムを簡単にフォローできることを示します。制約1および3が続きます。制約2が悪用されました。
<?=str_rot13('Uryyb Jbeyq');
short_open_tag
PHP 5.4以降を使用していない限り、これを設定する必要があることに注意してください。いくつかの例はもっと短いかもしれませんが、この例はかなり短いと思います。
printf 'p|ɹ°M ο||ǝ%b'"\x48"
p |ɹoο||ǝH
または、/ bin / echo(18文字)*)を使用して、以下の説明を参照してください。
/bin/echo -e 'p|ɹοM ο||ǝ\0110'
セルフテスト:
echo "printf 'p|ɹοM ο||ǝ%b' "\x48"" | egrep -i "[^hlwd27eor01]"
考えよりも難しい!ツール、Wordを逆さまにするためのツールは、「H」または「o」を逆さまにすると、Hまたはoとして表示するのが最適であると考えます。これは、それぞれグループ1(Hlwd:27:eor01)3と競合します。
Hは
echo -e "\0127"
しかし01と2も毒されています。うん!ただし、bash-buildinエコーには、8進数のASCII値を表示するオプションだけでなく、16進数も表示できます。
echo -e "\x48"
しかし、bashをプログラミング言語として使用する場合、echoコマンドはプログラムの一部であり、文字数にカウントされるだけでなく、グループ1および3からの毒文字(hlwd:27:eor01)ehoも含まれます。
これがエコーが死んだ瞬間です。幸い、表示する "%b"を知っているprintfがあります。
rはprintfの唯一の問題のある文字であり、グループ3に属します。「o」は最後のグループにあるため、HelloとWorldに残すことができますが、oのように見えるomicronοを使用できます。 ° °
。
リンク:
(_=(_=[][(f=!!(_='')+_)[3]+(b=({}+_)[(I=-~(z=_-_))])+($=(c=(d=!_+_)[I])+d[z])])())[f[I]+'l'+(a=d[3])+$]("H"+a+'ll'+b+' W'+b+c+'ld')
規則Iを破る
使用法:
1
による!![]+![]
と0
することにより""-""
、ルール#2を壊さないために。
!![]+![]
?どうして4-3
?
5回未満の連続操作で文字を生成できるため、コードループを展開しました。アキュムレータ値を再利用していくつかの文字を保存した2つはl
、連続しているSPACE
から生成することが可能o
とd
から生成することができますl
。
*>|||{>|||{>||{{>|{|||{>||{>|{>|||{>||{||{!!>**_!!}|_}!^__}|__>*__}|_}|_>!!|_}!^__!
旧版
^}!>^^_^!__!>_^!^^**_^!^^**_
^_!{**_^__!{>_^__{>>!^_!{**_
^_!>^*_^!^^**_^_^^**_*______
___________>||||{^
以下のコメント付き。5つの同一の操作のシーケンスを使用して、Hello World
1つの回転と4つの減算のすべての文字を生成します。
^ (move code pointer to data pointer value '^')
}!>^^ (store 'H' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
!__!> (store 'e' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
_!{** (store 'o' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
__!{> (store ' ' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
__{>> (store 'W' in accumulator)
! (program termination)
^ (data pointer value used by code pointer jump)
_!{** (store 'o' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
_!>^* (store 'r' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_ (no-op)
^ (data pointer value used by code pointer jump)
_^^** (store 'd' in accumulator)
_ (no-op)
* (data pointer value used by code pointer jump to reach '!' between 'W' and 'o')
________________ (no-ops)
_ (no-op, address '^')
>|||| (rotate data value and perform four subtractions)
{ (print value in accumulator)
^ (move code pointer to data pointer value '^' except for the last jump '*')
これを書くとき、読みやすさと透明性を選択しました。
a[3],b;main(){b=99
+9;b+=b<<8;b=b<<8|
97|4;b=b<<8|64|8;a
[3^3]=b;b=78+33<<8
;b+=87;b=b<<8|35^3
;b=b<<8|64|47;a[5^
4]=b;b=97+3<<8;b+=
99+9;b=b<<8|66|48;
a[6^4]=b;puts(a);}
3つの要件をすべて満たしています。
7
。数字が含まれており、ルール3に違反しているためです。しかし、それを取り除くのは簡単でしょう7
。また、いくつかint
のsを追加し、いくつかの余分な括弧を追加int puts(int*);
し、先頭に追加することgcc -ansi -W -Wall
により、単一の警告のみでコンパイルされます。コントロールはnon-void functionの終わりに達します。
<64><~+BNK%C]~><48656c6c6f>3{print}repeat
使用法: $ gs -q -dNOPROMPT -dNODISPLAY filename.ps
gsnd -q -- filename.ps
JavaScript、66文字
別のJavaScriptソリューション、今度は規則2を破ります。
top[(U=unescape)('a%6cert')](U('%48e%6c%6co %5'+(6+1)+'or%6c%64'))
上記は、hallvaboの答えの背後にある概念に従っています。私がそのアプローチに取りかかる前に、おそらくより難読化されたバージョンがありました。
top[8680439[n='toString'](30)]((16+1)[n](z=8*4)[u='toUpperCase']()
+15960[n](33)+'o '+z[n](33)[u]()+1155505[n](36))
また、ルール#2に違反し、114文字になります。(読みやすいように、この2番目のソリューションではキャリッジリターンを削除しています。)
unescape
。
unescape
と読んでいて、10年以上前に1年しかプレイしていませんでした。
制約1および3が続きます。
main=putStr$map succ"G\x64kkn\USVnqkc"
8*9a99^^a+6^aa~q+3a33va86^aq+3a+3aqa-8a
フーリエは常に難読化されます。これはすべてのルールに従います。
壊す:
8*9a Set the accumulator to 8, multiply it by 9, and print the
corresponding ASCII code.
99^^a Set the accumulator to 99, increment it twice, and print the
corresponding ASCII code.
+6^aa Add 6 to the accumulator, increment it, and print the
corresponding ASCII code twice.
~q Set the variable q to the current value of the accumulator.
+3a Add 3 to the accumulator and... I think you get the idea.
33va Set the accumulator to 33, decrement it, and print ASCII.
86^a Yes, okay, I think it's obvious by this point.
q+3a Set the accumulator to the value of q (earlier set to 108),
add 3, and print ASCII.
+3a ...
qa Invoke q again and print ASCII.
-8a Subtract 8 from the accumulator and print ASCII.
これは少し洗練されるかもしれません。
import
はPythonでは許可されていないと思います。