投稿

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 で,出来たのがこれと. 標準入力から読み込み→改行文字取り除き→ 1 文字ごとに分割し→各要素を文字列から数字にし→それぞれの要素について→添字もつけて→偶数桁なら 3 倍して,奇数桁ならそのまま新しい配列にプッシュしていく→その配列の総和を取る→その数の 1 桁目を 10 から引いた数の下 1 桁がチェックディジット という流れでした. each_with_object の部分はいろいろ迷走しました.each を使うと外に変数を用意しておかなきゃいけなかったりとか.inject でもよさそうだけど,書いてた時はいつものように変数のスコープだとか...

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

新年明けました.今年もよろしくお願いします. 前回の更新が約 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# を勉強す...

いろいろありました

久しぶりに長めの文が書きたくなりました.ということで最後の日記からあったことを思いつく順に. 当然ですが 2 学期が始まってますね.ていうかもうすぐ終わるじゃん…….1 学期とは打って変わって授業休みまくってますが何とか最多でも 2 ✕に抑えてます.NO 落単.GPA なんて無かったんや…….来年からがんばります. 音ゲーも当然(?)してます.KAC 頑張りました.ポップン課題曲合計 451k でこのまま行けば中部 130 位台になる見通しです.実感が湧かない.関東は知らない.来年は中部でエントリーしまーす(ダブルピース).あと最近ついにダンエボを始めました.知ってる曲だけでいいや〜と思いつつキモプリにも手を出してみたり.あの曲はフリが分かりやすくてよいですね.She is my wife はほとんど覚えたので目下の練習曲は Follow Tomorrow ですが超ムズい.特に最後のサビとか.あとはまあドラマニとか DDR とかにも手を出してますがどれもまだまだこれからです. 本も読んでます.嘘です借りるだけで全く読めてないです.詳説正規表現とかいつになったら読み終わるんですかね(遠い目).ふと Haskell の勉強をしようと思い立って Tulips で検索したら軒並み売り切れてたのはびっくりした.やはり人気なんだなあ. プログラミングもそこそこしてます.ARC#009 はリアルタイム参戦はできませんでしたがとりあえずいつも通り B 問題まで AC 出せたのでよかったです.B 問題を Ruby で 3 行で書けたのはスカッとした.他にも Twitter の Streaming の API を使ってアニメの実況ツイートを取ってきて形態素解析して遊んだりとかもしてます.暇だなあ……本読めよ……. これに関連して,つくばリポジトリで「ツイッター」と検索して引っかかった論文のうち 6 本を適当に読んでみました.ほとんどはツイッターを使って日本と外国を比較したりする的なアレでしたが読む分には楽しかったです.ただ大学紀要だからなのか誤字が目立ったりとかして辛かった.これはたぶん後日別記事でまとめると思います.たぶん.気が向いたら……. 最後になったけど実はこれがおそらく一番大きな出来事で,ついにレンタルサーバーを借りてみました.理由は広告が出るのが嫌だったのと,...

K2PC(Easy)A/B,天下一予選B A問題 解いてみた

ただのプログラミング日記ですね.日常生活に関しては Twitter を御覧くださいということで一つ.普通の日記書きたいんですけどね. K2PC(Easy) A 問題 ing = gets.chomp.split.map(&:to_i) hamb = gets.to_i puts ing.each_with_index.collect{|e, i| hamb*(i+1) - e > 0 ? hamb*(i+1) - e : 0 }.join(" ") 1 行目:ご飯の材料って ingredient って言うんですね.勉強になった 4-5 行目:ハンバーガー 1 個あたりそれぞれの材料が 1,2,3 個ずつ必要,しかも数字が順番に来てくれるので,それぞれの個数を配列に格納して each_with_index で取り出した添字に1を足して必要数を掛けて,そこから今ある個数を引きました.それが 0 より大きければ足りない数に変更,そうでなければ 0 に変更.3 項演算子楽しい 6 行目:↑を空白スペース区切りで出力 B 問題 lines = gets.to_i tateren_taisei = gets.chomp.split.map(&:to_i).sort.reverse music = [] possible = [] lines.times{music = xlong[i] possible 問題名を見て「まさか……?」と思ったら本当にそういう問題でした 2 行目:はじめてのどんよくほう.どうせ後で多い順に照らし合わせるなら今ここでソートしちゃえ,ということで.よく思うんだけど rsort 的なメソッドって無いんすかね.まあ自分で実装すればいいだけなんだけども 6 行目:譜面を 1 行毎読み込んで鍵盤ごとにぶつ切りにして配列にする.譜面を左から見てる感じ 7 行目:譜面を→列と行を入れ替えて(あればいいな〜〜と思って検索したら transpose が見つかってビビった)(これで今は譜面を上から見てる感じ)→鍵盤ごとに分かれている配列それぞれに対して,ノートが当たっていない行を削除(実際には "-" でスプリット)→一番上の行が "-" だ...

天下一プログラマーコンテスト予選A 参加してみた

だいぶ前になりますが.例によって最初の2問です.

WUPC 2012 A,B / KUPC 2012 Practice A,B

例によって冒頭 2 問.慣れてる人はこれをどれだけ早く通せるかなんだろうなーと思いつつ 1 問あたり 30 分ぐらいかけて悩んでた.だんだん楽しくなくなってきた…….

AtCoder Regular Contest 006 参加してみた

001 を試しに 2 問解いた翌日に本大会に参加するというセルフ無茶振り.今回も A と B しか挑戦できませんでしたが両方とも一発で AC もらえました.が,やっぱり不慣れなせいか失敗が続出.というかそもそもプログラミング自体が不慣れだった.まあ勉強勉強.