mindの研究 その60

# 概要
mindが、謎なので調べてみた。
練習問題やってみた。

# 練習問題
mindでweb serverを書け。湯婆婆を実装せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/a99a47e5-f088-b5ae-b9e2-68633c15a5b3.png)

# サンプルコード

```

ヘックスとは
　数1は　変数
　数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を　入れ　改行する
　　つぎに
　繰り返し
　変換後を　返すこと
。

乱数種値は　変数。 

簡易小数表示とは　（小数　→　・）
	５桁で　小数形式で表示すること。

一様乱数とは　関数　小数出力
	Ｙ２は　変数
	Ｙ１は　小数変数
	乱数種値を　Ｙ２に　入れる
	Ｙ２を　１３　左シフトし、　Ｙ２と　ＸＯＲし、　Ｙ２に　入れる
	Ｙ２を　１７　右シフトし、　Ｙ２と　ＸＯＲし、　Ｙ２に　入れる
	Ｙ２を　１５　左シフトし、　Ｙ２と　ＸＯＲし、　Ｙ２に　入れる
	Ｙ２を　乱数種値に　入れる
	Ｙ２を　絶対値を　小数化し　Ｙ１に　入れる
	Ｙ１を　2147483648.0で　ｆ割り　Ｙ１に　入れる
	Ｙ１をもどす
。

湯婆婆とは
　文字列１は　文字列
　文字列２は　文字列
　数１は　変数
　数２は　変数
　乱数は　バイト変数
　変換後は　文字列実体　長さ　2048
　文字列１に　入れ
　文字列１を　デコードして　文字列１に　入れ

　文字列１を　文字列２に　入れる
　変換後を　クリア
　乱数に　２４３を　入れる
　変換後に　「HTTP/1.1 200 OK」を　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　変換後に　「Content-Type: text/html」を　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　変換後に　「<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'>」を　追加し
　ここから
　　文字列１から　一文字切り出し　数１に　入れる
　　もし　数１が　０に　等しい　ならば
　　　打ち切り
　　つぎに
　　乱数に　５を　掛け　乱数に　入れる
　　乱数に　１を　引き　乱数に　入れる
　　もし　乱数が　１２７より　小さい　ならば
　　　数１を　数２に　入れる
　　つぎに
　繰り返し
　「フン。」を　変換後に　追加し
　文字列２を　変換後に　追加し
　「というのかい。贅沢な名だねぇ。」を　変換後に　追加し
　「今からお前の名前は」を　変換後に　追加し
　数２を　変換後に　一文字追加し
　「だ。いいかい、」を　変換後に　追加し
　数２を　変換後に　一文字追加し
　「だよ。分かったら返事をするんだ、」を　変換後に　追加し
　数２を　変換後に　一文字追加し
　変換後に　「</textarea></form></body></html>」を　追加し
　変換後を　返すこと
。

レスポンス0とは
　変換後は　文字列実体　長さ　2048
　変換後を　クリア
　変換後に　「HTTP/1.1 200 OK」を　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　変換後に　「Content-Type: text/html」を　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　変換後に　「<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'>」を　追加し
　「契約書」を　変換後に　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　「甲は油屋当主として、乙を油屋に雇用することを」を　変換後に　追加し
　「契約し、労働に伴う対価の支払いを右の通り、約定する。」を　変換後に　追加し
　「なお、一日の労働の対価は金百円とする。」を　変換後に　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　「甲　油屋当主　湯婆婆」を　変換後に　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　「乙」を　変換後に　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　「契約書だよ。そこに名前を書きな。」を　変換後に　追加し
　変換後に　「</textarea></form></body></html>」を　追加し
　変換後を　返すこと
。

レスポンス1とは
　変換後は　文字列実体　長さ　2048
　変換後を　クリア
　変換後に　「HTTP/1.1 404 Not Found」を　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　変換後に　「Content-Type: text/html」を　追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　０DＨを　変換後に　一文字追加し
　０AＨを　変換後に　一文字追加し
　変換後に　「<html><head></head><body>」を　追加し
　変換後に　「<h1>404</h1>」を　追加し
　変換後に　「</body></html>」を　追加し
　変換後を　返すこと
。

メインとは
　ホスト名は　文字列
　ポート番号は　変数
　待ちソケットは　変数
　データソケットは　変数
　エラーコードは　変数
　文字列１は　文字列
　文字列2は　文字列
　単語1は　文字列
　単語2は　文字列
　数1は　変数
　20231224を　乱数種値に　入れる
　「localhost」を　ホスト名に　入れ
　40001を　ポート番号に　入れ
　ホスト名と　ポート番号と　１個で　ｌｉｓｔｅｎし　待ちソケットに　入れ
　エラー？
　ならば
　　エラー文字列で　重大エラー
　つぎに
　ここから
　　「start」を　一行表示する
　　待ちソケットで　ａｃｃｅｐｔし　データソケットに　入れ
　　エラー？
　　ならば
　　　「エラー：」を　エラー出力し　エラー文字列を　一行エラー出力し
　　　打ち切り
　　つぎに
　　ここから
　　　データソケットから　ハンドル指定で一行読み出し　文字列１に　入れる
　　　データ終り？
　　　ならば
　　　　「[EOF]クライアントが終了しました。」を　一行表示する
　　　　打ち切り
　　　つぎに
　　　文字列１から　単語切り出し　単語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を　データソケットに　ハンドル指定で一行書き込み
　　　　打ち切り
　　　つぎに
　　　「データ ＝ 」を　表示し　文字列１を　一行表示し
　　繰り返し
　繰り返し
。





```

以上。