#include <stdio.h>
int main(){
char gr1[17] = "ABCDEFGHIJKLMNOP";
char gr2[21] = "";
int j = 0; //gr3 …gr1の何ループ目?
int k = 0; //gr4 …gr3のカウンタ、4の倍数何回通った?(改行が含まれることで起こるズレの補正)
int m = 0; //gr5 …gr2のどこにいれるの?
//gr6 …取ってきたg1の部分の値gr1 + j をアドレスを持ち、後で役割が変わり、LDで値が突っ込まれる。これをST命令でgr5の場所に突っ込む。
//レジスタが足りないので、他で使われていないからって、代わりにpの代わりや、
//j - 15を格納しておくための場所として使われたりと可哀想な子。
int n = 4; //gr7 …4の倍数だっけ?
char p = '\n'; //gr6に直接ASCIIコードである10が放り込まれるのでCASL2には居ない子。
char q = '\0'; //CASL2には元々必要ない子
//多少意識してわざわざ計算式を分けたりしているが
//あくまでC言語側は見やすくするために書いているのでCASL2完全べったりではない。
//例えば、gr5はCASL2側ではmではなくgr1 + mが格納されている。
//あまり関係ないが、どうも代入演算子が返り値をもつという概念が苦手で、
//while(a = fread(hoge,1)){
//みたいな書き方苦手なため、外で変数定義して、中でbreakする方が好き。個人的には。
while(1){
m = 0;
m = m + j;
m = m + k;
gr2[m] = gr1[j];
n--;
if(n == 0){
k= k + 1;
m = 0;
m = m + j;
m = m + k;
gr2[m] = p;
n = 4;
}
if(j - 15 == 0){
break;
}
j++;
}
gr2[20] = q;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbigpewoJY2hhciBncjFbMTddID0gIkFCQ0RFRkdISUpLTE1OT1AiOwoJY2hhciBncjJbMjFdID0gIiI7CglpbnQgaiA9IDA7CS8vZ3IzIOKApmdyMeOBruS9leODq+ODvOODl+ebru+8nwoJaW50IGsgPSAwOwkvL2dyNCDigKZncjPjga7jgqvjgqbjg7Pjgr/jgIE044Gu5YCN5pWw5L2V5Zue6YCa44Gj44Gf77yfKOaUueihjOOBjOWQq+OBvuOCjOOCi+OBk+OBqOOBp+i1t+OBk+OCi+OCuuODrOOBruijnOatoykKCWludCBtID0gMDsJLy9ncjUg4oCmZ3Iy44Gu44Gp44GT44Gr44GE44KM44KL44Gu77yfCgkJCS8vZ3I2IOKApuWPluOBo+OBpuOBjeOBn2cx44Gu6YOo5YiG44Gu5YCkZ3IxICsgaiDjgpLjgqLjg4njg6zjgrnjgpLmjIHjgaHjgIHlvozjgaflvbnlibLjgYzlpInjgo/jgorjgIFMROOBp+WApOOBjOeqgeOBo+i+vOOBvuOCjOOCi+OAguOBk+OCjOOCklNU5ZG95Luk44GnZ3I144Gu5aC05omA44Gr56qB44Gj6L6844KA44CCCgkJCS8v44Os44K444K544K/44GM6Laz44KK44Gq44GE44Gu44Gn44CB5LuW44Gn5L2/44KP44KM44Gm44GE44Gq44GE44GL44KJ44Gj44Gm44CB5Luj44KP44KK44GrcOOBruS7o+OCj+OCiuOChOOAgQoJCQkvL2ogLSAxNeOCkuagvOe0jeOBl+OBpuOBiuOBj+OBn+OCgeOBruWgtOaJgOOBqOOBl+OBpuS9v+OCj+OCjOOBn+OCiuOBqOWPr+WTgOaDs+OBquWtkOOAggoJaW50IG4gPSA0OwkvL2dyNyDigKY044Gu5YCN5pWw44Gg44Gj44GR77yfCiAJY2hhciBwID0gJ1xuJzsgIC8vZ3I244Gr55u05o6lQVNDSUnjgrPjg7zjg4njgafjgYLjgosxMOOBjOaUvuOCiui+vOOBvuOCjOOCi+OBruOBp0NBU0wy44Gr44Gv5bGF44Gq44GE5a2Q44CCCiAJY2hhciBxID0gJ1wwJzsgIC8vQ0FTTDLjgavjga/lhYPjgIXlv4XopoHjgarjgYTlrZAKCiAgICAgICAgLy/lpJrlsJHmhI/orZjjgZfjgabjgo/jgZbjgo/jgZboqIjnrpflvI/jgpLliIbjgZHjgZ/jgorjgZfjgabjgYTjgovjgYwKCS8v44GC44GP44G+44GnQ+iogOiqnuWBtOOBr+imi+OChOOBmeOBj+OBmeOCi+OBn+OCgeOBq+abuOOBhOOBpuOBhOOCi+OBruOBp0NBU0wy5a6M5YWo44G544Gj44Gf44KK44Gn44Gv44Gq44GE44CCCgkvL+S+i+OBiOOBsOOAgWdyNeOBr0NBU0wy5YG044Gn44GvbeOBp+OBr+OBquOBj2dyMSArIG3jgYzmoLzntI3jgZXjgozjgabjgYTjgovjgIIKCiAgICAgICAgLy/jgYLjgb7jgorplqLkv4LjgarjgYTjgYzjgIHjganjgYbjgoLku6PlhaXmvJTnrpflrZDjgYzov5TjgorlgKTjgpLjgoLjgaTjgajjgYTjgYbmpoLlv7XjgYzoi6bmiYvjgafjgIEKICAgICAgICAvL3doaWxlKGEgPSBmcmVhZChob2dlLDEpKXsKICAgICAgICAvL+OBv+OBn+OBhOOBquabuOOBjeaWueiLpuaJi+OBquOBn+OCgeOAgeWkluOBp+WkieaVsOWumue+qeOBl+OBpuOAgeS4reOBp2JyZWFr44GZ44KL5pa544GM5aW944GN44CC5YCL5Lq655qE44Gr44Gv44CCCgoJd2hpbGUoMSl7CgoKCQltID0gMDsJCgkJbSA9IG0gKyBqOwoJCW0gPSBtICsgazsKCQlncjJbbV0gPSBncjFbal07IAoJCW4tLTsJCQoJCWlmKG4gPT0gMCl7CgkJCWs9IGsgKyAxOwoJCQltID0gMDsKCQkJbSA9IG0gKyBqOwoJCQltID0gbSArIGs7CgkJCWdyMlttXSA9IHA7CgkJCW4gPSA0OwoJCX0KCQlpZihqIC0gMTUgPT0gMCl7CgkJCWJyZWFrOwoJCX0KCQlqKys7Cgl9CglncjJbMjBdID0gcTsKCXByaW50ZigiJXMiLGdyMik7CQp9