Altın Oran Devamlı Kesiri için MathJax Üretin


17

MathJax'ın geçici olarak devre dışı bırakılması beklentisiyle, bu sorudaki görüntülenen MathJax'ın yerini görüntüler aldı. Yine de yanıt gönderebilirsiniz, ancak oluşturulan MathJax'ı başka bir sitede görüntülemeniz gerekir .

PPCG sadece MathJax aldı ! Bu, yazılara kolayca iyi biçimlendirilmiş matematiksel formüller ekleyebileceğimiz anlamına gelir. ( Handy MathJax öğretici. )

Örneğin, sonsuz bir sürekli fraksiyon olarak ifade edilen altın oran :

eq0

Bu denklem için MathJax kodu:

$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}}$$

Bunu, formülü sağ tıklayıp Matematik Farklı GösterTeX Komutları'nı izleyerek bulabilirsiniz . Araçlar yerine satır içi sayfanın merkezinde ve kendi görüntülenir. Satır içi için bir tane kullanın .
$$$

Meydan okuma

Negatif olmayan bir tam sayı olan n'yi alır ve altın oran için devam eden kesirin birçok "adımı" için MathJax kodunu çıktılar.

Yanıtlarda işleri standart tutmak için, bu tam MathJax sözdizimini kullanmanız gerekir :

  • N = 0 için çıkış olmalıdır $$\varphi=1+\dots$$.
    Hangi olarak işlenir:

    eq1

  • N = 1 için çıkış olmalıdır $$\varphi=1+\cfrac1{1+\ddots}$$.
    Hangi olarak işlenir:

    eq2

  • N = 2 için çıkış olmalıdır $$\varphi=1+\cfrac1{1+\cfrac1{1+\ddots}}$$.
    Hangi olarak işlenir:

    eq3

  • N = 3 için çıkış olmalıdır $$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}$$.
    Hangi olarak işlenir:

    eq4

Bu örüntü daha büyük n için devam eder. N'nin denklemdeki bölme çizgilerinin sayısını temsil ettiğini söyleyebilirsiniz.

notlar

  • \cfracdaha yaygın yerine kullanılır \frac.
  • \dots\ddotsn = 0 yerine kullanılır .
  • Stdin veya komut satırından girdi alın.
  • Stdout'a çıktı (isteğe bağlı bir son satırsonu ile).
  • Alternatif olarak, n değerini bir tamsayı olarak alan ve MathJax kodunu bir dize olarak döndüren (veya yine de yazdırılan) bir işlev yazabilirsiniz.

puanlama

Bayt cinsinden en küçük gönderim kazanır. Tiebreaker daha önceki gönderilere gidiyor.


Yığın snippet'ini çalıştırmak isteyenler için sadece bir not: Birçok (en çok?) Yığın snippet gibi, bu Safari'de çalışmaz.
Alex

Eğer şeyler yazdığınızda yığın snippet çalışmıyor ... o verirUncaught ReferenceError: textbox is not defined
soktinpk

@soktinpk Bu garip, aynı sorunu yaşıyorum. Ama pasajı buraya ... tam aynı olsa bile çalışır İşte durumda harici bayt sayacı var.
Calvin'in Hobileri

MathJax, PPCG için yeniden etkinleştirildi!
wastl

Yanıtlar:


6

CJam, 51 50 bayt

$$\varphi=1+""\cfrac1{1+"ri:R*'\"ddots"R!>'}R*'$_

Kod açıklaması:

"$$\varphi=1+"             "This is a static string";
  "\cfrac1{1+"ri:R*'\      "Repeat this string input number times. Put a \ at the end";
    "ddots"R!>             "If input is 0, remove 1st characters, else not";
      '}R*                 "Put the closing bracket R times";
        '$_                "The final $$";

Birkaç örnek:

N = 0

$$\varphi=1+\dots$$

N = 4

$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}}$$

N = 15

$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}}}}}}}}}}}}}$$

GÜNCELLEME - Sp3000 sayesinde 1 bayt kaydedildi!

Buradan çevrimiçi deneyin


1
Biraz karışıklık 50 verir:"$$\varphi=1+""\cfrac1{1+"ri:R*'\"ddots"R!>'}R*'$_
Sp3000

Cevabınıza hiç bakmadım - sadece tesadüf. Her iki durumda da, 49 baytlık Pyth çözümünüz gerçekte 50 bayttır, çünkü kaçmanız \vgerekir \\v.
orlp

@orlp ve bu yüzden bu çözümün burada bulunmasının potansiyel bir yararı olmadığından geri döndüm.
Doktor

10

Python, 70 68 67 bayt

lambda n:"$$\\varphi=1+\%sdots%s$$"%("cfrac1{1+\\"*n+"d"[:n],"}"*n)

Bu, basit dize çarpımı ve dize biçimlendirmesi kullanan anonim bir işlevi tanımlar.

(Teşekkür Buna dikkat çektiğin için @xnor için \\ctıpkı yazılabilir \cçünkü ckaçmış olamaz. Ne yazık ki bu için geçerli değildir \\v, çünkü \vASCII 11 olduğunu)

Önceki denemeler:

lambda n:"$$\\varphi="+"1+\\cfrac1{"*n+"1+\\"+"ddots"[n<1:]+"}"*n+"$$"
lambda n:r"$$\varphi=%s1+\%s$$"%("1+\cfrac1{"*n,"ddots"[n<1:]+"}"*n)

Beni 14 saniye geçtin! Ayrıca 70 karakter.
xnor

2
Bence bu bir çift \ önce cfrac kullanmadan çalışır.
xnor

@xnor Öyle görünüyor, teşekkürler! Ve her zaman Python
golfleri aldýđým

Hayır, senden yayınlamak için adil ırk payımı çaldım.
xnor

4

> <> , 89 86 + 3 = 89 bayt

:&"$$"{\l?!;o70.
}-1v!?:<{"}"
&:&\~"stod"&:&?:
{1->:?!v}"\+1{1carfc"
rav\$$"\~"\+1=ihp

-vBayrakla çalıştırın , örn.

py -3 fish.py program.fish -v 3

Şaşırtıcı bir şekilde> <> burada çok kötü bir şey yapmaz, çünkü her yinelemeyi azaltacağımız bir sayaca sahip olarak dize çarpımını taklit edebiliriz.

:&"$$"{\                     Put n into the register and push "$$"
}-1v!?:<{"}"                 Push n "}"s
&:&\~"stod"&:&?:             Push "stod", and copy the final "d" if n != 0
{1->:?!v}"\+1{1carfc"        Push n "\+1{1carfc"s
rav\$$"\~"\+1=ihp            Push "\+1=ihprav\$$"
       \l?!;o70.             Keep printing chars until the stack is empty

(@Randomra sayesinde -3 bayt)


3 bayt için iki küçük iyileştirme (satır 1 ve satır 3'ün sonunda): pastebin.com/wEbKhuUH
randomra

Hah ilk ve son satır aynalar maç, fark etmedi: P
Sp3000

4

Retina , 160 + 7 = 167 bayt

;`.+
$$$$\varphi=1+\dots#$0$$$$

; + (\d*)#(?:(((((((((9)|8)|7)|6)|5)|4)|3)|2)|1)|0) $1$1$1$1$1$1$1$1$1$1$2$3$4$5$6$7$8$9$10# ;#

;+`\\d?dots\d(\d*)
\cfrac1{1+\ddots$1}

Her satır ayrı bir kaynak dosyasına gider, bu yüzden ilkinden sonra her dosya için 1 bayt ekledim . Ancak, kolaylık sağlamak için, Retina artık -stüm bunları tek bir dosyaya koymanıza izin veren komut satırı bayrağını da desteklemektedir (bu durumda, yeni satırlar dosya ayırıcılar olarak ele alınır).

Kodun en büyük kısmı (98 bayt), girdiyi ondalık sayıdan tekli hale getirmek için kullanılır (3 - 6 arası dosyalar). Kodun temel fikri, girişi çevrelemek $$\varphi=1+\dots...$$, daha sonra girişi tekli hale getirmek ve daha sonra devam eden kesimin bir sonraki seviyesine genişletmek \dotsNveya \ddotsN(azaltmak Niçin N-1).


4

Julia, 76 73 bayt

n->("\$\$\\varphi=1+"*"\\cfrac1{1+"^n*"\\"*"d"^(n>0)*"dots"*"}"^n*"\$\$")

Bu, girdi olarak tek bir tamsayıyı alan ve MathJax öğesini bir dize olarak döndüren lambda işlevi oluşturur. Bunu aramak için bir ad verin, örn f=n->....

Ne yazık ki Julia dizelerinde hem ters eğik çizgi hem de dolar işareti kaçmalıdır, çünkü her ikisinin de özel bir anlamı vardır. Dize birleştirme kullanılarak* ve ile dize yineleme^ .

Örnekler:

julia> f(0)
"$$\varphi=1+\dots$$"

julia> f(4)
"$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}}$$"

Öneriler her zaman olduğu gibi bekliyoruz!


Düzenleme: Plannapus sayesinde 3 bayt kaydedildi!


"d"^(n>0)bunun yerine (n>0?"d":"")kısaltacaktır.
plannapus

@plannapus: Adının ne anlama geldiğini anlamıyorum ama sen bir dahisin! Bunun "string"^0yasal olduğunu unutmuştum .
Alex

rica ederim. Takma adım, kendim bir radyolaryalı paleontolog olmak, bir radyolarya cinsinin adıdır. "Düzleştirilmiş şalgam" anlamına gelir bence :)
plannapus

BF cevap bekliyorum =)
flawr

@flawr: Umarım beni bunun için beklemezsin ...
Alex A.

3

Element, 63 Karakter

_+2:'\$\$\\varphi\=1\+`[\\cfrac1\{1\+`]?\\[d.]`"dots`[\}`]\$\$`

Bu en basit çözümdür. Ne yazık ki, çıktıdaki büyük miktarda sembol program uzunluğunda önemli bir artışa neden olur (dizeleri programa koymak sembollerin doğrudan işlem yapmasına neden olur). Eminim golf için yer var, ama şu anda daha fazla zamanım yok.

Bu dil hala nispeten bilinmediğinden, burada Perl ile yazılmış tercüman bağlantısı var .

_+2:                     take input, add 0 to it to make it a number, and duplicate
'                        put one copy onto the control stack
\$\$\\varphi\=1\+        a "bare" string
`                        output the string
[                        start a for loop, based on the input from earlier
    \\cfrac1\{1\+        a bare string
    `                    output it
]                        end the for loop
?                        test the second copy of the input for non-zero-ness
\\                       a bare \
[d.]                     a "for" loop used as an if block, appends a "d"
`                        output it
dots`                    output dots
"                        get rid of the if condition result so the old result is on top
[                        another for loop, still using the input from earlier
    \}`                  output a }
]                        end for loop
\$\$`                    output $$

Element'i kullanmak için +1! Element'in ev ismi olma zamanı!
Alex

3

T-SQL, 229 227 138

Bir SQL yanıtı yaptığımdan beri bir süredir ve her zamanki gibi çok ayrıntılı. Düzenleme Elbette aşırı karmaşık ve hiç özyinelemeli bir sorguya gerek yoktu.

CREATE FUNCTION A(@ INT)RETURNS TABLE RETURN SELECT'$$\varphi=1+\'+REPLICATE('cfrac1{1+\',@)+IIF(@>0,'d','')+'dots'+REPLICATE('}',@)+'$$'S

orijinal

CREATE FUNCTION A(@ INT)RETURNS TABLE RETURN WITH R AS(SELECT CAST('$$\varphi=1+\dots'AS VARCHAR(MAX))S,0N UNION ALL SELECT REPLACE(STUFF(S,14,0,'cfrac1{1+\'),'\do','\ddo')+'}',N+1FROM R WHERE N<=@)SELECT S+'$$'S FROM R WHERE N=@

Bu, ek cfrac1{1+\yineleme başına şeyler için özyinelemeli bir sorgu kullanan bir satır içi tablo işlevi oluşturur . Noktaları noktalara değiştirmek pahalıydı, ancak birkaç değişiklikten kurtuldu :). Ayrıca orijinal dizeyi 'VARCHAR (MAX)' olarak yayınlamak zorunda kalmanız biraz maliyetlidir.

SQLFiddle aşağıdaki gibi kullanılır :

SELECT * 
FROM (SELECT N FROM(VALUES(0),(1),(2),(3),(4),(5))A(N)) N
    CROSS APPLY A(N.N)
N   S
--- ---------------------------------------------------------------------------
0   $$\varphi=1+\dots$$
1   $$\varphi=1+\cfrac1{1+\ddots}$$
2   $$\varphi=1+\cfrac1{1+\cfrac1{1+\ddots}}$$
3   $$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}$$
4   $$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}}$$
5   $$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}}}$$

3

Yakut, 76 75 71 70 bayt

Bu şüpheli bir şekilde açıktır, bu yüzden lütfen bir yere bulaşıp bulaşmadığımı bana bildirin.

Bu arada, Ruby'de yazdığım ilk şey bu - Çarparak tekrarlamayı destekleyen bir dil arıyordum ve Ruby hile yapıyor gibiydi.

f=proc{|n|'$$\varphi=1+'+'\cfrac1{1+'*n+'\dd'[0,n+2]+'ots'+'}'*n+'$$'}

Şu şekilde uygulanacaktır:

f.call(0)
$$\varphi=1+\dots$$

f.call(3)
$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}$$

@ Sp3000 İlki, Ruby görünüşe göre Boolean'ları tamsayılara dönüştüremediğinden. İkincisi de çalıştı, bunun için teşekkürler!
vvye

2

J, 60 bayt

(<;._2'$$\varphi=1+\ cfrac1{1+\ d dots } $$ ');@#~1,~5$1,],*

Kullanımı:

   ((<;._2'$$\varphi=1+\ cfrac1{1+\ d dots } $$ ');@#~1,~5$1,],*) 0
$$\varphi=1+\dots$$

   ((<;._2'$$\varphi=1+\ cfrac1{1+\ d dots } $$ ');@#~1,~5$1,],*) 3
$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}$$

Yöntem:

Dize '$$\varphi=1+\ cfrac1{1+\ d dots } $$ ', boşluklarda kesilir ve parçalar tekrarlanır 1 n signum(n) 1 n 1ve daha sonra bu parçalar birleştirilir.

Burada çevrimiçi deneyin.


2

R ', 93 90

Diğer cevaplarla hemen hemen aynı. Tarama ucu için @plannapus'a teşekkürler.

cat('$$\\varphi=1+\\',rep('cfrac1{1+\\',n<-scan()),if(n)'d','dots',rep('}',n),'$$',sep='')

cat sonuç olarak macun0 yerine \\ ziyade\ .

Kullanımda

> > cat('$$\\varphi=1+\\',rep('cfrac1{1+\\',n<-scan()),if(n)'d','dots',rep('}',n),'$$',sep='')
1: 3
2: 
Read 1 item
$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}$$

+1 ancak bir işlev yapmak yerine, kullanıcı nilk oluşumunda stdin olarak girerseniz, bazı karakterleri kaydedebilirsiniz:cat("$$\\varphi=1+\\",rep("cfrac1{1+\\",n<-scan()),if(n)"d","dots",rep("}",n),"$$",sep="")
plannapus

2

JavaScript, 114 109 106 85 George Reith sayesinde bayt

f=n=>'$$\\varphi=1+\\'+((x='cfrac1{1+\\'.repeat(n))&&x+'d')+'dots'+'}'.repeat(n)+'$$'

Bu benim bir codegolf yarışmasına ilk girişim! Lütfen bana nasıl gelişebileceğimi söyle.

Önceki giriş (106 bayt):

w="$$\\varphi=";y=n=>{return a=!n?w+"1+\\dots$$":w+"1+\\cfrac1{".repeat(n)+"1+\\ddots"+"}".repeat(n)+"$$"}

Önceki giriş (109 bayt):

x="repeat",w="$$\\varphi=";y=n=>{return a=!n?w+"1+\\dots$$":w+"1+\\cfrac1{"[x](n)+"1+\\ddots"+"}"[x](n)+"$$"}

Önceki giriş (114 bayt):

x="repeat";y=n=>{return a=!n?"$$\\varphi=1+\\dots$$":"$$\\varphi="+"1+\\cfrac1{"[x](n)+"1+\\ddots"+"}"[x](n)+"$$"}

Tarayıcı konsoluna yapıştırın ve 'adım' sayısının olduğu f(n)yeri arayın n.

Basitleştirilmiş kod :

function y(n) {
   if(n === 0) {
      return "$$\\varphi=1+\\dots$$";
   } else {
      return "$$\\varphi=" + "1+\\cfrac1{".repeat(n) + "1+\\ddots"+"}".repeat(n)+"$$";
   }

2
x = 'tekrar' daha kısa değil, daha uzun yapar: .reeat'i olduğu gibi kullanın ve 3 karakter kaydedin
edc65

@ edc65 teşekkürler !!

pastebin.com/uU7tgFm9 daha fazla gelişme
edc65

Şu şekilde 87 bayt haline getirilebilir: pastebin.com/0Hkv9uft
George Reith


1

Pyth - 52 bayt

Pyth'teki basit yaklaşım, @ Sp3000'in Python çözümünden çalındı. Dize biçimlendirme işleci kullanır %.

%"$$\\varphi=1+\%sdots%s$$"(+*"cfrac1{1+\\"Q<\dQ*\}Q

Burada çevrimiçi deneyin .

%                  String formatting
 "$$ . . . $$"     String to be formatted
 (                 Tuple (no need to close it)
  +                String concatenation
   *"..."Q         String repetition input times
   <\dQ            If Q>0 then d
  *                String repetition
   \}              The character "}"
   Q               Q times

1

Pyth, 50 bayt

s["$$\\varphi=1+"*Q"\cfrac1{1+"\\<\dQ"dots"*Q\}"$$

1
Düzenleme geçmişimi görün :)
Optimizer

1

JavaScript (ES6), 76 80

Kısmen özyinelemeli. Tek / çift d en sinir bozucu kısımdır.

F=n=>"$$\\varphi=1+\\"+(R=d=>n--?"cfrac1{1+\\"+R("d")+"}":d+"dots")("")+"$$"

Firefox / FireBug konsolunda test et

> for(i=0;i<5;i++)console.log(F(i))

$$\varphi=1+\dots$$
$$\varphi=1+\cfrac1{1+\ddots}$$
$$\varphi=1+\cfrac1{1+\cfrac1{1+\ddots}}$$
$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}$$
$$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}}$$

0

Python, 90 116

en verimli çözüm zaten birden çok kez gönderildi beri, bunun yerine dize değiştirme ile gitmek

f=lambda n:'$$\\varphi=1+\ddots$$'if n==0 else f(n-1).replace('\ddots','\cfrac{1+\ddots}')
# or, with exactly the same length
x='\ddots';f=lambda n:'$$\\varphi=1+'x+'$$'if n==0 else f(n-1).replace(x,'\cfrac{1+'x+'}')

Düzenleme: lanet olsun, gözden kaçan dotsyerine ddotsyönelik n=0, şimdi tacked ekstra bir fıkra ile özyinelemeli çözüm yarışırlar çok çirkin.

x='$$\\varphi=1+\d%sots$$';f=lambda n:x%''if n==0 else x%'d'if n==1 else f(n-1).replace('\ddots','\cfrac{1+\ddots}')

Şu anda bu n=0özel durum eksik (nokta yerine nokta).
randomra

0

Haskell, 86

n%x=[1..n]>>x
f n="$$\\varphi=1+"++n%"\\cfrac1{1+"++'\\':drop(0^n)"ddots"++n%"}"++"$$"

Aslında buradaki tüm çözümlerle aynı yaklaşım. drop(0^n)"ddots"olsa sevimli!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.