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...
2014/01/04
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...
[プログラミング]引数逆順
お正月休みですね。といっても、バイトもなく、実家暮らしで暇なので、プログラミングの練習問題を探しては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。
...
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...
登録:
投稿 (Atom)