ผสม pi และ e เพื่อทำพาย!


36

ทุกคนรู้ค่าคงที่ทางคณิตศาสตร์ของpiอัตราส่วนของเส้นรอบวงของวงกลมต่อเส้นผ่านศูนย์กลางของมัน

3.14159265358979323846264338327950288419716939937510...

คุณอาจจะยังไม่ทราบeคงที่ทางคณิตศาสตร์ฐานของลอการิทึมธรรมชาติ

2.71828182845904523536028747135266249775724709369996...

แต่ ... คุณรู้จักพายไหม? มันเป็นหนึ่งในค่าคงที่สำคัญที่สุด (สำหรับฉัน) มันคือตัวเลขของpiและe interleaved

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 ของพาย

ข้อมูลจำเพาะ

  • กฎระเบียบมาตรฐาน I / O ใช้
  • ช่องโหว่มาตรฐานจะต้องห้าม
  • โซลูชันของคุณจะต้องทำงานอย่างน้อย 50 หลักของแต่ละค่าคงที่ซึ่งหมายความว่าควรทำงานอย่างน้อย100 เงื่อนไขของลำดับ (โปรดอย่าพยายาม hardcode: 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
เมื่อเวลา 13:59 น. @txtechhelp ;)
WallyWest

คำตอบ:


12

Mathematica, 50 ไบต์

1 การจัดทำดัชนี

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

คุณอธิบายได้ไหมว่ามันทำงานอย่างไร
Stevoisiak

มันเป็นเรื่องง่าย. มันต้องใช้องค์ประกอบ 120 (5!) ของแต่ละองค์ประกอบและ riffle พวกเขา
J42161217

ดี! ฉันพยายามเอาชนะวิธีแก้ปัญหาของคุณRiffleแต่วิธีแก้ปัญหาของฉันสั้นลงหนึ่งไบต์: RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]&
Mark S.

สิ่งนี้ดูเหมือนจะไม่ทำงาน จะส่งกลับตัวเลขหลักเดียว
DavidC

@DavidC ใช่! .. "เอาท์พุทตัวเลขที่ n ของวงกลม" แน่นอน! ทำไมคุณถึงลงคะแนน ???
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 โดยทางโปรแกรมใน Taxi จะเป็นฝันร้ายถึงแม้ว่าฉันแน่ใจว่ามันสามารถทำได้ ดังนั้นจึงเป็นเรื่องไกลสั้นเพียง hardcode 100 หลักแรกในลำดับ รู้สึกว่ามันค่อนข้างถูก แต่เป็นรหัสรถแท็กซี่สั้นที่สุดที่ตรงกับความท้าทาย

มันยากรหัสลำดับเป็นสตริงใช้เวลาในnจากนั้นซ้ำnลงและลบตัวอักษรตัวแรกในสตริงในแต่ละครั้ง เมื่อn=0ออกอักขระแรก นี่คือหนึ่งดัชนี

Un-golfed / ฟอร์แมต:

'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

Haskell, 154 147 146 bytes, ไม่มีการชุบแข็งหรือใช้ของค่าคงที่ของอาคาร

วิธีนี้จะคำนวณeและpiโดยใช้ชุดอนันต์และเก็บไว้ในจำนวนเต็มคงที่ที่มีความแม่นยำตามอำเภอใจ ( Integerประเภทในตัวของ Haskell และ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

Ungolfed:

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 นอกขอบเขต

คำอธิบาย:

คำนวณปี่ใช้แบบไม่มีที่สิ้นสุดนี้ คำนวณอิเล็กทรอนิกส์โดยใช้คลาสสิกซีรีส์ปัจจัยผกผัน ตามทฤษฎีแล้วสิ่งเหล่านี้ไม่ใช่สูตรในอุดมคติที่จะใช้เนื่องจากมันไม่ได้กระชับในแง่ของจำนวน bytecount แต่พวกเขาเป็นเพียงคนเดียวที่ฉันสามารถหาที่แปรสภาพอย่างรวดเร็วพอที่จะทำให้การตรวจสอบความถูกต้องเป็นไปได้ ไม่ใช่คำศัพท์นับล้าน) ในเวอร์ชัน golfed eถูกคำนวณให้มีความแม่นยำสูงกว่าที่จำเป็นมากเพื่อลดจำนวน bytecount ค่าคงที่ทั้งสองจะถูกคำนวณเป็นตัวเลขมากกว่าเล็กน้อยเพื่อหลีกเลี่ยงข้อผิดพลาดในการปัดเศษ (ซึ่งเป็นสาเหตุของค่าที่ไม่ถูกต้อง)

ค่าคงที่จะคำนวณเป็นอัตราส่วนจำนวนเต็มความแม่นยำโดยพลการ ( Rational) แล้วคูณด้วย 10 ^ 50 เพื่อให้ตัวเลขที่จำเป็นทั้งหมดยังคงเหมือนเดิมเมื่ออัตราส่วนถูกแปลงเป็นจำนวนเต็ม (ความแม่นยำตามอำเภอใจ) ( Integer) นอกจากนี้ยังหลีกเลี่ยงปัญหาในการหลีกเลี่ยงจุดทศนิยมในการแทนค่าสตริงของตัวเลขซึ่งฟังก์ชันหรือดึงอักขระจาก


6

Python 2 , 88 ไบต์

-4 ไบต์ขอบคุณที่คิดฐานแปลง@EriktheOutgolfer

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

ลองออนไลน์!

Python 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*

ลองออนไลน์!

Python 2 , 114 ไบต์

ฉันคิดอย่างสุจริตว่าทางออกที่สั้นที่สุดคือการเข้ารหัสเนื่องจาก Python ไม่มีบิวด์อินที่มีประโยชน์

lambda n:"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

ลองออนไลน์!

Python 2 , 114 ไบต์

วิธีการแก้ปัญหาโดยเทียบเท่า@totallyhuman

'3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919'.__getitem__

ลองออนไลน์!


ก่อน downvoting ใช้เวลาในการค้นหาวิธีแก้ปัญหาที่สั้นกว่า
Mr. Xcoder


@tallyallyhuman Thanks
Mr. Xcoder

8
โซลูชันที่เทียบเท่าที่คุณแก้ไขคือรหัสที่เทียบเท่าจริง ๆ ไม่นับไบต์เทียบเท่า : P
สิ้นเชิงมนุษย์

1
@tallyallyhuman 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 builtin ...
Okx

@ Mr.Xcoder มี builtins นั่นเป็นเหตุผล
Erik the Outgolfer

@tallyallyhuman ไม่มันไม่ได้
Erik the Outgolfer

@Dorian เวอร์ชันของคุณใช้งานไม่ได้ คุณกำลังใช้รุ่นดั้งเดิม แต่žtไม่ใช่รายการที่ไม่มีขีด จำกัด ในตอนนั้นซึ่งเป็นสาเหตุที่Okxใช้ตัวเลข 100 ตัวแรกของ e ในโปรแกรมของเขา การเปลี่ยนเป็นเวอร์ชันใหม่ของ 05AB1E (ซึ่งทั้ง pi และ e เป็นรายการที่ไม่มีที่สิ้นสุด) ยังคงไม่ทำงานในเวอร์ชันปัจจุบันของคุณเนื่องจาก zip จะสร้างคู่และJoin จะเข้าร่วมคู่เหล่านั้นแทนทุกอย่าง 9 ไบต์ยังคงเป็นไปได้ด้วยการแทนที่Jด้วยSในเวอร์ชันใหม่ซึ่งSทำให้รายการของตัวอักษร / ตัวเลขแบนราบ
Kevin Cruijssen

5

Python 3 , 83 80 ไบต์

0 การจัดทำดัชนี

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

ลองออนไลน์!

มีอักขระที่ไม่สามารถพิมพ์ได้บางตัวในเบราว์เซอร์

สิ่งนี้ทำงานได้โดยการสร้าง tuple (32, 17, 41, 18, 52, ...)จากรหัส ASCII ของตัวละครในการทดสอบ hardcoded tuple ถูกแปลงเป็นสตริง'3217411852...'ซึ่งเราเลือกตัวเลขที่ถูกต้อง


4

หลายภาษา, 108 ไบต์

n=>"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

ทำงานใน:

  • C #
  • JavaScript

ผมคิดว่านี่เป็นเวลาที่สั้นที่สุดที่คุณสามารถทำได้ใน C # เห็นมันเป็น 252 ไบต์เพื่อหาสิ่งที่ทศนิยมชับของปี่


JS polyglot :-)
Arnauld

@Arnauld อัปเดต :)
TheLethalCoder

7
นี่ไม่ใช่ Java Polyglot! คุณไม่สามารถจัดทำดัชนีเป็นวัตถุที่ไม่ใช่แถวลำดับใน Java
Roman Gräf

1
เทคนิคนี้ใช้งานได้ แต่ฉันลงคะแนนเพราะ) ไม่น่าสนใจและข) น่าเบื่อและไม่สำคัญ
HyperNeutrino

2
@HyperNeutrino เป็น C # และ JavaScript เมื่อใดที่เคยมีการแข่งขัน และน่าเบื่อและไม่สำคัญ แต่คุณอยากให้ฉันตอบ 500 ไบต์ใน C # ที่ฉลาดหรือไม่? ไม่เพราะนั่นขัดแย้งกับจุดที่ 1 นี่คือสั้นที่สุดเท่าที่จะได้รับ ...
TheLethalCoder

4

Java 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 การจัดทำดัชนี

-9 และ -5 ไบต์ขอบคุณที่@Nevay

  • โซลูชันของคุณจะต้องทำงานอย่างน้อย 50 หลักของแต่ละค่าคงที่ซึ่งหมายความว่าควรทำงานอย่างน้อย100 เงื่อนไขของลำดับ (โปรดอย่าพยายาม hardcode: P)
  • ฟังก์ชันในตัวที่คำนวณลำดับนี้ได้รับอนุญาตแต่รวมถึงการแก้ปัญหาที่ไม่ต้องพึ่งพาในตัว

คุณได้ขอมัน .. ;)

Java ในตัวMath.PIและMath.Eเป็นคู่ที่มีความแม่นยำสูงสุดเพียง 16 ดังนั้นเราจึงจะมีการคำนวณค่าใช้ทั้งตัวเองและjava.math.BigInteger / หรือ ตั้งแต่ฉันได้แล้วPI คำนวณมาก่อนในความท้าทายอื่นผมเคยใช้รหัสเดียวกันโดยใช้ อัลกอริทึมสำหรับหมายเลขของออยเลอร์ใช้อย่างไร ที่เกิดและจึง: และjava.math.BigDecimal
BigIntegerBigDecimal
pe31415...2.718...

อาจกอล์ฟได้โดยใช้เพียงBigDecimalแต่ให้คำตอบไม่ถูกต้องบางอย่างสำหรับ PI ดังนั้นตอนนี้ผมใช้ทั้งสองและBigDecimalBigInteger

คำอธิบาย:

ลองที่นี่
พิสูจน์ผลลัพธ์ที่ถูกต้องสำหรับ 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

ไม่แน่ใจว่าจะช่วยคุณได้หรือไม่ แต่อัลกอริทึม C #ของฉันสำหรับการคำนวณ pi มีขนาด 8 ไบต์ที่สั้นกว่ารุ่น Java ของคุณ
TheLethalCoder

หมายเหตุแม้ว่าจะได้ไปทำงานอย่างถูกต้องสำหรับการเปลี่ยนแปลงคำถามนี้(d+=2)ไป++dและเพียงแค่return p%10+1 return p%10
TheLethalCoder

@TheLethalCoder อย่าลังเลที่จะรับคำตอบ C # สำหรับความท้าทายนี้ :) แม้ว่าคุณจะต้องคำนวณเลขออยเลอร์ด้วย คำตอบของฉันคือครับสำหรับ lolz แล้วตั้งแต่ hardcoding การส่งออกจะสั้นต่อไป ..
เควิน Cruijssen

1
You've asked for it.. ;)เฮ้ฉันชอบคนแรกของคุณดีกว่า ฉันได้รับคำตอบที่ยากกว่าที่คิดไว้ ...
มนุษย์

1
คุณสามารถบันทึก 9 ไบต์ในคำตอบของการคำนวณของคุณโดยใช้charAt(n+1>>1)5 "..."::charAtไบต์ในรุ่นฮาร์ดโค้ดของคุณโดยใช้วิธีการอ้างอิง
Nevay

3

เมล็ดพันธุ์ 6015 ไบต์

105 41100973201674650461227976639700390615120600528953176107701316721890649738810349651490948904154731057172335535600875054878204557287393379815378680878571406244365932330202793040308312687924242319799562985464135998860369933720376853281630432469462831217924775601393232895404104191613314969008627719099002734936685651970933027922574843126481552407811220371545812798263882325951724505132794956253992779856191832909434513683936955184871247159313261417328850445886987045814618325821125417040265540589403338721758954467831926977078444612065747526326682314711350486782090838673475876960125016098416460032667015813053483457246043486676622061645094043655351781242050448580132075920324099742699960838361839038297355120817832056960516761862493176616153258281345538652844974811030063414112136642097000574165433957710342430709643110444042577685157477268110199017600011209827070311299268347100419887111107237908884608557593677163764286026624394674781868689858494991328505977301270068505397030743037416430245399054325956185200430657008806539374392625804513081295070438243600044274289109395357299275275193717501822777898664715885427884193864182834402097958423697356485767670945673525604620701482288023981110598866625872386643941558021439168402392304238271452444124214301243311025121833097491087918320170873313832323794851508364788578530614246140801266858481189449278157296335592848066512127882306035576754122325822200069362884409931190620435627809384380203617488253034370361172908245852012086081807945576657014184275798330804532115103840313004678040210379846666674881048346897213048386522262581473085489039138251061251160730845385869281787222083186331344552658814775998639661361866503862291670619153718574270905089351133527806484519543645501497150560454761284099358123613642350160410944676702481576280832672884549762767667090615809061739499629798396737503512011645776394176807352443544839957773371384141101627375926404212619777658374366513665083032140398814384622434755543347503025479743718569310129255927244046638238401670388409731849963600790867434678993019370132638962549859363736476668247251402420832876258626149639101811361047924632565285870213656416957893835899254928237592711662454838295046528789720146967061486405916116778722736283489123195985053535189375957277052428901645131462087039117212488839670735246752589931585405440449333046667938628384693216121067951290025349082277568986632815062532963505690244579740140120806885104683071514922412748240497612209609661707922754236180441892543545377867355182682381812487973645406703590150722720330526173957597156314579144484166520730013480681064941752984345205140917291104888971742824066713606933406657345121342075268990055328274845008936364502884461548416337689565392911129757761902576946104722487260155373897552821908338346641549478063474748830482136404008215583192489320750526753663943267086203954602839906762640389978523894333743126288529975769945319614142422443068420170103245659109689433597701350198280212250954698442638475209618790055335813263132865176791663235801963797561493995544185124734214257034901773781134331460320221759556924556747571745834582344275416625351302153332814233497096345055392255809024712740720006219615340819493781244665414077298346378966540544979367367978334759985048507214749726072645238624803791884339024844989975370042133733339339038567691571361407296615851372112592532463329778465699812822089846474961581380707849259093905314170108054540333209088059730272087864344697983074458088984533095183089310714804468718319244214535941276969904638763288063417624586766891798378622613765728303031397998644194508610598078718347204813844240434145846888722334194516524032354042557957058092854659539699310565707914118281251563405735083553254856313838760124953245573676126601070861004186509621892263623745673900572829301771299438501543213489182375655869072568437776298051260531944785904157204006430131566234389896821642210616326951771496269255716808352415001187083781128619236455170025989777631182990311607133740812107138446626302353752098982590371714623080450836912706275397973009559314275978915463843159370230629290376520494894845680706499809017211545204670148071902560908658269183779180493590025891585269507219866461550160579656755846447951259951641828495549544791046179035585611272240116822105364823082512055639047431280117805724371019657801828634946412396263504315569042536942671358095826696817513115447079645898107923447321583282886740680340887700198072304400536529418546232473450984945589794448490331085275232352881571706521961358975744067916422124670374397682877259664913100427726059898474024964867713698696116581478101206003313106174761699804016604950094008714907179862448792216891309734208815522069346791369498202430302292199779590583788518283934542807403049256936179914953814019565550264909025345322516061595136601312434888871667940394250767164496543418483237896796108764367721411969986710930448108645039275082356457263454340220118278471652962484104099512207532103709146426640958406853240342441810465024550617909657901698718289260589269758398513490424434162831332785821428006396653475356712733072469052427934231406388810607688824035522285626563562286337967271308076321307276537761026788485320280603487776428017017298356181654076403306265118978333909378403193559129146468182910851996415072056976175613473847242292911071040966109905552914332596680497156169349277079292398091020434667210493868422848588893205157133171899819212153010393580099455957808703428739456223073813663954919146593698106305501988107196273527346690785289909397140611634970017071011599022429384594426022933102487171920965595473754661194965266230932928905708783854897164127767575976566931916632077914904360565095752466049885656187054491320449776951484812738806536727562344348761718424255018794271994537719709226236497935053971406685810778014002594041715040546776952342303797267458880802314841325359844565479173256964507237937290466116935912176054052746039378370966040054779443633371806403649852746347690237831260027483859907620684197542069045517397230169577918374265220969534695931904

เมล็ดพันธุ์เทียบเท่ากับคำตอบ Befunge ของฉัน อย่างที่ฉันบอกไปแล้วโปรแกรม Befunge ที่เอาต์พุตนี้ไม่ทำงานบน TIO เนื่องจาก TIO ดูเหมือนจะมีการตัดบรรทัดภายในที่ 80 อักขระ


อย่างไร? เพียงแค่ ...
NieDzejkob


3

Excel, 113 ไบต์

1 การจัดทำดัชนี

=MID("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1)

PI()มีความแม่นยำถึง 15 หลักเท่านั้น EXP(1)สำหรับที่คล้ายกัน

วิธีการแก้ปัญหา60 42 ไบต์ที่ทำงานสำหรับการป้อนข้อมูล<=30 (-18 ไบต์ขอบคุณ @Adam)

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

แนวคิดพื้นฐานในแนวทางที่สองของคุณจะสั้นลงถึง 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

Japt , 55 ไบต์

" ®v4bØUî6UcF^#ß&6$Îø%\"Wí;<>0^GO9G1c]$O;"cs gU

ทดสอบออนไลน์! มี unprintables ไม่กี่

ทำงานโดยแทนที่อักขระแต่ละตัวในสตริงด้วย charcode จากนั้นส่งคืนตัวเลขที่ดัชนีที่ถูกต้อง สตริงนี้สร้างขึ้นโดยโปรแกรมนี้:

r"..(?=[^0]0)|25[0-5]|2[0-4].|1..|.(?=[^0]0)|..|."_n d

ทดสอบออนไลน์!


2

เมล็ดพันธุ์, 5852 5794

ตามคำตอบของ TehPers Befunge

1051130021648715907393149878290493079600376561988348664272369051219541158034251323778110172612675089859184605166991106040693833909592598132115295033728752738087105881243462563076466678196376225832661747114302365429787133716511111381612588140144307910362782924144996564529411691568302571546828919454271683233497896594149189544327214969302848984257909609092418942847813158570493297692245428646803536815345759334224247677074872671057296478697076157019699466324478990259351466108726578472175001474585821629778406880297836753303012207209976229264609834293181367664486642493394085473509253813676093779567738697465957519812706192139261472118908699638816640825554051850436762061721281771892466822470585742923158999350909054375916612667405594051622229969696110285582900916410099224974902720736021096981441362371398922887585642863359978062601767338412679956208026294953110185271056006145171920926497396179933553547647876354874445336583594285656870801545177578902705927733720249211636847884869491097054175976937629709200212494761217184873108852140655722895359613462156833646123152648220793295854627649452190956799160703532861477096009725706141202331131287901266622861560576869037209421378739125115765163010112273561384890274706972479335859548424507413589440122160717697618157336618754196528390529316634155057447126317467878320143220148685911507025731721669456692292309133633447284353130542004299981319048073637696567634889623949341630372505055435189663767044165063763216111834588696399179737702861529836947970901482712510136315042152110633215913241916694919566433112405210063414042670097562256073600916103886503591248191758835092924394147776204171675226850914902590401360360345796925181247981647089261884952039081268986586818659090505317955579671089885915745568661758883469031230794272571159213300281445730703294269295310767401339422952480777920786878410780792687195268799097885426801795242758273587841272731685278721369746727313447085996142152811199340656395207452343492937579702451111716453371016654791322834865918860033642314402995240481293652425792697358895577606699947511030416728684352022506710677976841690749387202992493347056114389784733211172448656007595582911222364847293116425714996343958156522448560363063094260073906846664112391722958505451464414025605603413323283807093107521955579711235903403153357003170132938512689946882757999117710160645821945148763813674548797981224375547254576063310479473749044201972863935442758458424285806147218666471747061869918574545072745631758049982372007444866300485095061433951914878373501952670216546435388818497342311417254246013304856715094953051481317438104933875171470343900106719705171102058673610594748846178562080370992488881764909402902065625464750558527389775735939044400858705229893243673486621988009838791971714603625037310885148140796813757120291067372196872928228321095156712054303101901959874384063672886495472796070113365603843687513322867176197917489855537726934095360491472497352567147140246395682503059404971449739625647398820598964158265302668783916501984956044969021302601920487717382879106303683795359905325347814473318519391344565458920270463279174784746656360314070464241666622240210385245184959282222666398870656274940629675453574246097799383361429014800618720780346294542185892116417842240524776835458087900018007896901140383243611793705883547791450682392261960643824271328189332116466519255567441515615925840284456154022304291978218634565379575148642711337622789721842048696443945213454162713556316912301346193615227854869318871089808249776555077834342492281888561676171087168150941237306007109521081900169693331625918138699682645157924632842546989812618292449480799580909720292280095095845962850721356554807680991288722147671740885576811339492549454926901594927338274410385863276725958781460924134466358260089533908525106740467122470973368676988277207568882122479840074670300214980511007665457235218290742394089204192282508491125777180151491866961638111244962953268398339686189772372983926068579350047402754803068232034594024872791141428095120311259087973136353149728638143035136784730999270266072749004567217555438270988124997549762230020689881669285499865374963053282530118570884108038975805335341098720577305266629567047445192403700472887794782423940658412176424370062158626834653405675401415679083822191617061925174149189203359499283160374801737260780407460559147326758994495549579747033361234471750470244513311080274649191860724511086222353696966556035904101416366866518427071604705222938635947781869520181137451408849640159586041113639598272540062185768190959707775362176381804238896341317485410279831458927597060094913931822437950489034755418876566165098609145551163170170060968550804192429683076682433548504113044161906874992120619724109268394986529182050977866104283639955069424323124118234270471868688405770066267298550544345355480568344482162465184049105391961294335245926910436280167548428908725073049063187423431751542064521517069452498182346407984197390998799924644160478679731476796691938148057603728267749331459031937823996495889234787060791079241854542581243078812931046333013380737766914161425371301455762684652883345176576166320850926855173197613536554369628772428747263956045786416295429184651985570482338242016559363725421100270243627030197439290918962948652873397874243832067459791837014394278403085907234616003231621600132126403225123227458214686006897240158060744989458215243787817148717936756981074208678765977744940577875579654698779849605118845010395906232293740180888137656291524050590071724242335942378834532707622396324405477279768052696927856056064019532570357101573277570040254706775462396160275876038886428146097798897998315086627358220951838049046100218938610753230860169099104474379950181692561834872540511195903774693113510283120187768500261160296892119883913289017641545057765550924909632887927659777449405778755796546987798496051188450103959062322937401808881376562915240505900717242423359423788345327076223963244054772797680526969278560560640195325703571015732775700402547067754623961602758760388864281460977988979983150866273582209518380490461002189386107532308601690991044743799501816925618348725405111959037746931135102831201877685002611602968921198839132890176415450577655509249096328879276597774494057787557965469877984960511884501039590623229374018088813765629152405059007172424233594237883453270762239632440547727976805269692785605606401953257035710157327757004025470677546239616027587603888642814609779889799831508662735822095183804904610021893861075323086016909910447437995018169256183487254051119590377469311351028312018776850026116029689211988391328901764154505776555092490963288792

งานที่ดี! ฉันอยากรู้อยากเห็นเกี่ยวกับวิธีที่คุณเล่นกอล์ฟ
TehPers

2

Malbolge Unshackled (ตัวแปรการหมุน 20 trit), 3,64E6 ไบต์

ขนาดของคำตอบนี้เกินขนาดโปรแกรมที่โพสต์ได้สูงสุด (eh) ดังนั้นรหัสจึงอยู่ในที่เก็บ GitHub ของฉัน (หมายเหตุ: อย่าคัดลอกรหัสโดยใช้ CTRL + A และ CTRL + C เพียงคลิกขวาแล้วคลิก "บันทึกองค์ประกอบปลายทางเป็น .. ")

วิธีการใช้งานนี้

นี่อาจเป็นส่วนที่ยุ่งยากเนื่องจากล่ามที่ไร้เดียงสาของ Haskell จะใช้เวลานานในการรันสิ่งนี้ TIO มีล่าม Malbogle Unshackled ที่ดี แต่น่าเศร้าที่ฉันไม่สามารถใช้งานได้ (ข้อ จำกัด )

ที่ดีที่สุดที่ฉันสามารถหาเป็นคงที่ 20 trit หมุนกว้างตัวแปรที่มีประสิทธิภาพดีมาก, การคำนวณ (สวยมาก) ทันที

เพื่อให้ล่ามเร็วขึ้นฉันได้ลบเช็คทั้งหมดจาก Matthias Lutter's Malbolge Unshackled interpreter

#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 คำตอบการจัดทำดัชนีในปัจจุบันของคุณคือ 1 การจัดทำดัชนีที่มี. <.)
เควิน Cruijssen

อืม .. คุณยังสามารถลบ,ตั้งแต่ซิปไม่นี้โดยปริยาย แต่ฉันเห็นมันเป็นกว่าเกือบตรงเช่นเดียวกับคนอื่น ๆ คำตอบที่ 10 ไบต์ ..
เควิน Cruijssen

1

Python 3 + SymPy , 109 ไบต์

ดัชนี 0 ลองออนไลน์!

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

เอาชนะ hardcoding 5 ไบต์ !! แต่อาจจะดีกว่า แต่การตี hardcoding ทำให้ฉันรู้สึกดี :)


1

Pyth, 35 ไบต์

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

ชุดทดสอบ

เนื่องจาก Pyth ไม่มีค่า pi และ e ที่เที่ยงตรงในตัวฉันจึงคำนวณค่าเหล่านั้นโดยตรง

การคำนวณ pi:

u+/*GHhyHyK^T99rJ^2T0

2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))การใช้งานนี้เกิดขึ้นอีกต่อไปอย่างต่อเนื่องส่วนการคำนวณปี่: ผมได้รับมันจากอีกคำตอบ PPCG มันมาในสมวันที่ 23-25 ที่นี่

ฉันคำนวณมันจากภายในสู่ภายนอกลบล้างข้อกำหนดทั้งหมดที่นอกเหนือจากที่ 1024 เนื่องจากข้อกำหนดในภายหลังมีผลกระทบต่อจำนวนเล็กน้อยและฉันรักษาความแม่นยำ 99 หลักเพื่อให้แน่ใจว่า 50 ตัวแรกนั้นถูกต้อง

กำลังคำนวณ e:

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 เป็นสายอักขระก่อนจากนั้นจะผ่านการวนรอบเพื่อเชื่อมโยงตัวเลข ที่นี่ c คือพาย p คือ pi และ e คือ e

ฉันแบ่งมันออกเป็นหลาย ๆ บรรทัดเพื่อให้สามารถอ่านได้ แต่รหัสที่แท้จริงคือทั้งหมดในหนึ่งบรรทัดที่มีระยะห่างน้อยที่สุด


ยินดีต้อนรับสู่เว็บไซต์!
DJMcMayhem

ขอบคุณฉันได้อ่าน Code Golf มาระยะหนึ่งแล้วในที่สุดก็ตัดสินใจยอมแพ้
a13a22

มีปัญหาบางอย่างซึ่งส่วนใหญ่ดูเหมือนจะไม่มีการป้อนข้อมูล คุณจำเป็นต้องปรับเปลี่ยนการทำงานของคุณเพื่อให้ได้จำนวนเต็มnมันจะสร้างnthตัวเลขของลำดับพาย นอกจากนี้คุณยังสามารถลดจำนวนไบต์โดยลดชื่อตัวแปรของคุณให้เป็นตัวละครตัวเดียว
Taylor Scott

ขออภัยฉันแก้ไขชื่อตัวแปรสำหรับจำนวนไบต์ สำหรับหลักที่ n ฉันควรนิยาม n =? หรือฉันควรป้อนข้อมูลผู้ใช้หรือไม่
a13a22

ดูเหมือนว่าคุณจะคิดออกมาแล้ว แต่คุณควรแจ้งให้ผู้ใช้ป้อนข้อมูลอย่างไรก็ตามไม่จำเป็นต้องมีการจัดรูปแบบใด ๆ ที่แนบมากับพรอมต์นั้นดังนั้นคุณจึงใช้input('')แทนinput('n')
Taylor Scott

1

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

บันทึก 5 ไบต์ด้วย @Kevin Cruijssen

ไม่มีลิงก์ 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();
        }
    }
}

คุณสามารถทิ้งวงเล็บไว้x[j++]/eที่c=(x[j++]/e)*n-2 ไบต์ นอกจากนี้ฉันคิดว่าคุณสามารถลบทั้ง+""สองคำสั่ง return และคืนค่า int แทน string และเพิ่ม-48คำสั่ง return ที่สองเพื่อแปลงถ่านไปเป็นเอาต์พุต int (สำหรับ -1 ไบต์)
Kevin Cruijssen

@KevinCruijssen ทั้งสองทำงานได้ดีขอบคุณ!
TheLethalCoder

1

Python 2 , 82 ไบต์

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

ลองออนไลน์!

มีอักขระ ASCII ที่ไม่สามารถพิมพ์ได้บางส่วน flornquake บันทึกสองไบต์


ตัวแบ่งนี้เช่นสำหรับ n = 64, n = 65 ไม่แน่ใจว่าวิธีที่ดีที่สุดในการแก้ไขปัญหาคืออาจlambda n:('%02d'%ord('...'[n/2]))[n%2]มีบางสิ่งที่ดีกว่า
flornquake

@flornquake darn คุณพูดถูก ฉันเขียนโปรแกรมแก้ไขที่สั้นลงหนึ่งไบต์ ไม่สามารถคิดอะไรได้ดีกว่า
ลินน์

ดี นี่คือบางสิ่งที่สั้นกว่านี้ตามความคิดของคุณ: TIO
flornquake


0

Befungeขนาด 105 ไบต์

3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919&0g,@

ใช้งานไม่ได้กับ TIO เนื่องจากดูเหมือนว่าจะตัดบรรทัดภายใน 80 อักขระด้วยเหตุผลบางอย่าง คุณจะได้รับการทำงานใน TIO โดยวางแต่ละหลักในบรรทัดใหม่และมี&0g,@หลังจากที่3ในบรรทัดแรก


1
ใช้งานได้ดีกับ TIO ด้วย Befunge 98: tio.run/##Hcg7DsJAEATRqzgiwtJO9/w64yxIxhkiIeD0y0JUpXc/Hu/neezq/…
pppery

0

JavaScript (ES6) + mathjsขนาด 78 ไบต์

(n,m=math.create({number:"BigNumber"}))=>`${n%2?m.e:m.pi}`.match(/\d/g)[n/2|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 (w / กล่องเครื่องมือสัญลักษณ์), 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 ไม่รองรับอินพุตสัญลักษณ์ในvpaฟังก์ชันดังนั้นจึงไม่สามารถให้ที่ลิงก์ TIO

ในการทำดัชนี MATLAB ไปสู่เวกเตอร์คืนจากฟังก์ชันนั้นเป็นไปไม่ได้ในลักษณะเดียวกับ Octave ซึ่งหมายความว่านี่เป็นโปรแกรมเต็มรูปแบบแทนที่จะเป็นเพียงฟังก์ชันที่ไม่ระบุตัวตน โปรแกรมจะขออินพุตnระหว่างการดำเนินการ - นี่เป็นค่าดัชนีหนึ่งรายการสำหรับองค์ประกอบที่จำเป็น ในตอนท้ายของโปรแกรมค่าจะถูกพิมพ์โดยปริยาย

สำหรับโปรแกรมเราใช้vpaฟังก์ชั่นที่ให้ทศนิยม 51 ตำแหน่งด้วยค่าpiและexp(1)(e) สิ่งนี้ถูกทำขึ้นในเชิงสัญลักษณ์เพื่อให้มีความแม่นยำไม่ จำกัด ทางทฤษฎี หากต้องการขยายองค์ประกอบมากกว่า 100 รายการเพียงแค่เพิ่มค่า51ในรหัสเพื่อเพิ่มช่วง

ห่อvpaในchar(คือchar(vpa(...))) มีความจำเป็นต้องแปลงการส่งออกของฟังก์ชั่นที่จะสตริงมากกว่าค่าสัญลักษณ์ ผลลัพธ์ที่ได้คือสตริง:

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

ซึ่งรวมทั้งทศนิยม e และ pi ถึง 51 - เพียงพอที่จะอนุญาตให้แสดงผล 100 หลักของเรา (เราต้องทำ dp พิเศษเพิ่มเติมเล็กน้อยกว่าที่ต้องการเพื่อหลีกเลี่ยงการพิมพ์ค่าที่ปัดเศษ)

ในการจัดทำดัชนีในระเบียบนี้เราต้องกำจัดทศนิยมอย่างน้อยเพื่อให้สายตัวเลขทั้งสองต่อเนื่องกัน เดิมทีฉันใช้การแทนที่ regex อย่างง่ายของสิ่งใดก็ตามที่ไม่ใช่ตัวเลขที่ไม่มีอะไรเลย อย่างไรก็ตามฉันสามารถบันทึก 7 ไบต์โดยการกำจัดจุดทศนิยมโดยใช้รหัส:

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

สตริงผลลัพธ์อยู่ในขณะนี้:

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

สิ่งนี้มีตัวเลขทั้งหมดที่เราต้องการด้วยทั้ง pi และ e chunks ในดัชนีติดต่อกัน

จากนั้นเราสามารถแปลงดัชนีที่ให้มาเพื่อให้จำนวนคี่เข้าถึง pi chunk และแม้กระทั่งตัวเลขเข้าถึง chunk 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

เวอร์ชั่น Hardcoded, 112 ไบต์

รุ่นนี้เป็นไปตามข้อกำหนดของโปรแกรมอย่างสมบูรณ์ แต่โดยทั่วไปจะไม่สนุก

ฟังก์ชั่นแผ่นงานที่ไม่ระบุชื่อที่ส่งกลับตัวเลขที่ n ในรายการของดัชนี 1พาย

=Mid("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1

การหารด้วย 10 เพื่อเลื่อนจุดทศนิยม (แทน SUBSTITUTE) สามารถบันทึกสองสามไบต์ในโซลูชันแรก
เวอร์นิช

0

BFASM , 142 ไบต์

stk 0
org 0
txt "32174118529821685238548599709435223385436620624837348731237592560612360925606228489" ที่ txt "32174118529821685"
in_ r1
rcl r2, r1
ออก r2

รับอินพุตเป็นอักขระ ascii ให้เอาต์พุตในรูปของดิจิต


0

brainfuck , 5971 ไบต์

การแปลโดยตรงของคำตอบ bfasm อื่นของฉัน

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

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.