wvogel日記

自分用の技術備忘録が多めです.

未使用言語をAtCoderで触る

先日,ふと思い立って,使ったことのない言語を触ってみたくなりました.

ただHello Worldするのは面白みがないので,AtCoderのA,B問題を解いてみました.触ったことないと言いつつ,F#やFortranも含まれているので,触ったけれど記憶が薄れた言語も含まれています.

ソースコードこちら

 

ルール

・1日でやる(あくまで遊び)

AtCoderの同じ問題を解いた他人の提出コードはみない

・「言語名 競技プログラミング」での検索は許す

 

できるだけB問題は関数化なども試しましたが,Kotlin, Ruby, F#に関しては友人と実装速度(もとい検索力)を競いながら書いたのでそんな余裕はありませんでした笑

なお,当初は触ることが目的だったので,上で述べた3言語以外は全て同じ問題セットを解いています.

 

第一言語D言語

いい言語でした.この言語のおかげで他の言語も楽勝や!と思ってしまいました.A・B問題を解く限りではCの文法をそのまま使うだけなので,抵抗は感じませんでした.これは非常に大事ですね.マルチパラダイムな機能をもっと色々試したくなりました.

第二言語:Go

適当に書いたら,関数宣言や変数の型の宣言方法がこれまでみたことない形式なので戸惑いました.あと,{}の改行位置でエラーが出るのは勘弁してほしい.推論機能がコンパイル時にどれだけ厳しく検査されるのか今回は見ることがなかったので,今思うと少し勿体無かった.

第三言語:Fortran

こいつに一番苦しみました.おかしいな...昔触ったことがあるなのに...最も初期に誕生した高級言語であることをすっかり失念していて,if分が一行でかけないことや入出力方法の検索に苦労しました.Fortranに関しては,よもや口伝で実装方法を伝承してきたのかと思うほどに情報があちこちに分散していて非常に学習コストが高かったです.まあ一度慣れれば非常にシンプルなんですが.

昨今のスパコン事情を知りませんが,できれば触りたくない言語です.

第四言語:OCaml

唯一,main関数の書き方でつまずきました.まさか単語mainが出てこないとは思いませんでした.Fortranでさんざ苦しんだ後なので,パターンマッチに出会えて文明世界に戻ったようで嬉しかったです.純粋関数も副作用をもつ関数も渡し合うことが可能でやや戸惑いましたが,実装は非常に楽です.しっかり関数化すればあまり恐れることはないように思います.

第五言語:Kotlin

いままでずっと(コットリン)と読んでいました.Kotlinユーザには常識でしょうか,varとvalの違いにハマりました.また,些細ですがuntil文法は可読性をあげるいい例だと感じます.C#的で割と素直な言語ですね.最近ユーザーが伸びていると聞きますが,他にも理由があるのでしょう(調べる気0)

 第六言語:Ruby

今回チャレンジした中で唯一の国産言語を初体験です.kotlinに似ているようで,ややfortranみも感じました.あとelsifってなんですか?elifがelse ifじゃだめなんでしょうか.割とサクサク実装できましたが,少しモヤモヤしてしまいます.いやまあPythonにももやもやしているのでそれと同種のものでしょう.

第七言語:F#

学生時代に.Netアプリケーションも作ったことあるのでサクサクいけるだろうと思ったらすっかり記憶から抜けていました.しかしOCamlで慣れた後なのでそれほど苦しむ事もありません.ただ型推論が不完全らしいので,大規模開発するときの苦労が気になります.

 

まとめ

頭の体操にはちょうど良かったです.

ただ,一番苦労したのは,gitアカウントの切り替えに伴うgitの設定だったかもしれません.

いや,やっぱりFortranの入出力か.

以上