파이와 e를 섞어 파이를 만드십시오!


36

모든 사람은 파이 의 수학 상수, 원의 둘레와 지름의 비율을 알고 있습니다.

3.14159265358979323846264338327950288419716939937510...

아마 당신도 알고 전자 수학적 상수, 자연 대수의 기초를.

2.71828182845904523536028747135266249775724709369996...

하지만 ... 파이 알아 ? 그것은 나에게 가장 중요한 상수 중 하나입니다. pie 의 숫자는 인터리브됩니다.

32.1741185298216852385485997094352233854366206248373...

소수점 이하 확장으로 :

3, 2, 1, 7, 4, 1, 1, 8, 5, 2, 9, 8, 2, 1, 6, 8, 5, 2...

이다 OEIS 순서 A001355 .

키워드 : nonn, base, dumb , easy

매우 멍청한 순서입니다.

도전

음수아닌 정수 n 을 취하고 n 번째 자리수 pie를 출력 하는 프로그램 / 함수 를 작성하십시오 .

사양

  • 표준 I / O 규칙이 적용됩니다 .
  • 표준 허점금지되어 있습니다.
  • 그것은 적어도 작동한다는 뜻 각 상수의 적어도 50 자리 숫자에 대한 귀하의 솔루션해야 작업 순서의 100 조항은 (, 제발 시도 : P 하드 코딩하지 않음).
  • 2 또는 3의 출력 은 소수점아닙니다 .
  • 솔루션 은 0 인덱스 또는 1 인덱스가 될 수 있지만 어느 것을 지정하십시오.
  • 이 과제는 모든 언어에서 가장 짧은 방법을 찾는 것이 아니라 각 언어에서 가장 짧은 방법을 찾는 것입니다 .
  • 달리 지정하지 않는 한 코드는 일반적으로 인코딩 UTF-8 에서 바이트 단위점수매겨 집니다.
  • 이 시퀀스를 계산하는 내장 함수는 허용 되지만 내장 기능에 의존하지 않는 솔루션을 포함하는 것이 좋습니다.
  • "실제적인"언어에 대한 설명도 권장 됩니다.

테스트 사례

이것들은 0 인덱스입니다.

Input   Output

1       2
2       1
11      8
14      6
21      4
24      9
31      5

몇 가지 더 나은 형식으로 :

1 2 11 14 21 24 31
1, 2, 11, 14, 21, 24, 31

2 3 12 15 22 25 32
2, 3, 12, 15, 22, 25, 32

8
OEIS에 따르면, 키워드는 dumb단순히 특별한 속성이없는 관심없는 것을 의미합니다.
Okx

1
@Downvoter 아마도 이유가 있을까요?
완전 인간적인

23
결과는 pei그렇지 않다고 주장 할 수있다pie
Zaid

1
나는 하향 투표를하지 않았지만 아마도 당신이 이것을 3/14에 묻지 않았기 때문에;)
txtechhelp

1
오후 1시 59 분에 @txtechhelp? ;)
WallyWest 1

답변:


12

수학, 50 바이트

1- 색인

(Riffle@@(#&@@RealDigits[#,10,5!]&/@{Pi,E}))[[#]]& 

이것이 어떻게 작동하는지 설명 할 수 있습니까?
Stevoisiak

그것은 간단합니다. 각 요소의 120 (5!) 요소를 가져 와서 리플
J42161217

좋은! 를 피함으로써 솔루션을 이길려고 Riffle했지만 내 솔루션은 1 바이트 짧습니다. RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]&
Mark S.

작동하지 않는 것 같습니다. 한 자리를 반환합니다.
DavidC

@DavidC Yes! .. "파이의 n 번째 자릿수를 출력합니다." 왜 downvote 했습니까 ???
J42161217

8

택시 , 749 바이트

'3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919' is waiting at Writer's Depot.Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to The Underground.Go to Writer's Depot:n 1 l 1 l 2 l.Pickup a passenger going to Chop Suey.Go to Chop Suey:n 3 r 3 r.[a]Pickup a passenger going to Narrow Path Park.Go to The Underground:s 1 r 1 l.Switch to plan "b" if no one is waiting.Pickup a passenger going to The Underground.Go to Narrow Path Park:n 4 l.Go to Chop Suey:e 1 r 1 l 1 r.Switch to plan "a".[b]Go to Narrow Path Park:n 4 l.Pickup a passenger going to Post Office.Go to Post Office:e 1 r 4 r 1 l.

온라인으로 사용해보십시오!

택시에서 프로그래밍 방식으로 pi 또는 e를 계산하려고 시도하면 악몽이 될 것입니다. 따라서 시퀀스에서 처음 100 자리를 하드 코딩하는 것이 훨씬 짧습니다. 꽤 저렴하지만 문제를 해결하는 가장 짧은 택시 코드입니다.

시퀀스를 문자열로 하드 코딩 n하고을 사용한 다음 n매번 문자열의 첫 번째 문자 를 반복 하여 제거합니다. 일 때 n=0첫 문자를 출력합니다. 이것은 하나의 색인입니다.

골프 / 포맷 해제 :

'3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919' is waiting at Writer's Depot.
Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to The Underground.
Go to Writer's Depot: north 1st left 1st left 2nd left.
Pickup a passenger going to Chop Suey.
Go to Chop Suey: north 3rd right 3rd right.
[a]
Pickup a passenger going to Narrow Path Park.
Go to The Underground: south 1st right 1st left.
Switch to plan "b" if no one is waiting.
Pickup a passenger going to The Underground.
Go to Fueler Up: south.
Go to Narrow Path Park: north 4th left.
Go to Chop Suey: east 1st right 1st left 1st right.
Switch to plan "a".
[b]
Go to Narrow Path Park: north 4th left.
Pickup a passenger going to Post Office.
Go to Post Office: east 1st right 4th right 1st left.

8

하스켈, 154 (147) 146 바이트의 하드 코딩 NO OR BUILTIN 상수 USE

이 솔루션은 무한 시리즈를 사용하여 epi 를 계산 하고 임의 정밀도 고정 소수점 정수 (Haskell의 내장 Integer유형 및 Rational확장)로 저장합니다.

import Data.Ratio
s n=product[n,n-2..1]
r=[0..164]
f n=(show$round$(*10^50)$sum[[2*s(2*k)%(2^k*s(2*k+1)),1%product[1..k]]!!mod n 2|k<-r])!!div n 2

언 골프 드 :

import Data.Ratio

semifact :: Integer -> Integer
semifact n = product [n, n-2..1]

pi_term :: Integer -> Rational
pi_term i = semifact (2*i) % (2^i * semifact (2*i+1))

--requires 164 terms to achieve desired precision
pi_sum :: Rational
pi_sum = 2 * (sum $ map (pi_term) [0..164])

--requires 40 terms to achieve desired precision
e_sum :: Rational
e_sum = sum [1 % product [1..k] | k<-[0..40]]

-- 51 digits are required because the last one suffers from rounding errors 
fifty1Digits :: Rational -> String
fifty1Digits x = show $ round $ x * 10^50

pi51 = fifty1Digits pi_sum
e51  = fifty1Digits e_sum

-- select a string to draw from, and select a character from it
pie_digit n = ([pi51, e51] !! (n `mod` 2)) !! (n `div` 2)

인덱스가 0입니다. 입력 0-99의 경우 정확하고 입력 100-101의 경우 정확하지 않으며 범위를 벗어난 경우입니다.

설명:

이 무한대 시리즈를 사용하여 pi 를 계산합니다 . 고전 역 인수 계열을 사용하여 e 를 계산합니다 . 이론적으로 이것들은 사용하기에 이상적인 공식은 아니지만 바이트 수 측면에서 간결하지는 않지만 정확성을 검증 할 수있을 정도로 신속하게 수렴 된 유일한 방법이었습니다 (다른 합계는 수십만이 필요합니다) 수백만의 용어가 아닙니다). 골프 버전에서, e 는 바이트 수 를 최소화하기 위해 필요한 것보다 훨씬 높은 정밀도로 계산됩니다. 두 상수는 반올림 오류를 피하기 위해 필요한 것보다 약간 더 많은 자릿수로 계산됩니다 (올바르지 않은 값의 어색한 꼬리를 담당 함).

상수는 임의의 정밀도 정수 비율 ( Rational)로 계산 된 다음 10 ^ 50을 곱하여 비율이 (임의 정밀도) 정수 ( Integer) 로 변환 될 때 필요한 모든 숫자가 그대로 유지되도록합니다 . 이것은 또한 숫자 문자열 표현에서 소수점을 피하는 문제를 피하며, 함수는 문자를 대신 사용합니다.


6

파이썬 2 , 88 바이트

@EriktheOutgolfer 의 기본 변환 아이디어 덕분에 -4 바이트 .

lambda n:`int("SVBPXJDZK00YCG3W7CZRA378H4AM5553D52T52ZKAFJ17F4V1Q7PU7O4WV9ZXEKV",36)`[n]

온라인으로 사용해보십시오!

파이썬 2 + sympy , 92 바이트

인덱스가 0입니다. 로 전환하도록 상기시켜 준 Rod에게 감사합니다 from sympy import*. 이전에 잊어 버렸습니다.

lambda n:sum([('3','2')]+zip(`N(pi,50)`,`N(E,50)`[:47]+'6996')[2:],())[n]
from sympy import*

온라인으로 사용해보십시오!

파이썬 2 , 114 바이트

파이썬에는 유용한 내장 기능이 없기 때문에 가장 짧은 솔루션은 하드 코딩이라고 생각합니다.

lambda n:"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

온라인으로 사용해보십시오!

파이썬 2 , 114 바이트

@totallyhuman의 동등한 솔루션 .

'3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919'.__getitem__

온라인으로 사용해보십시오!


다운 보팅하기 전에 더 짧은 솔루션을 검색하십시오.
Mr. Xcoder


@totallyhuman 감사합니다
Mr. Xcoder

8
편집 한 동등한 솔루션은 실제로 동등한 바이트 수가 아닌 동등한 코드입니다. : P
완전히 인간적인

1
@totallyhuman Lol 나는 당신의 의견을보고 그것을 이해했지만, 나는 내 자신의 실수에 대해 웃고 있었기 때문에 고치는 것을 완전히 잊어 버렸습니다. 편집 해 주셔서 감사합니다!
Mr. Xcoder

5

05AB1E , 10 바이트

žsтžtøJþsè

설명:

žs          Get the first input digits of pi
  тžt       Get 100 digits of e
     ø      Zip them together
      J     Join into a string
       þ    Remove non-digits
        sè  0-indexed index of input in the resulting list

인덱스가 0입니다.

온라인으로 사용해보십시오!


1
너무 많은 05AB1Es ... : P
Mr. Xcoder

@ Mr.Xcoder 음, 05AB1E는 pi와 e가 내장 된 언어입니다.
Okx

@ Mr.Xcoder 그 이유가 내장되어 있습니다.
아웃 골퍼 Erik

@totallyhuman 아니 그렇지 않습니다.
Outgolfer Erik

@Dorian 버전이 작동하지 않습니다. 레거시 버전을 사용하고 있었지만 žt당시에는 무한 목록이 아니기 때문에 Okx 는 프로그램에서 처음 100 자리의 e를 사용합니다. zip은 쌍을 생성하고 Join은 모든 쌍 대신 해당 쌍을 결합 하기 때문에 현재 버전에서는 pi와 e가 무한 목록 인 새 버전의 05AB1E로 변경해도 여전히 작동하지 않습니다 . 그러나 9 바이트 는 새 버전 으로 대체 J하여 가능 S하지만 S문자 / 숫자 목록이 평평합니다.
Kevin Cruijssen

5

파이썬 3 , 83 80 바이트

인덱스가 0입니다.

lambda n:('%d'*51%(*b' )4bD4&6UcF^#!U+B>0%"WK\<>0^GO9~1c]$O;',))[n]

온라인으로 사용해보십시오!

브라우저에 제대로 표시되지 않는 인쇄 할 수없는 문자가 있습니다.

이것은 (32, 17, 41, 18, 52, ...)하드 코딩 된 바이트 문자열에있는 문자의 ASCII 코드에서 튜플 을 작성하여 작동합니다 . 튜플은 문자열로 변환되어 '3217411852...'올바른 숫자를 선택합니다.


4

폴리 글롯, 108 바이트

n=>"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

다음에서 작동합니다.

  • 씨#
  • 자바 스크립트

나는 이것이 piN 번째 십진수 를 찾기 위해 252 바이트이므로 C #에서 할 수있는 가장 짧은 것이라고 생각합니다 .


JS polyglot :-)
Arnauld

@Arnauld 업데이트 :)
TheLethalCoder

7
이것은 Java Polyglot이 아닙니다! Java에서는 비 배열 객체로 색인을 생성 할 수 없습니다.
Roman Gräf

1
이것은 기술적으로 효과가 있지만 a) 경쟁이 적고 b) 지루하고 사소하기 때문에 공감했습니다.
HyperNeutrino

2
@HyperNeutrino 경쟁이 치열한 C #이자 JavaScript입니까? 그리고 지루하고 사소한 것일 수도 있지만 C #에서 500 바이트 답변을 똑똑하게 했습니까? 그것이 포인트 1과 충돌하기 때문이 아닙니다. 이것은 가능한 한 짧습니다 ...
TheLethalCoder

4

자바 (8) 420 417 413 404 (계산) (115) (110) (하드 코딩 된) 바이트

계산 됨 ( 420 417 413 404 ) :

import java.math.*;n->{int i=1,x=99;BigDecimal e,f=e=BigDecimal.ONE;BigInteger p,a=p=BigInteger.TEN.pow(x).multiply(new BigInteger("2"));for(;i<x;e=e.add(e.ONE.divide(f,new MathContext(x,RoundingMode.HALF_UP))))f=f.multiply(new BigDecimal(i++));for(i=1;a.compareTo(a.ZERO)>0;p=p.add(a))a=a.multiply(new BigInteger(i+"")).divide(new BigInteger(2*i+++1+""));return n==1?50:((n%2<1?p:e)+"").charAt(n+1>>1);}

하드 코드 : ( 115 바이트 ) :

"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"::charAt

0 인덱스

@Nevay 덕분에 -9 및 -5 바이트 .

  • 그것은 적어도 작동한다는 뜻 각 상수의 적어도 50 자리 숫자에 대한 귀하의 솔루션해야 작업 순서의 100면 (제발 시도 하드 코드하지 : P)
  • 이 시퀀스를 계산하는 내장 함수는 허용 되지만 내장 함수에 의존하지 않는 솔루션을 포함하는 것이 좋습니다

요청했습니다 ..;)

Java의 내장 Math.PIMath.E배정도는 최대 정밀도가 16입니다. 따라서 java.math.BigInteger및 / 또는를 사용하여 두 값을 직접 계산해야합니다 java.math.BigDecimal. 다른 도전에 앞서
이미 PI를 계산 했으므로을 사용하여 동일한 코드를 사용했습니다 BigInteger. BigDecimal그러나 오일러 수에 대한 알고리즘이 사용 됩니다.
는 결과 p와 것은 e그러므로 있습니다 : 31415...2.718....

만을 사용하여 수는 아마 골프를 BigDecimal하지만 지금은 모두 사용할 수 있도록, PI에 대한 몇 가지 잘못된 답변을주고 있었다 BigDecimal그리고 BigInteger.

설명:

여기에서 시도하십시오.
필수 100 개 항목에 대해 올바른 결과를 출력 함을 증명하십시오.

import java.math.*;           // Required import for BigDecimal and BigInteger
n->{                          // Method with integer as parameter and char as return-type
  int i=1,                    //  Start index-integer at 1
      x=99;                   //  Large integer we use three times
  BigDecimal e,               //  Euler's number
             f=e=BigDecimal.ONE;
                              //  Temp BigDecimal (both `e` and `f` start at 1)
  BigInteger p,               //  PI
             a=p=BigInteger.TEN.pow(x).multiply(new BigInteger("2"));
                              //  Temp BigInteger (both `p` and `a` start at 10^25000*2)
  for(;i<x;                   //  Loop (1) 99 times (the higher the better precision)
    e=e.add(                  //    After every iteration: Add the following to `e`:
     e.ONE.divide(f,new MathContext(x,RoundingMode.HALF_UP))))
                              //     1/`f` (RoundingMode is mandatory for BigDecimal divide)
    f=f.multiply(new BigDecimal(i++));
                              //   Multiple `f` with `i`
                              //  End of loop (1) (implicit / single-line body)
  for(i=1;                    //  Reset `i` back to 1
      a.compareTo(a.ZERO)>0;  //  Loop (2) as long as `a` is not 0
    p=p.add(a))               //    After every iteration, add `a` to `p`
    a=a.multiply(new BigInteger(i+""))
                              //   Multiply `a` with `i`
       .divide(new BigInteger(2*i+++1+""));
                              //   and divide that by `2*i+1`
                              //  End of loop (2) (implicit / single-line body)
  // We now have `p`=31415... and `e`=2.718...
  return n==1?                // If the input (`n`) is 1:
          50                  //  Return 2
         :                    // Else:
          ((n%2<1?            //  If `n` is divisible by 2:
             p                //   Use `p`
            :                 //  Else:
             e)               //   Use `e` instead
    +"")                      //  Convert integer to String:
        .charAt(n+1>>1);      //   `n+1` signed right shift 1 bit
}                             // End of method

그것이 도움이되는지 확실하지 않지만 pi 계산을위한 C # 알고리즘 은 Java 버전보다 8 바이트 짧았습니다.
TheLethalCoder

그것은이 문제의 변화를 제대로 작동하려면 얻을하지만 참고 (d+=2)++d하고 return p%10+1단지에 return p%10.
TheLethalCoder

@TheLethalCoder이 도전에 대한 C # 답변을 자유롭게 만드십시오. :) 당신은 또한 오일러의 숫자를 계산해야합니다. 어쨌든 출력은 하드 코딩이 짧기 때문에 내 대답은 lolz에 다소 도움이됩니다 ..
Kevin Cruijssen

1
You've asked for it.. ;)이봐, 난 네 첫 번째가 더 좋아. 나는 방법이 더 내가 기대했던 것보다 답을 하드 코딩있어 ...
totallyhuman

1
charAt(n+1>>1)메소드 참조를 사용하여 하드 코딩 된 버전에서 5 바이트를 사용하여 계산 된 답변에 9 바이트를 저장할 수 있습니다 "..."::charAt.
Nevay

3

시드 , 6015 바이트

105 41100973201674650461227976639700390615120600528953176107701316721890649738810349651490948904154731057172335535600875054878204557287393379815378680878571406244365932330202793040308312687924242319799562985464135998860369933720376853281630432469462831217924775601393232895404104191613314969008627719099002734936685651970933027922574843126481552407811220371545812798263882325951724505132794956253992779856191832909434513683936955184871247159313261417328850445886987045814618325821125417040265540589403338721758954467831926977078444612065747526326682314711350486782090838673475876960125016098416460032667015813053483457246043486676622061645094043655351781242050448580132075920324099742699960838361839038297355120817832056960516761862493176616153258281345538652844974811030063414112136642097000574165433957710342430709643110444042577685157477268110199017600011209827070311299268347100419887111107237908884608557593677163764286026624394674781868689858494991328505977301270068505397030743037416430245399054325956185200430657008806539374392625804513081295070438243600044274289109395357299275275193717501822777898664715885427884193864182834402097958423697356485767670945673525604620701482288023981110598866625872386643941558021439168402392304238271452444124214301243311025121833097491087918320170873313832323794851508364788578530614246140801266858481189449278157296335592848066512127882306035576754122325822200069362884409931190620435627809384380203617488253034370361172908245852012086081807945576657014184275798330804532115103840313004678040210379846666674881048346897213048386522262581473085489039138251061251160730845385869281787222083186331344552658814775998639661361866503862291670619153718574270905089351133527806484519543645501497150560454761284099358123613642350160410944676702481576280832672884549762767667090615809061739499629798396737503512011645776394176807352443544839957773371384141101627375926404212619777658374366513665083032140398814384622434755543347503025479743718569310129255927244046638238401670388409731849963600790867434678993019370132638962549859363736476668247251402420832876258626149639101811361047924632565285870213656416957893835899254928237592711662454838295046528789720146967061486405916116778722736283489123195985053535189375957277052428901645131462087039117212488839670735246752589931585405440449333046667938628384693216121067951290025349082277568986632815062532963505690244579740140120806885104683071514922412748240497612209609661707922754236180441892543545377867355182682381812487973645406703590150722720330526173957597156314579144484166520730013480681064941752984345205140917291104888971742824066713606933406657345121342075268990055328274845008936364502884461548416337689565392911129757761902576946104722487260155373897552821908338346641549478063474748830482136404008215583192489320750526753663943267086203954602839906762640389978523894333743126288529975769945319614142422443068420170103245659109689433597701350198280212250954698442638475209618790055335813263132865176791663235801963797561493995544185124734214257034901773781134331460320221759556924556747571745834582344275416625351302153332814233497096345055392255809024712740720006219615340819493781244665414077298346378966540544979367367978334759985048507214749726072645238624803791884339024844989975370042133733339339038567691571361407296615851372112592532463329778465699812822089846474961581380707849259093905314170108054540333209088059730272087864344697983074458088984533095183089310714804468718319244214535941276969904638763288063417624586766891798378622613765728303031397998644194508610598078718347204813844240434145846888722334194516524032354042557957058092854659539699310565707914118281251563405735083553254856313838760124953245573676126601070861004186509621892263623745673900572829301771299438501543213489182375655869072568437776298051260531944785904157204006430131566234389896821642210616326951771496269255716808352415001187083781128619236455170025989777631182990311607133740812107138446626302353752098982590371714623080450836912706275397973009559314275978915463843159370230629290376520494894845680706499809017211545204670148071902560908658269183779180493590025891585269507219866461550160579656755846447951259951641828495549544791046179035585611272240116822105364823082512055639047431280117805724371019657801828634946412396263504315569042536942671358095826696817513115447079645898107923447321583282886740680340887700198072304400536529418546232473450984945589794448490331085275232352881571706521961358975744067916422124670374397682877259664913100427726059898474024964867713698696116581478101206003313106174761699804016604950094008714907179862448792216891309734208815522069346791369498202430302292199779590583788518283934542807403049256936179914953814019565550264909025345322516061595136601312434888871667940394250767164496543418483237896796108764367721411969986710930448108645039275082356457263454340220118278471652962484104099512207532103709146426640958406853240342441810465024550617909657901698718289260589269758398513490424434162831332785821428006396653475356712733072469052427934231406388810607688824035522285626563562286337967271308076321307276537761026788485320280603487776428017017298356181654076403306265118978333909378403193559129146468182910851996415072056976175613473847242292911071040966109905552914332596680497156169349277079292398091020434667210493868422848588893205157133171899819212153010393580099455957808703428739456223073813663954919146593698106305501988107196273527346690785289909397140611634970017071011599022429384594426022933102487171920965595473754661194965266230932928905708783854897164127767575976566931916632077914904360565095752466049885656187054491320449776951484812738806536727562344348761718424255018794271994537719709226236497935053971406685810778014002594041715040546776952342303797267458880802314841325359844565479173256964507237937290466116935912176054052746039378370966040054779443633371806403649852746347690237831260027483859907620684197542069045517397230169577918374265220969534695931904

씨앗은 내 Befunge 답변과 동일합니다. 앞에서 언급했듯이 TIO는 80 줄의 내부 줄 바꿈을 가지고있는 것처럼 보이기 때문에이 출력이 TIO에서 작동하지 않습니다.


어떻게? 그냥 ... 어떻게 요?
NieDzejkob


3

엑셀, 113 바이트

1- 색인

=MID("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1)

PI()15 자리까지만 정확합니다. 와 유사합니다 EXP(1).

입력에 작동하는 60 42 바이트 솔루션 <=30 (@Adam 덕분에 -18 바이트)

=MID(IF(ISODD(A1),PI(),EXP(1)/10)/10,A1/2+3,1)

두 번째 접근 방식의 기본 개념은 내부 파이 / E 선택함으로써 46 바이트로 단축 할 수 if(...)문을 : =MID(IF(ISODD(b1),PI(),EXP(1)/10)/10,b1/2+3,1).Can't가의 부정확성을 돌아 다니기 pi()하고 exp()있지만,
아담

2

05AB1E , 13 바이트

Éi<;žtë;žs}þθ

온라인으로 사용해보십시오!

Magic의 답변과 비슷하지만 약간 다릅니다.

설명:

Éi<;žtë;žs}þθ Supports 9842 digits of e and 98411 digits of π
É             a % 2
 i    ë   }   if a==1
  <            a - 1
   ;           a / 2
    žt         e to a digits
              else
       ;       a / 2
        žs     π to a digits
           þ  keep chars in [0-9] in a
            θ a[-1]



2

씨앗, 5852 5794

TehPers Befunge 답변을 기반으로합니다.

1051130021648715907393149878290493079600376561988348664272369051219541158034251323778110172612675089859184605166991106040693833909592598132115295033728752738087105881243462563076466678196376225832661747114302365429787133716511111381612588140144307910362782924144996564529411691568302571546828919454271683233497896594149189544327214969302848984257909609092418942847813158570493297692245428646803536815345759334224247677074872671057296478697076157019699466324478990259351466108726578472175001474585821629778406880297836753303012207209976229264609834293181367664486642493394085473509253813676093779567738697465957519812706192139261472118908699638816640825554051850436762061721281771892466822470585742923158999350909054375916612667405594051622229969696110285582900916410099224974902720736021096981441362371398922887585642863359978062601767338412679956208026294953110185271056006145171920926497396179933553547647876354874445336583594285656870801545177578902705927733720249211636847884869491097054175976937629709200212494761217184873108852140655722895359613462156833646123152648220793295854627649452190956799160703532861477096009725706141202331131287901266622861560576869037209421378739125115765163010112273561384890274706972479335859548424507413589440122160717697618157336618754196528390529316634155057447126317467878320143220148685911507025731721669456692292309133633447284353130542004299981319048073637696567634889623949341630372505055435189663767044165063763216111834588696399179737702861529836947970901482712510136315042152110633215913241916694919566433112405210063414042670097562256073600916103886503591248191758835092924394147776204171675226850914902590401360360345796925181247981647089261884952039081268986586818659090505317955579671089885915745568661758883469031230794272571159213300281445730703294269295310767401339422952480777920786878410780792687195268799097885426801795242758273587841272731685278721369746727313447085996142152811199340656395207452343492937579702451111716453371016654791322834865918860033642314402995240481293652425792697358895577606699947511030416728684352022506710677976841690749387202992493347056114389784733211172448656007595582911222364847293116425714996343958156522448560363063094260073906846664112391722958505451464414025605603413323283807093107521955579711235903403153357003170132938512689946882757999117710160645821945148763813674548797981224375547254576063310479473749044201972863935442758458424285806147218666471747061869918574545072745631758049982372007444866300485095061433951914878373501952670216546435388818497342311417254246013304856715094953051481317438104933875171470343900106719705171102058673610594748846178562080370992488881764909402902065625464750558527389775735939044400858705229893243673486621988009838791971714603625037310885148140796813757120291067372196872928228321095156712054303101901959874384063672886495472796070113365603843687513322867176197917489855537726934095360491472497352567147140246395682503059404971449739625647398820598964158265302668783916501984956044969021302601920487717382879106303683795359905325347814473318519391344565458920270463279174784746656360314070464241666622240210385245184959282222666398870656274940629675453574246097799383361429014800618720780346294542185892116417842240524776835458087900018007896901140383243611793705883547791450682392261960643824271328189332116466519255567441515615925840284456154022304291978218634565379575148642711337622789721842048696443945213454162713556316912301346193615227854869318871089808249776555077834342492281888561676171087168150941237306007109521081900169693331625918138699682645157924632842546989812618292449480799580909720292280095095845962850721356554807680991288722147671740885576811339492549454926901594927338274410385863276725958781460924134466358260089533908525106740467122470973368676988277207568882122479840074670300214980511007665457235218290742394089204192282508491125777180151491866961638111244962953268398339686189772372983926068579350047402754803068232034594024872791141428095120311259087973136353149728638143035136784730999270266072749004567217555438270988124997549762230020689881669285499865374963053282530118570884108038975805335341098720577305266629567047445192403700472887794782423940658412176424370062158626834653405675401415679083822191617061925174149189203359499283160374801737260780407460559147326758994495549579747033361234471750470244513311080274649191860724511086222353696966556035904101416366866518427071604705222938635947781869520181137451408849640159586041113639598272540062185768190959707775362176381804238896341317485410279831458927597060094913931822437950489034755418876566165098609145551163170170060968550804192429683076682433548504113044161906874992120619724109268394986529182050977866104283639955069424323124118234270471868688405770066267298550544345355480568344482162465184049105391961294335245926910436280167548428908725073049063187423431751542064521517069452498182346407984197390998799924644160478679731476796691938148057603728267749331459031937823996495889234787060791079241854542581243078812931046333013380737766914161425371301455762684652883345176576166320850926855173197613536554369628772428747263956045786416295429184651985570482338242016559363725421100270243627030197439290918962948652873397874243832067459791837014394278403085907234616003231621600132126403225123227458214686006897240158060744989458215243787817148717936756981074208678765977744940577875579654698779849605118845010395906232293740180888137656291524050590071724242335942378834532707622396324405477279768052696927856056064019532570357101573277570040254706775462396160275876038886428146097798897998315086627358220951838049046100218938610753230860169099104474379950181692561834872540511195903774693113510283120187768500261160296892119883913289017641545057765550924909632887927659777449405778755796546987798496051188450103959062322937401808881376562915240505900717242423359423788345327076223963244054772797680526969278560560640195325703571015732775700402547067754623961602758760388864281460977988979983150866273582209518380490461002189386107532308601690991044743799501816925618348725405111959037746931135102831201877685002611602968921198839132890176415450577655509249096328879276597774494057787557965469877984960511884501039590623229374018088813765629152405059007172424233594237883453270762239632440547727976805269692785605606401953257035710157327757004025470677546239616027587603888642814609779889799831508662735822095183804904610021893861075323086016909910447437995018169256183487254051119590377469311351028312018776850026116029689211988391328901764154505776555092490963288792

좋은 작업! 골프를 어떻게했는지 궁금합니다.
TehPers

2

Malbolge Unshackled (20 트릿 회전 변형), 3,64E6 바이트

이 답변의 크기는 게시 가능한 최대 프로그램 크기 (eh)를 초과하므로 코드가 내 GitHub 저장소에 있습니다 (참고 : CTRL + A 및 CTRL + C를 사용하여 코드를 복사하지 마십시오. 마우스 오른쪽 버튼을 클릭하고 "대상 요소를 다른 이름으로 저장"을 클릭하십시오. .. ").

이것을 실행하는 방법?

순진한 Haskell 통역사가 이것을 실행하기 위해 나이가 들기 때문에 이것은 까다로운 부분 일 수 있습니다. TIO는 괜찮은 Malbogle Unshackled 통역사가 있지만 슬프게도 사용할 수 없습니다 (제한 사항).

내가 찾을 수있는 가장 좋은 방법은 고정밀 20 회전 회전 폭 변형입니다.이 변형은 매우 잘 수행되며 즉시 계산합니다 .

인터프리터를 좀 더 빠르게 만들기 위해 Matthias Lutter의 Malbolge Unshackled 인터프리터에서 모든 검사를 제거했습니다.

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char* translation = "5z]&gqtyfr$(we4{WP)H-Zn,[%\\3dL+Q;>U!pJS72Fh"
        "OA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G\"i@";

typedef struct Word {
    unsigned int area;
    unsigned int high;
    unsigned int low;
} Word;

void word2string(Word w, char* s, int min_length) {
    if (!s) return;
    if (min_length < 1) min_length = 1;
    if (min_length > 20) min_length = 20;
    s[0] = (w.area%3) + '0';
    s[1] = 't';
    char tmp[20];
    int i;
    for (i=0;i<10;i++) {
        tmp[19-i] = (w.low % 3) + '0';
        w.low /= 3;
    }
    for (i=0;i<10;i++) {
        tmp[9-i] = (w.high % 3) + '0';
        w.high /= 3;
    }
    i = 0;
    while (tmp[i] == s[0] && i < 20 - min_length) i++;
    int j = 2;
    while (i < 20) {
        s[j] = tmp[i];
        i++;
        j++;
    }
    s[j] = 0;
}

unsigned int crazy_low(unsigned int a, unsigned int d){
    unsigned int crz[] = {1,0,0,1,0,2,2,2,1};
    int position = 0;
    unsigned int output = 0;
    while (position < 10){
        unsigned int i = a%3;
        unsigned int j = d%3;
        unsigned int out = crz[i+3*j];
        unsigned int multiple = 1;
        int k;
        for (k=0;k<position;k++)
            multiple *= 3;
        output += multiple*out;
        a /= 3;
        d /= 3;
        position++;
    }
    return output;
}

Word zero() {
    Word result = {0, 0, 0};
    return result;
}

Word increment(Word d) {
    d.low++;
    if (d.low >= 59049) {
        d.low = 0;
        d.high++;
        if (d.high >= 59049) {
            fprintf(stderr,"error: overflow\n");
            exit(1);
        }
    }
    return d;
}

Word decrement(Word d) {
    if (d.low == 0) {
        d.low = 59048;
        d.high--;
    }else{
        d.low--;
    }
    return d;
}

Word crazy(Word a, Word d){
    Word output;
    unsigned int crz[] = {1,0,0,1,0,2,2,2,1};
    output.area = crz[a.area+3*d.area];
    output.high = crazy_low(a.high, d.high);
    output.low = crazy_low(a.low, d.low);
    return output;
}

Word rotate_r(Word d){
    unsigned int carry_h = d.high%3;
    unsigned int carry_l = d.low%3;
    d.high = 19683 * carry_l + d.high / 3;
    d.low = 19683 * carry_h + d.low / 3;
    return d;
}

// last_initialized: if set, use to fill newly generated memory with preinitial values...
Word* ptr_to(Word** mem[], Word d, unsigned int last_initialized) {
    if ((mem[d.area])[d.high]) {
        return &(((mem[d.area])[d.high])[d.low]);
    }
    (mem[d.area])[d.high] = (Word*)malloc(59049 * sizeof(Word));
    if (!(mem[d.area])[d.high]) {
        fprintf(stderr,"error: out of memory.\n");
        exit(1);
    }
    if (last_initialized) {
        Word repitition[6];
        repitition[(last_initialized-1) % 6] =
                ((mem[0])[(last_initialized-1) / 59049])
                    [(last_initialized-1) % 59049];
        repitition[(last_initialized) % 6] =
                ((mem[0])[last_initialized / 59049])
                    [last_initialized % 59049];
        unsigned int i;
        for (i=0;i<6;i++) {
            repitition[(last_initialized+1+i) % 6] =
                    crazy(repitition[(last_initialized+i) % 6],
                        repitition[(last_initialized-1+i) % 6]);
        }
        unsigned int offset = (59049*d.high) % 6;
        i = 0;
        while (1){
            ((mem[d.area])[d.high])[i] = repitition[(i+offset)%6];
            if (i == 59048) {
                break;
            }
            i++;
        }
    }
    return &(((mem[d.area])[d.high])[d.low]);
}

unsigned int get_instruction(Word** mem[], Word c,
        unsigned int last_initialized,
        int ignore_invalid) {
    Word* instr = ptr_to(mem, c, last_initialized);
    unsigned int instruction = instr->low;
    instruction = (instruction+c.low + 59049 * c.high
            + (c.area==1?52:(c.area==2?10:0)))%94;
    return instruction;
}

int main(int argc, char* argv[]) {
    Word** memory[3];
    int i,j;
    for (i=0; i<3; i++) {
        memory[i] = (Word**)malloc(59049 * sizeof(Word*));
        if (!memory) {
            fprintf(stderr,"not enough memory.\n");
            return 1;
        }
        for (j=0; j<59049; j++) {
            (memory[i])[j] = 0;
        }
    }
    Word a, c, d;
    unsigned int result;
    FILE* file;
    if (argc < 2) {
        // read program code from STDIN
        file = stdin;
    }else{
        file = fopen(argv[1],"rb");
    }
    if (file == NULL) {
        fprintf(stderr, "File not found: %s\n",argv[1]);
        return 1;
    }
    a = zero();
    c = zero();
    d = zero();
    result = 0;
    while (!feof(file)){
        unsigned int instr;
        Word* cell = ptr_to(memory, d, 0);
        (*cell) = zero();
        result = fread(&cell->low,1,1,file);
        if (result > 1)
            return 1;
        if (result == 0 || cell->low == 0x1a || cell->low == 0x04)
            break;
        instr = (cell->low + d.low + 59049*d.high)%94;
        if (cell->low == ' ' || cell->low == '\t' || cell->low == '\r'
                || cell->low == '\n');
        else if (cell->low >= 33 && cell->low < 127 &&
                (instr == 4 || instr == 5 || instr == 23 || instr == 39
                    || instr == 40 || instr == 62 || instr == 68
                    || instr == 81)) {
            d = increment(d);
        }
    }
    if (file != stdin) {
        fclose(file);
    }
    unsigned int last_initialized = 0;
    while (1){
        *ptr_to(memory, d, 0) = crazy(*ptr_to(memory, decrement(d), 0),
                *ptr_to(memory, decrement(decrement(d)), 0));
        last_initialized = d.low + 59049*d.high;
        if (d.low == 59048) {
            break;
        }
        d = increment(d);
    }
    d = zero();

    unsigned int step = 0;
    while (1) {
        unsigned int instruction = get_instruction(memory, c,
                last_initialized, 0);
        step++;
        switch (instruction){
            case 4:
                c = *ptr_to(memory,d,last_initialized);
                break;
            case 5:
                if (!a.area) {
                    printf("%c",(char)(a.low + 59049*a.high));
                }else if (a.area == 2 && a.low == 59047
                        && a.high == 59048) {
                    printf("\n");
                }
                break;
            case 23:
                a = zero();
                a.low = getchar();
                if (a.low == EOF) {
                    a.low = 59048;
                    a.high = 59048;
                    a.area = 2;
                }else if (a.low == '\n'){
                    a.low = 59047;
                    a.high = 59048;
                    a.area = 2;
                }
                break;
            case 39:
                a = (*ptr_to(memory,d,last_initialized)
                        = rotate_r(*ptr_to(memory,d,last_initialized)));
                break;
            case 40:
                d = *ptr_to(memory,d,last_initialized);
                break;
            case 62:
                a = (*ptr_to(memory,d,last_initialized)
                        = crazy(a, *ptr_to(memory,d,last_initialized)));
                break;
            case 81:
                return 0;
            case 68:
            default:
                break;
        }

        Word* mem_c = ptr_to(memory, c, last_initialized);
        mem_c->low = translation[mem_c->low - 33];

        c = increment(c);
        d = increment(d);
    }
    return 0;
}

이것은 3646 바이트 이상으로 보입니다
H.PWiz

@ H.PWiz는 E를 잊어 버렸습니다. 죄송합니다
Krzysztof Szewczyk

1

05AB1E , 14 바이트

žssžt‚øJ'.Ks<è

온라인으로 사용해보십시오!


이 답변은 인덱스가 0입니다.

žs              # pi to N digits.
  sžt           # e to N digits.
     ‚øJ        # Interleave.
        '.K     # No decimal points.
           s<è  # 0-indexed digit from string.

그래서 정말 중요하지 않습니다, 다른 세 05AB1E의 답변은 이미 알고 있지만 변경하여 골프 3 바이트 수 '.Kþ하고 제거 <. ( <답이 0으로 색인 되어 있기 때문에 <
왜을

흠 .. 당신은 또한 ,우편이 이것을 암시 적으로 수행하기 때문에를 제거 할 수 있지만, 다른 10 바이트 답변과 거의 동일하게
보입니다

1

Python 3 + SymPy , 109 바이트

0-indexed 온라인으로 사용해보십시오!

from mpmath import*
mp.dps=51
print(''.join(['32']+[str(pi)[i]+str(e)[i]for i in range(2,51)])[int(input())])

5 바이트로 하드 코딩을이기십시오! 그러나 아마도 더 나을 수 있습니다. 그러나 하드 코딩을 치는 것은 기분이 좋아집니다 :)


1

Pyth, 35 바이트

@.i`u+/*GHhyHyK^T99rJ^2T0Z`sm/K.!dJ

테스트 스위트

Pyth에는 임의의 정밀도 pi 및 e 상수가 내장되어 있지 않으므로 직접 계산합니다.

파이 계산 :

u+/*GHhyHyK^T99rJ^2T0

이것은 다음 재발 연속 분수를 사용하여 pi를 계산 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))합니다. 다른 PPCG 답변 에서 얻었습니다 . 여기 방정식 23-25 에서 파생 됩니다 .

나는 1024 번째 이후의 모든 항을 생략하여 내부에서 밖으로 계산하며, 후자는 항에 거의 영향을 미치지 않기 때문에 처음 50 자리가 정확하도록 99 자리의 정밀도를 유지합니다.

전자 계산 :

sm/K.!dJ

처음 1024 숫자의 역수를 99 자리의 정밀도로 합산합니다.

그런 다음 두 숫자를 문자열로 변환하고 인터레이스하고 색인합니다.


1

MATLAB, 93 바이트

n=input('');
e=num2str(exp(1));
p=num2str(pi);
c=[];
for i=1:length(p)
 c=[c p(i) e(i)];
end;
c(n)

간단한 설명은 먼저 e와 pi를 문자열로 변환 한 다음 숫자를 연결하는 for 루프를 거칩니다. 여기에서 c는 파이, p는 pi, e는 e입니다.

나는 또한 가독성을 위해 이것을 여러 줄로 나누었지만 실제 코드는 최소한 한 줄로 간격을 유지합니다.


사이트에 오신 것을 환영합니다!
DJMcMayhem

고마워, 나는 꽤 오랫동안 코드 골프를 탐색하고 마침내 그것을 직접하기로 결정했습니다.
a13a22

여기에는 주로 입력이없는 것처럼 보이는 몇 가지 문제가 있습니다. 정수가 주어지면 파이 시퀀스 nnth자릿수 가 생성 되도록 함수를 수정해야합니다 . 변수 이름을 단일 문자로 줄여 바이트 수를 줄일 수도 있습니다
Taylor Scott

바이트 수에 대한 변수 이름을 수정했습니다. n 번째 자릿수에 대해서는 방금 n =?를 정의해야합니까, 아니면 사용자 입력을 가져와야합니까?
a13a22

이미 알아 낸 것처럼 보이지만 사용자에게 입력하라는 메시지를 표시해야하지만 해당 프롬프트에 서식을 지정할 필요가 없으므로input('')input('n')
Taylor Scott

1

줄리아, 63 바이트

1- 색인

a(n)=replace(string(BigFloat(n%2>0?π:e)),'.',"")[ceil(Int,n/2)]

pi 또는 e를 문자열로 변환하고 소수점 이하 자릿수를 제거한 다음 적절한 숫자를 호출합니다. 숫자의 문자 표현을 리턴합니다.


1
PPCG에 오신 것을 환영합니다!
Martin Ender

1

C # + BigDecimal , 377 372 바이트

d=>{if(d%2<1){d/=2;int l=++d*10/3+2,j=0,i=0;long[]x=new long[l],r=new long[l];for(;j<l;)x[j++]=20;long c,n,e,p=0;for(;i<d;++i){for(j=0,c=0;j<l;c=x[j++]/e*n){n=l-j-1;e=n*2+1;r[j]=(x[j]+=c)%e;}p=x[--l]/10;r[l]=x[l++]%10;for(j=0;j<l;)x[j]=r[j++]*10;}return p%10;}else{CognitioConsulting.Numerics.BigDecimal r=1,n=1,i=1;for(;i<99;)r+=n/=i++;return(r+"").Remove(1,1)[d/2]-48;}}

@Kevin Cruijssen 덕분에 5 바이트를 절약했습니다.

외부 라이브러리로 인해 TIO 링크가 없습니다. 불행히도 C #에는 내장 BigDecimal클래스 가 없으므로이 외부 라이브러리 는해야합니다. 아마 일부 골프는 아직 가능하지만 지금은 시간이 없습니다.

풀 / 포맷 버전 :

namespace System.Linq
{
    class P
    {
        static void Main()
        {
            Func<int, long> f = d =>
            {
                if (d % 2 < 1)
                {
                    d /= 2;

                    int l = ++d * 10 / 3 + 2, j = 0, i = 0;
                    long[] x = new long[l], r = new long[l];

                    for (; j < l;)
                        x[j++] = 20;

                    long c, n, e, p = 0;

                    for (; i < d; ++i)
                    {
                        for (j = 0, c = 0; j < l; c = x[j++] / e * n)
                        {
                            n = l - j - 1;
                            e = n * 2 + 1;
                            r[j] = (x[j] += c) % e;
                        }

                        p = x[--l] / 10;
                        r[l] = x[l++] % 10;

                        for (j = 0; j < l;)
                            x[j] = r[j++] * 10;
                    }

                    return p % 10;
                }
                else
                {
                    CognitioConsulting.Numerics.BigDecimal r = 1, n = 1, i = 1;

                    for (; i < 99;)
                        r += n /= i++;

                    return (r + "").Remove(1,1)[d/2] - 48;
                }
            };

            for (int i = 0; i < 100; ++i)
            {
                Console.Write(f(i));
            }
            Console.WriteLine();

            Console.ReadLine();
        }
    }
}

-2 바이트 x[j++]/e에서 괄호를 버릴 수 있습니다 c=(x[j++]/e)*n. 또한 +""두 개의 return 문에서 모두 제거 하고 문자열 대신 int를 반환 한 다음 -48두 번째 return 문을 추가 하여 char을 int 출력 (-1 바이트)으로 변환 할 수 있다고 생각합니다 .
Kevin Cruijssen에서

@KevinCruijssen 둘 다 잘 작동합니다!
TheLethalCoder

1

파이썬 2 , 82 바이트

lambda n:`7*ord('L?J$rg$"79n*i.71&<B@[>)!Y8l:.pUo4GZ9c0a%'[n/2])`[n%2+1]

온라인으로 사용해보십시오!

인쇄 할 수없는 ASCII 문자가 포함되어 있습니다. flornquake는 2 바이트를 절약했습니다.


이것은 예를 들어 n = 64, n = 65에 해당합니다. lambda n:('%02d'%ord('...'[n/2]))[n%2]아마도 더 좋은 방법이 있지만 그것을 고치는 가장 좋은 방법이 무엇인지 잘 모르겠습니다 .
flornquake '

@flornquake darn, 네 말이 맞아. 1 바이트 더 짧은 픽스를 작성했습니다. 더 나은 것을 생각할 수 없다
Lynn

좋은. 당신의 아이디어를 기반으로 다음의 무언가도 짧은 : TIO는
flornquake


0

Befunge , 105 바이트

3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919&0g,@

어떤 이유로 내부적으로 줄을 80 자로 줄 바꿈하는 것처럼 보이기 때문에 TIO에서는 작동하지 않습니다. 각 숫자를 새 줄에 넣고 &0g,@뒤를 3첫 줄 에 두어 TIO에서 작동하도록 할 수 있습니다 .


1
Befunge 98을 사용하여 TIO에서 잘 작동합니다 : tio.run/##Hcg7DsJAEATRqzgiwtJO9/w64yxIxhkiIeD0y0JUpXc/Hu/neezq/…
pppery

0

자바 스크립트 (ES6) + mathjs , 78 바이트

(n,m=math.create({number:"BigNumber"}))=>`${n%2?m.e:m.pi}`.match(/\d/g)[n/2|0]

인덱스가 0이며 최대 128 개의 숫자로 작동합니다 (최대 입력 127).

테스트 스 니펫

let f=
(n,m=math.create({number:"BigNumber"}))=>`${n%2?m.e:m.pi}`.match(/\d/g)[n/2|0]
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.16.0/math.min.js"></script>
<input type=number min=0 value=0 oninput="O.innerHTML=this.value.length>0?f(+this.value):''"><pre id=O>3


0

MATLAB (Symbolic Toolbox 포함), 89 82 바이트

이 답변은 Symbolic Toolbox를 사용하여 pi와 e의 값을 하드 코딩하지 않고 출력을 제공합니다.

재미있는 보너스로, 입력으로서의이 코드는 단일 인덱스 또는 인덱스 배열을 취할 수 있으며 제공된 모든 인덱스 값에 대한 출력 값을 동시에 제공합니다 (예 : 1:10을 제공하면 처음 10 개의 값이 출력 됨).

a=char(vpa({'exp(1)';'pi'},51));
a(a=='.')=[];
n=input('');
a(9+fix(n/2)+56*mod(n,2))

(가독성을 위해 추가 된 새로운 행, 실행에 필요하지 않으므로 바이트 수에 포함되지 않음)

불행히도 TIO가 사용하는 Octave 버전은이 vpa기능에 대한 기호 입력을 지원하지 않으므로 TIO 링크에서 제공 할 수 없습니다.

MATLAB에서는 함수에서 반환 벡터로 색인을 생성하는 것이 옥타브와 같은 방식으로 불가능합니다. 이는 익명 함수가 아닌 전체 프로그램임을 의미합니다. 프로그램은 n실행 중에 입력을 요청 합니다. 이것은 요소가 필요한 하나의 색인 값입니다. 프로그램이 끝나면 값이 내재적으로 인쇄됩니다.

프로그램의 경우 vpa소수점 이하 51 자리 piexp(1)(e) 값을 제공 하는 함수를 사용합니다 . 이것은 이론적으로 무한한 정밀도를 허용하기 위해 상징적으로 수행됩니다. 100 개 이상의 요소를 확장하려면 51코드 의 값 을 증가시켜 범위를 늘리십시오.

포장 vpachar(예 char(vpa(...))) 캐릭터가 아닌 심볼 값 함수의 출력을 변환 할 필요가있다. 결과 출력은 문자열입니다.

matrix([[2.71828182845904523536028747135266249775724709369996], [3.14159265358979323846264338327950288419716939937511]])

여기에는 e와 pi에서 소수점 이하 51 자리까지 포함됩니다. 출력의 100 자리를 허용하기에 충분합니다.

이 엉망을 색인하려면 적어도 소수점을 제거하여 두 자릿수 문자열이 연속적이어야합니다. 원래 나는 아무것도없는 숫자가 아닌 것을 간단한 정규식 대체로 사용했습니다. 그러나 코드를 사용하여 소수점을 제거하면 7 바이트를 절약 할 수 있습니다.

a(a=='.')=[];

결과 문자열은 다음과 같습니다.

matrix([[271828182845904523536028747135266249775724709369996], [314159265358979323846264338327950288419716939937511]])

여기에는 연속 인덱스에서 pi와 e 청크에 필요한 모든 숫자가 포함됩니다.

그런 다음 홀수로 pi 청크에 액세스하고 짝수로 계산을 사용하여 e 청크에 액세스하도록 제공된 인덱스를 변환 할 수 있습니다.

9+fix(n/2)+56*mod(n,2)

위의 문자열에서 해당 인덱스에 액세스하면 올바른 출력을 제공합니다.


0

공리, 148 바이트

g(x,n)==floor(numeric(x)*10^n)::INT rem 10
f(n:NNI):NNI==(m:=digits((n+4)::PI);x:=n quo 2;if n rem 2=1 then r:=g(%e,x)else r:=g(%pi,x);digits(m);r)

0 기반 배열. 결과

(10) -> [f(i) for i in 0..20]
   (10)  [3,2,1,7,4,1,1,8,5,2,9,8,2,1,6,8,5,2,3,8,5]
                                            Type: List NonNegativeInteger
(11) -> f(100001)
   (11)  6
                                                    Type: PositiveInteger

0

Google 스프레드 시트, 47 바이트

참고 : Excel 및 Google 스프레드 시트에 저장된 상수의 길이로 인해이 솔루션은 20 자리까지만 정확합니다.

셀에서 입력을 받고 A1파이의 숫자를 호출 셀로 출력하는 익명 워크 시트 기능

=Mid(.1*If(IsOdd(A1),Pi(),.1*Exp(1)),3+A1/2,1

하드 코드 버전, 112 바이트

이 버전은 프로그램 사양을 완전히 충족하지만 일반적으로 재미 있지 않습니다.

1- 인덱싱 된 파이 목록 에서 n 번째 숫자를 반환하는 익명의 워크 시트 함수

=Mid("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1

SUBSTITUTE 대신 소수점을 10으로 나누면 첫 번째 솔루션에서 몇 바이트를 절약 할 수 있습니다.
Wernisch

0

BFASM , 142 바이트

stk 0
조직 0
txt "3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"
in_ r1
rcl r2, r1
R2 밖으로

입력을 ASCII 문자로 사용하고 숫자 형식으로 출력합니다.


0

brainfuck , 5971 바이트

다른 bfasm 답변을 직접 번역했습니다.

+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>>>>>>>>>>>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++>>++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,>[-]<[<+>>>>>>>>>>+>>>>>+<<<<<<<<<<<<<<-]<[>+<-]>>>>>>>>>>>>>>>[[>>]+[<<]>>-]+[>>]<[<[<<]>+<<<<<<<<<<<<+>>>>>>>>>>>>>[>>]<-]<[<<]>[>[>>]<+<[<<]>-]>[>>]<<[-<<]><<<<<<<<<<<<.<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<]

온라인으로 사용해보십시오!

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