2014/01/04

[プログラミング]通貨のレート計算

,
 3つめは"A.2 Currency Calculator"です。通貨のレート計算ですね。問題文を読めば分かりますが、仕様は 引数に10進数と、2つのISO 4217準拠の通貨コードみたいなのを与えるので、もう一つの通貨でいくらになるか計算する プログラムで扱えない通貨コードならエラーを吐く 引数が無い場合は、てきとーな解説を吐く です。 むずかしいところ - 通貨レートの取得 さて、これを実現するのには一つ問題があります。それは「変動する通貨レートを、どうやって取得するか」です。問題の出題者さんは「1$ = \100だよね!」みたいな感じで軽く出題したのかもしれませんが…  幸いにして、ネット上で最新の通貨レートのデータを取得できるサイトがあります。 クジラ 外国為替 確認 API (為替 RSS) - http://api.aoikujira.com/kawase/  ほんとはこのデータ元のXurrencyのAPIを使おうと思っていたのですが、Pricingページに"only 29,99 eruos per year"と書かれてたので諦めました。  なんとかXML形式なら扱えるだろう、ということで、今回はこれを使うことにします。 コード とりあえずコード貼っておきます。 using System; using System.Linq; using System.Xml.Linq; namespace...
Read more →

2014/01/03

[プログラミング]ファイル読み込み

,
 100 Little Programming Exercises – go-left Softwareの"A.5 Count Words and Lines"です。と言ってもファイルの文字数と行数を数えるだけですが… 改行コードの猥雑さ(LF、CR、CRLF)を叩き込む、文字列処理の練習ということなんでしょうか?でも面倒だったので、Fileクラス使って済ませました。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace CountWordsandLines1 { class Program { static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("Specify a file name"); } else { var filename...
Read more →

[プログラミング]引数逆順

,
 お正月休みですね。といっても、バイトもなく、実家暮らしで暇なので、プログラミングの練習問題を探してはC#をごにょごにょしてます。 100 Little Programming Exercises – go-left Software - https://go-left.com/blog/programming/100-little-programming-exercises/ これのReverse The Inputです。引数は自動的に、スペースで区切られた単語ごとに配列に入れられるので、その配列を逆順にすればいいだけですが、最後の要素"END"は逆順にしません。 とりあえず書いたのは以下のコード。 static void Main(string[] args) { var list = args.ToList(); if (list.Last() != "END") { Console.WriteLine("args.Last() != \"END\""); } else { //http://melma.com/backnumber_120830_4798410/ //IEnumerable<T>.Reverse()は範囲の指定ができない。 //List<T>.Reverse()は範囲指定が出来るが、返り値がvoid。 ...
Read more →

2014/01/02

[プログラミング]暗号の国のアリスと循環アルファベット++

,
 とてもタイトルに困ったんですが…とりあえず大した内容ではないです    『暗号の国のアリス』(著:結城浩)の中でシーザー式暗号というものが取り上げられています。これは、暗号化したい平文のアルファベットをそれぞれ、アルファベット順にn文字前後にずらすといったものです。例えば、"abc"なら3文字ずらしで"def"といった具合です。  で、この暗号はBrute Force Attackで破ることが出来るのですが、練習問題を解くプログラムを書いてて「どうやって実装すればいいんだろう???」って思ったときのメモです。 実装法1 - テーブルを使う  どうしようか迷い、最初はテーブルを使うものにしました。つまり、string配列→char配列にし、それぞれの文字のn文字先を、予め用意したテーブルから持ってきます。この場合のキモは、n文字先がテーブルのどの要素に成るかの計算です(と言っても簡単なクイズレベルですけど)。難点としては、コードが長くなるのと、for文の中にforeachが入り二重ループになりそうなことです。 参考: C# でのアルファベットの文字の配列を生成 - http://ja.softuses.com/73951  この時、大文字(0x41~0x5A)と小文字(0x61~0x7A)を分けるのが面倒だったので、最初の文字列を.ToLower()し、小文字に揃えました(今回はこれでオッケー)。 実装法2...
Read more →