당신의 과제는 분수를 연속 분수 형태로 변환하는 것입니다.
입력 : 분수는 다음을 포함한 모든 형식으로 입력 할 수 있습니다 (단, 이에 한하지 않음).
- 문자열 : “7/16”
- 목록 : {7, 16}, (7, 16), [7, 16]
- 단순 주문 쌍 : 7 16
- 기능 : f [7,16]
출력 : 분자를 분모에서 분리하는 수평 분수 막대가있는 2D 연속 분수입니다. 분자가 1 인 연속 분수 만 유효합니다. 글꼴 크기를 깊이에 따라 변경할 필요는 없습니다. 선행 제로 (적절한 분수의 경우)는 선택 사항입니다.
깊이 : 코드는 8 단계 이상의 깊이를 표시 할 수 있어야합니다.
승리 기준 : 가장 짧은 코드가 승리합니다. 입력 및 출력을 보여주는 몇 가지 테스트 사례를 포함해야합니다.
테스트 예 (입력 후 출력)
5/4
5/3
5/7
9/16
89/150
답변
매스 매 티카, 40 36 자
f=If[⌊#⌋≠#,⌊#⌋+"1"/#0[1/(#-⌊#⌋)],#]&
예:
f[89/150]
산출:
답변
파이썬 2 158 155 147 142
a,b=input()
c=[]
while b:c+=[a/b];a,b=b,a%b
n=len(c)
while b<n-1:print' '*(n+b),'1\n',' '*4*b,c[b],'+','-'*(4*(n-b)-7);b+=1
print' '*4*b,c[b]
테스트:
$ python cfrac.py
(89,150)
1
0 + -------------------------
1
1 + ---------------------
1
1 + -----------------
1
2 + -------------
1
5 + ---------
1
1 + -----
1
1 + -
2
파이썬 2, Alt. 버전, 95
기본적으로 breadbox의 답변 포트입니다. 보다 안전한 출력.
a,b=input();i=2
while a%b:print'%*d\n%*d + ---'%(i+5,1,i,a/b);a,b=b,a%b;i+=5
print'%*d'%(i,a/b)
테스트:
$ python cfrac2.py
(98,15)
1
6 + ---
1
1 + ---
1
1 + ---
7
답변
XSLT 1.0
HTML로 분수를 표시하는 것이 좋을 것이라고 생각했기 때문에 XSLT 솔루션이 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" >
<xsl:template match="/f">
<xsl:variable name="c" select="floor(@a div @b)"/>
<xsl:variable name="next">
<f a="{@b}" b="{@a mod @b}"/>
</xsl:variable>
<table>
<tr>
<td valign="top" rowspan="2" style="padding-top:12px">
<xsl:value-of select="$c"/>+
</td>
<td align="center" style="border-bottom:1px solid black">1</td>
</tr>
<tr>
<td>
<xsl:apply-templates select="msxsl:node-set($next)"/>
</td>
</tr>
</table>
</xsl:template>
<xsl:template match="/f[@a mod @b=0]">
<xsl:value-of select="@a div @b"/>
</xsl:template>
</xsl:stylesheet>
테스트하려면 xslt를 fraction.xslt로 저장하고 IE에서 다음 파일을 엽니 다.
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="fraction.xslt" type="text/xsl"?>
<f a="89" b="150"/>
답변
루비, 175 (ASCII 아트 사용) 또는 47 (없음)
ASCII 아트없이 47
n,d=eval gets
while d!=0
puts n/d
n,d=d,n%d
end
루비는 실제로 그런 그래픽을 할 수 없으므로 예제에서 파란색 숫자를 출력합니다.
c:\a\ruby>cont
[5,4]
1
4
c:\a\ruby>cont
[5,3]
1
1
2
c:\a\ruby>cont
[5,7]
0
1
2
2
c:\a\ruby>cont
[9,16]
0
1
1
3
2
c:\a\ruby>cont
[89,150]
0
1
1
2
5
1
1
2
아스키 아트로, 181 178 175
n,d=eval gets
a=[]
n,d=d,n%d,a.push(n/d)while d!=0
i=0
j=2*a.size-3
k=a.size-2
a.map{|x|puts' '*i+"#{x}+"+' '*k+?1
i+=2
k-=1
puts' '*i+?-*j
j-=2}rescue 0
puts' '*i+a.last.to_s
와우, ASCII 아트는 많은 코드를 사용했고, 나는 심지어 사악하고 rescue 0
: P 샘플을 사용했습니다.
c:\a\ruby>cont
[89,150]
0+ 1
-------------
1+ 1
-----------
1+ 1
---------
2+ 1
-------
5+ 1
-----
1+ 1
---
1+1
-
2
답변
세이지 노트, 80
c=continued_fraction(n)
LatexExpr('{'+'+\\frac{1}{'.join(map(str,c))+'}'*len(c))
n
Sage가 합리적인 / 부동 소수점 수로 근사 할 수있는 모든 것이 여기 있을 수 있습니다. 하지 않는 한 기본 정밀도, 53 비트 n
A는 Rational
. MathJax를 좋아해야합니다.
답변
C, 119 자
n,d,r;main(i){for(scanf("%d%d",&n,&d);r=n%d;n=d,d=r,i+=5)
printf("%*d\n%*d + ---\n",i+5,1,i,n/d);printf("%*d\n",i,n/d);}
다음은 출력의 예입니다.
$ echo 15 98 | ./cfrac
1
0 + ---
1
6 + ---
1
1 + ---
1
1 + ---
7
$ echo 98 15 | ./cfrac
1
6 + ---
1
1 + ---
1
1 + ---
7
$ echo 98 14 | ./cfrac
7
잘린 분수 선은 여기의 일부 예와 같이 예쁘지 않지만 데스크톱 컴퓨터가 유비쿼터스가되기 전 며칠 동안 계속해서 분수를 형식화하는 일반적인 기술이라고 지적하고 싶습니다.
다음은 출력을 완전히 포맷하는 훨씬 더 긴 버전 (247 자)입니다.
c,h,i,j,n,d,w[99];char s[99][99];main(r){for(scanf("%d%d",&n,&r);d=r;n=d)
h+=w[c++]=sprintf(s[c],"%d + ",n/d,r=n%d);for(;j+=w[i],i<c-1;puts(""))
for(printf("%*d\n%*s",j+(r=h-j)/2,1,j,s[i++]);--r;printf("-"));
s[i][w[i]-2]=0;printf("%*s\n",j-1,s[i]);}
출력 예 :
$ echo 89 150 | ./cfr
1
0 + ---------------------------
1
1 + -----------------------
1
1 + -------------------
1
2 + ---------------
1
5 + -----------
1
1 + -------
1
1 + ---
2
$ echo 151 8919829 | ./cfr
1
0 + ----------------------------
1
59071 + --------------------
1
1 + ----------------
1
2 + ------------
1
1 + --------
1
1 + ----
21
$ echo 293993561 26142953 | ./cfr
1
11 + ---------------------
1
4 + -----------------
1
14 + ------------
1
4410 + -----
104
답변
APL (78)
{(v↑' '⍪⍉⍪⍕⍺),(' +'↑⍨v←⊃⍴x),x←('1'↑⍨⊃⌽⍴v)⍪v←'─'⍪⍕⍪⍵}/⊃{⍵≤1:⍺⋄a w←0⍵⊤⍺⋄a,⍵∇w}/⎕
예:
{(v↑' '⍪⍉⍪⍕⍺),(' +'↑⍨v←⊃⍴x),x←('1'↑⍨⊃⌽⍴v)⍪v←'─'⍪⍕⍪⍵}/⊃{⍵≤1:⍺⋄a w←0⍵⊤⍺⋄a,⍵∇w}/⎕
⎕:
89 150
1
0+─────────────
1
1+───────────
1
1+─────────
1
2+───────
1
5+─────
1
1+───
1
1+─
2