パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

OCaml言語をマスターするためにたたきこんでみる

2021-11-08 | ML系言語に挑む

ようやく何かがつかめてきたOCaml。ここでホッとして次に行くと、あっという間に忘れてしまう。

そんな気がしたのでもう少し問題を解いて たたきこんでみることにしました。

4年ぐらい前に別の言語で解いた問題を解析しながら、

 

 

Don't Panic - Episode 1

 

何をしているかというと、ロボットがフラフラと上に移動するために

各フロアの上に向かうポータルの位置と違った方向に向かっている時にBLOCKしています。

各ターン、フロアと方向を入力され、あらかじめ作っていたフロアガイドにしたがって誘導します。

 

ハッシュテーブルで各階をキーにポータルの位置を値として設定しています。

フラフラしているのは銀河系ヒッチハイク・ガイドに登場する ゆううつなロボットさんです。

復習ポイントは1行目ハッシュテーブル作成 9行目追加 17行目検索といった所でしょうか。

 

 

 

There is no Spoon - Episode 1

マップ上に存在するグリッドを無駄なくつないでいきます。

マップは一行の文字列に展開して解いています。

プログラムで間違った出力をしたさい、こちらの戦闘ロボは巨大な戦闘機群に足場以外ふっとばされます。

2行目のsearchもう少しなんとかしたかった所です。

 

 

The Fall - Episode 1

まず、迷路のデータがタイル番号で渡され(チクタクバンバンの下のようなものです)

各ターン 現在の座標、移動している向きが渡されます。

迷路をタイル番号を取得して、そのタイルの形式から、移動している向きから次の座標をかえします。

 

過去のプログラムはタイル情報をなんらかのデータ化しているようですが意味がよくわからなかったので、

新たに作り直しました。

タイルデータははベタにコーディングしてみました。

 

あと彼の名前はインディです。

2行目でリストを参照型で定義して、5行目で文字列をスペースで分割してリストに結合しています。10行目でリストの(x+y*w)番目を取得しています。

 

 

異世界に転生してプログラムチートをされたい方でML系言語をやったことのない方は

この言語をやってみると異世界に転生したぐらいのカルチャーショックを受けられるかもしれません。

コンピュータ業界のパラダイムシフトの訓練に向いています。

 

 

<ポイント>

定義系は最期 in その他は

for ifはbasic系

if thenで複数実行したいときは()で括りカッコ内の最期の命令は;が不要

関数の定義読み出しで引数などは " "スペースで区切る。全体の()は不要、ただし1つの引数に計算などがある場合にその引数に()が必要

refの再代入は :=  ref変数の取得時は前にマークが必要

コメントは (*                  *)のみ

少数系の計算式 + - * /には後ろに小数点が必要  +.  -.  *.  /.

パターンマッチングが強力らしいという噂

int_of_string  float_of_string 型変換はこんな感じ

 

 

 

最初の頃は何を言っているのかさっぱりわからなかったのですが、慣れてくると ocaml.orgが最強です。

<参考文献>

https://ocaml.org/api/List.html

https://ocaml.org/api/String.html

https://ocaml.org/api/Hashtbl.html

https://www.codingame.com/training/medium

 

最初の頃は一問も解けないと思っていたOCaml

CodinGameで5番目に問題数を多く解いた言語になりました。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。