Naomi's notebook

Naomi's notebook

Cubixメモ

esolangs.org
ここに書いてある以上のことはないんだけど、英語だし表現が少しわかりにくいので(回転とかsidestepとか)自分用にメモ

コマンド一覧

入出力
i - 入力から一文字読み込む、入力がなければ-1
I - /-?\d+/ iにマッチするまで(例:改行や空白区切りなど)の全ての入力を読み込み、整数としてスタックに格納。整数が発見されなければ0(終了含む)
A - -1を格納した後、残っている全ての入力の文字コードを逆順に格納(ex: 'ab'=-1,98,97)
o - 一番最近格納した数字を文字コードとして対応する文字を出力
O -一番最近格納した数字を数字として出力

演算
( - 一番最近格納した数字をデクリメント
) - 一番最近格納した数字をインクリメント

  1. - (二番めに最近に格納した数字second)+(一番最近に格納した数字top) の値を新たに格納

- - second-top の値を新たに格納

* - second×top の値を新たに格納
, - second//top の値を新たに格納
& - second,top を単純に結合した値を新たに格納
n - 一番最近格納した数字に-1を掛ける
~ - 一番最近格納した数字のbitwise NOTをとる、まあわかりやすくいえばx:-1-xにする
a - second&top 
b - second|top
c -second^top

スタック操作
: - topを複製
; - topをスタックから削除
# - スタックに格納されている要素数を新たに数字として格納
s - secondとtopを入れ替える
r - 3つをローテーション(1,2,3->3,1,2)
q - topをbottomにおくる
t -topであるXを消去し、スタックに残っている数の中からtopを0番目としてX番目をtopに送る(ex:1 2 3 4 5 6 7 5 t ->1,3,4,5,6,7,2)
X番目が存在しない場合はbottomをtopに送る


文字列
0-9 - その数字をスタックに格納
' - 次に踏む文字の文字コードを格納
" - ""で囲まれた全ての文字の文字コードをスタックに格納
N -\n(=10)を格納
S -space(=32)を格納
Q - "(=34)を格納

流れの制御
. - 何もしない
/ \ - このマスを踏んだ瞬間進路を斜めにずらす(こういう形の壁があるつもりで)

| _-このマスを踏んだ瞬間この文字に垂直に進んできた場合は反射される(進行方向が逆になる)
T -このマスを踏んだ瞬間どの方向から来ても反射される(進行方向が逆になる)< ^ > v - このマスを踏んだ瞬間指し示す方向に進路が変わる
D - このマスを踏んだ瞬間ランダムな方向に進路が変わる
L,R - このマスを踏んだ瞬間(現在の進行方向から見て)左,右に進行方向が変わる
U,u - このマスを踏んだ瞬間(現在の進行方向から見て)左,右に進行方向が変わり、さらに次のマスでもう一回左,右に進行方向が変わる(”Uターン”)
W,w - このマスを踏んだ瞬間(現在の進行方向から見て)左,右に進行方向が変わり、さらに次のマスでもう一回右,左に進行方向が変わる(”サイドステップ”)
$ - 次に踏んだマスの指示を飛ばす
! - topが0ではない時次の指示を飛ばす
? - topが負なら左、正なら右に曲がり、0なら何もしない
@ - プログラムを終了

テクニック

というほどのものでもないが、基本的なアイデア

  • # t ( q は最初にスタックに入れた回数をループするのに使える(常にbottomが残りの繰り返し数となる。)
  • Uターンは字数稼ぎに使いやすい
  • サイドステップは迎合に使いやすい