Pasta yapmak için pi ve e karıştırın!


36

Herkesin bildiği pl matematiksel sabit, kendi çapında bir çemberin çevresi oranına sahiptir.

3.14159265358979323846264338327950288419716939937510...

Muhtemelen de biliyorum e matematiksel sabitini, bir sayının doğal logaritmasını.

2.71828182845904523536028747135266249775724709369996...

Ama ... turta biliyor musun ? En önemli sabitlerden biridir (benim için). Pi ve e'nin rakamları harmanlanmıştır.

32.1741185298216852385485997094352233854366206248373...

Ondalık genişleme olarak:

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

Bu, OEIS dizisi A001355'tir .

ANAHTAR KELİME: nonn, base, aptal , kolay

Bu çok aptal bir sekans.

Meydan okuma

Negatif olmayan bir tamsayı n alan ve turtanın nt basamağını çıkaran bir program / fonksiyon yazın .

Özellikler

  • Standart G / Ç kuralları geçerlidir .
  • Standart boşluklar vardır yasak .
  • En az bir iş için gerektiği anlamına gelir, her sabit en az 50 basamak için çözüm şart çalışma dizisi, 100 açısından (lütfen deneyin : P kodlamalısınız) içerir.
  • 2 veya 3 için çıkış ondalık nokta değil .
  • Çözümünüz 0 indeksli veya 1 indeksli olabilir, ancak lütfen hangisini belirtin.
  • Bu zorluk, tüm dillerde en kısa yaklaşımı bulmakla ilgili değil, her dilde en kısa yaklaşımı bulmakla ilgilidir .
  • Kodunuz , aksi belirtilmedikçe, genellikle UTF-8 kodlamasında bayt cinsinden puanlanacaktır .
  • Bu sırayı hesaplayan yerleşik işlevlere izin verilir, ancak bir yerleşik yapıya güvenmeyen bir çözüm de dahil olmak üzere teşvik edilir.
  • "Pratik" diller için bile açıklamalar teşvik edilmektedir .

Test durumları

Bunlar 0 indeksli.

Input   Output

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

Birkaç daha iyi formatta:

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'e göre, anahtar kelime, kendisine dumbözel bir özelliği olmayan ilgi çekici anlamına gelir.
Okx

1
@Downvoter Belki de herhangi bir nedenle?
tamamen insan

23
Birisi sonucun peiolmadığını iddia edebilirpie
Zaid

1
Aşağı oylama yapmadım, ama belki bunu 3/
14'te sormadığınız için

1
1:59 pm, @txtechhelp? ;)
WallyWest

Yanıtlar:


12

Mathematica, 50 bayt

1 endeksli

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

Bunun nasıl çalıştığını açıklayabilir misiniz?
Stevoisiak

bu kolay. Her birinin 120 (5!)
Elemanını alıyor

Güzel! Çözümünüzü kaçınarak yenmeye çalıştım Riffle, ancak çözümüm bir bayt kısa sürede ortaya çıktı: RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]&
Mark S.

Bu işe yaramadı gibi görünüyor. Tek bir rakam döndürür.
DavidC,

@DavidC Evet! .. "pastanın ilk basamağını çıkar" Tam olarak! neden düşürdün ???
J42161217

8

Taksi , 749 bayt

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

Çevrimiçi deneyin!

Taksi'de pi veya e'yi hesaplamalı olarak hesaplamaya çalışmak kabus olabilirdi, ancak yapılabileceğinden eminim. Bu nedenle, dizideki ilk 100 haneyi sadece kodlamak çok daha kısadır. Oldukça ucuz hissettiriyor, ancak bu zorlukla karşılaşan en kısa Taksi kodu.

nDiziyi dizge olarak zor kodlar, alır , sonra tekrar neder ve dizedeki ilk karakteri her seferinde kaldırır. Ne zaman n=0, ilk karakteri çıkar. Bu bir dizinli.

Golfsüz / biçimlendirilmiş:

'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 bayt, HİÇBİR GÜNCELLEŞTİRMEME VE YAPILANDIRMAYI KULLANIMI

Bu çözüm e ve pi'yi sonsuz seriler kullanarak hesaplar ve bunları rasgele-hassas sabit nokta tamsayılarda saklar (Haskell'in yerleşik Integertipi ve Rationaluzantısı).

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 endeksli. 0-99 girişi için doğru, 100-101 girişi için yanlış, aksi takdirde sınırlar dışında.

Açıklama:

Bu sonsuz seriyi kullanarak pi'yi hesaplar . Klasik ters faktörlü serileri kullanarak e hesaplar . Teorik olarak bunlar bytecount açısından çok tereddütlü olmadıkları için kullanmak için ideal formüller değildir, ancak doğruluğu doğrulamak için yeterince hızlı bir şekilde bir araya getirilmiş olanları bulabilirlerdi. milyonlarca terim değil). Golfed versiyonda, E ByteCount en aza indirmek için gerekli olandan çok daha yüksek bir hassasiyet hesaplanır. Her iki sabit de yuvarlama hatalarını (yanlış değerlerin garip kuyruğundan sorumludur) önlemek için gerekenden biraz daha fazla rakama göre hesaplanır.

Sabitler, rasgele kesinlik tamsayısı oranları ( Rational) olarak hesaplanır , daha sonra 10 ^ 50 ile çarpılır, böylece oran bir (rasgele kesinlik) tamsayısına ( Integer) dönüştürüldüğünde gerekli tüm basamaklar bozulmadan kalır . Bu aynı zamanda, fonksiyonun alternatif olarak karakterleri çizdiği sayıların dize gösterimlerinde ondalık noktadan kaçınma sorununu da önler.


6

Python 2,8 bayt

@EriktheOutgolfer'ın temel dönüşüm fikri sayesinde -4 bayt .

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

Çevrimiçi deneyin!

Python 2 + sympy , 92 bayt

0 endeksli. from sympy import*Eskiden unuttuğum, bana geçiş yapmamı hatırlattığı için Rod'a teşekkürler .

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

Çevrimiçi deneyin!

Python 2 , 114 bayt

Python'un faydalı yerleşik yapıları bulunmadığı için en kısa çözümün kodlama olduğunu düşünüyorum.

lambda n:"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

Çevrimiçi deneyin!

Python 2 , 114 bayt

@Totallyhuman Tarafından Eşdeğer Çözüm .

'3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919'.__getitem__

Çevrimiçi deneyin!


Aşağı oy vermeden önce, daha kısa bir çözüm aramak için zaman ayırın.
Bay Xcoder


@totallyhuman Thanks
Bay

8
Düzenlemiş olduğunuz eşdeğer çözüm aslında eşdeğer bayt sayısı değil eşdeğer koddur. : P
totallyhuman,

1
@totallyhuman Lol Yorumunuzu gördüm ve anladım ama düzeltmeyi tamamen unuttum, çünkü kendi hatam konusunda gülüyordum. Düzenleme için teşekkürler!
Bay Xcoder

5

05AB1E , 10 bayt

žsтžtøJþsè

Açıklama:

ž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 endeksli.

Çevrimiçi deneyin!


1
Çok fazla 05AB1Es ...: P
Bay

@ Mr.Xcoder Peki, 05AB1E pi ve e yerleşik dilleri ...
Okx

@ Mr.Xcoder Bu yüzden yerleşik var.
Outgolfer Erik,

@totallyhuman hayır değil.
Outgolfer Erik,

@Dorian Sürümünüz çalışmıyor. Eski sürümü kullanıyorsunuz, ancak žto zamanlar sonsuz bir liste değildi, bu yüzden Okx programındaki ilk 100 haneyi kullanıyor. 05AB1E'nin yeni sürümüne geçmek (burada hem pi hem de e'nin sonsuz bir liste olduğu), şu anki sürümünüzde çalışmayacaktır, çünkü zip çiftler oluşturur ve Join her şey yerine bu çiftlere katılır. 9 bayt yeni sürümle değiştirilmekle Jbirlikte hala mümkündür, Sancak burada Skarakter / rakamların düz bir listesi haline gelir
Kevin Cruijssen

5

Python 3 , 83 80 bayt

0 endeksli.

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

Çevrimiçi deneyin!

Bir tarayıcıda düzgün bir şekilde görülemeyen bazı yazdırılamayan karakterler var.

Bu (32, 17, 41, 18, 52, ...), dizgiyi, kodlanmış kodlamada bulunan karakterlerin ASCII kodlarından inşa ederek çalışır . Tuple, '3217411852...'sağ haneyi seçtiğimiz dizgeye dönüştürülür .


4

Polyglot, 108 bayt

n=>"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"[n]

Çalışır:

  • C #
  • JavaScript

Bunun bulmak 252 bayt olduğu gibi C # görme yapabileceğiniz en kısa olduğunu düşünüyorum pi N. ondalık .


JS polyglot :-)
Arnauld

@Arnauld Güncelleme :)
TheLethalCoder

7
Bu bir Java Polyglot değil! Java’daki Dizi Dışı Nesnelere endeksleyemezsiniz.
Roman Gräf

1
Bu teknik olarak işe yarıyor ama ben indirgedim çünkü a) çok rekabetçi değil ve b) çok sıkıcı ve önemsiz.
HyperNeutrino,

2
@HyperNeutrino Ne zaman rekabet edebilecekleri C # ve JavaScript. Ve sıkıcı ve önemsiz belki ama C # ile 500 baytlık bir cevap vermemi tercih ederdiniz zekice? Hayır, çünkü bu 1. noktayla çelişiyor. Bu, elde ettiği kadar kısa ...
TheLethalCoder

4

Java 8, 420 417 413 404 (hesaplanmıştır) ve 115 110 (kodlanmış) bayt

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

Kodlanmış: ( 115 bayt ):

"3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"::charAt

0 endeksli

@Nevay sayesinde -9 ve -5 bayt .

  • En az bir iş için gerektiği anlamına gelir, her sabit en az 50 basamak için çözüm şart çalışma dizisi, 100 açısından (lütfen deneyin kodlamalısınız değildir: p)
  • Bu sırayı hesaplayan yerleşik işlevlere izin verilir, ancak yerleşik bir sisteme dayanmayan bir çözümü de içerir.

Sen istedin ..;)

Java'nın yerleşik Math.PIve Math.Eçiftler olup, yalnızca 16'lık azami hassasiyete sahiptir. Bu nedenle, hem değerleri hem de kullanarak kendimizi java.math.BigIntegerve / veya hesaplamamız gerekir java.math.BigDecimal. PI'yi daha önce başka bir zorlukla hesapladığımdan
beri , aynı kodu kullanarak kullandım . Euler sayısı için algoritma ancak kullanır . Sonuç ve bu nedenle: ve .BigIntegerBigDecimal
pe31415...2.718...

Sadece kullanarak Olabilir muhtemelen golf bunu BigDecimalama şimdi ikisini de kullanmak, böylece PI için bazı yanlış cevaplar veriyordu BigDecimalve BigInteger.

Açıklama:

Burada dene.
Gerekli 100 ürün için doğru sonuç çıktı verdiğini kanıtlayın.

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

Size yardımcı olacağından emin değilim, ancak pi hesaplamak için C # algoritmam Java sürümünüzden 8 byte daha kısa bir sürede geldi.
TheLethalCoder 14:17

Bu soru değişim için düzgün çalışması için alma olsa Not (d+=2)etmek ++dve return p%10+1sadece için return p%10.
TheLethalCoder 14:17

@TheLethalCoder Bu meydan okuma için bir C # cevap yapmaktan çekinmeyin. :) Ancak Euler'ın sayısını hesaplamanız gerekecek. Çıktıyı hardcoding zaten .. kısa olduğu için Cevabım yine lolz için biraz öyle
Kevin Cruijssen

1
You've asked for it.. ;)Hey, ilkini daha çok seviyorum. Beklediğimden çok daha fazla kodlanmış cevap aldım ...
kesinlikle insan

1
Hesaplanan cevabınızda 9 byte, charAt(n+1>>1)bir metot referansı kullanarak hardkod versiyonunuzda 5 byte kaydedebilirsiniz "..."::charAt.
Nevay

3

Tohum , 6015 bayt

105 41100973201674650461227976639700390615120600528953176107701316721890649738810349651490948904154731057172335535600875054878204557287393379815378680878571406244365932330202793040308312687924242319799562985464135998860369933720376853281630432469462831217924775601393232895404104191613314969008627719099002734936685651970933027922574843126481552407811220371545812798263882325951724505132794956253992779856191832909434513683936955184871247159313261417328850445886987045814618325821125417040265540589403338721758954467831926977078444612065747526326682314711350486782090838673475876960125016098416460032667015813053483457246043486676622061645094043655351781242050448580132075920324099742699960838361839038297355120817832056960516761862493176616153258281345538652844974811030063414112136642097000574165433957710342430709643110444042577685157477268110199017600011209827070311299268347100419887111107237908884608557593677163764286026624394674781868689858494991328505977301270068505397030743037416430245399054325956185200430657008806539374392625804513081295070438243600044274289109395357299275275193717501822777898664715885427884193864182834402097958423697356485767670945673525604620701482288023981110598866625872386643941558021439168402392304238271452444124214301243311025121833097491087918320170873313832323794851508364788578530614246140801266858481189449278157296335592848066512127882306035576754122325822200069362884409931190620435627809384380203617488253034370361172908245852012086081807945576657014184275798330804532115103840313004678040210379846666674881048346897213048386522262581473085489039138251061251160730845385869281787222083186331344552658814775998639661361866503862291670619153718574270905089351133527806484519543645501497150560454761284099358123613642350160410944676702481576280832672884549762767667090615809061739499629798396737503512011645776394176807352443544839957773371384141101627375926404212619777658374366513665083032140398814384622434755543347503025479743718569310129255927244046638238401670388409731849963600790867434678993019370132638962549859363736476668247251402420832876258626149639101811361047924632565285870213656416957893835899254928237592711662454838295046528789720146967061486405916116778722736283489123195985053535189375957277052428901645131462087039117212488839670735246752589931585405440449333046667938628384693216121067951290025349082277568986632815062532963505690244579740140120806885104683071514922412748240497612209609661707922754236180441892543545377867355182682381812487973645406703590150722720330526173957597156314579144484166520730013480681064941752984345205140917291104888971742824066713606933406657345121342075268990055328274845008936364502884461548416337689565392911129757761902576946104722487260155373897552821908338346641549478063474748830482136404008215583192489320750526753663943267086203954602839906762640389978523894333743126288529975769945319614142422443068420170103245659109689433597701350198280212250954698442638475209618790055335813263132865176791663235801963797561493995544185124734214257034901773781134331460320221759556924556747571745834582344275416625351302153332814233497096345055392255809024712740720006219615340819493781244665414077298346378966540544979367367978334759985048507214749726072645238624803791884339024844989975370042133733339339038567691571361407296615851372112592532463329778465699812822089846474961581380707849259093905314170108054540333209088059730272087864344697983074458088984533095183089310714804468718319244214535941276969904638763288063417624586766891798378622613765728303031397998644194508610598078718347204813844240434145846888722334194516524032354042557957058092854659539699310565707914118281251563405735083553254856313838760124953245573676126601070861004186509621892263623745673900572829301771299438501543213489182375655869072568437776298051260531944785904157204006430131566234389896821642210616326951771496269255716808352415001187083781128619236455170025989777631182990311607133740812107138446626302353752098982590371714623080450836912706275397973009559314275978915463843159370230629290376520494894845680706499809017211545204670148071902560908658269183779180493590025891585269507219866461550160579656755846447951259951641828495549544791046179035585611272240116822105364823082512055639047431280117805724371019657801828634946412396263504315569042536942671358095826696817513115447079645898107923447321583282886740680340887700198072304400536529418546232473450984945589794448490331085275232352881571706521961358975744067916422124670374397682877259664913100427726059898474024964867713698696116581478101206003313106174761699804016604950094008714907179862448792216891309734208815522069346791369498202430302292199779590583788518283934542807403049256936179914953814019565550264909025345322516061595136601312434888871667940394250767164496543418483237896796108764367721411969986710930448108645039275082356457263454340220118278471652962484104099512207532103709146426640958406853240342441810465024550617909657901698718289260589269758398513490424434162831332785821428006396653475356712733072469052427934231406388810607688824035522285626563562286337967271308076321307276537761026788485320280603487776428017017298356181654076403306265118978333909378403193559129146468182910851996415072056976175613473847242292911071040966109905552914332596680497156169349277079292398091020434667210493868422848588893205157133171899819212153010393580099455957808703428739456223073813663954919146593698106305501988107196273527346690785289909397140611634970017071011599022429384594426022933102487171920965595473754661194965266230932928905708783854897164127767575976566931916632077914904360565095752466049885656187054491320449776951484812738806536727562344348761718424255018794271994537719709226236497935053971406685810778014002594041715040546776952342303797267458880802314841325359844565479173256964507237937290466116935912176054052746039378370966040054779443633371806403649852746347690237831260027483859907620684197542069045517397230169577918374265220969534695931904

Befunge cevabımın Tohum karşılığı. Orada bahsettiğim gibi, Befunge programı bu çıktılar TIO'da çalışmıyor çünkü TIO'nun 80 karakterde dahili çizgi sarması var.


Nasıl? Sadece ... nasıl?
NieDzejkob


3

Excel, 113 bayt

1 endeksli

=MID("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1)

PI()sadece 15 basamağa kadar doğrudur. İçin benzer EXP(1).

Giriş için çalışan 60 42 baytlık çözüm <=30 (@Adam sayesinde -18 bayt)

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

İkinci yaklaşımda temel kavram sadece iç pi / e seçim sağlayarak 46 bayt kısaltılabilir if(...)açıklamada: =MID(IF(ISODD(b1),PI(),EXP(1)/10)/10,b1/2+3,1).Can't ait tutarsızlık etrafında almak pi()ve exp()olsa
Adam

2

05AB1E , 13 bayt

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

Çevrimiçi deneyin!

Magic'in cevabına benzer, ama biraz farklı.

Açıklama:

É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 bayt

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

Çevrimiçi test edin! Birkaç yazdırılamaz içeriyor.

Dizedeki her karakteri yerine koyan kodla değiştirerek çalışır, sonra rakamı doğru dizine döndürür. Dize bu program tarafından üretildi:

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

Çevrimiçi test edin!


2

Tohum, 5852 5794

TehPers Befunge cevabı dayanarak.

1051130021648715907393149878290493079600376561988348664272369051219541158034251323778110172612675089859184605166991106040693833909592598132115295033728752738087105881243462563076466678196376225832661747114302365429787133716511111381612588140144307910362782924144996564529411691568302571546828919454271683233497896594149189544327214969302848984257909609092418942847813158570493297692245428646803536815345759334224247677074872671057296478697076157019699466324478990259351466108726578472175001474585821629778406880297836753303012207209976229264609834293181367664486642493394085473509253813676093779567738697465957519812706192139261472118908699638816640825554051850436762061721281771892466822470585742923158999350909054375916612667405594051622229969696110285582900916410099224974902720736021096981441362371398922887585642863359978062601767338412679956208026294953110185271056006145171920926497396179933553547647876354874445336583594285656870801545177578902705927733720249211636847884869491097054175976937629709200212494761217184873108852140655722895359613462156833646123152648220793295854627649452190956799160703532861477096009725706141202331131287901266622861560576869037209421378739125115765163010112273561384890274706972479335859548424507413589440122160717697618157336618754196528390529316634155057447126317467878320143220148685911507025731721669456692292309133633447284353130542004299981319048073637696567634889623949341630372505055435189663767044165063763216111834588696399179737702861529836947970901482712510136315042152110633215913241916694919566433112405210063414042670097562256073600916103886503591248191758835092924394147776204171675226850914902590401360360345796925181247981647089261884952039081268986586818659090505317955579671089885915745568661758883469031230794272571159213300281445730703294269295310767401339422952480777920786878410780792687195268799097885426801795242758273587841272731685278721369746727313447085996142152811199340656395207452343492937579702451111716453371016654791322834865918860033642314402995240481293652425792697358895577606699947511030416728684352022506710677976841690749387202992493347056114389784733211172448656007595582911222364847293116425714996343958156522448560363063094260073906846664112391722958505451464414025605603413323283807093107521955579711235903403153357003170132938512689946882757999117710160645821945148763813674548797981224375547254576063310479473749044201972863935442758458424285806147218666471747061869918574545072745631758049982372007444866300485095061433951914878373501952670216546435388818497342311417254246013304856715094953051481317438104933875171470343900106719705171102058673610594748846178562080370992488881764909402902065625464750558527389775735939044400858705229893243673486621988009838791971714603625037310885148140796813757120291067372196872928228321095156712054303101901959874384063672886495472796070113365603843687513322867176197917489855537726934095360491472497352567147140246395682503059404971449739625647398820598964158265302668783916501984956044969021302601920487717382879106303683795359905325347814473318519391344565458920270463279174784746656360314070464241666622240210385245184959282222666398870656274940629675453574246097799383361429014800618720780346294542185892116417842240524776835458087900018007896901140383243611793705883547791450682392261960643824271328189332116466519255567441515615925840284456154022304291978218634565379575148642711337622789721842048696443945213454162713556316912301346193615227854869318871089808249776555077834342492281888561676171087168150941237306007109521081900169693331625918138699682645157924632842546989812618292449480799580909720292280095095845962850721356554807680991288722147671740885576811339492549454926901594927338274410385863276725958781460924134466358260089533908525106740467122470973368676988277207568882122479840074670300214980511007665457235218290742394089204192282508491125777180151491866961638111244962953268398339686189772372983926068579350047402754803068232034594024872791141428095120311259087973136353149728638143035136784730999270266072749004567217555438270988124997549762230020689881669285499865374963053282530118570884108038975805335341098720577305266629567047445192403700472887794782423940658412176424370062158626834653405675401415679083822191617061925174149189203359499283160374801737260780407460559147326758994495549579747033361234471750470244513311080274649191860724511086222353696966556035904101416366866518427071604705222938635947781869520181137451408849640159586041113639598272540062185768190959707775362176381804238896341317485410279831458927597060094913931822437950489034755418876566165098609145551163170170060968550804192429683076682433548504113044161906874992120619724109268394986529182050977866104283639955069424323124118234270471868688405770066267298550544345355480568344482162465184049105391961294335245926910436280167548428908725073049063187423431751542064521517069452498182346407984197390998799924644160478679731476796691938148057603728267749331459031937823996495889234787060791079241854542581243078812931046333013380737766914161425371301455762684652883345176576166320850926855173197613536554369628772428747263956045786416295429184651985570482338242016559363725421100270243627030197439290918962948652873397874243832067459791837014394278403085907234616003231621600132126403225123227458214686006897240158060744989458215243787817148717936756981074208678765977744940577875579654698779849605118845010395906232293740180888137656291524050590071724242335942378834532707622396324405477279768052696927856056064019532570357101573277570040254706775462396160275876038886428146097798897998315086627358220951838049046100218938610753230860169099104474379950181692561834872540511195903774693113510283120187768500261160296892119883913289017641545057765550924909632887927659777449405778755796546987798496051188450103959062322937401808881376562915240505900717242423359423788345327076223963244054772797680526969278560560640195325703571015732775700402547067754623961602758760388864281460977988979983150866273582209518380490461002189386107532308601690991044743799501816925618348725405111959037746931135102831201877685002611602968921198839132890176415450577655509249096328879276597774494057787557965469877984960511884501039590623229374018088813765629152405059007172424233594237883453270762239632440547727976805269692785605606401953257035710157327757004025470677546239616027587603888642814609779889799831508662735822095183804904610021893861075323086016909910447437995018169256183487254051119590377469311351028312018776850026116029689211988391328901764154505776555092490963288792

İyi iş! Nasıl golf oynadığını merak ediyorum.
TehPers

2

Malbolge Unshackled (20 basamaklı rotasyon varyantı), 3,64E6 bayt

Bu cevabın boyutu, programlanabilir maksimum program boyutunu (eh) aşıyor, bu nedenle kod GitHub depomda bulunuyor (not: Kodu CTRL + A ve CTRL + C kullanarak kopyalamayın, sadece sağ tıklayıp "Hedef öğeyi farklı kaydet" i tıklayın. .. ").

Bu nasıl çalıştırılır?

Bu zor bir kısım olabilir, çünkü saf Haskell tercümanı bunu yürütmek için yaş alır. TIO'nun iyi Malbogle Unshackled tercümanı var, fakat ne yazık ki kullanamayacağım (sınırlamalar).

Bulabileceğim en iyisi, sabit olarak 20 basamaklı dönme genişlik değişkenidir, çok iyi performans gösterir ve anında hesaplanır .

Tercümanı biraz daha hızlandırmak için tüm kontrolleri Matthias Lutter'ın Malbolge Unshackled tercümanından kaldırdım.

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

Bu 3646 bayttan fazla görünüyor
H.PWiz

@ H.PWiz E'yi unuttu, üzgünüm
Krzysztof Szewczyk

1

05AB1E , 14 bayt

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

Çevrimiçi deneyin!


Bu cevap 0 indeksli.

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

Ben bu yüzden gerçekten önemli değil, diğer üç 05AB1E cevapları zaten var biliyorum ama değiştirerek golf 3 bayt can '.Kiçin þve çıkarın <. ( <Cevabınızı neden 0-indeksli olduğunu belirttiğiniz için neden eklemiş olduğunuzdan emin değilsiniz . Mevcut cevabınız 1-indeksli <.)
Kevin Cruijssen

Hmm .. Ayrıca kaldırabilir ,fermuar örtük yapar çünkü, ama neredeyse tam dışındaki 10 baytlık bir cevap olarak aynı olduğunu görmek ..
Kevin Cruijssen

1

Python 3 + SymPy , 109 Bayt

0 endeksli Çevrimiçi deneyin!

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

5 byte ile kodlamayı bitirin !! Ama muhtemelen daha iyi olabilirdi. Fakat hard kodlama yapmak beni iyi hissettiriyor :)


1

Pyth, 35 bayt

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

Test odası

Pyth yerleşik keyfi pi ve e sabitlerine sahip olmadığından, onları doğrudan hesaplarım.

Pi hesaplanıyor:

u+/*GHhyHyK^T99rJ^2T0

Bu kullanımlar arasında aşağıdaki tekrar işlem pi fraksiyonu devam etti: 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...)))). Başka bir PPCG cevabından aldım . Bu denklemlerde türetilmiştir 23-25 buraya .

1024'ün ötesindeki tüm terimleri atlayarak, içten dışa hesaplıyorum, çünkü sonraki terimler sayı üzerinde çok az etki yaratıyor ve ilk 50'nin doğru olduğundan emin olmak için 99 basamaklı hassasiyet yapıyorum.

E hesaplanıyor:

sm/K.!dJ

İlk 1024 sayının karşıtlarını, 99 basamağa kadar toplarım.

Sonra her iki sayıyı da dizgelere dönüştürürüm, birleştiririm ve dizine.


1

MATLAB, 93 Bayt

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

Basit bir açıklama, bunun önce e ve pi'yi dizgelere dönüştürdüğü, ardından rakamları birleştiren bir for for döngüsünden geçtiğidir. Burada, c, turta, p, pi ve e, e'dir.

Ayrıca okunabilirlik için bunu birkaç satıra böldüm, ancak asıl kodun tümü minimum boşlukla bir satırda.


Siteye Hoşgeldiniz!
DJMcMayhem

Teşekkürler, uzun süredir Code Golf'e göz attım ve sonunda kendime gitmeye karar verdim.
a13a22

Bunun bazı hususları var, temelde girdi almamış gibi görünüyor. İşlevinizi, tamsayı verildiğinde , Pie dizisinin basamağını nüretecek şekilde değiştirmeniz gerekir nth. Değişken isimlerinizi tek bir karaktere indirerek bayt sayınızı da azaltabilirsiniz
Taylor Scott

Üzgünüm, bayt sayısı için değişken isimlerini düzelttim. N. Basamağa gelince, sadece n =? Tanımlamam mı gerekiyor yoksa kullanıcı girişi mi almam gerekiyor?
a13a22

Görünüşe göre çoktan anladım, ancak kullanıcıdan giriş yapmasını istemeniz gerekir, ancak bu istemde herhangi bir biçimlendirme olması gerekmez, bu nedenle bunun input('')yerine bir kullanıminput('n')
Taylor Scott,

1

Julia, 63 bayt

1 endeksli

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

Pi veya e'yi bir dizgeye dönüştürür, ondalık haneyi kaldırır ve ardından uygun basamağı çağırır. Rakamın karakter gösterimini döndürür.


1
PPCG'ye Hoşgeldiniz!
Martin Ender,

1

C # + BigDecimal , 377 372 bayt

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

@Kevin Cruijssen sayesinde 5 byte kurtarıldı.

Harici kütüphane yüzünden TIO bağlantısı yok, maalesef C # 'nın yerleşik bir BigDecimalsınıfı yok, bu yüzden bu harici birinin yapması gerekecek. Muhtemelen bazı golf hala mümkün ama şu anda zaman.

Tam / Biçimli Sürüm:

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

Arkanı parantez hendek x[j++]/ede c=(x[j++]/e)*niçin -2 bayt; Ayrıca, +""iki return ifadesinde her ikisini de kaldırabilir ve string yerine bir int döndürebilir ve -48char'i int çıkışına dönüştürmek için ikinci return ifadesinde ekleyebilir (-1 bayt için).
Kevin Cruijssen

@KevinCruijssen Her ikisi de gayet iyi teşekkürler!
TheLethalCoder

1

Python 2 , 82 bayt

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

Çevrimiçi deneyin!

Bazı yazdırılamayan ASCII karakterleri içerir. Flornquake iki bayt kurtardı.


Bu, örneğin n = 64, n = 65 için kırılır. Bunu düzeltmenin en iyi yolunun ne olduğundan emin değilim, belki de lambda n:('%02d'%ord('...'[n/2]))[n%2]daha iyi bir şey olsa da.
Flornquake

@flornquake kahretsin, haklısın. Bir bayt kısa süren bir düzeltme yazdım. daha iyi bir şey düşünemiyorum
Lynn

Güzel. İşte fikrinize dayanarak daha kısa bir şey: TIO
flornquake

0

Neim , 45 bayt

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

neim ondalık sayılar için yapılmaz

Çevrimiçi deneyin!


0

Befunge , 105 bayt

3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919&0g,@

Bazı nedenlerden dolayı TIO'da çalışmaz çünkü satırları dahili olarak 80 karaktere kaydırır. Her rakamı yeni bir satıra koyarak ve &0g,@ardından 3ilk satırda bulundurarak TIO üzerinde çalışmasını sağlayabilirsiniz .


1
: Befunge 98 ile TIO üzerinde para cezası Works tio.run/##Hcg7DsJAEATRqzgiwtJO9/w64yxIxhkiIeD0y0JUpXc/Hu/neezq/...
pppery

0

JavaScript (ES6) + matematik , 78 bayt

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

Sıfır indekslenir ve 128 sayıya kadar çalışır (maksimum 127 giriş).

Test Parçacığı

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 (Sembolik Araç Kutusu ile), 89 82 bayt

Sembolik Araç Kutusu'nu kullanarak, bu cevap pi ve e değerlerini kodlamadan bir çıktı sağlar.

Eğlenceli bir bonus olarak, bir giriş olarak bu kod tek bir indeksi veya bir indeks dizisini alabilir ve sağlanan tüm endeks değerleri için aynı anda çıkış değerini sağlar (örneğin, 1:10 sağlanması ilk 10 değeri verir).

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

(okunabilirlik için yeni satırlar eklendi, yürütme için gerekli değil, bayt sayısına dahil edilmedi)

Maalesef TIO tarafından kullanılan Octave sürümü, vpaişlevin sembolik girişlerini desteklemiyor , bu nedenle TIO bağlantısında bulunamıyor.

MATLAB'da bir fonksiyondan dönüş vektörüne indeksleme, Octave ile aynı şekilde mümkün değildir; bu, bunun sadece isimsiz bir fonksiyondan ziyade tam bir program olduğu anlamına gelir. Program nyürütme sırasında bir girdi isteyecektir - bu, elemanın gerekli olduğu endeksli bir değerdir. Programın sonunda bu değer örtük olarak basılmıştır.

Programda vpa51 ondalık basamağa kadar olan fonksiyonu kullanırız pive exp(1)(e). Bu, teorik olarak sonsuz hassasiyete izin vermek için sembolik olarak yapılır. 100'den fazla öğe için genişletmek üzere 51, aralığı artırmak için koddaki değeri artırmanız yeterlidir .

Sarma vpaolarak char(diğer bir deyişle char(vpa(...))) bir dizi yerine sembolik değere fonksiyonun çıkışını dönüştürmek için gereklidir. Sonuçta ortaya çıkan çıktı dizgedir:

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

Bu, hem e hem pi'yi 51'e kadar ondalık basamağı içerir - çıktımızın 100 basamağına izin verecek kadar yeterlidir (yuvarlanmış değerleri yazdırmamak için gerekenden biraz daha fazla dp yapmamız gerekir)

Bu karışıklığa indekslemek için, her iki rakam dizesinin bitişik olması için en azından ondalık noktalardan kurtulmamız gerekir. Başlangıçta hiçbir şey ile bir rakam olmayan bir şey basit bir regex değiştirme kullandım. Ancak kodu kullanarak yalnızca ondalık basamaktan kurtularak 7 bayt kaydedebilirim:

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

sonuçta ortaya çıkan dize şimdi:

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

Bu, ardışık indekslerde hem pi hem de e topakları ile ihtiyacımız olan tüm rakamları içerir.

Daha sonra verilen indeksi, hesaplamayı kullanarak tekli sayılar pi öbekine erişecek ve hatta e öbeklerine erişecek şekilde dönüştürebiliriz:

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

Yukarıdaki dizgede bu (bu) dizine (dizinler) erişmek doğru çıktı sağlayacaktır.


0

Aksiyom, 148 bayt

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 tabanlı dizi. Sonuçlar

(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 Sayfaları, 47 Bayt

Not: Excel ve Google Sayfalarında depolanan sabitlerin uzunluğu nedeniyle, bu çözüm buna göre yalnızca 20 hane için doğrudur.

Hücreden girdi alan A1ve Pie'nin bu basamağını arayan hücreye çıkaran Anonim Çalışma Sayfası işlevi

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

Sabit Kodlu Versiyon, 112 Bayt

Bu sürüm tamamen programın özelliklerini karşılar, ancak genellikle eğlenceli değildir.

Pasta 1-indexed listesinde nth basamağını döndüren anonim çalışma sayfası işlevi

=Mid("3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919",A1,1

Ondalık noktaya kaydırmak için 10'a bölerek (SUBSTITUTE yerine) ilk çözümde birkaç bayt tasarruf edebilirsiniz.
Wernisch

0

BFASM , 142 bayt

stk 0
org 0
txt "3217411852982168523854859970943522338543662062483734873123759256062284894717957712649730999336795919"
in_ r1
rcl r2, r1
r2 dışında

Girişi ascii karakteri olarak alır, çıktıyı rakam şeklinde verir.


0

brainfuck , 5971 bayt

Diğer bfasm cevabımın direkt çevirisi.

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.