Trộn pi và e để làm bánh!


37

Mọi người đều biết pi hằng số toán học, tỷ lệ chu vi của đường tròn với đường kính của nó.

3.14159265358979323846264338327950288419716939937510...

Bạn có lẽ cũng biết e hằng số toán học, các cơ sở của một logarit tự nhiên.

2.71828182845904523536028747135266249775724709369996...

Nhưng ... bạn có biết bánh không? Đây là một trong những hằng số quan trọng nhất (với tôi). Đó là các chữ số của pie xen kẽ.

32.1741185298216852385485997094352233854366206248373...

Là một mở rộng thập phân:

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

Đây là trình tự OEIS A001355 .

TỪ KHÓA: nonn, cơ sở, câm , dễ dàng

Đó là một chuỗi rất ngu ngốc.

Thử thách

Viết chương trình / hàm lấy số nguyên n không âm và xuất ra chữ số thứ n của chiếc bánh .

Thông số kỹ thuật

  • Quy tắc I / O tiêu chuẩn được áp dụng .
  • Sơ hở chuẩn bị cấm .
  • Giải pháp của bạn phải hoạt động với ít nhất 50 chữ số của mỗi hằng số, điều đó có nghĩa là nó sẽ hoạt động với ít nhất 100 điều khoản của chuỗi (xin vui lòng, cố gắng không mã hóa cứng: P).
  • Đầu ra cho 2 hoặc 3 không phải là dấu thập phân .
  • Giải pháp của bạn có thể là 0 chỉ mục hoặc 1 chỉ mục nhưng vui lòng chỉ định đó.
  • Thách thức này không phải là tìm ra cách tiếp cận ngắn nhất trong tất cả các ngôn ngữ, mà là tìm cách tiếp cận ngắn nhất trong mỗi ngôn ngữ .
  • Mã của bạn sẽ được ghi theo byte , thường là trong mã hóa UTF-8, trừ khi được quy định khác.
  • Các hàm tích hợp tính toán trình tự này được cho phép nhưng bao gồm một giải pháp không dựa vào tích hợp được khuyến khích.
  • Giải thích, ngay cả đối với các ngôn ngữ "thực tế", được khuyến khích .

Các trường hợp thử nghiệm

Đây là 0 chỉ mục.

Input   Output

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

Trong một vài định dạng tốt hơn:

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
Theo OEIS, từ khóa dumbđơn giản có nghĩa là không thú vị mà không có thuộc tính đặc biệt nào với nó.
Okx

1
@Downvoter Có lý do gì không?
hoàn toàn là

27
Người ta có thể lập luận rằng kết quả là pei, không phảipie
Zaid

1
Tôi đã không bỏ phiếu, nhưng có lẽ vì bạn đã không hỏi điều này vào ngày
14

1
Lúc 1:59 chiều, @txtechhelp? ;)
WallyWest

Câu trả lời:


12

Toán học, 50 byte

1 chỉ mục

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

Bạn có thể giải thích làm thế nào điều này hoạt động?
Stevoisiak

dễ thôi. Phải mất 120 (5!) Mỗi ​​phần tử và đánh dấu chúng
J42161217

Tốt đẹp! Tôi đã cố gắng đánh bại giải pháp của bạn bằng cách tránh Riffle, nhưng giải pháp của tôi xuất hiện một byte ngắn: RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]&
Mark S.

Điều này dường như không hoạt động. Nó trả về một chữ số.
DavidC

@DavidC Có! .. "xuất ra chữ số thứ n của chiếc bánh" Chính xác! Tại sao bạn downvote ???
J42161217

9

Haskell, 154 147 146 byte, KHÔNG CÓ HARDCODING HOẶC SỬ DỤNG CONSTANTS BUILTIN

Giải pháp này tính toán epi bằng cách sử dụng chuỗi vô hạn và lưu trữ chúng trong các số nguyên điểm cố định chính xác tùy ý (loại tích hợp của Haskell IntegerRationalphần mở rộng của nó ).

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

Ung dung:

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)

Chỉ số 0. Chính xác cho đầu vào 0-99, không chính xác cho đầu vào 100-101, ngoài giới hạn.

Giải trình:

Tính toán pi sử dụng chuỗi vô hạn này . Tính e sử dụng chuỗi giai thừa nghịch đảo cổ điển . Về mặt lý thuyết, đây không phải là công thức lý tưởng để sử dụng, vì chúng không quá ngắn gọn về mặt số lượng, nhưng chúng là những công cụ duy nhất tôi có thể tìm thấy đủ nhanh để xác minh tính chính xác khả thi (các khoản tiền khác cần hàng trăm nghìn nếu không phải hàng triệu điều khoản). Trong phiên bản chơi gôn, e được tính toán với độ chính xác cao hơn nhiều so với mức cần thiết để giảm thiểu bytecount. Cả hai hằng được tính đến các chữ số nhiều hơn một chút so với mức cần thiết để tránh các lỗi làm tròn (chịu trách nhiệm cho phần đuôi khó xử của các giá trị không chính xác).

Các hằng số được tính là tỷ số nguyên chính xác tùy ý ( Rational), sau đó nhân với 10 ^ 50 để tất cả các chữ số cần thiết vẫn còn nguyên khi tỷ lệ được chuyển đổi thành số nguyên (chính xác tùy ý) ( Integer). Điều này cũng tránh được vấn đề tránh dấu thập phân trong các biểu diễn chuỗi của số, mà hàm thay thế rút ra các ký tự.


8

Taxi , 749 byte

'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.

Hãy thử trực tuyến!

Cố gắng tính toán pi hoặc e theo chương trình trong Taxi sẽ là một cơn ác mộng, mặc dù tôi chắc chắn rằng nó có thể được thực hiện. Do đó, nó ngắn hơn rất nhiều khi chỉ mã hóa 100 chữ số đầu tiên trong chuỗi. Nó cảm thấy khá rẻ nhưng nó chắc chắn là mã Taxi ngắn nhất đáp ứng thách thức.

Nó mã hóa chuỗi thứ tự dưới dạng chuỗi, nhập vào n, sau đó lặp nxuống và loại bỏ ký tự đầu tiên trong chuỗi mỗi lần. Khi n=0, xuất ký tự đầu tiên. Đây là một chỉ mục.

Không chơi gôn / định dạng:

'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.

6

Python 2 , 88 byte

-4 byte nhờ ý tưởng chuyển đổi cơ sở của @EriktheOutgolfer .

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

Hãy thử trực tuyến!

Python 2 + sympy , 92 byte

Chỉ số 0. Cảm ơn Rod đã nhắc nhở tôi chuyển sang from sympy import*, điều mà trước đây tôi đã quên.

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

Hãy thử trực tuyến!

Python 2 , 114 byte

Tôi thành thật nghĩ rằng giải pháp ngắn nhất là mã hóa cứng, vì Python không có các phần mềm hữu ích.

lambda n:"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

Hãy thử trực tuyến!

Python 2 , 114 byte

Giải pháp tương đương của @totallyhuman .

'3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919'.__getitem__

Hãy thử trực tuyến!


Trước khi tải xuống, hãy dành thời gian của bạn để tìm kiếm một giải pháp ngắn hơn.
Ông Xcoder


@totallyhuman Cảm ơn
Ông Xcoder

8
Giải pháp tương đương mà bạn chỉnh sửa thực sự là mã tương đương, không phải số byte tương đương. : P
hoàn toàn là

1
@totallyhuman Lol Tôi đã xem bình luận của bạn và hiểu nó nhưng tôi hoàn toàn quên sửa, vì tôi đã cười về sai lầm của chính mình. Cảm ơn đã chỉnh sửa trong!
Ông Xcoder

5

05AB1E , 10 byte

žsтžtøJþsè

Giải trình:

ž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

Chỉ số 0.

Hãy thử trực tuyến!


1
Quá nhiều 05AB1E ...: P
Ông Xcoder

@ Mr.Xcoder Vâng, 05AB1E là ngôn ngữ với pi và e dựng sẵn ...
Okx

@ Mr.Xcoder Có những nội dung đó là lý do tại sao.
Erik the Outgolfer

@totallyhuman không nó không.
Erik the Outgolfer

@Dorian Phiên bản của bạn không hoạt động. Bạn đang sử dụng phiên bản cũ, nhưng žtkhông phải là một danh sách vô hạn hồi đó, đó là lý do tại sao Okx đang sử dụng 100 chữ số đầu tiên của e trong chương trình của mình. Thay đổi nó thành phiên bản mới của 05AB1E (trong đó cả pi và e là một danh sách vô hạn) vẫn không hoạt động trong phiên bản hiện tại của bạn, bởi vì zip sẽ tạo ra các cặp và Join sẽ tham gia các cặp đó thay vì mọi thứ. Tuy nhiên, vẫn có thể sử dụng 9 byte bằng cách thay thế Jbằng Strong phiên bản mới, trong đó Slàm cho nó trở thành một danh sách các ký tự / chữ số được làm phẳng
Kevin Cruijssen

5

Python 3 , 83 80 byte

Chỉ số 0.

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

Hãy thử trực tuyến!

Có một số ký tự không in được trong đó không thể nhìn thấy đúng trong trình duyệt.

Điều này hoạt động bằng cách xây dựng bộ dữ liệu (32, 17, 41, 18, 52, ...)từ mã ASCII của các ký tự trong quá trình mã hóa cứng. Bộ dữ liệu được chuyển đổi thành chuỗi '3217411852...', từ đó chúng ta chọn đúng chữ số.


4

Polyglot, 108 byte

n=>"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

Hoạt động trong:

  • C #
  • JavaScript

Tôi nghĩ rằng đây là lần ngắn nhất bạn có thể làm trong C # vì nó là 252 byte để tìm số thập phân thứ N của pi .


Polyglot JS :-)
Arnauld

@Arnauld Đã cập nhật :)
TheLethalCoder

7
Đây không phải là một Polyglot Java! Bạn không thể lập chỉ mục vào các đối tượng không phải mảng trong Java.
Roman Gräf

1
Điều này về mặt kỹ thuật hoạt động nhưng tôi đã đánh giá thấp bởi vì nó a) không cạnh tranh lắm và b) cực kỳ nhàm chán và tầm thường.
HyperNeutrino

4
@HyperNeutrino Đó là C # và JavaScript khi nào họ cạnh tranh? Và nhàm chán và tầm thường có thể nhưng bạn muốn tôi trả lời 500 byte bằng C # thật thông minh phải không? Không bởi vì điều đó mâu thuẫn với điểm 1. Điều này ngắn như nó được ...
TheLethalCoder

4

Java 8, 420 417 413 404 380 358 (tính toán) & 115 110 (mã hóa cứng) byte

Tính ( 420 417 413 404 380 358 ):

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

Hãy thử nó ở đây.
Chứng minh rằng nó đưa ra kết quả chính xác cho 100 mục yêu cầu.

Mã hóa cứng: ( 115 110 byte ):

"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"::charAt

Hãy thử trực tuyến.

Chỉ số 0

-9 và -5 byte nhờ @Nevay .
-24 byte nhờ @ceilingcat .

  • Giải pháp của bạn phải hoạt động với ít nhất 50 chữ số của mỗi hằng số, điều đó có nghĩa là nó sẽ hoạt động với ít nhất 100 điều khoản của chuỗi (xin vui lòng, cố gắng không mã hóa cứng: P)
  • Các hàm tích hợp tính toán trình tự này được cho phép nhưng bao gồm một giải pháp không dựa vào tích hợp được khuyến khích

Bạn đã yêu cầu nó ..;)

Tích hợp sẵn của Java Math.PIMath.Elà gấp đôi, có độ chính xác tối đa chỉ là 16. Do đó, chúng tôi sẽ phải tự tính toán cả hai giá trị bằng cách sử dụng java.math.BigIntegervà / hoặc java.math.BigDecimal.
Vì tôi đã tính PI trước trong một thử thách khác , tôi đã sử dụng cùng mã đó BigInteger. Tuy nhiên, thuật toán cho số Euler sử dụng BigDecimal.
Kết quả pedo đó: 31415...2.718....

Có thể chơi golf bằng cách chỉ sử dụng BigDecimal, nhưng đã đưa ra một số câu trả lời không chính xác cho PI, vì vậy bây giờ tôi sử dụng cả hai BigDecimalBigInteger.

Giải trình:

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=BigInteger.TEN.pow(x);for(p=a=a.add(a);
                              //  Temp BigInteger (where both `p` and `a` starts at 10^99*2)

       i<x;)                  //  Loop (1) 99 times (the higher the better precision)
    e=e.add(                  //   Add the following to `e`:
       e.ONE.divide(f=f.multiply(f.valueOf(i++)),
                              //    First change `f` by multiplying it with `i`
        new MathContext(x,RoundingMode.HALF_UP))))
                              //    And then add 1/`f` to `e`
                              //    (RoundingMode is mandatory for BigDecimal divide)
  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(                  //   Add the following to `p`:
       a=a.multiply(a.valueOf(i))
                              //    First change `a` by multiplying it with `i`,
          .divide(a.valueOf(i+++i)));
                              //    and dividing it by `2*i+1`
                              //    And then add this new `a` to `p`
  // 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 BigDecimal/BigInteger to String:
        .charAt(-~n/2);}      //  And return the `(n+1)//2`'th character in this string

Không chắc nó có giúp gì cho bạn không, nhưng thuật toán C # của tôi để tính pi xuất hiện ngắn hơn 8 byte so với phiên bản Java của bạn.
TheLethalCoder

Lưu ý mặc dù để làm cho nó hoạt động đúng cho câu hỏi này thay đổi (d+=2)thành ++dreturn p%10+1chỉ return p%10.
TheLethalCoder

@TheLethalCoder Hãy thoải mái đưa ra câu trả lời C # cho thử thách này. :) Mặc dù bạn cũng sẽ phải tính số Euler. Câu trả lời của tôi là tốt cho lolz, vì dù sao mã hóa đầu ra cũng ngắn hơn ..
Kevin Cruijssen

1
You've asked for it.. ;)Này, tôi thích cái đầu tiên của bạn hơn. Tôi đã nhận được nhiều câu trả lời được mã hóa cứng hơn tôi mong đợi ...
hoàn toàn là

1
Bạn có thể lưu 9 byte trong câu trả lời được tính toán của mình bằng cách sử dụng charAt(n+1>>1)và 5 byte trong phiên bản mã hóa cứng của bạn bằng cách sử dụng tham chiếu phương thức "..."::charAt.
Nevay

3

Hạt giống , 6015 byte

105 41100973201674650461227976639700390615120600528953176107701316721890649738810349651490948904154731057172335535600875054878204557287393379815378680878571406244365932330202793040308312687924242319799562985464135998860369933720376853281630432469462831217924775601393232895404104191613314969008627719099002734936685651970933027922574843126481552407811220371545812798263882325951724505132794956253992779856191832909434513683936955184871247159313261417328850445886987045814618325821125417040265540589403338721758954467831926977078444612065747526326682314711350486782090838673475876960125016098416460032667015813053483457246043486676622061645094043655351781242050448580132075920324099742699960838361839038297355120817832056960516761862493176616153258281345538652844974811030063414112136642097000574165433957710342430709643110444042577685157477268110199017600011209827070311299268347100419887111107237908884608557593677163764286026624394674781868689858494991328505977301270068505397030743037416430245399054325956185200430657008806539374392625804513081295070438243600044274289109395357299275275193717501822777898664715885427884193864182834402097958423697356485767670945673525604620701482288023981110598866625872386643941558021439168402392304238271452444124214301243311025121833097491087918320170873313832323794851508364788578530614246140801266858481189449278157296335592848066512127882306035576754122325822200069362884409931190620435627809384380203617488253034370361172908245852012086081807945576657014184275798330804532115103840313004678040210379846666674881048346897213048386522262581473085489039138251061251160730845385869281787222083186331344552658814775998639661361866503862291670619153718574270905089351133527806484519543645501497150560454761284099358123613642350160410944676702481576280832672884549762767667090615809061739499629798396737503512011645776394176807352443544839957773371384141101627375926404212619777658374366513665083032140398814384622434755543347503025479743718569310129255927244046638238401670388409731849963600790867434678993019370132638962549859363736476668247251402420832876258626149639101811361047924632565285870213656416957893835899254928237592711662454838295046528789720146967061486405916116778722736283489123195985053535189375957277052428901645131462087039117212488839670735246752589931585405440449333046667938628384693216121067951290025349082277568986632815062532963505690244579740140120806885104683071514922412748240497612209609661707922754236180441892543545377867355182682381812487973645406703590150722720330526173957597156314579144484166520730013480681064941752984345205140917291104888971742824066713606933406657345121342075268990055328274845008936364502884461548416337689565392911129757761902576946104722487260155373897552821908338346641549478063474748830482136404008215583192489320750526753663943267086203954602839906762640389978523894333743126288529975769945319614142422443068420170103245659109689433597701350198280212250954698442638475209618790055335813263132865176791663235801963797561493995544185124734214257034901773781134331460320221759556924556747571745834582344275416625351302153332814233497096345055392255809024712740720006219615340819493781244665414077298346378966540544979367367978334759985048507214749726072645238624803791884339024844989975370042133733339339038567691571361407296615851372112592532463329778465699812822089846474961581380707849259093905314170108054540333209088059730272087864344697983074458088984533095183089310714804468718319244214535941276969904638763288063417624586766891798378622613765728303031397998644194508610598078718347204813844240434145846888722334194516524032354042557957058092854659539699310565707914118281251563405735083553254856313838760124953245573676126601070861004186509621892263623745673900572829301771299438501543213489182375655869072568437776298051260531944785904157204006430131566234389896821642210616326951771496269255716808352415001187083781128619236455170025989777631182990311607133740812107138446626302353752098982590371714623080450836912706275397973009559314275978915463843159370230629290376520494894845680706499809017211545204670148071902560908658269183779180493590025891585269507219866461550160579656755846447951259951641828495549544791046179035585611272240116822105364823082512055639047431280117805724371019657801828634946412396263504315569042536942671358095826696817513115447079645898107923447321583282886740680340887700198072304400536529418546232473450984945589794448490331085275232352881571706521961358975744067916422124670374397682877259664913100427726059898474024964867713698696116581478101206003313106174761699804016604950094008714907179862448792216891309734208815522069346791369498202430302292199779590583788518283934542807403049256936179914953814019565550264909025345322516061595136601312434888871667940394250767164496543418483237896796108764367721411969986710930448108645039275082356457263454340220118278471652962484104099512207532103709146426640958406853240342441810465024550617909657901698718289260589269758398513490424434162831332785821428006396653475356712733072469052427934231406388810607688824035522285626563562286337967271308076321307276537761026788485320280603487776428017017298356181654076403306265118978333909378403193559129146468182910851996415072056976175613473847242292911071040966109905552914332596680497156169349277079292398091020434667210493868422848588893205157133171899819212153010393580099455957808703428739456223073813663954919146593698106305501988107196273527346690785289909397140611634970017071011599022429384594426022933102487171920965595473754661194965266230932928905708783854897164127767575976566931916632077914904360565095752466049885656187054491320449776951484812738806536727562344348761718424255018794271994537719709226236497935053971406685810778014002594041715040546776952342303797267458880802314841325359844565479173256964507237937290466116935912176054052746039378370966040054779443633371806403649852746347690237831260027483859907620684197542069045517397230169577918374265220969534695931904

Hạt giống tương đương với câu trả lời Befunge của tôi. Giống như tôi đã đề cập ở đó, chương trình Befunge kết quả đầu ra này không hoạt động trên TIO vì TIO dường như có gói nội tuyến ở mức 80 ký tự.


Làm sao? Chỉ là ... bằng cách nào?
NieDzejkob


3

Excel, 113 byte

1 chỉ mục

=MID("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1)

PI()chỉ chính xác tối đa 15 chữ số. Tương tự cho EXP(1).

Giải pháp 60 42 byte hoạt động cho Đầu vào <=30 (-18 byte nhờ @Adam)

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

Các khái niệm cơ bản trong cách tiếp cận thứ hai của bạn có thể được rút ngắn xuống còn 46 byte bởi chỉ có pi / e lựa chọn bên trong if(...)tuyên bố: =MID(IF(ISODD(b1),PI(),EXP(1)/10)/10,b1/2+3,1).Can't đi quanh khu vực không chính xác của pi()exp(), mặc dù
Adam

2

05AB1E , 13 byte

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

Hãy thử trực tuyến!

Tương tự như câu trả lời của Magic, nhưng hơi khác.

Giải trình:

É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

Julia, 63 byte

1 chỉ mục

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

Chuyển đổi pi hoặc e thành một chuỗi, xóa vị trí thập phân và sau đó gọi chữ số thích hợp. Trả về một đại diện ký tự của chữ số.


1
Chào mừng đến với PPCG!
Martin Ender

2

Hạt giống, 5852 5794

Dựa trên câu trả lời của TehPers Befunge.

1051130021648715907393149878290493079600376561988348664272369051219541158034251323778110172612675089859184605166991106040693833909592598132115295033728752738087105881243462563076466678196376225832661747114302365429787133716511111381612588140144307910362782924144996564529411691568302571546828919454271683233497896594149189544327214969302848984257909609092418942847813158570493297692245428646803536815345759334224247677074872671057296478697076157019699466324478990259351466108726578472175001474585821629778406880297836753303012207209976229264609834293181367664486642493394085473509253813676093779567738697465957519812706192139261472118908699638816640825554051850436762061721281771892466822470585742923158999350909054375916612667405594051622229969696110285582900916410099224974902720736021096981441362371398922887585642863359978062601767338412679956208026294953110185271056006145171920926497396179933553547647876354874445336583594285656870801545177578902705927733720249211636847884869491097054175976937629709200212494761217184873108852140655722895359613462156833646123152648220793295854627649452190956799160703532861477096009725706141202331131287901266622861560576869037209421378739125115765163010112273561384890274706972479335859548424507413589440122160717697618157336618754196528390529316634155057447126317467878320143220148685911507025731721669456692292309133633447284353130542004299981319048073637696567634889623949341630372505055435189663767044165063763216111834588696399179737702861529836947970901482712510136315042152110633215913241916694919566433112405210063414042670097562256073600916103886503591248191758835092924394147776204171675226850914902590401360360345796925181247981647089261884952039081268986586818659090505317955579671089885915745568661758883469031230794272571159213300281445730703294269295310767401339422952480777920786878410780792687195268799097885426801795242758273587841272731685278721369746727313447085996142152811199340656395207452343492937579702451111716453371016654791322834865918860033642314402995240481293652425792697358895577606699947511030416728684352022506710677976841690749387202992493347056114389784733211172448656007595582911222364847293116425714996343958156522448560363063094260073906846664112391722958505451464414025605603413323283807093107521955579711235903403153357003170132938512689946882757999117710160645821945148763813674548797981224375547254576063310479473749044201972863935442758458424285806147218666471747061869918574545072745631758049982372007444866300485095061433951914878373501952670216546435388818497342311417254246013304856715094953051481317438104933875171470343900106719705171102058673610594748846178562080370992488881764909402902065625464750558527389775735939044400858705229893243673486621988009838791971714603625037310885148140796813757120291067372196872928228321095156712054303101901959874384063672886495472796070113365603843687513322867176197917489855537726934095360491472497352567147140246395682503059404971449739625647398820598964158265302668783916501984956044969021302601920487717382879106303683795359905325347814473318519391344565458920270463279174784746656360314070464241666622240210385245184959282222666398870656274940629675453574246097799383361429014800618720780346294542185892116417842240524776835458087900018007896901140383243611793705883547791450682392261960643824271328189332116466519255567441515615925840284456154022304291978218634565379575148642711337622789721842048696443945213454162713556316912301346193615227854869318871089808249776555077834342492281888561676171087168150941237306007109521081900169693331625918138699682645157924632842546989812618292449480799580909720292280095095845962850721356554807680991288722147671740885576811339492549454926901594927338274410385863276725958781460924134466358260089533908525106740467122470973368676988277207568882122479840074670300214980511007665457235218290742394089204192282508491125777180151491866961638111244962953268398339686189772372983926068579350047402754803068232034594024872791141428095120311259087973136353149728638143035136784730999270266072749004567217555438270988124997549762230020689881669285499865374963053282530118570884108038975805335341098720577305266629567047445192403700472887794782423940658412176424370062158626834653405675401415679083822191617061925174149189203359499283160374801737260780407460559147326758994495549579747033361234471750470244513311080274649191860724511086222353696966556035904101416366866518427071604705222938635947781869520181137451408849640159586041113639598272540062185768190959707775362176381804238896341317485410279831458927597060094913931822437950489034755418876566165098609145551163170170060968550804192429683076682433548504113044161906874992120619724109268394986529182050977866104283639955069424323124118234270471868688405770066267298550544345355480568344482162465184049105391961294335245926910436280167548428908725073049063187423431751542064521517069452498182346407984197390998799924644160478679731476796691938148057603728267749331459031937823996495889234787060791079241854542581243078812931046333013380737766914161425371301455762684652883345176576166320850926855173197613536554369628772428747263956045786416295429184651985570482338242016559363725421100270243627030197439290918962948652873397874243832067459791837014394278403085907234616003231621600132126403225123227458214686006897240158060744989458215243787817148717936756981074208678765977744940577875579654698779849605118845010395906232293740180888137656291524050590071724242335942378834532707622396324405477279768052696927856056064019532570357101573277570040254706775462396160275876038886428146097798897998315086627358220951838049046100218938610753230860169099104474379950181692561834872540511195903774693113510283120187768500261160296892119883913289017641545057765550924909632887927659777449405778755796546987798496051188450103959062322937401808881376562915240505900717242423359423788345327076223963244054772797680526969278560560640195325703571015732775700402547067754623961602758760388864281460977988979983150866273582209518380490461002189386107532308601690991044743799501816925618348725405111959037746931135102831201877685002611602968921198839132890176415450577655509249096328879276597774494057787557965469877984960511884501039590623229374018088813765629152405059007172424233594237883453270762239632440547727976805269692785605606401953257035710157327757004025470677546239616027587603888642814609779889799831508662735822095183804904610021893861075323086016909910447437995018169256183487254051119590377469311351028312018776850026116029689211988391328901764154505776555092490963288792

Công việc tốt! Tôi hơi tò mò về cách bạn chơi golf.
TehPers

2

Malbolge Unshackled (biến thể xoay 20 trit), 3,64E6 byte

Kích thước của câu trả lời này vượt quá kích thước chương trình có thể đăng tối đa (eh), do đó mã được đặt trong kho GitHub của tôi (lưu ý: Không sao chép mã bằng CTRL + A và CTRL + C, chỉ cần nhấp chuột phải và nhấp vào "Lưu phần tử đích dưới dạng. .. ").

Làm thế nào để chạy này?

Đây có thể là một phần khó khăn, bởi vì thông dịch viên Haskell ngây thơ sẽ mất nhiều thời gian để điều hành nó. TIO có trình thông dịch Malbogle Unshackled đàng hoàng, nhưng thật đáng buồn là tôi sẽ không thể sử dụng nó (giới hạn).

Cái tốt nhất tôi có thể tìm thấy là biến thể chiều rộng xoay cố định 20 trit, hoạt động rất tốt, tính toán (khá nhiều) ngay lập tức .

Để làm cho trình thông dịch nhanh hơn một chút, tôi đã xóa tất cả các kiểm tra khỏi trình thông dịch Malbolge Unshackled của Matthias Lutter.

#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;
}

Điều này trông giống như hơn 3646 byte
H.PWiz

@ H.PWiz quên E, xin lỗi
Krzysztof Szewchot

1

05AB1E , 14 byte

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

Hãy thử trực tuyến!


Câu trả lời này là 0-index.

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

Tôi biết đã có ba 05AB1E câu trả lời khác, vì vậy nó không thực sự quan trọng, nhưng bạn có thể chơi golf 3 byte bằng cách thay đổi '.Kđể þvà loại bỏ các <. (Không chắc chắn tại sao bạn thậm chí bao gồm <, kể từ khi bạn nêu câu trả lời của bạn là 0-lập chỉ mục câu trả lời hiện tại của bạn là 1-lập chỉ mục với. <.)
Kevin Cruijssen

Hmm .. bạn cũng có thể loại bỏ ,vì zip hoàn toàn làm điều này, nhưng tôi thấy nó gần giống với câu trả lời 10 byte khác ..
Kevin Cruijssen 19/11/18

1

Python 3 + SymPy , 109 byte

Hãy lập chỉ mục 0 Hãy thử trực tuyến!

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

Đánh bại mã hóa bằng 5 byte !! Nhưng có lẽ có thể tốt hơn. Nhưng đánh bại hardcoding khiến tôi cảm thấy tốt :)


1

Bình thường, 35 byte

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

Bộ kiểm tra

Vì Pyth không tích hợp các hằng số pi và e chính xác tùy ý, tôi tính toán chúng trực tiếp.

Tính pi:

u+/*GHhyHyK^T99rJ^2T0

Điều này sử dụng phân số tiếp tục tái phát sau đây để tính pi : 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...)))). Tôi đã nhận được nó từ một câu trả lời PPCG khác . Nó có nguồn gốc trong các phương trình 23-25 ở đây .

Tôi tính toán nó từ trong ra ngoài, bao gồm tất cả các thuật ngữ ngoài thứ 1024, vì các thuật ngữ sau này ít ảnh hưởng đến số và tôi duy trì 99 chữ số chính xác để đảm bảo 50 chữ số đầu tiên là chính xác.

Tính e:

sm/K.!dJ

Tôi tính tổng các nghịch đảo của 1024 số đầu tiên, đến 99 chữ số chính xác.

Sau đó, tôi chuyển đổi cả hai số thành chuỗi, xen kẽ chúng và chỉ mục.


1

MATLAB, 93 byte

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

Một lời giải thích đơn giản là lần đầu tiên này chuyển đổi e và pi thành chuỗi, sau đó đi qua một vòng lặp for nối các chữ số. Ở đây, c là pie, p là pi và e là e.

Tôi cũng đã chia nó thành nhiều dòng để dễ đọc, nhưng mã thực tế chỉ nằm trên một dòng với khoảng cách tối thiểu.


Chào mừng đến với trang web!
DJMcMayhem

Cảm ơn, tôi đã duyệt Code Golf khá lâu và cuối cùng tôi quyết định tự mình thử nó.
a13a22

Điều này có một số vấn đề, chủ yếu là nó dường như không có đầu vào. Bạn cần sửa đổi hàm của mình để cho số nguyên n, nó sẽ tạo ra nthchữ số của chuỗi Pie. Bạn cũng có thể giảm số lượng bằng cách giảm tên biến của mình thành một ký tự đơn
Taylor Scott

Xin lỗi, tôi đã sửa tên biến cho số byte. Đối với chữ số thứ n, tôi chỉ cần định nghĩa n =?, Hay tôi nên lấy đầu vào của người dùng?
a13a22

Có vẻ như bạn đã tìm ra nó, nhưng bạn nên nhắc người dùng nhập liệu, tuy nhiên, không cần thiết phải có bất kỳ định dạng nào được đính kèm với lời nhắc đó, vì vậy bạn nên sử dụng input('')thay thếinput('n')
Taylor Scott

1

C # + BigDecimal , 377 372 byte

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

Đã lưu 5 byte nhờ @Kevin Cruijssen.

Không có liên kết TIO vì thư viện bên ngoài, thật không may, C # không có BigDecimallớp dựng sẵn nên cái bên ngoài này sẽ phải làm. Có lẽ một số golf vẫn có thể nhưng không có thời gian ngay bây giờ.

Phiên bản đầy đủ / định dạng:

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();
        }
    }
}

Bạn có thể bỏ dấu ngoặc đơn x[j++]/eở khoảng c=(x[j++]/e)*n-2 byte; Ngoài ra, tôi nghĩ rằng bạn có thể loại bỏ cả hai +""tại hai câu lệnh return và trả về một int thay vì chuỗi, sau đó thêm -48vào câu lệnh return thứ hai để chuyển đổi char thành đầu ra int (cho -1 byte).
Kevin Cruijssen

@KevinCruijssen Cả hai hoạt động tốt cảm ơn!
TheLethalCoder

1

Python 2 , 82 byte

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

Hãy thử trực tuyến!

Chứa một số ký tự ASCII không thể in được. flornquake lưu hai byte.


Điều này phá vỡ ví dụ cho n = 64, n = 65. Không chắc cách tốt nhất là gì để khắc phục điều đó, có lẽ lambda n:('%02d'%ord('...'[n/2]))[n%2], mặc dù có lẽ có điều gì đó tốt hơn.
flornquake

@flornquake chết tiệt, bạn nói đúng. Tôi đã viết một bản sửa lỗi ngắn hơn một byte. không thể nghĩ gì tốt hơn
Lynn

Tốt đẹp. Đây là một cái gì đó thậm chí còn ngắn hơn, dựa trên ý tưởng của bạn: TIO
flornquake

1

Brainfuck , 402 byte

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

Hãy thử trực tuyến!

Nhập dưới dạng mã ký tự (ví dụ: "A" = 65)

Hãy thử trực tuyến với đầu vào chữ số!

mã:

build a value list (3217411852... reversed and each digit incremented by four)
--->+>->+>>+>+>>->->+>+>+>-->->+>+>>>->->+>+>>+>+>->+>>+>+>>+>->->>-->>>->+>>
+>->->->->+>+>>->+>->+>>->>-->->>>->>>+>->->->->>->>+>-->+>+>+>>+>>>+>->->>+>
>->->+>+>->>+>->->>+>->->++[[>+++<-]<+++]>>+>->+>>+>->+>+>+>+>+>+>+>+>->+>->+
>>->->->>+>->->->->+>>->>>>+>+>+>>>+>>->+>>->+>->>->+>->+>>->>+>+>>+>+>+>->>>
+>+>>>>+>->+>+>->+>+>>>->>>+>>>>+>->>>+>>>>->->->->->>+

>,                      get input
[                       while input > 0
  <[-]                      set next previous cell = 0
  >[<+>-]                   copy input cell to that cell
  <-                        and decrement it
]
++++[<+++++++++++>-]    add 44 to it
<.                      print it

0

Neim , 45 byte

(₃β𝐒𝕣{𝕀𝔼𝐍N𝐭hj\CΓℚ𝕘𝕎𝐓φᚺ𝐲K$mᚠ"2𝕎oξ:{rm(𝕊/𝕚ᛂ𝐗})𝕕

neim không được làm cho số thập phân

Hãy thử trực tuyến!


0

Befunge , 105 byte

3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919&0g,@

Không hoạt động trên TIO vì nó dường như bao bọc các dòng bên trong ở mức 80 ký tự vì một số lý do. Bạn có thể làm cho nó hoạt động trên TIO bằng cách đặt từng chữ số trên một dòng mới và đặt &0g,@sau 3dòng đầu tiên.


1
Hoạt động tốt trên TIO với Befunge 98: tio.run/##Hcg7DsJAEATRqzgiwtJO9/w64yxIxhkiIeD0y0JUpXc/Hu/neezq/ của
pppery

0

JavaScript (ES6) + mathjs , 78 byte

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

Không được lập chỉ mục và hoạt động lên tới 128 số (đầu vào tối đa là 127).

Kiểm tra đoạn trích

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 (w / Công cụ tượng trưng), 89 82 byte

Bằng cách sử dụng Hộp công cụ tượng trưng, ​​câu trả lời này cung cấp đầu ra mà không mã hóa các giá trị của pi và e.

Như một phần thưởng thú vị, mã này làm đầu vào có thể lấy một chỉ mục hoặc một mảng các chỉ số và sẽ đồng thời cung cấp giá trị đầu ra cho tất cả các giá trị chỉ mục được cung cấp (ví dụ: cung cấp 1:10 sẽ xuất ra 10 giá trị đầu tiên).

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

(các dòng mới được thêm vào để dễ đọc, không bắt buộc để thực hiện nên không bao gồm trong số byte)

Thật không may, phiên bản Octave được TIO sử dụng không hỗ trợ các đầu vào tượng trưng cho vpachức năng, vì vậy không thể cung cấp tại liên kết TIO.

Trong MATLAB lập chỉ mục vào vectơ trả về từ một hàm là không thể giống như với Octave, điều đó có nghĩa đây là một chương trình đầy đủ chứ không chỉ là một hàm ẩn danh. Chương trình sẽ yêu cầu một đầu vào ntrong khi thực hiện - đây là một giá trị được lập chỉ mục cho phần tử nào được yêu cầu. Vào cuối chương trình, giá trị được in ngầm.

Đối với chương trình, chúng tôi sử dụng vpahàm cung cấp tới 51 vị trí thập phân giá trị của piexp(1)(e). Điều này được thực hiện một cách tượng trưng để cho phép độ chính xác vô hạn về mặt lý thuyết. Để mở rộng cho hơn 100 phần tử, chỉ cần tăng giá trị 51trong mã để tăng phạm vi.

Việc gói vpatrong char(tức là char(vpa(...))) là cần thiết để chuyển đổi đầu ra của hàm thành một chuỗi chứ không phải là một giá trị tượng trưng. Kết quả đầu ra là chuỗi:

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

Điều này bao gồm cả e và pi đến 51 vị trí thập phân - đủ để cho phép 100 chữ số đầu ra của chúng tôi (chúng tôi phải thực hiện thêm một chút dp so với yêu cầu để tránh in ra các giá trị làm tròn)

Để lập chỉ mục cho mớ hỗn độn này, ít nhất chúng ta cần loại bỏ các dấu thập phân để cả hai chuỗi chữ số tiếp giáp nhau. Ban đầu tôi đã sử dụng một thay thế regex đơn giản của bất cứ thứ gì không phải là một chữ số không có gì. Tuy nhiên tôi có thể lưu 7 byte bằng cách chỉ loại bỏ dấu thập phân bằng mã:

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

chuỗi kết quả là:

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

Điều này chứa tất cả các chữ số chúng ta cần với cả hai số pi và e trong các chỉ mục liên tiếp.

Sau đó, chúng ta có thể chuyển đổi chỉ mục được cung cấp sao cho số lẻ truy cập vào khối pi và số chẵn truy cập vào khối e bằng cách sử dụng phép tính:

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

Truy cập chỉ mục (những) đó (chỉ mục) trong chuỗi trên sẽ cung cấp đầu ra chính xác.


0

Tiên đề, 148 byte

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 dựa trên mảng. Các kết quả

(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 Sheets, 47 byte

Lưu ý: do độ dài của các hằng được lưu trữ trong Excel và Google Sheets, giải pháp này chỉ chính xác đến 20 chữ số, theo đó

Hàm bảng tính ẩn danh nhận đầu vào từ ô A1và xuất chữ số Pie đó sang ô gọi

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

Phiên bản mã hóa, 112 byte

Phiên bản này đáp ứng đầy đủ các đặc điểm kỹ thuật của chương trình, nhưng nói chung là không vui.

Hàm bảng tính ẩn danh trả về chữ số thứ n trong danh sách 1 chỉ mục của chiếc bánh

=Mid("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1

Chia cho 10 để thay đổi dấu thập phân (thay cho SUBSTITUTE) có thể lưu một vài byte trong giải pháp đầu tiên.
Wernisch

0

BFASM , 142 byte

stk 0
tổ chức 0
txt "3217411852982168523854859970943522338543662062483734873123759256062283614717957712649730999336795919"
trong_ r1
rcl r2, r1
ra r2

Lấy đầu vào là ký tự ascii, cho đầu ra dưới dạng chữ số.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.