事前に gettext, iconv を入れておくと吉。
$ wget -c http://ftp.gnu.org/gnu/coreutils/coreutils-6.11.tar.lzma $ lzma -cd coreutils-6.11.tar.lzma | tar xvf - $ cd coreutils-6.11/ $ ./configure --disable-assert $ make && make check $ sudo make install
CFLAGS
はお好みで。
事前に gettext, iconv をインストールしておくと良い。
$ wget -c http://ftp.gnu.org/gnu/texinfo/texinfo-4.12.tar.lzma $ lzma -cd texinfo-4.12.tar.lzma | tar xvf - $ cd texinfo-4.12/ $ ./configure $ make && make check $ sudo make install
CFLAGS
はお好みで。
M+ FONTS とさざなみフォントをミックスした後、更に改良した和文フォント。
これも位取りプログラムと同じく chawan の代替の一部。 以前、同じようなものを作ったときは、もっとゴチャゴチャしたものを書いた記憶が…。 テーブルの作りさえ考えつけば、どうにでもなるものなのかな?
#! /usr/bin/env ruby
NUMBER_TABLE = Hash[# 表記=>数値・演算・桁上がり '0', [0, '+', true], 'o', [0, '+', true], '零', [0, '+', true], '1', [1, '+', true], '1', [1, '+', true], '一', [1, '+', true], '壱', [1, '+', true], '2', [2, '+', true], '2', [2, '+', true], '二', [2, '+', true], '弐', [2, '+', true], '貳', [2, '+', true], '3', [3, '+', true], '3', [3, '+', true], '三', [3, '+', true], '参', [3, '+', true], '4', [4, '+', true], '4', [4, '+', true], '四', [4, '+', true], '5', [5, '+', true], '5', [5, '+', true], '五', [5, '+', true], '伍', [5, '+', true], '6', [6, '+', true], '6', [6, '+', true], '六', [6, '+', true], '7', [7, '+', true], '7', [7, '+', true], '七', [7, '+', true], '8', [8, '+', true], '8', [8, '+', true], '八', [8, '+', true], '9', [9, '+', true], '9', [9, '+', true], '九', [9, '+', true], '十', [10, '*', false], '百', [100, '*', false], '千', [1000, '*', false], '万', [1_0000, '**', false], '萬', [1_0000, '**', false], '億', [1_0000_0000, '**', false], '兆', [1_0000_0000_0000, '**', false], '京', [1_0000_0000_0000_0000, '**', false], '垓', [1_0000_0000_0000_0000_0000, '**', false]]
def get_number(numbers) number = [0, 0, 0] numbers.each { |n| value = NUMBER_TABLE[n] if value then if value[2] then number[0] = number[0] * 10 end case value[1] when '**' then number[2] = number[2] + (number[1] + number[0]) * value[0] number[1] = number[0] = 0 when '*' then if number[0] > 0 then number[0] = number[0] * value[0] else number[0] = value[0] end number[1] = number[1] + number[0] number[0] = 0 when '+' then number[0] = number[0] + value[0] end else return -1 end } return number[2] + number[1] + number[0] end
# 主処理 (動作確認サンプル) ARGV.each { |number| puts get_number(number.split(//)).to_s }
壱兆千五十6万3貳百14
を引数に与えると以下の出力を得る。
1105632141000010563214
まだ修正が必要そうだけど、とりあえず上げてみた。
NUMBER_TABLE
に億の情報を入れ忘れていることに、
4/23 になって気付いた。 ;-(