Esolangとは?
Esolang とは Esoteric programming language の略であり,日本語で言えば難解プログラミング言語のことである.
実用性よりは,プログラミングが難しくなるように設計されている.
実行方法は?
自分で,インタプリタをビルドしても良いが,Try it Online を使うのが楽である.
おすすめのサイト
- Try it Online , webページ上でEsolangを実行できるサイト
- Esolang wiki Esolangについてのドキュメントが抱負なwiki(英語)
- esolang-box Esolang のコンパイラやインタプリタがたくさん詰まったDockerイメージ
05AB1Eの概要
スタック指向言語.ゴルフ言語.
スタック指向言語とは?
主にスタックを操作することによって,計算する言語.
ゴルフ言語とは?
ソースコードができるだけ短く書けるように設計された言語.
コード
- AtCoderでテストしてもらえないため,問題ページに載っている入力例しか試していません.
- ゴルフ言語ではあるが,ソースコードを短くする努力は(あまり)していません.
- もっと短い書き方があるよってという場合はぜひコメントしてください!
Helloworld
"Hello, worldd!
"
で囲うと文字列リテラルが作れる.
最後の"
は省略できる.
stackの一番上が最後に自動的に出力される
Cat(1行)
I
I
入力1行をpushする
AtCoder 0
II#OOðIJ
-
I
入力1行をpushする -
I#
入力1行を空白で分けてlistにしpushする -
O
popし,listの合計をpushする -
O
stackをすべてpopし合計をpushする -
ð
空白をpushする -
I
入力1行をpushする -
J
stackをすべてpopしすべてを結合してpushする
O
,J
のように,stackの一番上がlistならばlistに対して機能し,そうでなければstack全体に対して機能するcommandがある.
AtCoder 1
"Odd"I#PÈi"Even"
-
"Odd"
をpush -
I#
入力1行を空白で分けてlistにしpush -
P
popし積を取る -
È
popし偶数なら1を,奇数なら0をpush -
i"Even"
popし1なら"Even"をpush
i<commands>}
はpopして1ならば,}までのを実行する.が1つだけならば,}は省略できる.
偶数の場合は,"Odd", "Even"が最終的なstackになり, "Even"が出力される.
奇数の場合は."Odd"が最終的なstackになり, "Odd"が出力される.
AtCoder 2
ISO
-
I
入力1行をpush -
S
popし文字列を文字のリストに -
O
popしリストの合計をpush
数字の文字列と数字は区別されない 123 == "123"
AtCoder 3
0UII#D[vyÉi1U¾}}X#ε2÷}D¼]
-
0U
Xを0で初期化 -
I
入力1行をpush,この値は使わない -
I#
入力1行を空白で分けてlistにしpush -
D
popし2度push -
[...]
無限ループ#
で脱出 -
v<commands>}
popし,各要素についてを実行する.現在の要素はyで取得する -
y
現在の要素をpush -
É
popし奇数であれば1をpush,そうでなければ0をpush -
i1U¾}
popし1であれば,X=1とし,カウンタをpushする -
}
vループの終わり -
X#
Xをpushし1ならば無限ループを終わる -
ε2÷}
popしすべての要素を2で割ったlistをpush -
D
popし2度push -
¼
カウンタを1増やす -
]
無限ループの終わり
AtCoder 4
執筆中
AtCoder 5
0VI#`>U<sƒNSOX‹iDNSO‹iYN+V]Y
-
0V
Yを0で初期化 -
I#`
入力を空白でスプリットして,stackに展開 stack:[N, A, B] -
>U
インクリメントして,Xに代入 stack:[N, A], X=B+1 -
<
デクリメント stack:[N, A-1] -
s
stackの上2つをスワップ stack:[A-1, N] -
ƒ
popして0~Nでループ stack:[A-1] -
NSO
ループのインデックスの数の各桁を合計する -
X‹
popしてXより小さいなら1をpush,そうでないなら0をpush -
i
popして1であるなら,次の命令を実行 -
D
スタックのトップを複製 stack:[A-1, A-1] -
NSO
ループのインデックスの数の各桁を合計する -
‹
A-1 < インデックスの数の各桁の合計 を判定 真なら1をpush,そうでなければ0をpush -
i
popして1であるなら,次の命令を実行 -
YN+V
Yに対してインデックスを足す -
]
すべてのループとifのブロックを閉じる -
Y
Yをpush
AtCoder 6
執筆中