SNS에서 주운 초등-중등 문제를 고전어로 풀어 보자
by
gg582 · 2026-10-19 08:16:07 · 56 views · 2 min read
전통적으로 풀어보자.
今有兩圓各半俓曰九四也弦各合句各差問股長幾何
答曰十二
術曰九減四如五九加四如十三當置句五弦十三矣立天元一爲十三自乘而積一百六十九立地元一爲五自乘而積二十五一百六十九減二十五得一百四十四此如十二乘十二之積開平方得十二以求股
3분만에 폰으로 풀었다. 한문인거빼면 서술방식이 제법 괜찮잖아?
C로 짜보자.
#include <math.h>
#include <assert.h>
#define r1 9
#define r2 4
// a를 天元, b를 地元으로
int pythagorean(int a, int b) {
// 自乘하여 天元에서 地元을 減, 이후 平方을 전개해서 제곱근을 구함.
return (int)sqrt(a*a - b*b);
}
void main() {
// 9 + 4가 天元
int a = r1 + r2;
// 9 - 4가 地元
int b = r1 - r2;
assert(pythagorean(a, b) == 12 /*得十二*/);
}
그니까 전통적인 방식은 임시 변수를 많이 쓴다 그거네.
나라면 저렇게 하진 않을거같다. 구하려는건 직각삼각형의 세 변 중 높이를 구한다는거 아닌가? 그럼 빗변과 밑변을 저장할 필요가 없다.
이해하는 것은 컴퓨터고, 사람이 아니다. 그리고 이건 그렇게까지 난독화의 영역이 아니니 대충 이래도 된다.
#include <math.h>
#include <assert.h>
#define r1 9
#define r2 4
static inline int pythagorean(int a, int b) {
return sqrt(a*a - b*b);
}
static inline int getTriangleHeight(int a, int b) {
return pythagorean(a+b, a-b);
}
int main() { assert(getTriangleHeight(r1, r2) == 12); return 0; }
근데 둘 다
Maximum RSS: 1088 kbytes
눈으로 보기에는 최적화인 줄 알았는데...
별 차이 없잖아? 그럼 첫번째가 나은 게 맞다. 실제로 짤 땐 저렇게 고전어 안 쓰고 영어로 하지만.
기타 생각할거리
今有兩圓各半俓曰九四也弦各合句各差問股長幾何
答曰十二
乾法
術曰 九減四如五 九加四如十三 當置句五弦十三矣 十三自乘而積一百六十九 置元數一百六十九數爲弦數自乘之積 五自乘而積二十五 置法數二十五爲句數自乘之積 一百六十九減二十五得一百四十四 置一百四十四數實數之平方如十二乘十二之積 開平方得十二以求實數 實如股數矣
坤法
術曰 九減四如五 九加四如十三 五加十三如十八 十三減五如八 十八乘八如百四十四
十乘八如八十 呼八十 進一位 呼八八如六十四 八加六如十四 百位如一十位如四得一百四十四數 開平方得十二即股長
坎法
術曰 置弦十三減句五得八爲勾弦較 較自乘得六十四 倍句得十以乘較八得八十 並六十四得一百四十四 開平方得十二即股長
震法
術曰 立天元一爲股 自乘得天元冪爲股積 加句自乘二十五得天元冪加二十五爲弦積 寄左 然後列弦十三自乘得一百六十九爲眞弦積 與左相消得 負一百四十四爲常數 空爲從 正一爲隅 開平方得十二即天元股長
시간 있으면 번역해서 봐도 된다. 개인적으로 시간을 한 10분 내어 만들었다.
今有兩圓各半俓曰九四也弦各合句各差問股長幾何 答曰十二 術曰九減四如五九加四如十三當置句五弦十三矣立天元一爲十三自乘而積一百六十九立地元一爲五自乘而積二十五一百六十九減二十五得一百四十四此如十二乘十二之積開平方得十二以求股 此亦可得于天元術 本象如下 隅二無廉九加四爲平方之邊又九減四爲平方之變大母小子 減子於母爲夫數之平方 開平方得一十二
Report