Aşkın bir sayı Golf


46

Tanımlar

  • Bir cebirsel sayı, tamsayı katsayıları ile sıfır olmayan bir polinomun sıfır olan bir sayıdır. Örneğin, kare kökü 2cebirseldir, çünkü sıfırdır x^2 - 2.
  • Aşkın bir sayı, cebirsel olmayan gerçek bir sayıdır.

Görev

Aşkın bir sayı seçmelisiniz.

Ardından, pozitif bir tamsayı alan nve seçtiğiniz aşkın sayının ondalık noktasından sonra n-th ondalık basamağı alan bir program / işlev yazın. Gönderiminizde, hangi aşkın sayının kullanıldığını açıkça belirtmelisiniz.

0 indeksleme veya 1 indeksleme kullanabilirsiniz.

Örnek

e^2=7.389056098...aşkın bir sayıdır. Bu numara için:

n output
1 3
2 8
3 9
4 0
5 5
6 6
7 0
8 9
9 8
...

İlk 7görmezden gelindiğini unutmayın.

Yukarıda belirttiğim gibi, diğer aşkın sayıları seçebilirsiniz.

puanlama

Bu . Bayt cinsinden en düşük puan kazanır.


Farklı cevaplar, argüman olarak kullanılabilecek sınırlı sayıda tamsayı olduğu gerçeğini nasıl ele alır? Aşkın bir sayı olan ilk maxInteger basamak 0 bulunduğu için 0 kabul edilebilir bir cevap olabilir
WNG

1
@WNG Dilleri isteğe bağlı kesinliğe sahiptir. Maxinteger yok.
Sızdıran Rahibe

1
@WNG Girdi indeksini, isteğe bağlı olarak büyük sayı türlerinde olmayan dillerde tam sayı değil, bir dize olarak düşünebilirsiniz.
isaacg

Yanıtlar:


112

Python , 3 bayt

min

Çevrimiçi deneyin!

Sayı dizesini alır, en küçük basamağını en küçük karakter olarak verir. Mesela 254verir 2. Bu rakamlarla ondalık işareti başlar.

0.0123456789011111111101222222220123333333012344444401234555550123456666012345678801234567

Bu OEIS A054054 .

Talep: Bu sayı caşkın

İspat:c Çok seyrek olduğuna dikkat edin : neredeyse tüm rakamları sıfırdır. Çünkü büyük n, yüksek bir olasılık nsıfır rakamı var, sıfır rakamı sıfır veriyor. Dahası, cardışık sıfır süreleri uzun sürer. Bu araçların caşkın olduğunu belirten mevcut bir sonuç kullanıyoruz .

Bu matematikten sonra. SE sorusu , sıfır olmayan basamağın Z(k)konumunu temsil etsin ve sıfır olmayan basamağın, ve arasında bir sayı olsun . Sonra, ondalık genişlemesini ifade fakat sadece üzerinde toplamı kadar, sıfırdan farklı basamak alarak bir .kcc_k19ck=1,2,3,...c_k/10^Z(k)

Bu cevabın 4. maddesinin sonucunu George Lowther tarafından kullanıyoruz: bu c, bugüne kadar en az basamak sayısının sabit bir fraksiyonu olan sonsuz sayıda sıfır koşusu varsa aşkındır. Resmen, sonsuz sayıda ε>0insan Z(k+1)/Z(k) > 1+εiçin öyle bir şey olmalı k. Kullanacağızε=1/9

Herhangi bir sayı hanesi için d, dokuz tane kile Z(k) = 99...99birlikte alın d. Böyle bir kvaroluş var, çünkü bu rakam cbir 9sıfırdır ve sıfırdır. Sayma 99...99, bu sayıların hepsi sıfır basamak içerir, bu yüzden içinde uzun bir sıfır akışının başlangıcını işaretler c. Bir sonraki sıfırdan farklı basamaklı kadar değil Z(k+1) = 1111...11ile d+1olanları. Oran Z(k+1)/Z(k)biraz fazla 1+1/9.

Bu d, sonucu ima ederek herkes için koşulu yerine getirir .


Kanıtı görmek beni çok heyecanlandırır.
Sızdıran Rahibe

1
Buna izin var mı? minkendisi herhangi bir girdi almaz ve herhangi bir çıktı sağlamaz, sorunun bir gereği gibi görünen bir şey. Elbette, bu anahtar fonksiyonun tamamıdır, ancak 'Çevrimiçi deneyin' de görünen jeneratör ve baskı ifadesi olmadan hiçbir şey yapmaz.
Direk

6
@En Evet, sorun ondalık verilen değil, n verilen n'inci basamağıdır. Test kodu, rakam dizisini göstermektir. Ayrıca, değişmez bir işlev de dahil olmak üzere bir işlevi değerlendiren bir ifade, geçerli bir işlev gönderimidir .
xnor

1
keyifli :)))
Noodle9

38

Pyth, 1 bayt

h

Giriş ve çıkış dizelerdir. İşlev, endeksin ilk basamağını alır. Elde edilen aşkın sayı şöyle görünür:

0.0123456789111111111122222222223 ...

Bu aşkınlıktır çünkü 1/9artı en az sabit bir sayı kesir uzunluğuna sahip olan uzunlukları olan bir sayıdır. Bu math.stackexchange cevabına dayanarak , sayının aşkın olduğu anlamına gelir.

Orada sıfırların uzanan hanesinden are 100 ... 000için 199 ... 999, bu oran Z(k+1)için Z(k)sonsuz genellikle 2'dir.

Bu nedenle, yukarıdaki sayı eksi 1/9aşkındır ve bu yüzden yukarıdaki sayı aşkındır.


1
O Not soru sordu bağlantılı M.SE yayınında bu numaraya için geçerli değildir, ama George Lowther'e tarafından cevabın noktası 4 yapar.
Henning Makholm

16

Python 2 , 19 bayt

lambda n:1>>(n&~-n)

N inci haneli 1 ise n bir gücü , 2 ve 0 , aksi.

Çevrimiçi deneyin!


3
Buna cevap verecektim, ama aşkınlığının kanıtı bulamadım. Bu sayının aşkın olduğuna inanmana sebep olan nedir? n&~-n>0bu arada daha kısa.
orlp

3
@orlp Yeterince az seyrek sayılar aşkındır .
xnor


@orlp Boole'lerin iyi olup olmadığını OP'ye sormam gerekiyor.
Dennis,

1
@Bu Yırtılmaz Bu
Dennis,

11

brainfuck, 2 bayt

,.

Diğer bazı cevaplara benzer şekilde ilk ondalık basamağı döndürür ve gerisini görmezden gelir.



5

Retina, 4 bayt

1!`.

Giriş numarasının ilk basamağını döndürür. Bu liman çok sıkıcı olduğu için, işte birkaç tane daha liman var:

O`.
1!`.

(8 bayt) Giriş numarasının minimum basamağını döndürür.

.+
$*
+`^(11)+$
$#1$*
^1$

(25 bayt) Giriş numarası 2 olan bir güç ise 1 değerini döndürür.

.+
$*_

$.`
+1`.(\d*)_
$1
1!`.

(30 bayt) Champernowne sabiti.


4

Brachylog 2, 7 bayt

⟦₁c;?∋₎

Çevrimiçi deneyin!

Champernowne sabitinin rakamlarını hesaplar (burada açıkça önemli olmayan indeksleme sorunlarından dolayı muhtemelen on katı). Temel olarak, bu sadece tamsayıları bir araya getirir ve sonra ns basamağını alır .


Neden Gereklidir ⟦₁?
Sızdıran Rahibe

@LeakyNun: Aksi taktirde sayıları 0 ile birleştirmeye başlayacağız ve bunu yapamazsınız çünkü 0123bir sayı değildir (Brachylog'un bir sayının ne olduğu kavramına uymayan bir baş sıfıra sahiptir).

4

Python 2, 13 bayt

Giriş ve çıkış dizelerdir.

lambda n:n[0]

Rakamın nt basamağı, ondalık basamakta yazıldığında n'nin en anlamlı basamağıdır.


4
Neden bu sayının aşkın olduğunu da eklemelisin.
orlp

2
@orlp Burada xnor'ın referansı da kolayca uygulanabilir. Görünüşe göre sayıdan 1/9 ve Z (n + 1) / Z (n) ~ = 2 sayısından sık sık çıkarın (10 ^ x ile 2 * 10 ^ x ).
feersum


3

JavaScript, 51 bayt

Bu işlev n, Champernowne Constant’in inci basamağını hesaplar . f=Başlangıçta ekleyin ve benzeri çağırır f(arg). n1 indeksli olduğuna dikkat edin .

n=>[..."1".repeat(n)].map((c,i)=>c*++i).join``[n-1]

açıklama

Bu işlev tek bir argüman alır n. Daha sonra, ntekrarlayan 1'lerin uzun karakterli bir karakterini yaratır . Sonra, o dizgiyi 1s dizisine böler. Ondan sonra, Array'in her elemanı üzerinde yinelenir ve bunları 1 ile Array içindeki indeksleriyle çoğaltır. Ardından, ""bir Dize oluşturmak için Array ile birleşir (boş Dize). Sonunda n, elde edilen String'in th elemanını döndürür .

Not: Döndürülen değerin türü her zaman Dize'dir .

Test Parçacığı

let f =

n=>[..."1".repeat(n)].map((c,i)=>c*++i).join``[n-1]

i.oninput = e => o.innerHTML = f(parseInt(e.target.value,10));
<input id=i><pre id=o></pre>


3

Python 2, 43 bayt

Champernowne sabiti.

lambda n:"".join(`i`for i in range(n+1))[n]

Neden Gereklidir n+1?
Sızdıran Rahibe

@LeakyNun Aksi takdirde n <= 1 için indeksleme hataları alıyorum çünkü
17:17

1 indeksleme kullanabilirsiniz.
Sızdıran Rahibe

@LeakyNun n <= 1.
orlp

Bunun için Python 2'yi belirtmeniz gerektiğini düşünüyorum.
numbermaniac

3

APL (Dyalog) , 3 bayt

2|⍴

Çevrimiçi deneyin! (test paketi gelen sayı aralığı oluşturur 1üzere 10000, bir dizeye dönüştürür, sonra da trene uygular 2|⍴onlara).

Giriş numarasını bir dizge olarak alır ve uzunluğu 2 modunu döndürür. So 123=> 3 mod 2=> 1.

Dizi şöyle başlar:

1  1  1  1  1  1  1  1  1  0  0  0  0  0  0  ...

bu nedenle bu şekilde genelleştirilebilir: 9 1s 90 0s 900 1s ...

Bu sayının 9 ile çarpılması bize aşkın olduğu kanıtlanmış bir Liouville numarası verir .


Bunun mutlaka bir Liouville numarası olduğunu sanmıyorum - n> 10 alabileceğiniz bana göre açık değil. Yine de , buradaki diğer insanların kullandığı daha güçlü teoremi uyuyor.
Ørjan Johansen

@ ØrjanJohansen Bunu 1 - 10^-9 + 10^-99 - 10^-999 + 10^-9999 - 10^-99999 + ...bir Liouville numarası olarak ifade edebilirsiniz .
Sızdıran Rahibe

@LeakyNun Ardışık üstellerin kesri yaklaşık 10'dur, ancak Wikipedia'daki tanımına uyması için sınırlandırılmaması gerekiyor - bu nedenle orijinal Liouville'in sabitinin 1-endeksleri bir üstel kullanıyor, üstel değil.
Ørjan Johansen

3

Haskell, 25 bayt 17 bayt

(!!)$concat$map show[1..]

Champernowne Constant , C10 * .01 hala aşkın olduğu için 0 veya 1 indekslenebilir.

Düzenleme: nimis yorumuna göre bunu azaltmak için monad listesini kullanabilirsiniz.

(!!)$show=<<[1..]

2
=<<Liste monad dan concat.map: (!!)$show=<<[1..].
nimi,

2

JavaScript, 73 bayt

Bu hesaplar bir program nLiouville Constant, inci basamak nfonksiyonu çağıran ile verilen giriş numarası olduğu gşekilde g(arg)(ve n1-endeksli). Koddaki yeni satırın gerekli olduğunu unutmayın.

f=n=>n<1?1:n*f(n-1);g=(n,r=0)=>{for(i=0;i<=n;i++)if(f(i)==n)r=1
return r}

açıklama

Program iki fonksiyondan oluşmaktadır fve g. fözyinelemeli bir faktörel hesaplama işlevidir ve gprogramın ana işlevidir. tek bir argüman g olduğunu varsayarn . r0 değerine sahip varsayılan bir argüman tanımlar . Daha sonra, tüm Tamsayılar üzerinde 0'dan ntekrar eder ve her bir yinelemede, fuygulanan işlevin i(geçerli dizin) eşit nolup olmadığını, yani nfaktörü olup olmadığını kontrol eder i. Bu durumda, r's değeri 1 olarak ayarlanır. İşlev sonunda rdöndürülür.

Test için Snippet

f=n=>n<1?1:n*f(n-1);g=(n,r=0)=>{for(i=0;i<=n;i++)if(f(i)==n)r=1
return r}

i.oninput = e => o.innerHTML = g(parseInt(e.target.value,10))
<input id=i><pre id=o></pre>

Uyarı: Snippet'in giriş kutusuna çok büyük bir değer koymayın! Aksi takdirde, cihazınız donabilir!


1

Pyth, 7 5 4 bayt

@jkS

Çevrimiçi deneyin!

Champernowne sabitini kullanır.

Leaky Nun sayesinde 2 3 bayt kaydedildi .


1
jkdeğiştirmek için kullanabilirsiniz sm`d, inanıyorum.
Sızdıran Rahibe

1
Eğer kullanabilir miyim Syerine Uh?
Sızdıran Rahibe

İşlevsel olarak aynı olduklarını düşünüyorum, yani evet. . Tamamen belgeler>> okumak
çırpmak

İşlevsel değiller. Sile başlar 1ve ile Ubaşlar 0.
Sızdıran Rahibe

Düzenlemenizi neden geri aldınız? Ortaya çıkan sayı hala aşkın.
Sızdıran Rahibe



1

Kömür , 24 bayt (rekabetçi olmayan)

NαAIUVN⟦UGPi⁺α¹⟧β§β⁺α›α⁰

Çevrimiçi deneyin!

Not: yayının zaman itibariyle için çalışma yapmaz nnerede n14 olumlu katıdır.

açıklama

Nα                             Input number to a
   A                  β        Assign to b
     I                         Cast
       UVN                    Evaluate variable N
            ⟦UGPi⁺α¹⟧         With arguments GetVariable(Pi) and a+1
                        §β⁺α›α⁰ Print b[a+(a>0)]

GetVariable(Pi)? Yani πönceden tanımlanmış bir değişken yok mu?
Neil

@Neil Henüz değil ve pi'ye πeşit davranmaya niyetli değilim çünkü bu bir ASCII-sanat odaklı bir dil, matematik odaklı değil
ASCII-sadece

1

Japt , 3 1 + 1 = 2 1 bayt

Bir başka feersum çözümü limanı .

Bir dize olarak girdi alır.

g

Çevrimiçi deneyin


açıklama

   :Implicit input of string U
g  :The first character of the string

Giriş bir dize olabilir, bu nedenle g1 byte için yapabilirsiniz :)
Oliver

Buradaki zorluk, dize girdisi, @obarakon'dan bahsetmiyor, bu yüzden JS portlarımda tamsayıları kullandım ve daha sonra burada.
Shaggy

Ah, anladım. Diğer cevapların çoğu dize girişlerini kullandı. Ama haklısın, OP mücadeleden bahsetmedi.
Oliver

1

TI-BASIC, 16 bayt

Temel olarak, girişin N(1 indeksli) üçgen bir sayı olup olmadığını test eder . Bu, aşkın Nolduğu kanıtlanmış olan 0.1010010001… ' in th basamakını döndürmekle aynıdır . Rakamların sırası OEIS A010054'dür .

Input N
int(√(2N
2N=Ans(Ans+1

0

Fourier, 16 bayt

I~NL~S10PS~XN/Xo

Çevrimiçi deneyin!

Diğer cevaplarda olduğu gibi, girişin ilk basamağını çıkarır.

Kodun açıklaması:

N = User Input
S = log(N)
X = 10 ^ S
Print (N/X)

0

JavaScript (ES6)

Bazı diğer çözümlerden sadece birkaç port


feersum'un Python çözümü , 12 bayt

n=>(""+n)[0]


Dennis Python çözümü , 13 bayt

n=>1>>(n&--n)


xnor'ın Python çözümü , 20 bayt

n=>Math.min(...""+n)



0

05AB1E , 3 1 bayt

EDIT : Diğer cevaplardaki ispatları kullanarak, girişin ilk basamağını döndürür.

¬

Π için 1 dizin (yalnızca 100000 basamağa kadar)

žs¤

Nasıl çalışır

žs  # Implicit input. Gets n digits of pi (including 3 before decimal)
  ¤ # Get last digit

Veya, e'yi (hala 1 indeksli) tercih ederseniz (yalnızca 10000 basamağa kadar)

žt¤

Çevrimiçi deneyin!


0

J, 2 Bayt

Herkesin kullandığı aynı çözümü:

{.

N'nin ilk basamağını döndürür. GÇ telleri açık

Liouville Sabiti, 9 Bayt

(=<.)!inv

İade 1girişi tamsayı faktöryel ise.

Pi, 13 Bayt

{:":<.@o.10x^

Pi zamanlarının son olmayan ondalık basamağı 10 ^ n.





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.