一生世界と挨拶する悲しい生き物
一生世界と挨拶するという字面だけだと極めて愉快な生き物に見えますね……。しかしながら、現実は違います。分かりもしないくせに、プログラミングに手を出す悲しい生き物。それが僕。今日はそんな僕が一念発起して、プログラマ転職をめざすも無残に失敗した愉快な話(実話)を……、しようと思いましたが僕が辛くなるのでやめにします。あー、でも面接とかでやられた「マサカリ投げマウンティング」の話とかは面白いかもしれないなって思うからどこかでやりたいね(遠い目)。
深い悲しみに包まれた僕はPaizaに手を染める
そんなこんなで、僕は再びPaizaに手を染めてしまうのだった。今回は前回SQLの続きってことで飛ばしていた練習B問題までを解いていきました。
今回はSQLと違い言語が選べます。本来ならば手慣れた言語を使うのが良いのですが、あいにく僕はなんのスキルも持ち合わせていません。そんな【世界と挨拶するもの(ワールド・グリーター)】である僕が今回チョイスした言語はGo言語です。なぜかといえば、Go is God だからです。それじゃあ、今回のレギュレーションの話をしましたので早速始めていきましょうか。
はい、よーいスタート。
■ D問題やっていきます。
まずは、掛け算です。受験言語に「Go」という文字が出てくるだけで選択して良かったってなりますね(ない)。実は問題よりも標準入力の取り方の方が難しいのではと噂のD問題です。入力値がシンプルな形式なら以下のやつでいけるようです。
package main import "fmt" func main() { var A int fmt.Scan(&A) }
ちなみに、これ解法じゃないのでこれで100点にはなりませんのであしからず。
お次は足し算です。特に内容に違いはなく掛け算のときと似たような感じで解けます。
お次は並べ替え問題です。Go言語ってソート関数あったかなってググりながらやったやつです。結果的に以下のやつ使えばソートできるらしいですね。
data := []int{3, 4, 1, 2, 5} sort.Ints(data)
そんなこんなでD問題終えました。
■ C問題やっていきます。
FizzBuzzやりました。C問題区分だけど100点通過でもD判定でした。頑張ったら100点超えるんですかね?まあ、有名なやつだしこうなってしまうんですかね?
ちなみに、解き方としては以下のような感じです。
① ループ回数の取得
② FizzBuzzの条件分岐の記述
単語のカウントやりました。こちらはC問題として認識されました。やったぜ。この辺りから入力値をとるのが面倒くさい感じになってきますね。以下のようにするといけるそうです。
package main import ( "bufio" "fmt" "os" ) var sc = bufio.NewScanner(os.Stdin) func main() { var s string if sc.Scan() { s = sc.Text() } }
これをループして取得していけばまあ、どんな数でも取得できるようになります。で……、そんなのは問題じゃないんですよ。単語のカウントは連想配列的なやつ使えば行けるでしょうとか思ってmap使ったら見事にハマりました。そう、こいつ取り出す順番がランダムなんですよ。仕方なくスライスでごにょごにょして事なきを得ました。どうやるのが奇麗なやり方なんですかね?
終えました。
■ B問題やっていきます。
終えました。処理の仕方よりもGo言語の仕様のほうに苦戦した記憶しかない。本当はもっといい書き方あるんだろうと悔やまれる結果になりました。まあ、パスしたので二度と見返さないだろうけど……。愚直に一時値スライスと変化値スライスを用意して変化値で何かあったら一時値に戻すみたいな実装になってしまいました。
あと、適当にやっても動くしええやろとか思ってたスライス、参照渡しと値渡しでつまづくことにもなった。copy()
使わないと結果おかしくなるのね。トホホ…。
そうしたわけでB問題まで終了です。
完走した感想(激うまギャグ)
慣れてないならスクリプト言語でやっていくほうが良いですね。初めてなのに実行速度を追求したくなってしまってGo言語を選んだのはなかなかにチャレンジングでした。そして見事仕様にハマりました。まあ、それでもGo言語の仕様を理解する機会ができたので良かったです。上では、ポンポン解いているように見えますが実装に割と時間かかってます。
そして残ってしまったA、S問題どうしましょうかね。全く問題見てないからアレですけど、ブログ用の仕込みに結構時間かかるかもしれない……。あと、問題量も多い。とりあえずは今後も別言語でB問題まで解き続けるのをやっていきたいなって考えてます。今回やってみて、思ったより言語仕様を理解するのに役立ったので……。
それにアルゴリズムあんまり理解してない……。雰囲気で実装すればいけそう感あるけど、ブログに記録として残すからにはナレッジとして残したいじゃないですか。
まあ、そんな感じで僕は雰囲気でコーディングしてるんですよ。そして、これだけは言わせてください。
Go is God
あと、放置してたGoツアーやってみた話終わらせたい。