অবিরত ভগ্নাংশ প্রদর্শন করুন


9

আপনার চ্যালেঞ্জটি হ'ল ভগ্নাংশকে তার অবিরত ভগ্নাংশ রূপে রূপান্তর করা।

ইনপুট : ভগ্নাংশটি কোনও বিন্যাসে ইনপুট হতে পারে, সহ (তবে সীমাবদ্ধ নয়)

  • স্ট্রিং: "7/16"
  • তালিকা: {7, 16}, (7, 16), [7, 16]
  • সাধারণ অর্ডারযুক্ত জোড়া: 7 16
  • ফাংশন: চ [7,16]

আউটপুট : অবিচ্ছিন্ন ভগ্নাংশ, 2 ডি তে, অনুভূমিক ভগ্নাংশ বারগুলি ডুমিনেটর থেকে পৃথককে পৃথক করে। 1 টির সমান সংখ্যক সহ অবিরত ভগ্নাংশগুলি বৈধ। গভীরতার সাথে সাথে ফন্টের আকারটি পৃথক করা প্রয়োজন হয় না। একটি নেতৃস্থানীয় শূন্য (সঠিক ভগ্নাংশের জন্য) isচ্ছিক।

গভীরতা : আপনার কোড অবশ্যই কমপক্ষে 8 স্তরের গভীরতা প্রদর্শন করতে সক্ষম হবে।

বিজয়ী মানদণ্ড : সংক্ষিপ্ততম কোড জিতেছে। আপনাকে অবশ্যই বেশ কয়েকটি পরীক্ষার কেস অন্তর্ভুক্ত করতে হবে যা ইনপুট এবং আউটপুট দেখাচ্ছে।

পরীক্ষার উদাহরণ (আউটপুট এর পরে ইনপুট)

5/4 পাঁচ চতুর্থাংশ

5/3 পাঁচ তৃতীয়াংশ

5/7 পাঁচ সতের

9/16 নয়টি ষোলতম

89/150 আশি নয়টি দুই শত পঞ্চাশতম


আপনাকে কত গভীর যেতে হবে তার মাপদণ্ড কী? উদাহরণস্বরূপ, কেন আমরা কেবল শেষটির 0 + 89 / 250জন্য করতে পারি না ?
ডুরকনব

আমি অনুমান করছিলাম যে একমাত্র গ্রহণযোগ্য সংখ্যক ১। আমি এটি যুক্ত করব।
ডেভিডসি

আহ ঠিক আছে, গণিতের ব্যাকগ্রাউন্ডের খুব বেশি অংশ নেই :) উইকিপিডিয়া সাহায্য করেছে। যে ভাষাগুলি এই বিন্যাসে জিনিসগুলি প্রদর্শন করতে পারে না সেগুলি সম্পর্কে কীভাবে? আমরা যদি এরকম কিছু করি তবে কি ঠিক আছে 0 + 1 / (1 + 1 / (1 + 1 / (2 + 1 / (3 + 1 / (1 + 1 / (1 + 1 / (2)))))))? প্রথম বন্ধনী ছাড়া কী হবে? বা আমরা যদি শুধু নীল সংখ্যাগুলি প্রদর্শন করি তবে 0 1 1 2 5 1 1 2?
ডুরকনব

1
আপনার চিহ্নটি গাণিতিকভাবে সঠিক বলে মনে হচ্ছে। তবে চ্যালেঞ্জের মূল বিষয় হ'ল কলাম এবং সারি বিন্যাসে ভগ্নাংশটি প্রদর্শন করার উপায় খুঁজে বের করা (যা আমি উপরে উপরে 2D হিসাবে উল্লেখ করেছি)।
ডেভিডসি

উত্তর:


5

গণিত, 40 36 টি অক্ষর

f=If[⌊#⌋≠#,⌊#⌋+"1"/#0[1/(#-⌊#⌋)],#]&

উদাহরণ:

f[89/150]

আউটপুট:

আউটপুট


10

পাইথন 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

মূলত ব্রেডবক্সের উত্তরের একটি বন্দর। নিরাপদ আউটপুট।

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

1
+1 ভাল ধারণা! 9 টিরও বেশি সংখ্যা তৈরি করা হলেও সমস্যা রয়েছে। 40,3ইনপুট হিসাবে যেমন, চেক করুন।
সোভেন হোহেনস্টেইন

7

এক্সএসএলটি 1.0

আমি ভেবেছিলাম এইচটিএমএল সহ ভগ্নাংশগুলি প্রদর্শন করা ভাল লাগবে, তাই এখানে একটি এক্সএসএলটি সমাধান রয়েছে।

<?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>

এটি পরীক্ষা করতে, এক্সস্লটকে fration.xslt হিসাবে সংরক্ষণ করুন এবং নিম্নলিখিত ফাইলটি আইইতে খুলুন:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet  href="fraction.xslt" type="text/xsl"?>
<f a="89" b="150"/>

89/150


আমি এই সমাধান ভালবাসি। চমৎকার কাজ!
ক্রাঙ্কার

4

রুবি, 175 (এএসসিআইআই আর্ট সহ) বা 47 (ছাড়াই)

এএসসিআইআই আর্ট ব্যতীত, 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

বাহ, এএসসিআইআই শিল্পটি প্রচুর কোড হাতে নিয়েছিল এবং আমি এমনকি দুষ্ট এবং ব্যবহার করে যাচ্ছিলাম rescue 0: পি নমুনা:

c:\a\ruby>cont
[89,150]
0+      1
  -------------
  1+     1
    -----------
    1+    1
      ---------
      2+   1
        -------
        5+  1
          -----
          1+ 1
            ---
            1+1
              -
              2

@ ডেভিডক্যারাহার ঠিক আছে, তাহলে এটি কার্যকর হয়। সম্পাদিত
ডুরকনব্ব

আপনি আংশিক উদ্ধৃতিফল আউটপুট। যদিও এটি একটি অবিচ্ছিন্ন ভগ্নাংশ গঠনের জন্য প্রয়োজনীয়, তারা কেবল প্রয়োজনের অংশ।
ডেভিডসি

@ ডেভিডকার্যাহার আমার ধারণা আমি একরকম ASCII আর্ট চেষ্টা করতে পারি ... রুবিতে এটি করার খুব একটা উপায় নেই।
ডুরকনব

@ ডেভিডকারারহারে ঠিক আছে, আমাকে চলে যেতে হবে, তবে আমি খুব শীঘ্রই ভগ্নাংশের একটি ASCII প্রতিনিধিত্ব করার জন্য কাজ করব।
ডুরকনব

গ্রেট। আমি আপনার প্রচেষ্টার ফলাফল দেখার জন্য উন্মুখ
ডেভিডসি

4

সেজ নোটবুক, 80

c=continued_fraction(n)
LatexExpr('{'+'+\\frac{1}{'.join(map(str,c))+'}'*len(c))

এখানে nসেজে কিছু হতে পারে যৌক্তিক / ভাসমান পয়েন্ট সংখ্যা দ্বারা অনুমান করা যায়। ডিফল্ট নির্ভুলতা 53 বিট, যদি না nহয় Rational। ম্যাথজ্যাক্সকে ভালবাসে।

এখানে চিত্র বর্ণনা লিখুন


4

সি, 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 

বাহ, একটি সিজি জেতার জন্য আমাদের সবচেয়ে কম সম্ভাব্য ভাষার একটিতে বিজয়ী থাকতে পারে! চিত্তাকর্ষক! :-)
ডুরকনব

3

এপিএল (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 

2

গণিত, 77

Fold[#2+1/ToString[#1]&,First[#1],Rest[#1]]&[Reverse[ContinuedFraction[#1]]]&

এর জন্য সবে ম্যাথমেটিকা ​​শিখেছি। এটি করার জন্য একটি আশ্চর্যজনক দীর্ঘ প্রোগ্রাম নেয়।


2

পার্ল 128 114 অক্ষর

($a,$b)=split;$_=" "x7;until($b<2){$==$a/$b;($a,$b)=($b,$a%$b);$_.="1\e[B\e[7D$= + ---------\e[B\e[4D"}$_.="$a\n"

তবে এটি কনসোল প্লেসমেন্টটি ব্যবহার করার কারণে আপনাকে রান করার আগে কনসোল সাফ করতে হবে:

clear
perl -pe '($a,$b)=split;$_=" "x7;until($b<2){$==$a/$b;($a,$b)=($b,$a%$b);$_.=
"1\e[B\e[7D$= + ---------\e[B\e[4D"}$_.="$a\n"' <<<$'5 7 \n189 53 \n9 16 \n89 150 '

আউটপুট:

       1
 0 + ---------
          1
    1 + ---------
             1
       2 + ---------
                2
       1
 3 + ---------
          1
    1 + ---------
             1
       1 + ---------
                1
          3 + ---------
                   1
             3 + ---------
                      2
       1
 0 + ---------
          1
    1 + ---------
             1
       1 + ---------
                1
          3 + ---------
                   2
       1
 0 + ---------
          1
    1 + ---------
             1
       1 + ---------
                1
          2 + ---------
                   1
             5 + ---------
                      1
                1 + ---------
                         1
                   1 + ---------
                            2

প্রথম পোস্ট: 128 চর

($a,$b)=split;$c=7;while($b>1){$==$a/$b;($a,$b)=($b,$a%$b);printf"%s1\n%${c}d + %s\n"," "x($c+=5),$=,"-"x9}printf" %${c}d\n",$=

কাট'অন পেস্টের জন্য বিভক্ত :

perl -ne '($a,$b)=split;$c=7;while($b>1){$==$a/$b;($a,$b)=($b,$a%$b);printf
"%s1\n%${c}d + %s\n"," "x($c+=5),$=,"-"x9}printf" %${c}d\n",$a' \
    <<<$'5 7 \n189 53 \n9 16 \n89 150 '

রেন্ডার করবে:

            1
      0 + ---------
                 1
           1 + ---------
                      1
                2 + ---------
                      2
            1
      3 + ---------
                 1
           1 + ---------
                      1
                1 + ---------
                           1
                     3 + ---------
                                1
                          3 + ---------
                                2
            1
      0 + ---------
                 1
           1 + ---------
                      1
                1 + ---------
                           1
                     3 + ---------
                           2
            1
      0 + ---------
                 1
           1 + ---------
                      1
                1 + ---------
                           1
                     2 + ---------
                                1
                          5 + ---------
                                     1
                               1 + ---------
                                          1
                                    1 + ---------
                                          2

ল্যাটেক্স ব্যবহার করে একই:

perl -ne 'END{print "\\end{document}\n";};BEGIN{print "\\documentclass{article}\\pagestyle".
  "{empty}\\begin{document}\n";};($a,$b)=split;$c="";print "\$ $a / $b = ";while($b>1){$==$a
  /$b;($a,$b)=($b,$a%$b);printf"%s + \\frac{1}{",$=;$c.="}";}printf"%d%s\$\n\n",$a,$c'  \
   <<<$'5 7 \n189 53 \n9 16 \n89 150 ' >fracts.tex

pslatex fracts.tex 

dvips -f -ta4 <fracts.dvi |
  gs -sDEVICE=pnmraw -r600 -sOutputFile=- -q -dNOPAUSE - -c quit |
  pnmcrop |
  pnmscale .3 |
  pnmtopng >fracts.png

লেটেক্স পিকচার


1

পার্ল: 140 , 133 121 অক্ষর

($a,$b)=<STDIN>;while($b>1)
{$g=$i+++4;print" "x$g."1\n"." "x$i,int($a/$b)."+---\n";($a=$b)=($b,$a%$b)}
print" "x$g."$a\n"

উদাহরণ:
#perl fration.pl
5
7

   1
0+---
    1
 1+---
     1
  2+---
     2

0

ফায়ারফক্সে রেজার লিফ, 108 127

%r=(i,n,d)=>
    mn"#{n/d|0}"
    if i<8&&n%d
        mo"+"
        mfrac
            mn"1"
            me%r(i+1,d,n%d)
math%[a,b]=data;r(0,a,b)

প্রম্পটটি সত্যিই সেখানে ব্যাথা করে ...ওহ, তোমার মানে আমি বাছতে চাই? ঠিক আছে, এটি একটি তালিকা। যাইহোক, ভাগ্য ভাল এই চালানোর জন্য।


0

গেম মেকার ল্যাঙ্গুয়েজ (স্ক্রিপ্ট), 61 71

a=argument0;b=argument1;while b!=0{c+=string(a/b)a,b=b,a mod b}return c

সমস্ত অবিচ্ছিন্ন ভেরিয়েবল হিসাবে কম্পাইল করুন 0


1
এই আউটপুট কিছু আছে? এছাড়াও, এটি ভুল বলে মনে হচ্ছে; আপনি কোনও সংখ্যায় একটি স্ট্রিং যুক্ত করছেন। তুমি কি চেষ্টা করেছ?
ডুরকনব

@ ডুরকনব আপনি ঠিক বলেছেন, আমি তা দিয়েছিলাম c
টিমটেক

এটি এখনও কিছু আউটপুট দেয় না ...
ডোরকনব

@ ডুরকনব হ্যাঁ, এটি কিছুই ফেরায় না, এবং আমার কিছু সিনট্যাক্স ত্রুটি ছিল। এটি এখন সঠিক মান প্রদান করা উচিত।
টিমটেক

0

ইনপুট নম্বরগুলি সহ-প্রধান হিসাবে ধরে নেওয়া, এই প্রক্রিয়াটিকে অঙ্ক এবং ডিনোমিনেটরের সাথে কল করুন। অবিরত ফর্মটি না পাওয়া পর্যন্ত এটি কোনও গভীরতায় যেতে পারে, সীমা নেই

জাভাতে রচিত (২৩৮ টি অক্ষর)

String space = "";
private void process(int n, int d) {
    System.out.println(space+(n/d)+" + 1");
    space += "    ";
    System.out.println(space+"------");
    if((n % d)==1)
        System.out.println(space+d);
    else
        process(d,(n % d));
}

প্রক্রিয়া (89,150);

0 + 1
    ------
    1 + 1
        ------
        1 + 1
            ------
            2 + 1
                ------
                5 + 1
                    ------
                    1 + 1
                        ------
                        1 + 1
                            ------
                            2

প্রক্রিয়া (973,13421);

0 + 1
    ------
    13 + 1
        ------
        1 + 1
            ------
            3 + 1
                ------
                1 + 1
                    ------
                    5 + 1
                        ------
                        3 + 1
                            ------
                            1 + 1
                                ------
                                1 + 1
                                    ------
                                    4

0

কে, 136

{-1@((!#j)#\:" "),'j:(,/{(x,"+ 1";(" ",(2*y)#"-"),"\t")}'[a;1+|!#a:$-1_i]),$*|i:*:'1_{(i;x 2;x[1]-(i:x[1]div x 2)*x@2)}\[{~0~*|x};1,x];}

k)f:{-1@((!#j)#\:" "),'j:(,/{(x,"+ 1";(" ",(2*y)#"-"),"\t")}'[a;1+|!#a:$-1_i]),$*|i:*:'1_{(i;x 2;x[1]-(i:x[1]div x 2)*x@2)}\[{~0~*|x};1,x];}
k)f[5 4]
1+ 1
  --
  4

k)f[5 3]
1+ 1
  ----
  1+ 1
    --
    2

k)f[5 7]
0+ 1
  ------
  1+ 1
    ----
    2+ 1
      --
      2

k)f[9 16]
0+ 1
  --------
  1+ 1
    ------
    1+ 1
      ----
      3+ 1
        --
        2

k)f[89 150]
0+ 1
  --------------
  1+ 1
    ------------
    1+ 1
      ----------
      2+ 1
        --------
        5+ 1
          ------
          1+ 1
            ----
            1+ 1
              --
              2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.