183. Intel 8080ブートイメージ(ZEMU)、9870バイト
#16 "?63(o+?50;+'51;' # #@ " /*"r"{\D-v e-'[fa5.q]PkPPX)\( 9 '#CO"14"^ 92 7 222222222222222222222222 ##*/
#/*1&7//```"` [>.>.] )[-'][(7 >77*,68*,@'_ 7 )(22)S / \iiipsddpsdoh#####(#######?? #### ## ###### #### ###### # #### ####### #### ###### # #### ####### a5# \7aa*+42@n; 7 999993 1 7 3 1 8 1 1 55 EEEEEδΘΔΔΔΘΔΘλa k zzzzkf kf k zzzzzd kf k zzzzza kf bfz coding=utf8 p''53'S^' ! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退
#>x#z#111#y#y#y#_#0111118&1& 1111/"78"oo@ xxxxxxxxxxx /112\ ##### ####### # # ##### h#115# o# ##### #### ### #### # # ##### # ##### #### ### #### # # ##### # #
# 36!@`D e ++++++::@ L R.----._ x-----x ########8=,_## ### ###### ######## #### ##### ####### ##### ### # # #### ### ##### ####### ##### ### # # #### ### ##### #
#comment -[af] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ########## ### ## ##### ## #### ## # ##### ## ##### #### ##### ## # ## ## #### ## ##### #### ##### ## # ## ## ####
#~==RtRtRtMbMbMbPSPSPS # ????!?!??!??!!!!???!?!??!!?!?!!!!!?!!!!?????!????????????????????!
#[#[]]QhQhQhQrQrQrHnHnHnbqbqbqLzLzLzQtQtQtTcTcTcRQRQRQ #
#<<<#++R++ ++++++++++++++++++++++++++++++++++++++++++U+++.._+++++++._ #
############################################################################## 4O6O@
#-]+-}}[.^x+;;+;;+;;+<>;;+;;+;;+;;;;;;+;;+;;.._]}--<^>++[+++++[>+++++++<-]>._ ++++._+++._^<]+-+<[<<._>>>-]^>[<+++++[>++++++++++<-]>@@+.---@._+>][[
#{
#=
#*
#cs
#2""/*
#9999 9 9
#9 999 99 9999 9
#9
# 9 9999
#`<`(+?+?0l0v01k1kMoOMoOMoOMoOMOOx0l0ix0jor0h0h1d111 0eU0y0yx0moO1d0y0e0e00m1d0i0fx0g0n0n11yxMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOotMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i000x1k1x0vx0v0l11110000011100^_)\\
[ "`e```.1'.0'.6''i]56pq\{}26q[puts 59][exit]" ,'_\['];#/s\\/;print"24"; exit}}__DATA__/
###x<$+@+-@@@@=>+<@@@=>+<?#d>;?\:-._++._++++._#/<?\>3-++._6+---2._#</++++++++++++++++++++++++++++++++++++++++++++++++._++._++++++.>!\
' wWWWwWWWWwvwWWwWWWwvwWWWwWWWW\WWWWwWWWWwWWWWW/WW\wWWWWWWWWwwwwvwWW/WwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWW ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho ho dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO dO MU ([]) ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>) (<><()>){({}[()])}{ # {((((((\'; a=$(printf \\x00);b=$(echo -n $a|wc -c);case $b[1] in 1*)echo 54;;4*)echo 78;;8*)echo 166;;*1*)echo 50;;*)echo 58;;esac;exit;#)'; print(( eval("1\x2f 2")and(9)or 13<< (65 )>>65or 68)-(0and eval("\"ppp\".bytes.class==Array and(4)or(95==\"ar_\"[2]and 5-96 or-93)"))^1<<(65)>>62) or"'x"or'wWW s'#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("3'3)))"'a'[[@*3*74[?]* *]* * *(<\>]xxxxxxxxxxxxxxxxxxxxxxxx)'#\\
__DATA__=1
#
###;{a=1}={a:null};console.log a&&39||180
# \\
""""
#
# \
=begin
#p :1*23!/5x%6E0 !|*****[[[828+*+@+*99]]]*****|!
;set print'-';print 89;exit#ss
[mxf]-main=-[165]- ###jxf*#p 173#*
p now 70 dollar off!
p has been selling out worldwide!
#PLACET,2<- #2FAC,2SUB#1<- #52FAC,2SUB#2<- #32FACREADOUT,2PLEASEGIVEUPFACs>>>
seeeemPaeue_ewuuweeee_eeeeeeCisajjapp_ppppxf⠆⠄⡒⡆⡘😆😨😒😨💬95💬👥➡😻😹😸🙀🙀😹😼😿🙀🙀😼😼😸🙀🙀🙀🙀
👋🔢🌚🌝🌝🌚🌚🌚🌚🌚▲▲▲²²²²▲¡▼¡▲▲¡→
밠밠따빠빠맣박다맣받다맣희맣희うんたんたんたんたんうんうんうんうんうんたんうんうんうんたんうんたんたんうんたんたんうんたんたんうんたんたんうんたんたんたんたんたんうんうんうんうんたんたんうんたんたんたんうんうんうんたんうんうんたんうんうんたんうんうんたんうんたんうんうんうんたんたんうんたんたんうんたんたんうんたんたんうんたんたんたんうんうん
😊♈💖
😇♈♈
😊♉♈
😇♈♈
😇♈♉
😇♈💜
😊♉♈
😊📢♈
😈♈💜
😊📢♈
😇♉💞
😊📢♉⠀⢃⠛⠋
#-49,A,-1 #
#-5,A,-1 #
#6,A,-1 #
1 ! !
2 ! !
1 !!
1 x*
53 ++-------+
1 x*|$0011 \|
51 +|/1000 /|
1 x*|\ 0011\|
34 +|/01 00/|
15 +|\ 0011\| R"12"R _* ? ?@ _ !
1 *|@ 0110/| @ %"18" ?@ ?
1 | +| + *
1 !+-------+--- ? ! ?
1 ! <``=> ? @ ?
< < << < <
< B= ===== =>8 =
, 8= > B = =
= == = = > 8 =
D B+ += D x xxx x
` ` = > 8 = >
x ~ B = = = = > ~
B + = D+ ~ 8 = >x
x x x x x xx x
x x x+ xx x + + + + + <>
x x xx xx +++ + e$P+++++*D*+++1++1E!s
x+ +x +x x + + + +
8=+, _ + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + + +
+ + + +
+ + +
# + + +
#+ + ++ + + +
# + + +
+#
* +
*+*
# *************************************************+
# + +
# + +
+ + *
*****+
# + +
# + +
* *
+*****
# +
(printout t 164 )
(exit )
#cepp
MsgBox (0,"",169 )
#cs
Yo::=~147
::=
You can see an x here.<<<<
>{-<<<<<
> 176
>> Output 1
>SET x TO 120. [0]{472454523665721469465830106052219449897} @,-1,:*b5<>␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␌␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␌␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋␋
>X x. PPQ-}
>x--/2
> =157;y=146--/2
>main=print y{-ss s
\begin{code}
{-x ␉␉␉␉
␉
␉
-}
open import IO;main = run(putStr"159" )
\end{code}
ppppppppppppp
out &49 &1
out &56 &1
out &50 &1
Take Northern Line to Tooting Bec
Take Northern Line to Charing Cross
Take Northern Line to Charing Cross
Take Northern Line to Bank
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Embankment
Take Bakerloo Line to Embankment
7 UP
Take Northern Line to Mornington Crescent
7 RIGHT
7 RIGHT
7 TEACH
6 BOND
6 BOND
6 BOND
5 RIGHT
5 LEFT
5 RIGHT
7 BOND
7 TEACH
5 TEACH
6 YELL
5 TEACH
6 YELL
6 YELL
set ! 57,,...,,.,,..,,,,,,..,,,.$^
set ! 51. #"60"e.0,1,_ye do{--}gibe16"124"#8+*sizeString tnd xfmain=los*81''cagem x=4721en nd ogola=1ay $0C0 00 3cod/|puts_e
More 91 of this
How much is it
red down one blue up red down one blue up red up one red right two blue up sss
baa baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bleeeeeeeeeeeeet bleeeeeeeeeeeeet bleeeeeeeeeet baaaa bleet bleeeeeeeeeet bleeet bleeeeeeeeeet
wwWWWwWWWWWwWWWWWWWwWWWWWWWWppppp
When this program starts:
There is a scribe called x
x is to write 179
*/
#if 0
.int 2298589328,898451655,12,178790,1018168591,84934449,12597
#endif//*
#1""//*
#include<stdio.h>
#define x(d) #d
#define u8 "38\0 "//"
char*x="24 10 31 1"
"a c #FFC0FF""B c #0000C0""d c #58007B""e c #0C8302"
"h c #E60001""i c #CAFFFF""j c #280000""k c #CA0000""l c #CA007F""n c #330001 ""q c #E60000"
"o c #FF8000""t c #FF00BC""u c #008080"
"A c #0040C0""E c #808000""F c #00C040""G c #008000 ""R c #800000"
"H c #0000AA""I c #00AA00""J c #55FFFF""K c #AAAAAA"
"r c red""g c green""b c blue""c c cyan""m c magenta""y c #FFFF00""x c black""_ c #FFFFFF"
"HHHahtdegggggggyrggggggc"
"IHHaixuEFbGGbggbryAEGRgc"
"JJHajyurbgbgggggggb____o"
"IJHakmyyyyyyyyyyyyyyyyye"
"I__almyyyyyyyyyyyyyyyyye"
"K__anmyyyyyyyyyyyyyy_y_e"
"HH_aqggyyyyyyyyg____m_Je"
"JH_axxxxxxxxxxxxxxxxxxxx"
"K__aaaam___bbbbbBm_bbBab"
"K__________bbbbb___bbxbb";//"
int f(char*a,char*b ){puts(a?"124":sizeof(0,u8)-5?u8"67":*u8""?"37":x(0'0 "'\"")[9]?"75":'??-'&1? "79":"77");}main(){f(x,x=0);}//<*/
#1""/*/
>import Text.Heredoc--WWWWWWWWWWWWWW<<W
>instance Num B where fromInteger _=B 170;negate _=B$x#x
>data B=B{u::Integer};g=[here|here<-"W>W"] --WWWWWWWWWW570rt Unc27<<[w|]
>x=1;y#a=128;x#a=174
>main=print$last$172:[u$[-1]!!0|g<"Z>"] --}
console.log 178;
#1""/*/
#if 0
#endif//* --... ...--
/*/
p=sizeof(" (\");print'(''72'')';end!");main(){puts('??-'&1?"101":"92" );return 0;}
#if 0
#endif//* rk:start | print: "69" rk:end
print 61
#}
disp 49
#{
}{}<> K yya+- & g+$
$'main'3x A=AgRA; AC
#-3o4o#$$$
#<T>"3"O._</+++++++>/+++<-\>+++.---.\_<!+++++++++++++++++++++++++++++++++++++++++++++++++._++.-.>@
#<<<#>>> /
reg end="";print(85);reg s#++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-.
=end
;"""#"#xxxxclou"78"<\++++>/<~#class P{function:Main(a:String[])~Nil{83->Print();}}
#endcOmment
#nocOmment outtext("155")
#ce pS9^7^8^MUOUOF @0:8:8 \ @,,1'1'<> @125iRE
#p|o51~nJ;#:p'34'3 \=# print(size([[1] [3]][1,:] )[1]==2?158+4:17)#>say 27#>>>say 170-3#]#print(47)#]#echo 21#>/#print(171)#s-#print 175#s
#8M`| <esc>dggi2<esc>// $}<}}<}>}[<< }<<<<<}<<}<<<<}<<<}}}<}}<}}<} }<}}<}}<}}}<}}<<<<<<<<<<<}}}<}}<}}<}}<}}<}}<}}}<<<<<<<<<<}+++++++++++++++++++++++++++++++++++++++++++++++++._++.._#]~-<~-<~-<<<~-<COprint("65")#`=>ass^_^_#
#9 "25" +/pppppppx eeee*n*n*n*es*s*s*^ee*n*n*n*e*sss*e*n*n*n*ee*s<* 5>1 e*///\)Q222999686#
オンラインでお試しください!
説明
マシンコードを追加するアイデアをくれたPotato44に感謝します。この答えを出すのはとても楽しかったです。
CP / M COMファイルを実行しませんでした。ポリグロットのサイズが約60KBに制限されているためです。ZEMUはデフォルトで6番目のセクター(1ベース、128バイトの論理セクター)からブートセクターをロードするため、ブートイメージはCOMよりも簡単に実行でき、ポリグロットの開始を実行する必要はありません。ブートコードは、ポリグロットのオフセット0x280((6-1)* 128)にある必要があります。
このページからリンクされているZEMUエミュレータを使用しています。ZEMUでポリグロットを実行するには:
- ディスク> A:ポリグロットファイルを選択
- オプション>命令セットI8080
- 起動ボタンを押す
1文字をコンソールに出力する機能(cns$ot
)は、ZEMUディストリビューションのBIOS22Dv221.ASMからコピーされました。2つの変更を行いました。パラメーターを制御するため、文字は7ビットASCIIにマスクされず、(ゼロの場合は相対ジャンプ)Zilog Z80命令がIntel 8080に存在しないためにjrz cns$ot
置き換えられます。jz cns$ot
jrz
初期プログラム(Intel構文、ここからリンクされているアセンブラー):
org 3120h ; chosen so that cns$ot == 0x3131, easier to generate
; this program will be generated at this offset
; to run it directly specify org 0100h
mvi c,31h ; '1'
call cns$ot
mvi c,38h ; '8'
call cns$ot
db 38h ; for answer 188, NOP in I8080
mvi c,33h ; '3'
call cns$ot
hlt ; halt processor
;;;;;;;;; copied from BIOS22Dv221.ASM
cno$sp equ 7dh
cno$sb equ 01h
cno$si equ 00h
cno$dp equ 7ch
; print char to console, receives char in c register
cns$ot:
in cno$sp ; in status
xri cno$si ; adjust polarity
ani cno$sb ; mask status bit
jz cns$ot ; repeat until ready
mov a,c ; get character in a
out cno$dp ; out character
ret
このプログラムには、ポリグロットで直接使用できない文字が含まれています。ほとんどのASCII制御文字(コード<0x20)はSimulaでは禁止されています。非ASCII文字(コード> = 0x80)は、ファイルが有効なUTF-8でなければならないため、単独では表示できません。したがって、上記のプログラムは、有効なUTF-8である別のプログラムによって生成されます。
次のプログラムは必要なコードを生成し、そこにジャンプします。
ld (hl),a
Grass('w'==0x77
)のため使用できません。sub h
(0x94)およびxor a
(0xAF)はUTF-8継続バイトであり、UTF-8リードバイトを先頭に追加する必要があります。命令ret nc
(= 0xD0、キャリーでなければ戻り)がUTF-8リードバイトとして使用されます。何も実行しないようにするには、scf
命令を実行します(キャリーフラグを設定します)。また','
、'.'
DOBELAの(0x2C)および(0x2E)も回避されました。org 0100h
使用されたアセンブラーがそれを理解しないため、ディレクティブは使用されません(組織はGUIで設定されます)。とにかく、このプログラムは位置に依存しません。Zilogニーモニックの方が好きなので、より長いプログラムに使用しました。
Zilog構文、アセンブラはここからリンクされています:
; generate: 0E 31 CD 31 31 0E 38 CD 31 31 38 0E 33 CD 31 31 76 DB 7D EE 00 E6 01 CA 31 31 79 D3 7C C9
ld hl,3120h
ld a,3Fh
scf ; set carry flag so that ret nc does nothing
ret nc ; utf8 lead byte for next insn
sub h ; a -= h; a = 0Eh; utf8 cont byte (opcode 0x94)
ld c,a
ld (hl),c ; 0Eh ; not using ld (hl),a because it is 'w'
inc hl
ld (hl),h ; 31h
inc hl
ld a,32h
cpl ; a = ~a; a = 0xCD
ld d,a
ld (hl),d ; CDh
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),c ; 0Eh
inc hl
ld (hl),38h ; 38h
inc hl
ld (hl),d ; CDh
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),38h ; 38h
inc hl
ld (hl),c ; 0Eh
inc hl
ld (hl),33h ; 33h
inc hl
ld (hl),d ; CDh
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),76h ; 76h
inc hl
ld a,23h ; not using ld a,24h because it has '$' (breaks SNUSP)
inc a
cpl ; a = ~a; a = 0xDB
ld d,a
ld (hl),d ; DBh
inc hl
ld (hl),7Dh ; 7Dh
inc hl
ld a,c ; a = 0Eh
cpl ; a = F1h
dec a
dec a
dec a ; a = EEh
ld d,a
ld (hl),d ; EEh
inc hl
scf
ret nc
xor a ; a ^= a; a = 0; utf8 cont byte
ld c,a
ld (hl),c ; 00h
inc hl
ld a,4Ah
scf
ret nc
sub h ; a -= h; a = 0x19; utf8 cont byte
cpl ; a = ~a; a = 0xE6
ld d,a
ld (hl),d ; E6h
inc hl
ld a,c
inc a
ld d,a
ld (hl),d ; 01h
inc hl
ld a,35h
cpl ; a = 0xCA
ld d,a
ld (hl),d ; CAh
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),h ; 31h
inc hl
ld (hl),79h ; 79h
inc hl
ld a,2Dh ; not using ld a,2Ch because it has ','
dec a
cpl ; a = 0xD3
ld d,a
ld (hl),d ; D3h
inc hl
ld (hl),7Ch ; 7Ch
inc hl
ld a,36h
cpl ; a = 0xC9
ld d,a
ld (hl),d ; C9h
ld sp,3232h ; set up stack for generated program
ld hl,3120h ; not using ld l,20h because it has '.'
jp (hl) ; go to generated program
; confusing mnemonic - actually it is jp hl, ie. PC = HL
; opcode 0xE9, utf8 lead byte (0xE9 = 0b11101001), must be followed by 2 cont bytes
db 80h,80h
このプログラムは次のものに組み込まれています。
! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退
ポリグロットのオフセット0x280になければなりません(2行目を参照)。テストドライバーの抽象化テストはそれをチェックします。
リファクタリング
貝
シェルを最長行に戻しました。括弧は他の言語と整合しないため、このレイアウトがより気に入っています。MoorhensesとFlaksをシェルの前に移動したため、シェルが変更されても壊れません。現在、最も長い行には次のレイアウトがあります。
Grass Moorhenses Flaks Shells Rubies/Pythons/Perl5 PicoLisp Prelude Klein001
新しいシェルコード:
a=$(printf \\x00)
b=$(echo -n $a | wc -c)
case $b[1] in 1*)echo 54;; 4*)echo 78;; 8*)echo 166;; *1*)echo 50;; *)echo 58;; esac
exit
古いシェルコード:
a=$(printf \\x00)
b=${#a}
case "{"$ar[1]"}"${b} in *1)echo 54;; *4)echo $((19629227668178112600/ 118248359446856100));; *1*)echo 50;; *)echo 58;; esac
exit
の長さは今までに$a
計算されてい$(echo -n $a | wc -c)
ます(ここから)。最初はこれを使用してを取り除きましたが#
、現在はコードが短いために使用されています。#
Flaksはシェルの前にあるため、シェルを含めることができます。
Yash(166)はデフォルトでオプションをサポートしない組み込みechoコマンドを使用するため、「-n」と改行は出力の一部となり、追加の4バイトを与えます。設定されていない場合、ECHO_STYLE
デフォルトはSYSV
(-n
オプションは受け入れられません)。
このTIOリンクは、すべてのシェルでコードをテストします。
(((((
シェルがUnderloadとRetinaを修正する前に追加。58
プレリュード(#)
afterで閉じられている)から隠すために、もう1つのペアのペアが追加されexit
ます。
{
前((((((
はJapt用で、それなしではJaptがハングします。
フラク
Flaksの再配置により、開始コードを簡素化できます。([])
残りは次のとおりです。
line 21 (Grass(([5]{}))) scripting langs clear stack Flaks main code begin skip code the rest of polyglot end skip code print(85)
old: []{}[][][] ((([]{}))) ((()()<<()>>)((()([])))<<()>>) {}{}{}{}{}{}{} ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>) (<><()>){({}[()])}{ ... }{}<> ()
new: []{}[][][] ([] ) ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>) (<><()>){({}[()])}{ ... }{}<> ()
このTIOリンクは、すべてのFlaksでコードをテストします。
分裂と枢機inal
核分裂はLNUSPに移動しました:R"12"R _*
。2番目のポインターは、Fissionをできるだけ早く終了するために使用されます。3番目のステップで、詳細については回答54を参照してください。
CardinalはLNUSPに移動しました:@ %"18"
。Fissionの場合と同様に、3番目のステップで、2番目のポインターを使用してCardinalをできるだけ早く終了します。
マリオLANG
プラットフォームとしてでは####...
なく使用====...
します:
![ここに画像の説明を入力してください](https://i.stack.imgur.com/MZZlO.png)
最小2D
MarioLANGによるポリグロット:
![ここに画像の説明を入力してください](https://i.stack.imgur.com/oomQY.png)
ウィアード&1L_a
奇妙な:行10列79のスペースを使用してIPを反映します。
1L_a、Wierd:行9、列79のスペースが重要です。
![ここに画像の説明を入力してください](https://i.stack.imgur.com/ViZkx.png)
キュビック
新しいコード: :1*23!/5x%6E0
:1*23!/5x%6E0
! - skip over / in Klein 201
x - destroy Cardinal pointer before it hits /
pure:
:1*23/5%6E0
faceval:
0 0
1 9
2 18
3 27
4 36
5 45
program:
:1 mem = 9
*23 mem *= 18; mem *= 27
/5 mem /= 45
%6 print mem
E0 exit
9*18*27/45 == 97 (integer division)
6 in %6 is used to print mem because 0-5 are used to print faceval (eg. %3 prints 27)
0 in E0 is not an exit code, it is present just to trigger E instruction
クライン201/100
新しいコード: !|*****[[[828+*+@+*99]]]*****|!
空のスタックからポップするとゼロになるため、すべての乗算スタックには単一のゼロが含まれます。このゼロは、+
次のでメイン番号に追加され@
ます。以前は破棄されていました。Klein001の回答を?
参照してください。
クラインのドアの仕組み:
![ここに画像の説明を入力してください](https://i.stack.imgur.com/IgyAh.gif)
渦
旋回コードは基本的に同じですが、唯一の変更点は、メインコードが現在の操作がops.load(4)ではなくops.one(2)であると想定することです。
事実上、Whirlは3つの操作があると考えることができます。
1
1ステップ回転する
0
回転方向を切り替える
00
現在の命令を実行し、リングを切り替えます
プログラムに関する推論を簡素化するための操作の組み合わせ:
0000
非アクティブリングの現在のopがnoopの場合、副作用なしでアクティブリングの現在のopを実行します。
11..11
nステップ回転
011..11
方向を切り替えてnステップ回転
0000
アクティブリングの現在の命令を実行しますが、副作用として非アクティブリングの現在の命令も実行します。非アクティブリングの現在の指示が無害な場合、非アクティブリングで何が起こっているかを考えることなく、アクティブリングでの操作に集中できます。これは明確な分離があるため、このプログラムで特に役立ちます。最初に数値リングのみを使用して数値32が作成され、次にopsリングに切り替えてそこで2つの命令を実行します(印刷と終了)。
最初に、メインコードの実行開始時にopsリングで現在の操作をnoopにしたかったのです。これには2つの利点があります。1)メインのWhirlコードをスタンドアロンで実行できること、2)数値リングで32番を作成するときにopsリングを完全に忘れることができること ただし、コードは以前よりも長くなるため、代わりにメインコードは現在の操作がops.one(2)であると想定します。これは、演算の副作用としてops.valueが1に設定され、印刷に使用されることを意味します。古いコードはops.load命令でも同じ効果を達成しましたが、ops.oneを使用すると、ops.valueをゼロ以外に設定するという意図がより明確に表現されます。
at this point current ring is ops, dir = clockwise, cur op = ops.one
00 switch to math ring
011 rotate to math.not
0000 math.not (math.val = 1)
01111 rotate to math.store
0000 math.store (mem[0] = 1)
1 rotate to math.add
0000 math.add (math.val = 2)
01 rotate to math.store
0000 math.store (mem[0] = 2)
011 rotate to math.mult
0000 math.mult (math.val = 4)
0000 math.mult (math.val = 8)
0000 math.mult (math.val = 16)
0000 math.mult (math.val = 32)
011 rotate to math.store
00 math.store (mem[0] = 32), switch to ops ring
up to this point the program is the same as before
01111 rotate to ops.intio
0000 ops.intio - print mem[0] as number
0111 rotate to ops.exit
00 ops.exit
古いコードには、新しい仮定ではなく、プログラムの2番目の部分にいくつかの冗長な方向切り替えがあるため、新しいコードは短くなります。
old: (1111) 00011000001111000010000010000011000000000000000001100 01111110000011100
new: (11) 00011000001111000010000010000011000000000000000001100 011110000011100
インシデント/ワール行の前に何かを変更するときにワールを正しく保つ方法:
0
メインWhirlコードの前に偶数のs があることを確認してください
- 何の二つの連続が存在しないことを確認
0
sが
1
Whirlが再び機能するまで十分なsを追加/削除します。nを追加1
することは、12-nを削除すること1
と同じです。
Ropyを追加すると、知らないうちに最初のルールを破りました。奇数の0
s がある場合、メインコードは、終了命令を中断するopsリングの誤った方向で実行を開始します。その0
ため0
、1 行目で補正する3行目があります。
その他
CoffeeScript:(ここconsole.log a&&39||180
から)
INTERCAL:37行に移動しました
Brainfuck、Agony:10行目で他のBrainfuck派生物に移動しました
xEec:1L_a(h#115# o#
)に移動しました
CSL:行80に移動
Trefunge:行120に移動
Gaot ++、Stones:別の行に配置