数字の数えにくさをどのように数値化するのか
続きといえば続きなのか。『数字が数えにくい言語はどこだ?』ちょっとした理由で、DeepLで翻訳をしていた。フランス語quatre-vingt-dix-sept大学時代に第二外国語でフランス語を選んだので、数学科の…ameblo.jp97という数字をどのように文字にするのかってことをやったわけだが、その数えにくさというものを、どのように数値化しようかってことで、プログラミングした際に、どれくらいの行数掛かるのかということを、日本語、英語、フランス語、ドイツ語でやってみようってのが、今回の趣旨だ。プログラミング言語は、Javascriptにしよう。てか、昔書いたコードを再活用出来るなってだけだ。日本語: function japanese(i) { var a = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九'); var b = new Array('十', '百', '千'); var c = new Array('', '万', '億', '兆', '京' ,'垓'); var j, k=0, s=''; if ( i == 0 ) s = ja[0]; while ( i ) { if ( k*(i%10000) ) s = c[k]+s; if ( i%10 ) s = a[i%10]+s; i = Math.floor(i/10); for (j=0; j<b.length; j++) { if ( i%10 ) { s = b[j]+s; if ( k*(j==2) || Math.min(i%10,2)==2 ) s = a[i%10]+s; } i = Math.floor(i/10); } k++ ; } document.getElementById('tjapanese').value = s; }英語: function english(i) { var a = new Array('zero ', 'one ', 'two ', 'three ', 'four ', 'five ', 'six ', 'seven ', 'eight ', 'nine ', 'ten ', 'eleven ', 'twelve ', 'thirteen ', 'fourteen ', 'fifteen ', 'sixteen ', 'seventeen ', 'eighteen ', 'nineteen '); var b = new Array('', '', 'twenty ', 'thirty ', 'fourty ', 'fifty ', 'sixty ', 'seventy ', 'eighty ', 'ninety '); var c = new Array('hundred ', 'thousand ', 'million ', 'billion ', 'trillion ', 'quadrillion ', 'quintillion ', 'sextillion '); var k=0, s=''; if ( i == 0 ) s = en[0]; while ( i ) { if ( k*(i%1000) ) s = c[k]+s; if ( Math.min(i%100,20)==20 ) { if ( i%10 ) s = a[i%10]+s; s = b[Math.floor(i%100/10)]+s; } else if ( i%100 ) { s = a[i%100]+s; } i = Math.floor(i/100); if ( i%10 ) s = a[i%10]+c[0]+s; i = Math.floor(i/10); k ++; } document.getElementById('tenglish').innerHTML = s; }フランス語: function french(i) { var a = new Array('zéro ', 'un ', 'deux ', 'trois ', 'quatre ', 'cinq ', 'six ', 'sept ', 'huit ', 'neuf ','dix ', 'onze ', 'douze ', 'treize ', 'quatorze ', 'quinze ', 'seize ', 'dix sept ', 'dix huit ', 'dix neuf '); var b = new Array('et ', '', 'vingt ', 'trente ', 'quarante ', 'cinquante ', 'soixante ', 'quatre vingts ', 'quatre vingt '); var c = new Array('cent ', 'mille ', 'million ', 'milliard ', 'trillion ', 'quadrillion ', 'quintillion ', 'sextillion '); var d = new Array('cents ', 'mille ', 'millions ', 'milliards ', 'trillions ', 'quadrillions ', 'quintillions ', 'sextillions '); var k=0, s=''; if ( i == 0 ) s = fr[0]; while ( i ) { if ( k*(i%1000) ) { if ( (Math.min(k,2)==2)*(i%1000==1) ) { s = c[k]+s; } else if ( k ) { s = d[k]+s; } } if ( (k==0)*(i%100==80) ) { s = b[7]+s; } else if ( Math.min(i%100,80)==80 ) { if ( i%20 ) s = a[i%20]+s; s = b[8]+s; } else if ( Math.min(i%100,60)==60 ) { if ( i%20 ) s = a[i%20]+s; if ( i%10==1 ) s = b[0]+s; s = b[6]+s; } else if ( Math.min(i%100,20)==20 ) { if ( i%10 ) s = a[i%10]+s; if ( i%10==1 ) s = b[0]+s; s = b[Math.floor(i%100/10)]+s; } else if ( i%100 ) { s = a[i%100]+s; } if ( k*(i%100==0)*(Math.min(Math.floor(i/100)%10,2)==2) ) { s = a[Math.floor(i/100)%10]+d[0]+s; } else if ( Math.floor(i/100)%10 ) { s = c[0]+s; if ( Math.min(Math.floor(i/100)%10,2)==2 ) s = a[Math.floor(i/100)%10]+s; } i = Math.floor(i/1000); k ++; } document.getElementById('tfrench').innerHTML = s; }ドイツ語: function german(i) { var a = new Array('null', 'eins', 'zwei', 'drei', 'vier','fünf', 'sechs', 'sieben', 'acht', 'neun', 'zehn', 'elf', 'zwölf', 'dreizehn', 'vierzehn', 'fünfzehn', 'sechzehn', 'siebzehn', 'achtzehn', 'neunzehn'); var b = new Array('und', 'ein', 'zwei', 'drei', 'vier','fünf', 'sechs', 'sieben', 'acht', 'neun'); var c = new Array('', '', 'zwanzig', 'dreißig', 'vierzig','fünfzig', 'sechzig', 'siebzig', 'achtzig', 'neunzig'); var d = new Array('hundert', 'tausend', 'e Million ', 'e Milliarde ', 'e Billion ', 'e Billiarde ', 'e Trillion ', 'e Trilliarde '); var e = new Array('hundert', 'tausend', ' Millionen ', ' Milliarden ', ' Billionen ', ' Billiarden ', ' Trillionen ', ' Trilliarden '); var k=0, s=''; if ( i == 0 ) s = a[0]; while ( i ) { if ( k*(i%1000) ) { if ( i%1000==1 ) { s = d[k]+s; } else { s = e[k]+s; } } if ( k*(i%100==1) ) { s = b[1]+s; } else if ( Math.min(i%100,20)==20 ) { s = c[Math.floor(i%100/10)]+s; if ( i%10 ) s = b[i%10]+b[0]+s; } else if ( i%100 ) { s = a[i%100]+s; } i = Math.floor(i/100); if ( i%10 ) s = b[i%10]+e[0]+s; i = Math.floor(i/10); k ++; } document.getElementById('tgerman').innerHTML = s; }2015年、つまり10年前に書いたコードを引っ張り出してみた。どの言語においても、iという変数に表示したい数値が入ってくるから、文字列sに文字を入れて、それぞれのhtmlの指定したidのタグに格納するということだ。まぁ、これだけでは動かないけれども、それぞれの言語ごとの数値を文字として表す難しさの指標にはなるだろうか。日本語:23行英語:23行フランス語:44行ドイツ語:33行これ、当時はGoogleの音声で読ませられたんだけれども、今はそれが使えなくなっているので、音声部分は削っている。また、日本語については、漢字表記なので難しくはないが、これのひらがなバージョンとかを作ったら、それはそれで面倒だろうなとは思う。例えば、六百が「ろっぴゃく」、八百が「はっぴゃく」、千は「せん」だが、万は一万となるわけで、例外が多くなってくるわけだな。あー、めんどくせーw簡単に言えば、例外が増えるってのは、それだけ例外処理が増えるってことになるわけで、コードも長くなっていくってことだ。万、億、兆、京、該って、結構な桁までサポートさせようとしていたんだろうか。前回の話しと交えるならば、デンマーク語がヤバいんだよな。まぁ、フランス語くらいの量で書けるとは思うけどね。文字数的には、フィンランド語が長くなる傾向にあったな。あまりにも長くなるならば、改行するだろうけれども、今回はデータ部分での改行は控えたよ。また、コメントすらないコードを書いているってのは、他人とプログラムを共有したり、自分で読み返したりするなんてことを考えていないってことでもある。ある意味、プログラムなんて、自分さえ解っていれば、ブラックボックスで良かったんだろう。相変わらず、我ながら傲慢だなw。忘れたら忘れたで、また書けばいいだろうってことなんだろうし、コーディングは普遍的ではないってことで、そのときはこれで良かったのかもしれないけれども、5年、10年後も、このような書き方が主流なんてことはないってことなんだと思う。他人のコードを読むことが辛いってのは、そういうことなんだよね。自分のコードですら読めなくなるんだろうからね。更に25年遡って、自分が大学生の1990年ごろ、プログラマのバイトは、1行10円だったwつまり、時代は違えど、日本語は230円、英語は230円、フランス語は440円、ドイツ語は330円といったところだろうか。セブンイレブンの深夜バイトが時給1000円だったかな。タバコが200円とか220円とかだった時代だからね。大学の学食のカレーが270円、大盛りで300円だったかなw私が始めて買ったパソコンがNEC PC9801 RA32ビットパソコンで、メモリーが1.6MB、5インチFDドライブが2個で、ハードディスクが40MB、モニターやマウスをつけて、価格にしてトータル60万円だよ。解りやすいところでいうならば、40MBハードディスクが8万円だったな。まぁ、1990年では、インターネットはあることはあったのだろうけれども、まだまだパソコン通信の時代で、Windows 95の登場まで、あと5年あるわけで、Javascriptもないだろう。1995年には、タバコは250円になってるしな。まぁ、この間にバブルが弾けるわけだが、コンピュータ業界はまだ少し安泰ではあったので、部活の先輩を頼って就職出来たと言える。今、タバコっていくらなん?500円超えているんだっけか?大学時代にプログラマのバイトはやってたけれども、社会人になって、結局プログラマの職に就いたことは一度もないんだよな。テスターだったころとかは、テストプログラムを書くことはあったけれどもね。職業がプログラマってわけじゃなかったからな。趣味くらいでちょうど良かったんだろう。さて、このプログラム、対応言語を増やして、どこかにアップロードしようかな。ameba owndでも良いけど、はてなにするか?ではでは