kei0425tan’s blog

技術的なことを主に

Pythonで末尾再帰最適化

今までソースはpaiza.ioでコーディング&実行して、それをGist経由で貼り付けしてたのですが、実は、paiza.ioで直接張り付けられることに気が付きました。

全然楽ですね。

で、それだけだとさみしいので、Pythonで末尾再帰最適化ができるデコレーションがあるそうなので、そちらを紹介

あんまり処理時間かわらないですね。

再帰を手でループに変換するとこんな感じ。

これも処理速度はたいして変わりませんでした。

なんでだろう???

paizaの結果

最近ちょっとはまってたpaizaの受験結果を適当に紹介。

paizaとは

結果

とりあえず、ランクDから解いてみました。

D040:連休の天気 Python2
paiza.jp


その後、勧められたのがこちら

C010:安息の地を求めて JavaScript
paiza.jp

まだまだ簡単

調子にのって、次に勧められた問題がこちら

B012:チェックディジット JavaScript
paiza.jp
結構面倒で時間が掛かってしまいました。。。。。

なので、まとまった時間がないとできないなーと思いつつ、しばらく時間を空けてからやったのがこちら

A003:盤面ゲーム JavaScript
paiza.jp
超有名なゲームの判定でした。

とここまでは、一発合格でランクAまでクリアしたのですが、ここからがちょっと大変でした。

S010:ひとりすごろく Python2
paiza.jp
問題読み間違えて、なかなか正しくコーディングできなかったのと、静的テーブルを用意したのですがそのテーブルの初期値をタイプミスしたりなどでさんざんな出来でした。

気を取り直して連続で挑戦

S002:最短距離を測る Python2
paiza.jp
アルゴリズムをある程度勉強するとでてくる課題。解法はいろいろ知っているのですが、コーディング速度が一番速い系でやってみましたが。。。。。
大規模データでタイムアウトが発生して、痛恨の90点。ジャッジが1回のみなのは結構きついです。

ムキになって再挑戦

S009:辞書順最小 Python2
paiza.jp
問題の読み間違えで時間が結構かかってしまいましたが、終わってみればほんの30行ほどでできました。
念願のランクSにやっとなれました。

ランクSまで解いた感想

paizaにおけるランキングは以下の通り。

  • ランクS 上位2% 上級100点

非常に高いスキルを持っています。
ほぼすべての企業で書類選考なしにカジュアル面談、面接へ進めます。

  • ランクA 上位8% 上級70点

高いスキルを持っています。
非常に多くの企業で書類選考なしにカジュアル面談、面接へ進めます。

  • ランクB 上位30% 中級100点/上級50点

一定基準以上のスキルを持っています。
多くの企業で書類選考なしにカジュアル面談、面接へ進めます。

  • ランクC 上位60% 初級100点/中級60点/上級30点

基本的なスキルは十分、効率的なコードを意識しましょう。
一部の企業で書類選考なしにカジュアル面談、面接へ進めます。

  • ランクD 初級50点/中級30点/上級10点

要努力!基礎的な部分をもう一度見直しましょう。
ポテンシャル求人案件への応募が可能です。

ランクSは50人に一人の逸材のようです。

とはいうものの、母集団によるかと思います。
職業プログラマであれば、ランクSとれる人はもっと多いかと。。。。
当然のことながら、職業プログラマでもランクCどまりの人もたくさんいると思いますが。

感覚的には、ランクS:ランクA:ランクB:ランクC = 1:2:3:2 くらいなのかなあ??

Scalaで素数

新しい言語を学びたくて、Scalaをやってみました。

Scalaの選考理由としては以下の理由からです。

  • 関数型
  • パターンパマッチング
  • 末尾再帰最適化
  • そこそこメジャー

というわけで、指定した数以下の素数を求める関数です。


Scalaで素数

とてもエレガントに書けた気がします。

Excel VSTO アドインでイベントが発生しなくなる件

ExcelVSTO アドインを作成中に、イベント(セルチェンジなど)が発生しなくなる現象が発生したため、その原因と対処について

VSTOとは?

Visual Studio Tools for Officeの略。Excelのアドインを作成することができる。

大きな違いは以下。

  • 従来のCOM参照で作成する場合、Excelのオブジェクトを作成すると、すべてReleaseComObjectを呼び出して解放しなければならない。(変数に代入しなくても.で参照したオブジェクトすべて)
  • VSTOを利用した場合、と内部で参照数を管理してくれるため、ReleaseComObjectは不要で.netのガベージコレクションに任せることができる。
現象

Worksheet.SelectionChangeイベントなど設定したものが不定期なタイミングで効かなくなる。



gistbd378ccd842de5e2cad9a6dbdaedc529

最初に、Sheet2のセルを選択するとA1セルに、選択したセルのアドレスが表示される。
その後、Sheet3のセルを選択しても、動作しない。

Sheet3のセルを先に選択するとSheet3では動作するが、Sheet2では動作しなくなる。

原因

イベントを登録した、worksheetオブジェクトが変数にバインドされていないため
21行目のGCを行うとイベントごと解放されてしまう。
そのため、イベントが発生しなくなる。

※サンプルは21行目に明示的にGCを行っているので不定にはならないが、一般的にGCはいつ発生するかわからないため、発生したりしなかったりするため、追跡が非常に困難。

.Netなどでは、一般的に動作が不定になる場合にはGCが原因の可能性が高いため、GC.Collectの強制実行を行うとよい。

対応

イベントを設定したインスタンスはクラス変数などに保存すること。


gistf345aca2065d68b9f6ceccfb6de4e1fd

オンラインコーディング環境について

2016/6課会資料

オンラインコーディング環境について

現在オンラインでのコーディング環境が発達し、ローカルに環境を用意しなくても容易に快活ができるようになってきています。

スキルチェックサイト

自分の実力がどれくらいあるのかチェックに利用できます。

paiza

paiza.jp

自分のプログラミング力が腕試しができるIT/WEBエンジニアのための転職サービス。
ですが、コーディングスキルチェックだけの利用も問題なし。(スカウトメールを受け取らない設定もできます。)21もの言語に対応し無料のオンラインコーディング環境(https://paiza.io/)もついているため、何もなくてもはじめられます。
Sランク目指してがんばりましょう!
paiza.jp

CodeIQ

codeiq.jp
リクルート制の実務スキル評価サービス。いろいろなジャンルの問題を回答し個別に評価してもらえます。自動判定と出題者の判定があります。

学習サイト

Progate

prog-8.com
ホリエモンも絶賛のオンラインプログラミング学習サービス。
現在は、HTML&CSS,JavaScript,jQuery,Ruby,Ruby on Rails, PHP,Javaに対応。(Python,Swiftも近日対応予定)

ドットインストール

dotinstall.com
ビデオレッスン中心の老舗サイト。さまざまな分野をカバーしています。
無料でもかなりのコンテンツがあります。(中級上級は有料)
(個人的には、動画みるのが面倒だったりするのでほとんどつかったことなし。)

Xamarinについて

2016/5課会資料

Xamarinについて

Xamarin(ざまりん)とは
.NETを利用してiOSAndroidアプリが作成できるツールやフレームワークなどの総称および開発会社名。
もともとWindows以外のプラットフォーム上で.NETを動作させるMonoプロジェクトから始まり、それをiOSAndroidに対応させたもの。
2013年にMicrosoftとパートナー提携を結び、VisualStudio2013との統合などを行ったが、ライセンス料が高額であまり普及していなかった。(年間約25万/人)
しかし、その後Xamarin社がMicrosoftに買収され、OSSとなりライセンス料が無料になった。

特徴
WindowsでVisualStudioを利用して、C#などでiOSAndroidのネイティブアプリの作成が可能。iOSエミュレータもあり(Windows10専用)
Mac上ではVisualStudioが動作しないため、独自のXamarinStudioを利用する)
Microsoft社製のため、将来性も十分。
・.NET Coreのソースも一部採用しているため信頼性も高い。
iOS/AndroidでUIを共通化するXamarin.Forms

欠点
マルチプラットフォーム開発が可能だが、UIなどについては元のライブラリのラッパクラスでアクセスするため、各プラットフォーム毎の知識は必要。(逆にその分プラットフォーム毎の機能を十分活用できる)