スキマで暗躍する的な何か

このブログ書くたびにTwitterのフォロワーが減ってるような気がするんですが、たぶん気のせいです。

paizaオンラインハッカソン・Liteの件

天才火消しエンジニア霧島「もしPMおじさんが丸投げを覚えたら」|paizaオンラインハッカソンLite も、今日で終わりです。すでに解法もネット上でいろいろ知った後からやりはじめたので、今さらな感じですが。。

もうこれ以上、出来そうにないので、私の挑んだ言語について書いておきます。

 

アルゴリズムは、これこそ私が数カ月前まで言葉さえ知らなかった動的計画法を使うのか? と思ったのですが、どうやら最速では無いらしいです。結局、単価順に並べて無難な深さ優先探索&枝刈りとしました。

あ、でも、前より、動的計画法は少しだけ解るようになりました(笑

 

以下、挑戦した(もしくは、あきらめた)順番で。

どの言語も、グローバル変数だとか使いまくりのヒドい書き方してます。。

 

https://paiza.jp/poh/kirishima/result/4d302149dc357c597172ec1f0bbff830

仕事では全く使うことないのですが、CodeIQさんとpaizaさん問題はPythonでやるようにしてます。深過ぎて、まだ全然詳しく無いです。他の言語よりキー入力が少ないのでとにかく楽です。

とりあえず、0.01秒になったので、後はひたすら他の言語に移植。。

 

https://paiza.jp/poh/kirishima/result/430f26ceb695b8d8ecb266ccf7fb5d16

PHPはお仕事で使ってますので、楽ですね。詳しいかと言われると、たいして詳しくは無いですが。2次元の配列に対して単価順のソートが必要なので、どうしようかと調べたら、array_multisort という関数があったので、それを使いました。手抜きしすぎでしょう(笑

アルゴリズム問題するときくらいしか、ソートを必要とする場面が無いのですが。。皆さんどうなんでしょう。

 

https://paiza.jp/poh/kirishima/result/9408bd991d872a1dfda20627a412c3fe

国がなにかの支援をしているのか、近頃周りで随分Ruby推しだなーと思う昨今ですが、Rubyの世界も楽しそうですねー。

each は、{ } でくくるのに、なんで、if や for は endなんでしょうね。。

0.02秒より縮まらないので、これが限界なんでしょう。おそらく。

 

https://paiza.jp/poh/kirishima/result/9903b417ad05a4c8757ca416cd19d640

Perlはインターネット黎明期に少し勉強しましたよっ。

その頃勉強した内容は、ほとんど忘れてしまいました。

今のイメージは、コードゴルフさせると強い言語です(笑

その世界は怖いのであまり深入りしないようにしています。

 

https://paiza.jp/poh/kirishima/result/d6157bc13042735e373f4023cecdd323

https://paiza.jp/poh/kirishima/result/03168b4f3fe6a6b9ee6a0289d8963664

https://paiza.jp/poh/kirishima/result/2ccda874f9ab10f64e773a917e7bfe56

まとめてしまってごめんなさい。。ソースもほぼ同じで通りました。

Objective-C は、興味本位で、C のソースを貼ってみただけ。。

そりゃ通りますよね。

 

https://paiza.jp/poh/kirishima/result/968e0d3dd66b06ec5d29c43000eaa695

最近は、JavaScriptが一番仕事で使う言語かも。。

慣れているので、とにかく楽です。

今回より、POHの正式言語にも追加されて嬉しい限りです。

Node.js を初めてインストールしてみましたが、これも、いいですねー。

たぶん反対意見多数でしょうけど、若いコにたくさん言語勉強させるのは

大変なんで、もうJavaScript一本でいいんじゃね? とも思います。

 

最初は、0.04秒になって、あれれ? 最速に並ばない・・

という状態だったのですが、

標準入力を、ファイルシステムモジュール 'fs' でやるようにしたら、

0.03秒に並びました。たぶん、これ以上は無理かと。。

 

https://paiza.jp/poh/kirishima/result/2b7f9a188992d7a467a9506b84c6b51a

これも、最初は、0.03秒になってしまって、最速の0.01秒に

並ばなかったのですが。。横着して、Console.Write で標準出力していたのが

ダメでした。数値の値が一つだけなんで、まぁいいかーと思ったのですが。

伝統的に使われている「あの」方法に変えたら、0.01秒になりました(笑

 

https://paiza.jp/poh/kirishima/result/f273eb2f4b3e21822ef892afb5ff7ebd

えーっと、C# のものを移植しただけです。

Case7最速記録が、0.02秒になってましたので、

もしかしたら私が単独で最速かも?

 

若い頃から数年前まで、10年近くVB専門でやってましたので、

凄い楽。。かと思いきや、ちょっとC#との違いに惑わされて、

随分とまどいました。

標準入出力もC#と同じく「あの」方法で実装。

Declare Functionとかなんだか懐かしくって。。

若い頃は、WindowsAPI をどう駆使するかばかり考えてましたねー。

 

https://paiza.jp/poh/kirishima/result/bea7699ce5cf1779fb98460843c1140b

すみません。。すっごい横着してみました。

Js2coffee: convert JavaScript code to CoffeeScript でJavaScriptを変換して、

変なところを直しただけです。

CoffeeScriptってグローバル変数って無いんですよね?

(JSのテキトーさを嫌っての言語なんで、当然といえば当然・・!?)

しょうがないので、再帰関数の引数を増やす。。

なんかCase1~5までは、最速記録に微妙に負けてる。

よくわかんないので、これであきらめました。

 

https://paiza.jp/poh/kirishima/result/86c1b3e46f9443f05064f6b55764f143

なんなのコイツ!

0.07秒より早くならないんですけど!!

と、怒ってみたところで、いかんともできず。。

Case1から、みんな同じ時間ということは、

アルゴリズムは関係無く、

標準入出力のやりかたの問題なのか。。

私、全くJavaには詳しく無いので、手の打ちようが無いです。

0.01秒のソースが早く見たい。。気になりすぎる。。。

 しくじったほうも、貼ってやる!(笑

https://paiza.jp/poh/kirishima/result/e09b9370d94e20accd3618c103d9ca27

 

 

参考までに、ソースは、VisualBasic(笑)のものを貼っておきました。

商の変数名が、shouとかヒドすぎますね。。

 

POH_Light_VisualBasic