概要
mindが、謎なので調べてみた。
練習問題やってみた。
練習問題
mindでweb serverを書け。湯婆婆を実装せよ。
写真
サンプルコード
ヘックスとは
数1は 変数
数2は 変数
数2に 入れ
数1に 0を 入れ
もし 数2が 48に 等しい
ならば
数1に 0を 入れ
つぎに
もし 数2が 49に 等しい
ならば
数1に 1を 入れ
つぎに
もし 数2が 50に 等しい
ならば
数1に 2を 入れ
つぎに
もし 数2が 51に 等しい
ならば
数1に 3を 入れ
つぎに
もし 数2が 52に 等しい
ならば
数1に 4を 入れ
つぎに
もし 数2が 53に 等しい
ならば
数1に 5を 入れ
つぎに
もし 数2が 54に 等しい
ならば
数1に 6を 入れ
つぎに
もし 数2が 55に 等しい
ならば
数1に 7を 入れ
つぎに
もし 数2が 56に 等しい
ならば
数1に 8を 入れ
つぎに
もし 数2が 57に 等しい
ならば
数1に 9を 入れ
つぎに
もし 数2が 65に 等しい
ならば
数1に 10を 入れ
つぎに
もし 数2が 66に 等しい
ならば
数1に 11を 入れ
つぎに
もし 数2が 67に 等しい
ならば
数1に 12を 入れ
つぎに
もし 数2が 68に 等しい
ならば
数1に 13を 入れ
つぎに
もし 数2が 69に 等しい
ならば
数1に 14を 入れ
つぎに
もし 数2が 70に 等しい
ならば
数1に 15を 入れ
つぎに
数1を 数値表示し 改行し
数1を 返す
。
デコードとは
変換後は 文字列実体
文字列1は 文字列
数1は 変数
数2は 変数
数3は 変数
数4は 変数
数5は 変数
文字列1に 入れ
変換後を クリア
数5に 0を 入れ
ここから
文字列1から 一文字切り出し 数1に 入れ
もし 数1が 0に 等しい
ならば
打ち切り
つぎに
数5に 1を 加え 数5に 入れ
もし 数5が 2に 等しい
ならば
数4に 数1を 入れ
数1を 一文字表示し
つぎに
もし 数5が 3に 等しい
ならば
数3に 数1を 入れ
数1を 一文字表示し
つぎに
もし 数5が 5に 等しい
ならば
数2に 数1を 入れ
数1を 一文字表示し
つぎに
もし 数5が 6に 等しい
ならば
数1を 一文字表示し 改行し
数4をつみ ヘックスして 数4に 入れ
数3をつみ ヘックスして 数3に 入れ
数2をつみ ヘックスして 数2に 入れ
数1をつみ ヘックスして 数1に 入れ
数4を 12ビット 左シフトし 数1と ORし 数1に 入れ
数3を 8ビット 左シフトし 数1と ORし 数1に 入れ
数2を 4ビット 左シフトし 数1と ORし 数1に 入れ
数1を 変換後に 一文字追加し
数5に 0を 入れ 改行する
つぎに
繰り返し
変換後を 返すこと
。
乱数種値は 変数。
簡易小数表示とは (小数 → ・)
5桁で 小数形式で表示すること。
一様乱数とは 関数 小数出力
Y2は 変数
Y1は 小数変数
乱数種値を Y2に 入れる
Y2を 13 左シフトし、 Y2と XORし、 Y2に 入れる
Y2を 17 右シフトし、 Y2と XORし、 Y2に 入れる
Y2を 15 左シフトし、 Y2と XORし、 Y2に 入れる
Y2を 乱数種値に 入れる
Y2を 絶対値を 小数化し Y1に 入れる
Y1を 2147483648.0で f割り Y1に 入れる
Y1をもどす
。
湯婆婆とは
文字列1は 文字列
文字列2は 文字列
数1は 変数
数2は 変数
乱数は バイト変数
変換後は 文字列実体 長さ 2048
文字列1に 入れ
文字列1を デコードして 文字列1に 入れ
文字列1を 文字列2に 入れる
変換後を クリア
乱数に 243を 入れる
変換後に 「HTTP/1.1 200 OK」を 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
変換後に 「Content-Type: text/html」を 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
変換後に 「<html><head><meta charset='sjis'/></head><body><h1>server side mind</h1><form method='get' action='index.html'>」を 追加し
変換後に 「入力:<input type='text' name='q' size='30'><input type='submit' value='送信'><br><textarea rows='15' cols='50'>」を 追加し
ここから
文字列1から 一文字切り出し 数1に 入れる
もし 数1が 0に 等しい ならば
打ち切り
つぎに
乱数に 5を 掛け 乱数に 入れる
乱数に 1を 引き 乱数に 入れる
もし 乱数が 127より 小さい ならば
数1を 数2に 入れる
つぎに
繰り返し
「フン。」を 変換後に 追加し
文字列2を 変換後に 追加し
「というのかい。贅沢な名だねぇ。」を 変換後に 追加し
「今からお前の名前は」を 変換後に 追加し
数2を 変換後に 一文字追加し
「だ。いいかい、」を 変換後に 追加し
数2を 変換後に 一文字追加し
「だよ。分かったら返事をするんだ、」を 変換後に 追加し
数2を 変換後に 一文字追加し
変換後に 「</textarea></form></body></html>」を 追加し
変換後を 返すこと
。
レスポンス0とは
変換後は 文字列実体 長さ 2048
変換後を クリア
変換後に 「HTTP/1.1 200 OK」を 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
変換後に 「Content-Type: text/html」を 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
変換後に 「<html><head><meta charset='sjis'/></head><body><h1>server side mind</h1><form method='get' action='index.html'>」を 追加し
変換後に 「入力:<input type='text' name='q' size='30'><input type='submit' value='送信'><br><textarea rows='15' cols='50'>」を 追加し
「契約書」を 変換後に 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
「甲は油屋当主として、乙を油屋に雇用することを」を 変換後に 追加し
「契約し、労働に伴う対価の支払いを右の通り、約定する。」を 変換後に 追加し
「なお、一日の労働の対価は金百円とする。」を 変換後に 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
「甲 油屋当主 湯婆婆」を 変換後に 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
「乙」を 変換後に 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
「契約書だよ。そこに名前を書きな。」を 変換後に 追加し
変換後に 「</textarea></form></body></html>」を 追加し
変換後を 返すこと
。
レスポンス1とは
変換後は 文字列実体 長さ 2048
変換後を クリア
変換後に 「HTTP/1.1 404 Not Found」を 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
変換後に 「Content-Type: text/html」を 追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
0DHを 変換後に 一文字追加し
0AHを 変換後に 一文字追加し
変換後に 「<html><head></head><body>」を 追加し
変換後に 「<h1>404</h1>」を 追加し
変換後に 「</body></html>」を 追加し
変換後を 返すこと
。
メインとは
ホスト名は 文字列
ポート番号は 変数
待ちソケットは 変数
データソケットは 変数
エラーコードは 変数
文字列1は 文字列
文字列2は 文字列
単語1は 文字列
単語2は 文字列
数1は 変数
20231224を 乱数種値に 入れる
「localhost」を ホスト名に 入れ
40001を ポート番号に 入れ
ホスト名と ポート番号と 1個で listenし 待ちソケットに 入れ
エラー?
ならば
エラー文字列で 重大エラー
つぎに
ここから
「start」を 一行表示する
待ちソケットで acceptし データソケットに 入れ
エラー?
ならば
「エラー:」を エラー出力し エラー文字列を 一行エラー出力し
打ち切り
つぎに
ここから
データソケットから ハンドル指定で一行読み出し 文字列1に 入れる
データ終り?
ならば
「[EOF]クライアントが終了しました。」を 一行表示する
打ち切り
つぎに
文字列1から 単語切り出し 単語1に 入れ
文字列1から 単語切り出し 単語2に 入れ
もし 単語1が 「GET」に 等しい文字列
ならば
「get」を 一行表示し
単語2を 一行表示し
単語2から 「q=」を 検索し 数1に 入れ
単語2を 一行表示し
もし 数1が 1より 大きい
ならば
「q=」を 一行表示し
数1を 数値表示し 改行し
数1に 0を 加え 数1に 入れ
単語2を 14だけ 削除し
単語2を 一行表示し
単語2をつみ 湯婆婆を 文字列2に 入れ
つぎに
もし 単語2が 「/」に 等しい文字列
ならば
「/」を 一行表示する
レスポンス0を 文字列2に 入れ
つぎに
文字列2を データソケットに ハンドル指定で一行書き込み
打ち切り
つぎに
もし 単語1が 「POST」に 等しい文字列
ならば
「post」を 一行表示する
レスポンス1を 文字列2に 入れ
文字列2を データソケットに ハンドル指定で一行書き込み
打ち切り
つぎに
「データ = 」を 表示し 文字列1を 一行表示し
繰り返し
繰り返し
。
以上。