paizaの問題を解き始めるまで大変だったのでそのtips

paizaの問題を解き始めるまで大変だったのでそのtips

皆さんは paiza を知ってますか? エンジニアのコーディングスキルを測り、それをもとに転職しよう! というサービスです。いわゆる競技プログラミングですね。 競技プログラミングは苦手なので練習のためやっています。 ちなみに似たサービスとしてCodeIQもあります。 違いとしては、 CodeIQ オファーは受けるのみ(応募できない) 出題者が明記されている だれでも出題できるので、問題の難易度にバラつきあり paiza オファーも来るし応募もできる 出題者が明記されていない だれでも出題できるわけではないので、問題の難易度に安定感がある みたいな違いがあります。 対して変わらないので、好きな方をやればいいと思います。 ちなみに私はpaiza派です。 言語 paizaであれば利用可能な言語は、 C C++ C# java Python Ruby Perl PHP Javascript があります。 メジャーどころは揃っているので、好きな言語を使えばいいと思います。 ちなみに、paizaでは実行速度も計測されるので、ガチな人はCとかですかね。 単純な書きやすさで言えばRubyかな、と。 ただ問題を解くだけじゃなく、オファーを受け取ったりしたい人は、 仕事で書きたい言語を使用する必要がありそう。 また、競技プログラミング上は変数名やメソッドなど必要ありませんが、 オファーを出す企業側がコードをチェックするので、その場合もいい感じの変数名にしたり、 細かくメソッドをつくったりというのはやっていいんじゃないかと。 標準入力を受け取る 実際に問題にとりかかる際に、標準入力を受け取る部分の コードが必要になります。 paizaでは、提出後に複数のテストケースにかけられますが、 どの問題も、 「提出したコードの実行(標準入力による値の取得、計算処理)→標準出力→正誤の判定」 という流れなので、標準入力を取得する部分のコードは必須になります。 この標準入力を取得する部分に苦戦しました。 簡単な問題は標準入力が1行だけなので、 サンプルコード をちょびっといじればよかったのですが、 問題が難しくなり、標準入力が複数行のものになると、 サンプルコードがほとんど役立たずでした。 問題を解きたいのに、問題を解く前の時点でつまずくと 非常にやる気を削がれるので、僕が使った言語の標準入力のサンプルを記載します。 まずはJavascriptです。 これはほぼサンプルコードそのままです。 process.stdin.resume(); process.stdin.setEncoding('utf8'); process.stdin.on('data', function (chunk) { var line = chunk.toString(); console.log(line); }); 次にRuby。 これはサンプルコードが使い物になりませんでした。 サンプルだと標準入力の1行分しかとれません。 そして短くて書きやすいです。 file = $stdin line = file.readlines file.close puts line 最後にphp。 これもRubyと同じく、複数行が取得できませんでした。 <?php while ( !

フロントもサーバーもrubyで完結するフレームワークのvoltを触ってみた

フロントもサーバーもrubyで完結するフレームワークのvoltを触ってみた

voltとは rubyのフレームワークで、フロントもサーバーもrubyで書いちゃおうってやつです。 javascriptの実装はOpalを使っているみたいです。 全体的に小難しくなく、直感的に書けるので、学習コストも余りかからないですね。 あとなぜか、ドキュメントがいい感じに日本語訳されてます。 自然な日本語で読みやすいです。 知名度があまりない中で、日本語ドキュメントが充実してるのは非常にありがたいです。 http://voltframework.com/docs チュートリアル せっかくなのでチュートリアルやってみました。 まずはインストール。 gem install volt そのあとはプロジェクト作成。 volt new sample_project cdで作成したプロジェクトに移動して、サーバー立ち上げ。 bundle exec volt server コンソールには以下のコマンドでアクセスできます。 bundle exec volt console 詳しくはドキュメントのチュートリアルを見て欲しいんですが、コントローラではルーティング処理をしていて、ロジックはほぼhtml上で記述しています。 この実装でとくに考えずともwebsocketが使えます。 app/main/views/main/main.html タグにシンボルが使われていることや、{{}}内部がrubyということがわかればそんなに難しくない感じです。 <:Title> {{ view main_path, "title", {controller_group: 'main'} }} <:Body> <div class="container"> <div class="header"> <ul class="nav nav-pills pull-right"> <:nav href="/">Home</:nav> <:nav href="/todos">Todos</:nav> <:nav href="/about">About</:nav> <:user_templates:menu /> </ul> <h3 class="text-muted">sample_project</h3> </div> <:volt:notices /> {{ view main_path, 'body', {controller_group: 'main'} }} <div class="footer"> <p>&copy; Company {{ Time.now.year }}</p> </div> </div> <:Nav> <li class="{{ if active_tab?