황금비 계속 분수에 대한 MathJax 생성


17

MathJax가 일시적으로 비활성화 될 것으로 예상 하면이 질문에서 렌더링 된 MathJax는 이미지로 대체되었습니다. 여전히 답변을 게시 할 수 있지만 다른 사이트 에서 렌더링 된 MathJax를 확인해야합니다 .

PPCG가 방금 MathJax 를 얻었 습니다 ! 즉, 형식이 지정된 수학 공식을 게시물에 쉽게 포함 할 수 있습니다. ( Handy MathJax 튜토리얼. )

예를 들어, 다음은 무한 연속 비율로 표현 된 황금 비율입니다 .

eq0

이 방정식의 MathJax 코드는

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

수식을 마우스 오른쪽 버튼으로 클릭하고 다음과 같이 수학 표시TeX 명령을 통해이를 찾을 수 있습니다 . 수단은 대신 인라인 페이지의 중앙에 자체에 표시됩니다. 인라인 에는 싱글 을 사용하십시오 .
$$$

도전

음수가 아닌 정수 n을 취하고 황금비에 대한 연속 분수의 많은 "단계"에 대해 MathJax 코드를 출력하는 프로그램을 작성하십시오.

답변 전체에서 표준을 유지하려면 다음과 같은 정확한 MathJax 구문을 사용해야합니다.

  • n = 0 인 경우 출력은이어야합니다 $$\varphi=1+\dots$$.
    다음과 같이 렌더링됩니다.

    eq1

  • n = 1 인 경우 출력은이어야합니다 $$\varphi=1+\cfrac1{1+\ddots}$$.
    다음과 같이 렌더링됩니다.

    eq2

  • n = 2 인 경우 출력은이어야합니다 $$\varphi=1+\cfrac1{1+\cfrac1{1+\ddots}}$$.
    다음과 같이 렌더링됩니다.

    eq3

  • n = 3의 경우 출력은이어야합니다 $$\varphi=1+\cfrac1{1+\cfrac1{1+\cfrac1{1+\ddots}}}$$.
    다음과 같이 렌더링됩니다.

    eq4

이 패턴은 더 큰 n에 대해 계속됩니다. n은 방정식의 분할 선 수를 나타냅니다.

노트

  • \cfrac보다 일반적인 대신 사용됩니다 \frac.
  • \dots\ddotsn = 0 대신에 사용됩니다 .
  • stdin 또는 명령 행에서 입력을 가져 오십시오.
  • stdout으로 출력합니다 (선택적 후행 줄 바꿈 사용).
  • 또는 n을 정수로 받아서 MathJax 코드를 문자열로 반환하거나 여전히 인쇄하는 함수를 작성할 수 있습니다.

채점

바이트 단위의 가장 작은 제출이 이깁니다. Tiebreaker는 이전 제출로 이동합니다.


스택 스 니펫을 실행하려는 사용자를위한 참고 사항 : 대부분의 스택 스 니펫과 마찬가지로 Safari에서는 작동하지 않습니다.
Alex A.

당신이 물건을 입력 할 때 스택 미리보기가 작동하지 않습니다 ... 그것은 제공Uncaught ReferenceError: textbox is not defined
soktinpk

@soktinpk 이상합니다. 같은 문제가 있습니다. 그러나 여기 의 스 니펫 은 정확히 동일하지만 작동합니다 ... 여기에 외부 바이트 카운터가 있습니다.
Calvin 's Hobbies

PPCG에 MathJax가 다시 활성화되었습니다!
wastl

답변:


6

CJam, 51 50 바이트

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

코드 설명 :

"$$\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 $$";

몇 가지 예 :

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}}}}}}}}}}}}}}}$$

업데이트 -Sp3000 덕분에 1 바이트가 절약되었습니다!

여기에서 온라인으로 사용해보십시오


1
작은 셔플 링은 50을 제공합니다 :"$$\varphi=1+""\cfrac1{1+"ri:R*'\"ddots"R!>'}R*'$_
Sp3000

나는 당신의 대답을 전혀 보지 못했습니다. 우연의 일치입니다. 당신은 탈출해야하기 때문에 어느 쪽이든, 당신의 49 바이트 Pyth 솔루션은 현실에서 50 바이트 \v\\v.
orlp

@orlp 그리고 이것이 솔루션에 존재하는 잠재적 이점이 없기 때문에 롤백 한 이유입니다.
Optimizer

10

파이썬, 70 68 67 바이트

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

이것은 단순한 문자열 곱셈과 문자열 형식을 사용하는 익명 함수를 정의합니다.

( 이스케이프 할 수 없기 때문에 \\c로 쓸 수 있음을 지적 해 주셔서 @xnor에게 감사합니다 . 불행히도 ASCII 11 이기 때문에 이것은 사실이 아닙니다 .)\cc\\v\v

이전 시도 :

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

당신은 14 초 나를 때렸습니다! 또한 70 자.
xnor April

2
나는 이것이 cfrac 전에 이중 \를 사용하지 않고 작동한다고 생각합니다.
xnor April

@xnor 감사합니다! 그리고 파이썬 골프를 항상 가지고 와서 죄송합니다 ...
Sp3000

아냐, 나는 당신에게서 게시 할 레이스의 공정한 몫을 훔쳤다.
xnor

4

> <> , 89 86 + 3 = 89 바이트

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

-v예를 들어 플래그로 실행

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

놀랍게도> <>는 여기에서 너무 나쁘지 않습니다. 반복 할 때마다 카운터를 줄임으로써 문자열 곱셈을 모방 할 수 있기 때문입니다.

:&"$$"{\                     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 덕분에 3 바이트)


3 바이트에 대한 두 가지 작은 개선점 (1 행과 3 행의 끝 부분) : pastebin.com/wEbKhuUH
randomra

Hah 첫 번째와 마지막 라인 미러가 일치하지 않습니다. : P
Sp3000

4

망막 , 160 + 7 = 167 바이트

;`.+
$$$$\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}

각 줄은 별도의 소스 파일로 들어가므로 첫 번째 파일 뒤에 각 파일1 바이트를 추가했습니다 . 그러나 편의상 Retina는 이제 -s명령 행 플래그 도 지원하므로이 모든 것을 단일 파일에 넣을 수 있습니다 (이 경우 개행은 파일 구분 기호로 처리됨).

코드의 가장 큰 부분 (98 바이트)은 입력을 10 진수에서 단항 (파일 3에서 6)으로 변환하는 데 사용됩니다. 코드의 기본 개념에 입력을 포위하는 것입니다 $$\varphi=1+\dots...$$다음, 단항에 입력을 변환하고 확장 \dotsN또는 \ddotsN지속적인 분수의 다음 단계로 (동안 감소 NN-1).


4

줄리아, 76 73 바이트

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

단일 정수를 입력으로 사용하고 MathJax를 문자열로 반환하는 람다 함수를 만듭니다. 호출하려면 이름을 지정하십시오 (예 :) f=n->....

불행히도 백 슬래시와 달러 기호는 줄리아 문자열에서 특별한 의미를 갖기 때문에 탈출해야합니다. *와 문자열 반복을 사용하여 문자열 연결을 수행 ^합니다.

예 :

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

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

제안은 언제나처럼 환영합니다!


편집 : plannapus 덕분에 3 바이트가 절약되었습니다!


"d"^(n>0)대신에 (n>0?"d":"")더 짧게 만들 것입니다.
plannapus

@ plannapus : 나는 당신의 이름이 무엇을 의미하는지 이해하지 못하지만 당신은 천재입니다! 나는 그것이 "string"^0합법적 임을 잊었다 .
Alex A.

천만에요. 내 가명은 방사성 고생물학자인 방사성 속의 이름입니다. "평평한 순무"로 번역됩니다. :)
plannapus

나는 BF 답변을 기다리고 있습니다 =)
flawr

@flawr : 당신이 저를 기다리지 않기를 바랍니다 ...
Alex A.

3

엘리먼트, 63 문자

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

가장 간단한 솔루션입니다. 불행하게도, 출력에 많은 양의 기호가 있으면 프로그램 길이가 크게 증가합니다 (프로그램에 문자열을 입력하면 기호가 직접 작업을 수행함). 골프를 할 여지가 있다고 확신하지만 지금은 더 이상 시간이 없습니다.

이 언어는 여전히 상대적으로 알려지지 않았으므로 여기 Perl로 작성된 인터프리터 링크가 있습니다.

_+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 사용시 +1 Element가 세대 이름이 될 때입니다!
Alex A.

3

T-SQL, 229 227 138

SQL 답변을 한 이래로 오랜 시간이 걸렸으며 항상 매우 장황합니다. 편집 물론 복잡하고 재귀 쿼리가 전혀 필요하지 않았습니다.

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

기발한

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=@

재귀 쿼리를 사용하여 cfrac1{1+\반복마다 추가 작업을 수행 하는 인라인 테이블 함수를 만듭니다 . 점을 ddots로 변경하는 것은 비용이 많이 들었지만 교체를 제거하는 몇 가지를 저장했습니다. 또한 원래 문자열을 'VARCHAR (MAX)'로 캐스팅 해야하는 데 약간의 비용이 듭니다.

다음과 같이 SQLFiddle 이 사용됩니다 .

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

루비, 76 75 71 70 바이트

의심 할 여지없이 솔직한 느낌이 들기 때문에 어딘가에 엉망이되면 알려주십시오.

우연히, 이것이 내가 루비에서 처음으로 쓴 것입니다. 나는 곱셈으로 문자열 반복을 지원하는 언어를 찾고 있었고 루비는 그 트릭을하는 것처럼 보였습니다.

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

이렇게 적용하려면 :

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

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

@ Sp3000 루비가 부울을 정수로 변환 할 수 없기 때문에 전자는 그렇지 않습니다. 후자는 효과가 있었으므로 감사합니다!
vvye

2

J, 60 바이트

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

용법:

   ((<;._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}}}$$

방법:

'$$\varphi=1+\ cfrac1{1+\ d dots } $$ '을 공백으로 자르고 파트를 반복 1 n signum(n) 1 n 1한 다음이 파트를 연결합니다.

여기에서 온라인으로 사용해보십시오.


2

R, 93 (90)

다른 답변과 거의 동일합니다. 스캔 팁을위한 @plannapus에게 감사합니다.

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

cat오히려 끝낼 것이다 결과로 paste0보다 사용 \\하기보다는 \.

사용

> > 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이지만 기능으로 만드는 대신 사용자 n가 처음으로 stdin으로 입력하도록하면 일부 문자를 저장할 수 있습니다.cat("$$\\varphi=1+\\",rep("cfrac1{1+\\",n<-scan()),if(n)"d","dots",rep("}",n),"$$",sep="")
plannapus

2

자바 스크립트, (114) 109 (106) (85)는 조지 Reith는 덕분 바이트

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

이것은 codegolf 공모전의 첫 참가작입니다! 개선 방법을 알려주세요.

이전 항목 (106 바이트) :

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

이전 항목 (109 바이트) :

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

이전 항목 (114 바이트) :

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

브라우저 콘솔에 붙여넣고 '걸음 수'가있는 f(n)n으로 전화 하십시오.

단순화 된 코드 :

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

2
x = 'repeat'는 더 길고 짧게 만듭니다 :
.repeat를

트윗 담아 가기

pastebin.com/uU7tgFm9 추가 개선 사항
edc65

:과 같이 87 바이트로 만들 수 있습니다 pastebin.com/0Hkv9uft
조지 Reith는

또는 85 바이트 pastebin.com/k90Fyr2m
George Reith

1

Pyth-52 바이트

Pyth의 간단한 접근 방식은 @ Sp3000의 Python 솔루션에서 거의 도난당했습니다. 문자열 형식화 연산자를 사용합니다 %.

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

여기에서 온라인으로 사용해보십시오 .

%                  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

자바 스크립트 (ES6), 76 80

부분적으로 재귀 적입니다. 싱글 / 더블 d는 가장 성가신 부분입니다.

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

Firefox / FireBug 콘솔에서 테스트

> 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

파이썬 90 116

가장 효율적인 솔루션이 이미 여러 번 게시되었으므로 대신 문자열 교체를 사용합니다.

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+'}')

편집 : 젠장, 간과 dots 대신ddots 했습니다 n=0. 이제 추가 조항이있는 재귀 솔루션이 경쟁하기에 너무 추합니다.

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}')

현재 n=0특수한 경우 가 없습니다 (점 대신 ddot).
randomra

0

하스켈, 86

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

여기의 모든 솔루션과 본질적으로 동일한 접근 방식입니다. drop(0^n)"ddots"그래도 귀엽다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.