投稿

1月, 2013の投稿を表示しています

Calculate a Check Digit of JAN in Ruby One Liner

タイトルめっちゃかっこつけたけども.最近このブログでプログラミングの話してなかったんで久しぶりに. そういえばバーコードの最後って誤り確認用の符号なんだよな,それぐらいのプログラムだったら自分でも書けそうだな,と思ってから一体何ヶ月が経ったのか.ようやく手を動かしました. まずは普通に書いたものから. jancode = gets.chomp sum = 0 jancode.reverse.each_char.with_index do |e, i| i.even? ? sum += e.to_i * 3 : sum += e.to_i end print "Check Digit is: ", (10 - sum.to_s[-1].to_i).to_s[-1], "\n" JANコードについて調べてみるとどうやらいろんな桁数のものがあるとのことだったので,普通にひっくり返して偶数桁と奇数桁で場合分けすることに.しかも 10 から引く数が 0 だったときにチェックディジットも 10 になってしまうので,余計なことは考えずに「計算結果の下 1 桁」にしておきました. で.ここまでなら誰でも書けるんですよ.たぶん.これをどうやって一行にまとめるかが勘違いプログラマーの腕の見せどころなわけで.見せる腕無いけど. puts (10 - gets.chomp.reverse.split("").map(&:to_i).each_with_object([]).with_index{|(e, arr), i| i.even? ? arr << e * 3 : arr << e}.inject(:+).to_s[-1].to_i).to_s[-1] で,出来たのがこれと. 標準入力から読み込み→改行文字取り除き→ 1 文字ごとに分割し→各要素を文字列から数字にし→それぞれの要素について→添字もつけて→偶数桁なら 3 倍して,奇数桁ならそのまま新しい配列にプッシュしていく→その配列の総和を取る→その数の 1 桁目を 10 から引いた数の下 1 桁がチェックディジット という流れでした. each_with_object の部分はいろいろ迷走しました.each

あけましておめでとうございます

新年明けました.今年もよろしくお願いします. 前回の更新が約 2 ヶ月前なので,当時から今まで起こったことをとりあえず. 2 学期が終わって 3 学期が始まりました.筑波大学開校以来最後の 3 学期であります.感慨は特に無いです.早く終われ.2 学期の単位ですが,当然フル単でした.専門基礎科目は 5 つ受けたうち哲学だけ C で謎でしたが,その他の 4 つ(情報システム概説,基礎数学 A,情報リテラシ実習,プログラミング演習I)は 全て A だったのでまあいいです.3 回休んでリーチがかかってた科目も A が来ててそれも謎.その他一般教養とか英語とか二外とかは C は無く安泰. 音ゲーに関してはそれほど目立った進展は無いです.ポップンではゾディアックオラクル 7 EX を 6 回目ぐらいでようやくクリアしました.もう二度とやりません.弐寺は大晦日に Sun Field 穴イージーが点きました.Lincle 九段を初めて受けてから,この曲に何らかのランプを点けるのが一つの目標だったのでかなりうれしいです.DP も初めましたが全然進歩しないので辛いです. プログラミングは全然何もしてません.驚くほど何もしてません.強いて言うならば,大学の図書館にあるすごい H 本が空いたのでそれを頑張って読み進めてます.関数型言語けっこう面白いけど使いどろこが見出せないというか使いこなせそうにないというか.いや読むぶんには面白いんですが.オブジェクト指向はけっこう分かりやすかったしそこらへんの言語を結構書いてた(D 言語もそうだし)のでなかなか頭が固いです. また,12 月は初めてクイズのオープン大会に参加してきました.2 つ参加して両方とも学生オープンでしたが.Person of the Year ではその問題の難度とそれに易々と答えていく大学生を目の当たりにしてカルチャーショックを受け,STU the Seventh ではクイズ大会を観戦することの楽しさを味わいました.中でも印象的だったのは STU の得点表示プログラムで,久し振りに「あんなプログラム作ってみたい!!」と思わされました.家に帰って早速 CUI で実装してみたり.一念発起して D 言語の GUI 開発環境を整えようとしましたが Qt でも Gtk+ でもさっぱり上手く行きませんでした.やはり C# を勉強す