Excel列名変換問題を解いてみた

11/4 23:10 不具合ありました。追記しています。


http://d.hatena.ne.jp/JunichiIto/20111102/1320253815
こちらの問題を解いてみた。
楽しそうなことやってるな、と羨ましくなったので。いい会社だと思う。

忘れたRubyを調べ直しながらどうにか1時間かけてここまで。問1だけで30分かかった。ほとんど忘れていてもどうにかなるRubyの易しさに感心した。

flg = ARGV[0];
arg = ARGV[1];

if (flg == "0")
    k = 0;
    sum = 0;
    arg.reverse.each_byte { |c|
        sum += ((c - 64) * (26 ** k));
        k += 1;
    }
    p sum;
elsif (flg == "1")
    a = arg.to_i;
    k = 0;
    while a > (26 ** k)
        k += 1;
    end
    k -= 1;
    
    sum = "";
    rest = a;
    while rest > 0
        i = rest / (26 ** k);
        rest -= i * (26 ** k);
        sum += (i + 64).chr;
        k -=1;
    end
    p sum;
end

書いてみて数字がアルファベットになっただけで、実はよくある問題だと気づいてリファクタリング。できたのは何度か書いた覚えがあるコードだった。

flg = ARGV[0];
arg = ARGV[1];

if (flg == "0")
    sum = 0;
    arg.each_byte { |c|
        sum = (sum * 26) + (c - 64);
    }
    p sum;
elsif (flg == "1")
    sum = "";
    rest = arg.to_i;
    while rest > 0
        i = rest % 26;
        sum = (i + 64).chr + sum;
        rest /= 26;
    end
    p sum;
end

この手の問題は解いた後になると、なぜあんなに時間がかかったのか理解できなくなるのが不思議。コードを書くところではなくロジックを考えているところに時間がかかっているということなのだろうか?

あと"A"から"Z"の中に数字の"0"に相当するものがないのに、どうしてこれが動くのかよく分かっていない。"Z"を"0"のように扱わなければならないのかと思い悩んだが、べつにそんな必要はないらしい。案ずるより産むが易しだった。ギリシャ数字も似たような感じなのだろうか。

そしてRubyPythonPerlも中途半端に手を出したきり放置してることを思い出して悲しくなった。

11/4 23:10 追記
すいません不具合ありました。上で懸念していたように、"Z"と"0"に関して特殊な処理が必要だったみたいです。テストのいい加減さが原因なので、ちゃんと自動テストしてれば気づいていたんだと思います。

flg = ARGV[0];
arg = ARGV[1];

if (flg == "0")
    sum = 0;
    arg.each_byte { |c|
        sum = (sum * 26) + (c - 64);
    }
    p sum;
elsif (flg == "1")
    sum = "";
    rest = arg.to_i;
    while rest > 0
        r = rest % 26;
        i = (r > 0) ? r : 26;
        sum = (i + 64).chr + sum;
        rest = (r > 0) ? (rest / 26) : (rest / 26 - 1);
    end
    p sum;
end

新しいiPhoneアプリ「FewThings-シンプルなToDoリスト」をリリースしました

新しくFewThingsというiPhoneアプリをリリースしました。



FewThings-シンプルなToDoリスト
115円
http://itunes.apple.com/jp/app/id424417385?mt=8





FewThingsは、シンプルなToDoリストです。
ToDoを追加して、チェックして、チェックしたものを消すだけです。
それ以外のことはできません。


文房具の紙のメモやペンのようにシンプルで使いやすいものを目指しました。
なにも考えずに使えるように、とにかく機能を削りました。
できることが少なければ、余計な手間も思考も不要なため簡単に使えます。


別のToDoアプリと併用するのにも良いかもしれません。
例えば仕事用のリストには場違いな買い物リストに使います。
使い捨てのリストに向いています。


買い物中などにポケットからサッと取り出して使うのに向いています。
リストもひとつだけなので、どこに入れたか探す必要はありません。
追加するときも、どこに入れるか迷う必要はありません。
また片手でも使いやすいようにボタンはなるべく下の方に配置しています。


分類や並び替え、優先順位の設定などはできません。
そのためToDoリストが長くなると使いにくくなります。
FewThingsの名の通りわずか数件のToDoのためのアプリです。
リストは短く保つことをおすすめします。


+ボタンで新しい項目を追加できます。

項目をタップするとチェックできます。チェックした項目は−ボタンで消去できます。

FaceMaker 2.0.0 リリースされました

FaceMaker 2.0.0がリリースされました。
内部を結構いじりましたので念のためバックアップをしてからアップデートをお願いします。
http://itunes.apple.com/jp/app/facemaker/id364255507?mt=8


以下、バージョン 2.0.0 の追加と変更点です


顔文字画面

パーツの種類にセリフを追加
セリフをキーボードから入力して[+]ボタンで追加できます。[カナ]ボタンでひらがなを半角カナに変換できます。追加したパーツとそれを使った顔文字は青色で表示されます。
※現バージョンでは追加したパーツのバックアップはできません。


ペーストボタンの位置を変更
ペーストボタンの位置を上部メニューからお気に入り画面上部へ移動しました。



テキスト画面

Twitterクライアント連携を追加
テキストを外部のTwitterクライアントアプリに転送できます。設定画面でTwitterの投稿をアプリ内部で行うか外部クライアントを使用するか選択できます。


履歴カート内の顔文字の削除を追加
顔文字の履歴から不要なものを削除できます。


メニューのボタンの並び順を変更
メニューのボタンの並び順を変更しました。順番が入れ替わっています。



クリップボード画面

クリップボード画面を追加
顔文字をワンタッチでクリップボードにコピーできます。マルチタスクを利用して他のアプリと切り替えながら使うときに便利です。顔文字をユーザー辞書に追加するときにも便利です。



お気に入り画面

テンプレートの位置を変更
テンプレートはお気に入りと一本化しました。☆0の顔文字としてお気に入りに追加されています。


非分割の顔文字の文字色を変更
外部からペーストした非分割の顔文字の色を青色から緑色に変更しました。
青色はユーザーが追加したパーツを使用した顔文字の色になります。



設定画面

リンクページを追加
設定画面にApp StoreやWebサイトへのリンクのあるページを追加しました。



ちなみに今回のアップデートは有料版のみです。無料版の扱いをどうするか判断がつかず保留しています。
今の広告付きは一旦停止して、機能を絞ってシンプルにしたバージョンを別に作ろうかなどと検討しています。
どういう形がユーザーと自分双方にとって一番よいのか悩んでいます。

アプリの紹介とインタビューをしていただきました

FaceMaker|第9回iPhoneアプリ開発者インタビュー | SHINGOLOG
http://plus.vc/gorog/iphone/161/


こちらのブログでアプリの紹介とインタビューをしていただきました。
第9回とあるように他の開発者の方のインタビューもたくさんあります。
とくにアプリ開発者の方は参考になるのではないでしょうか。


あとインタビューの最後に少しでていますが2.0.0を鋭意製作中です。
ただ自分ではかなりいじったつもりですが、見た目や使い勝手はなるべく変わらないようにしたので、2.0.0と謳うわりには代わり映えしないかもしれませんorz

iOS4で顔文字をユーザ辞書に追加登録する方法

iOS4ではユーザ辞書と日本語キーボードに顔文字ボタン(「^_^」ボタン)が追加されました。
ユーザ辞書では「単語」と「よみ」を設定することで変換辞書に単語を登録できますが、「よみ」を「☻」で登録した単語は「^_^」ボタンから入力できるようになります。


あらかじめ登録したい顔文字をクリップボードにコピーしておきます。

iPhoneの「設定」アプリを起動して「一般」「キーボード」「ユーザ辞書を編集…」と画面を移動して「+」ボタンを押します。

「単語」欄に登録したい顔文字をペーストして、「よみ」欄に「☻」を入力して保存します。

これで日本語キーボードの「^_^」ボタンに新しい顔文字が追加されます。



以降は「FaceMaker」と「設定」アプリを行き来して、これを繰り返していきます。


「☻」はあらかじめ「単語:☻、よみ:☻」としてユーザ辞書に登録しておけば登録作業が楽になります。
「☻」は環境によっては表示されないか表示が潰れて読めないかもしれませんが、黒丸の中にスマイリーのUnicode文字です。名前は「BLACK SMILING FACE」、Unicode番号は16進数では「0x263B」、10進数では「9787」です。
(「☻」は日本語キーボードの「^_^」ボタンに最初から登録されている「(*☻-☻*)」を利用するのが良いそうです)


(6/24 1:10 追記)
アドレス帳利用の変換辞書でも、よみを「☻」にすれば「^_^」ボタンで使用できます。
有料版のアプリを使えばアドレス帳に一度に複数の顔文字を登録できます。
辞書登録時に「JIS」の欄を「☻」に、「よみがな仕分け」をオフにすれば「^_^」に登録できます。(ダイアログの値のデフォルトは設定画面で変更できます)




「設定」アプリはマルチタスクに対応していますが、FaceMakerはまだマルチタスクに対応していないため、顔文字のコピーに手間がかかってしまって申し訳なく思っています。
ユーザ辞書への登録に限らず、他のアプリへのコピーをやりやすくするために、お気に入りのみのモードを作りたいと考えています。
少し時間をいただければ幸いです。


(6/24 1:10 追記)
1.6.1としてマルチタスク対応版を申請しました。一週間を目安にしばらくお待ちください。


(7/2 16:00 追記)
iOS4対応の1.6.1は審査を通りませんでした。修正して再申請を行いますが、レスポンスが1週間周期なので予想以上に時間がかかる可能性が高くなっています。大変申し訳ありませんが目安は不明です。


操作マニュアルにも同じ説明を書いておきました。
http://udog.jp/facemaker/


これからもFaceMakerをよろしくお願いいたします。

FaceMaker 1.6.0

無料版のFaceMakerAd 1.6.0 がリリースされましたが、有料版のFaceMaker 1.6.0 はまだリリースされていません。
また1.6.0より、バックアップデータの書式が変更されたため、無料の1.6.0から有料の1.5.1以前へデータの移行ができなくなっています。
ご不便をおかけしてしまい申し訳ありません。


リリースのずれには2つ理由があります。
ひとつの理由は当初は次のバージョン入れるつもりだった「Twitterのユーザー認証のBASIC認証からOAuth認証への変更」を急遽追加したためです。
BASIC認証が使えるのは6/30までというタイムリミットがあります。
そこへ先日、iPhone OS 4(iOS4)が6/21にリリースされることが決まり、申請が殺到する可能性が出てきました。
根本的にはいままで先延ばしにしていたのが原因ですが、どうなるか先が読めなくなったためできるだけ早くリリースするために一旦申請をキャンセルし、OAuth対応版を申請しなおしました。


もうひとつの理由としては以前のような起動時のクラッシュのような不具合が起きたときのため、リリースをずらして様子を見たいということもあります。
そのため申請を無料と有料で3日ほどずらしていました。
不具合を出さないのが一番ですが、やはり不具合は起こるという前提で行動するしかないかと思います。
即時のバージョンアップもしくはバージョンダウンができればよいのですが、現状のApp Storeの仕組みでは1週間ほどかかってしまいます。