Campur pi dan e untuk membuat pai!

37

Semua orang tahu pi konstanta matematika, rasio keliling lingkaran terhadap diameternya.

3.14159265358979323846264338327950288419716939937510...

Anda mungkin juga tahu e konstan matematika, dasar dari logaritma natural.

2.71828182845904523536028747135266249775724709369996...

Tapi ... apakah kamu tahu pie ? Ini adalah salah satu konstanta terpenting (bagi saya). Ini adalah digit pi dan e yang disisipkan.

32.1741185298216852385485997094352233854366206248373...

Sebagai ekspansi desimal:

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

Ini adalah urutan OEIS A001355 .

KATA KUNCI: bukan, basis, bodoh , mudah

Itu adalah urutan yang sangat bodoh.

Tantangan

Tulis sebuah program / fungsi yang mengambil bilangan bulat n-negatif dan mengeluarkan digit n pie .

Spesifikasi

  • Aturan I / O standar berlaku .
  • Celah standar yang dilarang .
  • Solusi Anda harus bekerja untuk setidaknya 50 digit dari setiap konstanta yang berarti harus bekerja setidaknya untuk 100 syarat urutan (tolong, cobalah untuk tidak hardcode: P).
  • Output untuk 2 atau 3 bukan titik desimal .
  • Solusi Anda dapat diindeks 0 atau diindeks 1 tetapi harap tentukan yang mana.
  • Tantangan ini bukan tentang menemukan pendekatan terpendek dalam semua bahasa, melainkan tentang menemukan pendekatan terpendek dalam setiap bahasa .
  • Kode Anda akan dinilai dalam byte , biasanya dalam pengkodean UTF-8, kecuali ditentukan lain.
  • Fungsi built-in yang menghitung urutan ini diperbolehkan tetapi termasuk solusi yang tidak bergantung pada built-in dianjurkan.
  • Penjelasan, bahkan untuk bahasa "praktis", dianjurkan .

Uji kasus

Ini adalah 0-diindeks.

Input   Output

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

Dalam beberapa format yang lebih baik:

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
benar-benar manusiawi
sumber
8
Menurut OEIS, kata kunci dumbberarti tidak menarik tanpa properti yang spesial.
Okx
1
@Downvoter Ada alasan, mungkin?
totallyhuman
27
Orang bisa berargumen bahwa hasilnya pei, bukanpie
Zaid
1
Saya tidak melakukan pemungutan suara, tetapi mungkin karena Anda tidak menanyakannya pada 3/14;)
txtechhelp
1
Pukul 13:59, @txtechhelp? ;)
WallyWest

Jawaban:

12

Mathematica, 50 byte

1-diindeks

(Riffle@@(#&@@RealDigits[#,10,5!]&/@{Pi,E}))[[#]]& 
J42161217
sumber
Bisakah Anda menjelaskan cara kerjanya?
Stevoisiak
mudah. Dibutuhkan 120 (5!) Elemen dari masing-masing dan riffle mereka
J42161217
Bagus! Saya mencoba untuk mengalahkan solusi Anda dengan menghindari Riffle, tetapi solusi saya muncul satu byte pendek: RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]&
Mark S.
Tampaknya ini tidak berfungsi. Ini mengembalikan satu digit.
DavidC
@ DavidvidC Ya! .. "menghasilkan digit pai ke-n" Tepat! kenapa kamu downvote ???
J42161217
9

Haskell, 154 147 146 bytes, TANPA HARDCODING ATAU PENGGUNAAN KONSTAN BUILTIN

Solusi ini menghitung e dan pi menggunakan seri infinite dan menyimpannya dalam bilangan bulat fixed-point presisi sewenang-wenang ( Integertipe bawaan Haskell dan Rationalekstensinya).

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

Tidak Disatukan:

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)

Diindeks 0. Akurat untuk input 0-99, tidak akurat untuk input 100-101, di luar batas sebaliknya.

Penjelasan:

Hitung pi menggunakan seri tak hingga ini . Menghitung e menggunakan seri faktorial invers klasik . Secara teoritis ini bukan formula ideal untuk digunakan, karena mereka tidak terlalu singkat dalam hal bytecount, tetapi mereka adalah satu-satunya yang saya dapat menemukan bahwa konvergensi cukup cepat untuk membuat verifikasi akurasi layak (jumlah lain diperlukan ratusan ribu jika bukan jutaan istilah). Dalam versi golf, e dihitung dengan presisi yang jauh lebih tinggi dari yang diperlukan untuk meminimalkan bytecount. Kedua konstanta dihitung sedikit lebih banyak dari yang diperlukan untuk menghindari kesalahan pembulatan (yang bertanggung jawab atas canggung nilai yang salah).

Konstanta dihitung sebagai rasio integer presisi sewenang-wenang ( Rational), kemudian dikalikan dengan 10 ^ 50 sehingga semua digit yang diperlukan tetap utuh ketika rasio dikonversi ke integer (presisi sewenang-wenang) ( Integer). Ini juga menghindari masalah menghindari titik desimal dalam representasi string angka, yang fungsinya secara alternatif menarik karakter.

ApproachingDarknessFish
sumber
8

Taksi , 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.

Cobalah online!

Mencoba menghitung pi atau e secara terprogram dalam Taxi akan menjadi mimpi buruk, walaupun saya yakin itu bisa dilakukan. Dengan demikian, jauh lebih pendek untuk hanya melakukan hardcode 100 digit pertama dalam urutan. Rasanya cukup murah tapi jelas kode taksi terpendek yang memenuhi tantangan.

Hard-mengkode urutan sebagai string, menerima n, kemudian beralih nke bawah dan menghapus karakter pertama dalam string setiap kali. Kapan n=0, menampilkan karakter pertama. Ini satu-diindeks.

Tidak di-golf / diformat:

'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.
Toast insinyur
sumber
6

Python 2 , 88 byte

-4 byte berkat ide konversi dasar dari @EriktheOutgolfer .

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

Cobalah online!

Python 2 + sympy , 92 byte

Diindeks 0. Terima kasih kepada Rod untuk mengingatkan saya untuk beralih from sympy import*, yang sebelumnya saya lupa.

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

Cobalah online!

Python 2 , 114 byte

Jujur saya pikir solusi terpendek adalah hardcoding, karena Python tidak memiliki built-in yang berguna.

lambda n:"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

Cobalah online!

Python 2 , 114 byte

Solusi Setara dengan @totallyhuman .

'3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919'.__getitem__

Cobalah online!

Tuan Xcoder
sumber
Sebelum downvoting, luangkan waktu Anda untuk mencari solusi yang lebih pendek.
Tn. Xcoder
@totallyhuman Terima kasih
Tn. Xcoder
8
Solusi setara yang Anda edit sebenarnya kode yang setara, bukan jumlah byte yang setara. : P
totallyhuman
1
@totallyhuman Lol Saya melihat komentar Anda dan memahaminya tetapi saya benar-benar lupa untuk memperbaikinya, karena saya tertawa tentang kesalahan saya sendiri. Terima kasih telah mengedit!
Tn. Xcoder
5

05AB1E , 10 byte

žsтžtøJþsè

Penjelasan:

ž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

Diindeks 0.

Cobalah online!

Okx
sumber
1
Terlalu banyak 05AB1Es ...: P
Mr. Xcoder
@ Mr.Xcoder Nah, 05AB1E adalah bahasa dengan pi dan e builtin ...
Okx
@ Mr.Xcoder Ada builtin itu sebabnya.
Erik the Outgolfer
@ benar-benar tidak manusia tidak.
Erik the Outgolfer
@Dorian Versi Anda tidak berfungsi. Anda menggunakan versi lama, tetapi saat žtitu bukan daftar yang tidak terbatas, itulah sebabnya Okx menggunakan 100 digit pertama e dalam programnya. Mengubahnya ke versi baru 05AB1E (di mana pi dan e adalah daftar tanpa batas) masih tidak akan berfungsi dalam versi Anda saat ini, karena zip akan membuat pasangan dan Join akan bergabung dengan pasangan itu alih-alih semuanya. 9 byte masih mungkin dengan mengganti Jdengan Sdalam versi baru, di mana Smembuatnya menjadi daftar karakter / angka yang rata
Kevin Cruijssen
5

Python 3 , 83 80 byte

Diindeks 0.

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

Cobalah online!

Ada beberapa karakter yang tidak dapat dicetak di sana yang tidak dapat dilihat dengan benar di browser.

Ini bekerja dengan membangun tupel (32, 17, 41, 18, 52, ...)dari kode ASCII dari karakter dalam bycested hardcoded. Tuple dikonversi ke string '3217411852...', dari mana kita memilih digit yang tepat.

gempa bumi
sumber
4

Polyglot, 108 byte

n=>"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

Bekerja di:

  • C #
  • JavaScript

Saya pikir ini adalah yang terpendek yang dapat Anda lakukan dalam C # melihat karena ini adalah 252 byte untuk menemukan desimal kesatu pi .

TheLethalCoder
sumber
JS polyglot :-)
Arnauld
@Arnauld Diperbarui :)
TheLethalCoder
7
Ini bukan Java Polyglot! Anda tidak dapat mengindeks ke Objek Non-Array di Jawa.
Roman Gräf
1
Secara teknis ini bekerja tetapi saya turun karena itu a) tidak terlalu kompetitif dan b) sangat membosankan dan sepele.
HyperNeutrino
4
@HyperNeutrino Ini C # dan JavaScript kapan mereka pernah kompetitif? Dan membosankan dan sepele mungkin tetapi apakah Anda lebih suka saya melakukan jawaban 500 byte di C # yang pintar? Tidak karena itu bertentangan dengan poin 1. Ini sesingkat yang didapat ...
TheLethalCoder
4

Java 8, 420 417 413 404 380 358 (dihitung) & 115 110 (hardcoded) byte

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

Coba di sini.
Buktikan output hasil yang benar untuk 100 item yang diperlukan.

Hardcoded: ( 115 110 byte ):

"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"::charAt

Cobalah online.

Diindeks 0

-9 dan -5 byte berkat @Nevay .
-24 byte terima kasih kepada @ceilingcat .

  • Solusi Anda harus bekerja untuk setidaknya 50 digit dari setiap konstanta yang berarti harus bekerja setidaknya untuk 100 syarat urutan (tolong, cobalah untuk tidak hardcode: P)
  • Fungsi bawaan yang menghitung urutan ini diperbolehkan tetapi termasuk solusi yang tidak bergantung pada bawaan dianjurkan

Anda sudah memintanya ..;)

Built-in Java Math.PIdan Math.Edobel, yang memiliki ketepatan maksimal hanya 16. Oleh karena itu, kita harus menghitung sendiri nilai yang kita gunakan java.math.BigIntegerdan / atau java.math.BigDecimal.
Karena saya sudah menghitung PI sebelumnya dalam tantangan lain , saya menggunakan kode yang sama menggunakan BigInteger. Algoritma untuk nomor Euler menggunakan BigDecimalnamun.
Hasilnya pdan eoleh karena itu: 31415...dan 2.718....

Mungkin bisa golf dengan hanya menggunakan BigDecimal, tetapi memberikan beberapa jawaban yang salah untuk PI, jadi saya sekarang menggunakan keduanya BigDecimaldan BigInteger.

Penjelasan:

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
Kevin Cruijssen
sumber
Tidak yakin apakah itu akan membantu Anda tetapi algoritma C # saya untuk menghitung pi masuk pada 8 byte lebih pendek dari versi Java Anda.
TheLethalCoder
Catat juga agar berfungsi dengan benar agar pertanyaan ini berubah (d+=2)menjadi ++ddan return p%10+1menjadi adil return p%10.
TheLethalCoder
@TheLethalCoder Merasa bebas untuk membuat jawaban C # untuk tantangan ini. :) Meskipun Anda juga harus menghitung nomor Euler. Jawaban saya agak untuk lolz, karena hardcoding outputnya lebih pendek ..
Kevin Cruijssen
1
You've asked for it.. ;)Hei, aku suka yang pertamamu lebih baik. Saya mendapat jawaban yang lebih sulit daripada yang saya harapkan ...
manusia
1
Anda dapat menyimpan 9 byte dalam jawaban terhitung dengan menggunakan charAt(n+1>>1)dan 5 byte dalam versi hardcode Anda dengan menggunakan referensi metode "..."::charAt.
Nevay
3

Seed , 6015 byte

105 41100973201674650461227976639700390615120600528953176107701316721890649738810349651490948904154731057172335535600875054878204557287393379815378680878571406244365932330202793040308312687924242319799562985464135998860369933720376853281630432469462831217924775601393232895404104191613314969008627719099002734936685651970933027922574843126481552407811220371545812798263882325951724505132794956253992779856191832909434513683936955184871247159313261417328850445886987045814618325821125417040265540589403338721758954467831926977078444612065747526326682314711350486782090838673475876960125016098416460032667015813053483457246043486676622061645094043655351781242050448580132075920324099742699960838361839038297355120817832056960516761862493176616153258281345538652844974811030063414112136642097000574165433957710342430709643110444042577685157477268110199017600011209827070311299268347100419887111107237908884608557593677163764286026624394674781868689858494991328505977301270068505397030743037416430245399054325956185200430657008806539374392625804513081295070438243600044274289109395357299275275193717501822777898664715885427884193864182834402097958423697356485767670945673525604620701482288023981110598866625872386643941558021439168402392304238271452444124214301243311025121833097491087918320170873313832323794851508364788578530614246140801266858481189449278157296335592848066512127882306035576754122325822200069362884409931190620435627809384380203617488253034370361172908245852012086081807945576657014184275798330804532115103840313004678040210379846666674881048346897213048386522262581473085489039138251061251160730845385869281787222083186331344552658814775998639661361866503862291670619153718574270905089351133527806484519543645501497150560454761284099358123613642350160410944676702481576280832672884549762767667090615809061739499629798396737503512011645776394176807352443544839957773371384141101627375926404212619777658374366513665083032140398814384622434755543347503025479743718569310129255927244046638238401670388409731849963600790867434678993019370132638962549859363736476668247251402420832876258626149639101811361047924632565285870213656416957893835899254928237592711662454838295046528789720146967061486405916116778722736283489123195985053535189375957277052428901645131462087039117212488839670735246752589931585405440449333046667938628384693216121067951290025349082277568986632815062532963505690244579740140120806885104683071514922412748240497612209609661707922754236180441892543545377867355182682381812487973645406703590150722720330526173957597156314579144484166520730013480681064941752984345205140917291104888971742824066713606933406657345121342075268990055328274845008936364502884461548416337689565392911129757761902576946104722487260155373897552821908338346641549478063474748830482136404008215583192489320750526753663943267086203954602839906762640389978523894333743126288529975769945319614142422443068420170103245659109689433597701350198280212250954698442638475209618790055335813263132865176791663235801963797561493995544185124734214257034901773781134331460320221759556924556747571745834582344275416625351302153332814233497096345055392255809024712740720006219615340819493781244665414077298346378966540544979367367978334759985048507214749726072645238624803791884339024844989975370042133733339339038567691571361407296615851372112592532463329778465699812822089846474961581380707849259093905314170108054540333209088059730272087864344697983074458088984533095183089310714804468718319244214535941276969904638763288063417624586766891798378622613765728303031397998644194508610598078718347204813844240434145846888722334194516524032354042557957058092854659539699310565707914118281251563405735083553254856313838760124953245573676126601070861004186509621892263623745673900572829301771299438501543213489182375655869072568437776298051260531944785904157204006430131566234389896821642210616326951771496269255716808352415001187083781128619236455170025989777631182990311607133740812107138446626302353752098982590371714623080450836912706275397973009559314275978915463843159370230629290376520494894845680706499809017211545204670148071902560908658269183779180493590025891585269507219866461550160579656755846447951259951641828495549544791046179035585611272240116822105364823082512055639047431280117805724371019657801828634946412396263504315569042536942671358095826696817513115447079645898107923447321583282886740680340887700198072304400536529418546232473450984945589794448490331085275232352881571706521961358975744067916422124670374397682877259664913100427726059898474024964867713698696116581478101206003313106174761699804016604950094008714907179862448792216891309734208815522069346791369498202430302292199779590583788518283934542807403049256936179914953814019565550264909025345322516061595136601312434888871667940394250767164496543418483237896796108764367721411969986710930448108645039275082356457263454340220118278471652962484104099512207532103709146426640958406853240342441810465024550617909657901698718289260589269758398513490424434162831332785821428006396653475356712733072469052427934231406388810607688824035522285626563562286337967271308076321307276537761026788485320280603487776428017017298356181654076403306265118978333909378403193559129146468182910851996415072056976175613473847242292911071040966109905552914332596680497156169349277079292398091020434667210493868422848588893205157133171899819212153010393580099455957808703428739456223073813663954919146593698106305501988107196273527346690785289909397140611634970017071011599022429384594426022933102487171920965595473754661194965266230932928905708783854897164127767575976566931916632077914904360565095752466049885656187054491320449776951484812738806536727562344348761718424255018794271994537719709226236497935053971406685810778014002594041715040546776952342303797267458880802314841325359844565479173256964507237937290466116935912176054052746039378370966040054779443633371806403649852746347690237831260027483859907620684197542069045517397230169577918374265220969534695931904

Seed setara dengan jawaban Befunge saya. Seperti yang saya sebutkan di sana, program Befunge keluaran ini tidak berfungsi pada TIO karena TIO tampaknya memiliki garis pembungkus internal 80 karakter.

Tehers
sumber
Bagaimana? Cuma ... bagaimana?
NieDzejkob
1
codegolf.stackexchange.com/a/193325/61379 Outgolfed
Krzysztof Szewczyk
3

Excel, 113 byte

1-diindeks

=MID("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1)

PI()hanya akurat hingga 15 digit. Mirip dengan EXP(1).

60 solusi 42 byte yang berfungsi untuk Input <=30 (-18 bytes berkat @Adam)

=MID(IF(ISODD(A1),PI(),EXP(1)/10)/10,A1/2+3,1)
Wernisch
sumber
Konsep dasar dalam pendekatan kedua Anda dapat dipersingkat menjadi 46 byte dengan hanya memiliki pilihan pi / e di dalam if(...)pernyataan:. Tidak =MID(IF(ISODD(b1),PI(),EXP(1)/10)/10,b1/2+3,1)dapat menyiasati ketidaktepatanpi() dan exp(), meskipun
Adam
2

05AB1E , 13 byte

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

Cobalah online!

Mirip dengan jawaban Magic, tetapi agak berbeda.

Penjelasan:

É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]
Erik the Outgolfer
sumber
2

Python 2 + SymPy , 70 63 byte

lambda n:int(N([pi,E][n%2],50)*10**(n/2)%10)
from sympy import*

Cobalah online!

tongkat
sumber
2

Japt , 55 byte

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

Uji secara online! Berisi beberapa unsintables.

Berfungsi dengan mengganti setiap karakter dalam string dengan charcode-nya, lalu mengembalikan digit pada indeks yang benar. String dihasilkan oleh program ini:

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

Uji secara online!

Produksi ETH
sumber
2

Julia, 63 byte

1-diindeks

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

Mengubah pi atau e menjadi string, menghilangkan tempat desimal, dan kemudian memanggil digit yang sesuai. Mengembalikan representasi karakter digit.

Ben
sumber
1
Selamat datang di PPCG!
Martin Ender
2

Seed, 5852 5794

Berdasarkan jawaban TehPers Befunge.

1051130021648715907393149878290493079600376561988348664272369051219541158034251323778110172612675089859184605166991106040693833909592598132115295033728752738087105881243462563076466678196376225832661747114302365429787133716511111381612588140144307910362782924144996564529411691568302571546828919454271683233497896594149189544327214969302848984257909609092418942847813158570493297692245428646803536815345759334224247677074872671057296478697076157019699466324478990259351466108726578472175001474585821629778406880297836753303012207209976229264609834293181367664486642493394085473509253813676093779567738697465957519812706192139261472118908699638816640825554051850436762061721281771892466822470585742923158999350909054375916612667405594051622229969696110285582900916410099224974902720736021096981441362371398922887585642863359978062601767338412679956208026294953110185271056006145171920926497396179933553547647876354874445336583594285656870801545177578902705927733720249211636847884869491097054175976937629709200212494761217184873108852140655722895359613462156833646123152648220793295854627649452190956799160703532861477096009725706141202331131287901266622861560576869037209421378739125115765163010112273561384890274706972479335859548424507413589440122160717697618157336618754196528390529316634155057447126317467878320143220148685911507025731721669456692292309133633447284353130542004299981319048073637696567634889623949341630372505055435189663767044165063763216111834588696399179737702861529836947970901482712510136315042152110633215913241916694919566433112405210063414042670097562256073600916103886503591248191758835092924394147776204171675226850914902590401360360345796925181247981647089261884952039081268986586818659090505317955579671089885915745568661758883469031230794272571159213300281445730703294269295310767401339422952480777920786878410780792687195268799097885426801795242758273587841272731685278721369746727313447085996142152811199340656395207452343492937579702451111716453371016654791322834865918860033642314402995240481293652425792697358895577606699947511030416728684352022506710677976841690749387202992493347056114389784733211172448656007595582911222364847293116425714996343958156522448560363063094260073906846664112391722958505451464414025605603413323283807093107521955579711235903403153357003170132938512689946882757999117710160645821945148763813674548797981224375547254576063310479473749044201972863935442758458424285806147218666471747061869918574545072745631758049982372007444866300485095061433951914878373501952670216546435388818497342311417254246013304856715094953051481317438104933875171470343900106719705171102058673610594748846178562080370992488881764909402902065625464750558527389775735939044400858705229893243673486621988009838791971714603625037310885148140796813757120291067372196872928228321095156712054303101901959874384063672886495472796070113365603843687513322867176197917489855537726934095360491472497352567147140246395682503059404971449739625647398820598964158265302668783916501984956044969021302601920487717382879106303683795359905325347814473318519391344565458920270463279174784746656360314070464241666622240210385245184959282222666398870656274940629675453574246097799383361429014800618720780346294542185892116417842240524776835458087900018007896901140383243611793705883547791450682392261960643824271328189332116466519255567441515615925840284456154022304291978218634565379575148642711337622789721842048696443945213454162713556316912301346193615227854869318871089808249776555077834342492281888561676171087168150941237306007109521081900169693331625918138699682645157924632842546989812618292449480799580909720292280095095845962850721356554807680991288722147671740885576811339492549454926901594927338274410385863276725958781460924134466358260089533908525106740467122470973368676988277207568882122479840074670300214980511007665457235218290742394089204192282508491125777180151491866961638111244962953268398339686189772372983926068579350047402754803068232034594024872791141428095120311259087973136353149728638143035136784730999270266072749004567217555438270988124997549762230020689881669285499865374963053282530118570884108038975805335341098720577305266629567047445192403700472887794782423940658412176424370062158626834653405675401415679083822191617061925174149189203359499283160374801737260780407460559147326758994495549579747033361234471750470244513311080274649191860724511086222353696966556035904101416366866518427071604705222938635947781869520181137451408849640159586041113639598272540062185768190959707775362176381804238896341317485410279831458927597060094913931822437950489034755418876566165098609145551163170170060968550804192429683076682433548504113044161906874992120619724109268394986529182050977866104283639955069424323124118234270471868688405770066267298550544345355480568344482162465184049105391961294335245926910436280167548428908725073049063187423431751542064521517069452498182346407984197390998799924644160478679731476796691938148057603728267749331459031937823996495889234787060791079241854542581243078812931046333013380737766914161425371301455762684652883345176576166320850926855173197613536554369628772428747263956045786416295429184651985570482338242016559363725421100270243627030197439290918962948652873397874243832067459791837014394278403085907234616003231621600132126403225123227458214686006897240158060744989458215243787817148717936756981074208678765977744940577875579654698779849605118845010395906232293740180888137656291524050590071724242335942378834532707622396324405477279768052696927856056064019532570357101573277570040254706775462396160275876038886428146097798897998315086627358220951838049046100218938610753230860169099104474379950181692561834872540511195903774693113510283120187768500261160296892119883913289017641545057765550924909632887927659777449405778755796546987798496051188450103959062322937401808881376562915240505900717242423359423788345327076223963244054772797680526969278560560640195325703571015732775700402547067754623961602758760388864281460977988979983150866273582209518380490461002189386107532308601690991044743799501816925618348725405111959037746931135102831201877685002611602968921198839132890176415450577655509249096328879276597774494057787557965469877984960511884501039590623229374018088813765629152405059007172424233594237883453270762239632440547727976805269692785605606401953257035710157327757004025470677546239616027587603888642814609779889799831508662735822095183804904610021893861075323086016909910447437995018169256183487254051119590377469311351028312018776850026116029689211988391328901764154505776555092490963288792
Krzysztof Szewczyk
sumber
Pekerjaan yang baik! Saya sedikit ingin tahu tentang bagaimana Anda bermain golf.
TehPers
2

Malbolge Unshackled (varian rotasi 20-trit), 3,64E6 byte

Ukuran jawaban ini melebihi ukuran program maksimum yang dapat diposkan (eh), sehingga kode ini berada di repositori GitHub saya (catatan: Jangan menyalin kode menggunakan CTRL + A dan CTRL + C, cukup klik kanan dan klik "Simpan elemen tujuan sebagai. .. ").

Bagaimana cara menjalankannya?

Ini mungkin bagian yang sulit, karena juru bahasa Haskell yang naif akan membutuhkan waktu lama untuk menjalankannya. TIO memiliki penerjemah Malbogle Unshackled yang layak, tetapi sayangnya saya tidak dapat menggunakannya (batasan).

Yang terbaik yang bisa saya temukan adalah varian lebar rotasi 20-trit, yang berkinerja sangat baik, menghitung (cukup banyak) secara instan .

Untuk membuat penerjemah sedikit lebih cepat, saya telah menghapus semua cek dari penerjemah Malbolge Unshackled milik 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;
}
Krzysztof Szewczyk
sumber
Ini terlihat seperti lebih dari 3646 byte
H.PWiz
@ H.PWiz lupa E, maaf
Krzysztof Szewczyk
1

05AB1E , 14 byte

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

Cobalah online!


Jawaban ini diindeks 0.

žs              # pi to N digits.
  sžt           # e to N digits.
     ‚øJ        # Interleave.
        '.K     # No decimal points.
           s<è  # 0-indexed digit from string.
Guci Gurita Ajaib
sumber
Saya tahu sudah ada tiga jawaban 05AB1E lainnya, sehingga tidak terlalu penting, tetapi Anda dapat golf 3 byte dengan mengubah '.Kke þdan menghapus <. (Tidak yakin mengapa Anda bahkan memasukkan <, karena Anda menyatakan jawaban Anda diindeks 0. Jawaban Anda saat ini adalah 1-diindeks dengan <.)
Kevin Cruijssen
Hmm .. Anda juga dapat menghapus ,sejak zip melakukan ini secara implisit, tapi saya melihat itu hampir persis sama dengan jawaban 10-byte lainnya ..
Kevin Cruijssen
1

Python 3 + SymPy , 109 Bytes

Diindeks 0 Cobalah secara online!

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

Kalahkan hardcoding sebanyak 5 byte !! Tapi mungkin bisa lebih baik. Tetapi mengalahkan hardcoding membuat saya merasa senang :)

bioweasel
sumber
1

Pyth, 35 byte

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

Suite uji

Karena Pyth tidak memiliki konstanta pi dan e konstanta yang acak, saya menghitungnya secara langsung.

Menghitung pi:

u+/*GHhyHyK^T99rJ^2T0

Kegunaan ini terulangnya berikut terus fraksi ke pi menghitung: 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...)))). Saya mendapatkannya dari jawaban PPCG lain . Ini diturunkan dalam persamaan 23-25 ​​di sini .

Saya menghitungnya dari dalam ke luar, menghilangkan semua istilah di luar 1024, karena istilah selanjutnya memiliki sedikit efek pada angka, dan saya mempertahankan 99 digit presisi untuk memastikan 50 pertama benar.

Menghitung e:

sm/K.!dJ

Saya menjumlahkan kebalikan dari angka 1024 pertama, hingga 99 digit presisi.

Lalu, saya mengonversi kedua angka menjadi string, menjalinnya, dan mengindeks.

isaacg
sumber
1

MATLAB, 93 Bytes

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

Penjelasan sederhana adalah bahwa ini pertama-tama mengubah e dan pi menjadi string, kemudian melewati for for yang menyatukan digit. Di sini, c adalah pai, p adalah pi, dan e adalah e.

Saya juga telah memecah ini menjadi beberapa baris untuk dibaca, tetapi kode yang sebenarnya adalah semua pada satu baris dengan spasi minimal.

a13a22
sumber
Selamat datang di situs ini!
DJMcMayhem
Terima kasih, saya sudah menjelajahi Code Golf cukup lama, dan akhirnya memutuskan untuk mencobanya sendiri.
a13a22
Ini memiliki beberapa masalah, terutama karena tampaknya tidak menerima input. Anda perlu memodifikasi fungsi Anda sehingga diberi bilangan bulat n,, itu akan menghasilkan nthdigit urutan Pie. Anda juga dapat mengurangi bytecount Anda dengan mengurangi nama variabel Anda menjadi satu karakter
Taylor Scott
Maaf, saya memperbaiki nama variabel untuk jumlah byte. Sedangkan untuk digit ke-n, apakah saya hanya harus mendefinisikan n = ?, atau saya harus mengambil input pengguna?
a13a22
Sepertinya Anda sudah menemukan jawabannya, tetapi Anda harus meminta pengguna untuk input, namun, tidak perlu memiliki pemformatan yang melekat pada prompt itu, sehingga Anda dapat menggunakannya input('')sebagai penggantiinput('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;}}

Disimpan 5 byte berkat @Kevin Cruijssen.

Tidak ada tautan TIO karena perpustakaan eksternal, sayangnya C # tidak memiliki built in BigDecimalclass sehingga yang eksternal ini harus dilakukan. Mungkin beberapa golf masih mungkin tetapi tidak ada waktu sekarang.

Versi Lengkap / Diformat:

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();
        }
    }
}
TheLethalCoder
sumber
Anda dapat membuang tanda kurung x[j++]/edi sekitar c=(x[j++]/e)*nuntuk -2 byte; Juga, saya pikir Anda dapat menghapus keduanya +""di dua pernyataan kembali dan mengembalikan int bukan string, dan kemudian menambahkan -48pernyataan kembali kedua untuk mengkonversi char ke output int (untuk -1 byte).
Kevin Cruijssen
@KevinCruijssen Keduanya bekerja dengan baik, terima kasih!
TheLethalCoder
1

Python 2 , 82 byte

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

Cobalah online!

Berisi beberapa karakter ASCII yang tidak dapat dicetak. flornquake menyelamatkan dua byte.

Lynn
sumber
Ini memecah mis untuk n = 64, n = 65. Tidak yakin apa cara terbaik untuk memperbaikinya, mungkin lambda n:('%02d'%ord('...'[n/2]))[n%2], meskipun mungkin ada sesuatu yang lebih baik.
flornquake
@flake gempa, kau benar. Saya menulis perbaikan yang satu byte lebih pendek. tidak bisa memikirkan yang lebih baik
Lynn
Bagus. Berikut ini sesuatu yang lebih pendek, berdasarkan ide Anda: TIO
flornquake
1

brainfuck , 402 byte

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

Cobalah online!

Masukan sebagai kode karakter (mis. "A" = 65)

Cobalah online dengan input digit!

kode:

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
Dorian
sumber
0

Neim , 45 byte

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

neim tidak dibuat untuk angka desimal

Cobalah online!

Okx
sumber
0

Befunge , 105 byte

3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919&0g,@

Tidak berfungsi pada TIO karena sepertinya membungkus garis secara internal pada 80 karakter untuk beberapa alasan. Anda bisa membuatnya bekerja di TIO dengan meletakkan setiap digit pada baris baru, dan memiliki &0g,@setelah 3di baris pertama.

Tehers
sumber
1
Bekerja dengan baik di TIO dengan Befunge 98: tio.run/##Hcg7DsJAEATRqzgiwtJO9/w64yxIxhkiIeD0y0JUpXc/Hu/neezq/…
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]

Nol diindeks dan berfungsi hingga 128 angka (input maksimal 127).

Cuplikan Tes

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

Justin Mariner
sumber
0

MATLAB (dengan Kotak Alat Simbolik), 89 82 byte

Dengan memanfaatkan Symbolic Toolbox, jawaban ini memberikan output tanpa hardcoding nilai pi dan e.

Sebagai bonus yang menyenangkan kode ini sebagai input dapat mengambil satu indeks, atau array indeks dan secara bersamaan akan memberikan nilai output untuk semua nilai indeks yang disediakan (mis. Memberikan 1:10 akan menampilkan 10 nilai pertama).

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

(baris baru ditambahkan untuk dibaca, tidak diperlukan untuk eksekusi sehingga tidak termasuk dalam jumlah byte)

Sayangnya versi Oktaf yang digunakan oleh TIO tidak mendukung input simbolik ke vpa fungsi ini, jadi tidak dapat memberikan tautan TIO.

Dalam MATLAB pengindeksan ke vektor kembali dari suatu fungsi tidak mungkin dengan cara yang sama seperti dengan Oktaf yang berarti ini adalah program lengkap daripada hanya fungsi anonim. Program akan meminta input nselama eksekusi - ini adalah nilai satu indeks untuk elemen yang diperlukan. Pada akhir program, nilai dicetak secara implisit.

Untuk program kami menggunakan vpafungsi yang memberikan nilai desimal pidan exp(1)(e) ke 51 desimal . Ini dilakukan secara simbolis untuk memungkinkan ketepatan teoretis tanpa batas. Untuk memperluas lebih dari 100 elemen, cukup tambahkan nilai 51dalam kode untuk meningkatkan rentang.

Wrapping vpain char(ie char(vpa(...))) diperlukan untuk mengonversi output fungsi menjadi string daripada nilai simbolik. Output yang dihasilkan adalah string:

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

Ini termasuk e dan pi hingga 51 tempat desimal - cukup untuk memungkinkan 100 digit output kami (kami harus melakukan sedikit tambahan dp daripada yang diperlukan untuk menghindari mencetak nilai bulat)

Untuk mengindeks kekacauan ini, kita harus setidaknya menyingkirkan titik desimal sehingga kedua digit angka tersebut bersebelahan. Awalnya saya menggunakan penggantian regex sederhana apa pun yang bukan digit tanpa apa-apa. Namun saya dapat menyimpan 7 byte dengan hanya menghilangkan titik desimal menggunakan kode:

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

string yang dihasilkan sekarang:

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

Ini berisi semua digit yang kita butuhkan dengan potongan pi dan e dalam indeks berurutan.

Kami kemudian dapat mengonversi indeks yang disediakan sehingga bilangan ganjil mengakses ch pi dan bahkan bilangan akses e chunk menggunakan perhitungan:

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

Mengakses indeks (indeks) tersebut dalam string di atas akan memberikan output yang benar.

Tom Carpenter
sumber
0

Aksioma, 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 array berbasis. Hasil

(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
RosLuP
sumber
0

Google Sheets, 47 Bytes

Catatan: karena panjang konstanta yang disimpan di Excel dan Google Sheets, solusi ini hanya akurat hingga 20 digit, karenanya

Fungsi Lembar Kerja Anonim yang mengambil input dari sel A1dan menampilkan digit Pie tersebut ke sel panggilan

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

Versi Hardcoded, 112 Bytes

Versi ini sepenuhnya memenuhi spesifikasi program, tetapi umumnya tidak menyenangkan.

Fungsi Lembar Kerja Anonim yang mengembalikan digit ke-n dalam daftar pie yang diindeks 1

=Mid("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1
Taylor Scott
sumber
Membagi dengan 10 untuk menggeser titik desimal (sebagai pengganti SUBSTITUTE) dapat menghemat beberapa byte dalam solusi pertama.
Wernisch
0

BFASM , 142 byte

stk 0
org 0
txt "3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"
in_ r1
rcl r2, r1
keluar r2

Mengambil input sebagai karakter ascii, memberikan output dalam bentuk digit.

Krzysztof Szewczyk
sumber