fortran66のブログ

fortran について書きます。

【ネタ】漢文風のプログラミング言語「文言」で分割数計算

漢文風プログラミング言語

今日のネットニュースで流れてきました。作者の恐るべき実力に敬服!

言語としては代入が面倒で糞w

 

forest.watch.impress.co.jp

コメントが欄外注になるのは実にいい。すべての言語で、整形文はこういう感じに綺麗にして欲しい。入力は ASCII でいいが。 https://forest.watch.impress.co.jp/img/wf/docs/1225/211/image1.png

github.com

オンライン実行環境あり。

http://wenyan-lang.lingdong.works/ide.html

分割数プログラムを漢文風に

fortran66.hatenablog.com

参考

var pp = function (n, m) {
  if (n == 0) {return 1};
  if (m == 1) {return 1};
  if (n <= 0) {return 0};
  if (m <= 0) {return 0};
  return pp(n - m, m) + pp(n, m - 1);
}

var partition = function (n) { return pp(n, n) };

for(i = 1; i < 11; i++) {
  console.log(partition(i));
};

ソース・プログラム

吾有一術。名之曰「制限分割」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。 
  若「甲」等於零者。乃得一也。 
  若「乙」等於一者。乃得一也。 
  若「甲」小於零者。乃得零也。 
  若「乙」小於一者。乃得零也。 

  減「甲」以「乙」。名之曰「丙」。 
  減「乙」以一。名之曰「丁」。   
  施「制限分割」於「丙」。於「乙」。名之曰「戊」。 
  施「制限分割」於「甲」。於「丁」。名之曰「己」。   
  加「戊」以「己」。名之曰「庚」 
  乃得「庚」 
是謂「制限分割」之術也。 


吾有一術。名之曰「分割」。欲行是術。必先得一數。曰「甲」。乃行是術曰。 
  施「制限分割」於「甲」。於「甲」。名之曰「乙」。   
  乃得「乙」 
是謂「分割」之術也。 



吾有一數。曰四十。名之曰「甲」。
有數一。名之曰「乙」。恆為是。若「乙」大於「甲」者乃止也。
  施「分割」於「乙」。名之曰「丙」。
  吾有五言。曰「「 分割数 」」。曰「乙」。曰「「 是 」」。曰「丙」。曰「「 焉。」」。書之。
  加「乙」以一。昔之「乙」者。今其是矣。
云云。

書き下し文(テキトーw)

吾に一つ術あり。これを名付けて制限分割という。この術を行わんと欲すれば、必ずやまず二数を得よ。甲といい乙という。 すなわちこの術を行いて曰く。

もし甲の零に等しきは、すなわち一を得るなり。 もし乙の一に等しきは、すなわち一を得るなり。 もし甲の零より小さきは、すなわち零を得るなり。 もし乙の一より小さきは、すなわち零を得るなり。

甲を減ずるに乙を以てす。これを名付けて丙という。 乙を減ずるに一を以てす。これを名付けて丁という。 制限分割に施すに、丙に、乙においてす。名付けてこれを戊という。 制限分割に施すに、甲に、丁においてす。名付けてこれを己という。 戊に加うるに己を以てす。これを名付けて庚という。 すなわち庚を得る。

これを制限分割の術と謂うなり。

吾に一つ術あり。これを名付けて分割という。この術を行わんと欲すれば、必ずやまず一数を得よ。甲という。すなわちこの術を行いて曰く。

制限分割に施すに、甲に、甲においてす。名付けてこれを乙という。 すなわち乙を得る。

これを分割の術と謂うなり。

吾に一つの数あり。四十という。これを名付けて甲という。

数の一なるあり。これを名付けて乙という。つねに是となす。もし乙の甲より大なればすなわち止む。

分割に施すに乙においてす。これを名付けて丙という。 吾に五言あり。曰く「 分割数 」、曰く乙、曰く「 是 」、曰く丙、曰く「 焉。」。これを書せ。 乙に加うるに一を以てす。昔の乙は、今はそれこれなり。 

うんぬん。

実行結果

OUTPUT
 分割数 一 是 一 焉。
 分割数 二 是 二 焉。
 分割数 三 是 三 焉。
 分割数 四 是 五 焉。
 分割数 五 是 七 焉。
 分割数 六 是 一十一 焉。
 分割数 七 是 一十五 焉。
 分割数 八 是 二十二 焉。
 分割数 九 是 三十 焉。
 分割数 一十 是 四十二 焉。
 分割数 一十一 是 五十六 焉。
 分割数 一十二 是 七十七 焉。
 分割数 一十三 是 一百零一 焉。
 分割数 一十四 是 一百三十五 焉。
 分割数 一十五 是 一百七十六 焉。
 分割数 一十六 是 二百三十一 焉。
 分割数 一十七 是 二百九十七 焉。
 分割数 一十八 是 三百八十五 焉。
 分割数 一十九 是 四百九十 焉。
 分割数 二十 是 六百二十七 焉。
 分割数 二十一 是 七百九十二 焉。
 分割数 二十二 是 一千零二 焉。
 分割数 二十三 是 一千二百五十五 焉。
 分割数 二十四 是 一千五百七十五 焉。
 分割数 二十五 是 一千九百五十八 焉。
 分割数 二十六 是 二千四百三十六 焉。
 分割数 二十七 是 三千零一十 焉。
 分割数 二十八 是 三千七百一十八 焉。
 分割数 二十九 是 四千五百六十五 焉。
 分割数 三十 是 五千六百零四 焉。
 分割数 三十一 是 六千八百四十二 焉。
 分割数 三十二 是 八千三百四十九 焉。
 分割数 三十三 是 一萬零一百四十三 焉。
 分割数 三十四 是 一萬二千三百一十 焉。
 分割数 三十五 是 一萬四千八百八十三 焉。
 分割数 三十六 是 一萬七千九百七十七 焉。
 分割数 三十七 是 二萬一千六百三十七 焉。
 分割数 三十八 是 二萬六千零一十五 焉。
 分割数 三十九 是 三萬一千一百八十五 焉。
 分割数 四十 是 三萬七千三百三十八 焉。

https://cdn-ak.f.st-hatena.com/images/fotolife/f/fortran66/20161025/20161025012449.png

fortran66.hatenablog.com