異世界で俺だけがプログラマー~転生して蘇った前世の知識は魔王級。家族には捨てられたけど、世界法則には気に入られた気がする。帰って来てくれと言われても、もう遅い。プログラム的呪文で最強無双~
第428話 スタートと、始まりと終わりと、積み木
閑話 短編賞創作フェスのお題
第428話 スタートと、始まりと終わりと、積み木
「ええとプログラムってスタートとストップがたくさんあってややこしい」
俺は婚約者のマイラにプログラムを教えてたところ、マイラがすねたように愚痴った。
俺が転生したこの異世界、魔法の呪文がプログラムでもオッケーだ。
「そんなことないよ。大抵は対になってる」
「そうなんだけど」
「『{』がスタートで、『}』がストップ。簡単だろ」
void main(void)
{
i=0;
if(i==0){
printf("iはゼロです");
}
else{
printf("iはゼロではありません");
}
}
俺は例題を書いた。
「こんなプログラムがあったとして、対になっているのが分かるだろ」
「そこなのよ」
void main(void)
{
i=0;
if(i==0){
printf("iはゼロです");
}←ここが納得いかない。
else{
printf("iはゼロではありません");
}
}
マイラがプログラムのある部分を指差した。
「ここが納得いかない。だって対なら最初の所と対でしょ」
void main(void)
{←ここと。
i=0;
if(i==0){
printf("iはゼロです");
}←ここが対のはず。
else{
printf("iはゼロではありません");
}
}
「それを理解するにはスタックという考え方が必要なんだ」
void main(void)
{←スタート1。1を積む。
i=0;
if(i==0){←スタート2。2を1の上に積む。
printf("iはゼロです");
}←上からしか取れないから、スタート2を取り出す。それのエンド。
else{←スタート3。3を1の上に積む。
printf("iはゼロではありません");
}←上からしか取れないから、スタート3を取り出す。それのエンド。
}←上からしか取れないから、最後に残ったスタート1を取り出す。それのエンド。
「分かったかな。要は縦に積むだけの積木だよ」
「むーん。プログラム嫌い」
「積み木だから、常に上のしか取り出せない。こんなに簡単なのに」
「スタートと終わりのないプログラムを組みたい」
「完全には無理だけど、できるよ」
void main(void)
{
fire_ball();
}
例題を書いた。
「一個だけなら許せる」
「二個は許して欲しいな」
void fire_ball10(void)
{
for(i=0;i<10;i++){
fire_ball();
}
}
void main(void)
{
fire_ball10();
}
「こんなのはどう?」
「むきー、わけ分かんないよ。どことどこが対なのかもうパニック」
異世界の人間にプログラムは難しいらしい。
void fire_ball10(void)
{
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
}
void main(void)
{
fire_ball10();
}
「じゃあこれなら分かる?」
「ええと分かんない」
void main(void)
{
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
fire_ball();
}
「これなら」
「それなら許す」
「オッケー、分岐なしの一本道プログラムね。でもそれじゃ限界が来る」
「いいのよ限界が来ても。これで十分。C言語で魔法を唱えると効率が何万倍にもなるんでしょ。その恩恵だけで構わない」
うん、一筆書きみたいなプログラムしか受け付けないらしい。
まあ良いか。
今俺が使っているファイヤーボールの呪文はこうだ。
extern MAGIC *fire_make(float mana);
extern void magic_straight(MAGIC *mp,char *orbit,int orbit_size);
extern void magic_move(MAGIC *mp,char *orbit,int orbit_size);
void main(void)
{
char orbit[2000]; /*軌道データ*/
MAGIC *mp; /*魔法構造体*/
mp=fire_make(0.0001); /*火の玉作成*/
magic_straight(mp,orbit,sizeof(orbit)); /*真っ直ぐの軌道データを入れる*/
magic_move(mp,orbit,sizeof(orbit)); /*火の玉を動かす*/
mclose(mp); /*魔法終わり*/
}
確かに一筆書きのプログラムだが、『main(void)』からして実は『(』がスタートで『)』が終わりだ。
こういう小さい始まりと終わりを含んでる。
『magic_straight(mp,orbit,sizeof(orbit));』の部分も『(』の入れ子状態。
終わりと始まりが2重になってる。
さっきの積み木を思い出せば簡単に分かるけどな。
「やった。フャイヤーボールの魔法がプログラム的魔法で出来たよ。こんなプログラムなら楽勝よ」
マイラから火の玉が飛んだ。
色々な始まりと終わりがあることは言わないでおこう。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます