Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(前編)
とりあえず書いてみたら、print reverse $str とかやってしまった。(リストの順番を逆順にするので、この場合なんら変化なし)
問2が難しいのは、問1の成功体験が足かせになるところか。問1が基数変換で解けるものだから、そのまま問2にいくとはまる。例えばZ(=26)の次のAA(27)で、2桁目のAが1で、一桁目のAが0になる。
問1の場合、僕は2位の人と同じように、ordを使用してましたが、
1位の人みたいにループごとに現在の累積値に26をかけて桁をひとつ上げていくのがスマートでした。
ただ2点、Perlらしくないなーと思うのが、
- ハッシュを手書きで登録している
- ハッシュはハッシュスライスで、 @table{'A'..'Z'} = (1..26); とすべき。
- C言語風のループ
好みかもしれませんが、無駄に長いので、、、。
あとC言語風ループなら $i < ($#input+1) じゃなくて $i < scalar @input か$i <= $#inputかなー。
for (my $i=0; $i < @input; $i++)
↓
for my $i (0..$#input)
ソースは書いてみたけど、mooseの練習に書き直してみようと思う。仕事でよく使うようになってきたので。
0 件のコメント:
コメントを投稿