Golf liczba transcendentalna


46

Definicje

  • Liczba algebraiczna to liczba, która jest zerem niezerowego wielomianu o współczynnikach całkowitych. Na przykład pierwiastek kwadratowy z 2jest algebraiczny, ponieważ wynosi zero x^2 - 2.
  • Liczba transcendentalna jest liczbą rzeczywistą, która nie jest algebraiczna.

Zadanie

Masz wybrać liczbę transcendentalną.

Następnie napisz program / funkcję, która przyjmuje dodatnią liczbę całkowitą ni nwypisuje -tą cyfrę dziesiętną po przecinku wybranej liczby transcendentalnej. W swoim poddaniu musisz jasno określić, który numer transcendentalny jest używany.

Możesz użyć indeksowania 0 lub indeksowania 1.

Przykład

e^2=7.389056098...jest liczbą transcendentalną. Dla tego numeru:

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

Zauważ, że inicjał 7jest ignorowany.

Jak wspomniałem powyżej, możesz wybrać inne liczby transcendentalne.

Punktacja

To jest . Najniższy wynik w bajtach wygrywa.


Jak różne odpowiedzi radzą sobie z faktem, że istnieje skończona liczba liczb całkowitych, które można wykorzystać jako argument? 0 byłoby akceptowalną odpowiedzią, ponieważ istnieje liczba transcendentalna, której pierwsze cyfry maxInteger to 0
WNG

1
@WNG Języki mają dowolną precyzję. Nie ma maksymalnej liczby.
Leaky Nun

1
@WNG Możesz myśleć o indeksie wejściowym jako o łańcuchu, a nie o liczbie całkowitej, w językach, które nie mają dowolnie dużych liczb.
isaacg

Odpowiedzi:


112

Python , 3 bajty

min

Wypróbuj online!

Pobiera ciąg liczbowy, wyświetla najmniejszą cyfrę jako najmniejszy znak. Na przykład 254daje 2. Rozpoczyna się ułamek dziesiętny z tymi cyframi

0.0123456789011111111101222222220123333333012344444401234555550123456666012345678801234567

To jest OEIS A054054 .

Twierdzenie: Liczba ta cjest transcendentalna

Dowód: Zauważ, że cjest bardzo rzadki: prawie wszystkie jego cyfry mają zero. Jest tak, ponieważ duże n, istnieje duże prawdopodobieństwo, że nma cyfrę zero, co daje cyfrę min zero. Co więcej, cma długie serie kolejnych zer. Używamy istniejącego wyniku, który stwierdza, że ​​oznacza to, że cjest to transcendentalne.

Po tym pytaniu matematycznym , niech Z(k)reprezentuje pozycję kcyfry niezerowej ci niech c_kbędzie tą niezerową cyfrą, liczbą całkowitą pomiędzy 1i 9. Następnie możemy wyrazić ekspansję dziesiętną c, ale tylko biorąc niezerowe cyfry, a jako sumę ponad k=1,2,3,...od c_k/10^Z(k).

Korzystamy z wyniku punktu 4 tej odpowiedzi George Lowther: cjest to transcendentalne, jeśli istnieje nieskończenie wiele przebiegów zer, które są co najmniej stałą ułamkiem liczby cyfr do tej pory. Formalnie musi istnieć coś ε>0takiego Z(k+1)/Z(k) > 1+εdla nieskończenie wielu k. Użyjemyε=1/9

Dla dowolnej liczby cyfr d, weź kze Z(k) = 99...99z ddziewiątek. Taki kistnieje, ponieważ ta cyfra w cjest 9, a więc niezerowa. Licząc od 99...99, wszystkie te liczby zawierają cyfrę zero, więc oznacza to początek długiego ciągu zer c. Następna niezerowa cyfra jest dostępna tylko Z(k+1) = 1111...11po d+1nich. Współczynnik Z(k+1)/Z(k)nieznacznie przekracza 1+1/9.

Spełnia to warunek dla każdego d, sugerując wynik.


Byłbym bardzo podekscytowany widząc dowód.
Leaky Nun

1
Czy to jest dozwolone? minsam nie przyjmuje żadnych danych wejściowych i nie dostarcza danych wyjściowych, co wydaje się być wymagane przez pytanie. Oczywiście jest to kluczowa funkcja, ale nie robi nic bez generatora i instrukcji drukowania widocznej w „Wypróbuj online”.
Maszt

6
@Mast Tak, problemem jest wyprowadzenie n-tej cyfry podanej n, a nie generowanie dziesiętnej. Kod testowy pokazuje sekwencję cyfr. A wyrażenie, które ocenia na funkcję, w tym literał funkcji, jest poprawnym przesłaniem funkcji .
xnor

1
zachwycający :)))
Noodle9

38

Pyth, 1 bajt

h

Dane wejściowe i wyjściowe są łańcuchami. Funkcja przyjmuje pierwszą cyfrę indeksu. Wynikowa liczba transcendentalna wygląda następująco:

0.0123456789111111111122222222223 ...

Jest to transcendentalne, ponieważ jest 1/9plus liczba, która ma odcinki zer długości co najmniej stałego ułamka liczby. W oparciu o tę odpowiedź matematyczna.stackexchange oznacza to, że liczba jest transcendentalna.

Są odcinki zer od cyfr 100 ... 000do 199 ... 999, więc stosunek Z(k+1)do Z(k)wynosi 2 nieskończenie często.

Zatem powyższa liczba minus 1/9jest transcendentalna, a zatem powyższa liczba jest transcendentalna.


1
Zwróć uwagę, że pytanie zadane w połączonym poście M.SE nie dotyczy tego numeru, ale punkt 4 odpowiedzi George Lowther tak.
Henning Makholm

16

Python 2 , 19 bajtów

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

N p cyfrą jest 1 , gdy n jest potęgą liczby 2 i 0 inaczej.

Wypróbuj online!


3
Chciałem odpowiedzieć na to pytanie, ale nie znalazłem dowodu jego transcendencji. Co sprawia, że ​​uważasz, że ta liczba jest transcendentna? n&~-n>0przy okazji jest krótszy.
lub



@orlp Musiałbym zapytać OP, czy booleany mają się dobrze.
Dennis

1
@ Scrooble These
Dennis,

11

pieprzenie mózgu, 2 bajty

,.

Podobnie jak niektóre inne odpowiedzi, zwraca pierwszą cyfrę dziesiętną, a resztę ignoruje.



5

Siatkówka, 4 bajty

1!`.

Zwraca pierwszą cyfrę numeru wejściowego. Ponieważ ten port był tak nudny, oto kilka innych portów:

O`.
1!`.

(8 bajtów) Zwraca minimalną cyfrę liczby wejściowej.

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

(25 bajtów) Zwraca 1, jeśli liczba wejściowa jest potęgą 2.

.+
$*_

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

(30 bajtów) Stała Champernowne.


4

Brachylog 2, 7 bajtów

⟦₁c;?∋₎

Wypróbuj online!

Oblicza cyfry stałej Champernowne (być może razy potęga dziesięciu z powodu problemów z indeksowaniem, które oczywiście nie mają znaczenia tutaj). Zasadniczo, to po prostu łączy liczby całkowite, a następnie przyjmuje n-tą cyfrę.


Dlaczego musisz ⟦₁?
Leaky Nun

@LeakyNun: Ponieważ w przeciwnym razie zaczęlibyśmy konkatenować liczby z 0, a ty nie możesz tego zrobić, ponieważ 0123nie jest liczbą (ma wiodące zero, które nie pasuje do koncepcji Brachylog dotyczącej tego, czym jest liczba).

4

Python 2, 13 bajtów

Dane wejściowe i wyjściowe są łańcuchami.

lambda n:n[0]

N-ta cyfra liczby jest najbardziej znaczącą cyfrą n, gdy jest zapisywana dziesiętnie.


4
Powinieneś podać, dlaczego ta liczba jest transcendentalna.
lub

2
@orlp Wygląda na to, że odniesienie xnor może być tutaj łatwo zastosowane - odejmij 1/9 od liczby, a następnie Z (n + 1) / Z (n) ~ = 2 nieskończenie często (od 10 ^ x do 2 * 10 ^ x ).
feersum


3

JavaScript, 51 bajtów

Ta funkcja oblicza ncyfrę stałej Champernowne. Dodaj f=na początku i wywołaj jak f(arg). Pamiętaj, że njest indeksowany 1.

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

Wyjaśnienie

Ta funkcja przyjmuje pojedynczy argument n. Następnie tworzy nciąg znaków o długości-powtarzających się 1s. Następnie dzieli ten ciąg na tablicę 1s. Następnie iteruje się nad każdym elementem tablicy i mnoży je z ich indeksem w tablicy inkrementowanym o 1. Następnie łączy tablicę razem ""(pusty ciąg), tworząc ciąg. W końcu zwraca nelement th otrzymanego ciągu.

Uwaga: Typ zwracanej wartości to zawsze Ciąg .

Test Snippet

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 bajty

Stała Champernowne.

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

Dlaczego musisz n+1?
Leaky Nun

@LeakyNun Ponieważ inaczej dostaję błędy indeksowania dla n <= 1.
orlp

Możesz użyć indeksowania 1.
Leaky Nun

@LeakyNun n <= 1.
lub

Myślę, że musisz podać Python 2 dla tego.
numbermaniac

3

APL (Dyalog) , 3 bajty

2|⍴

Wypróbuj online! (zestaw testów generuje zakres liczb od 1do 10000, konwertuje je na ciąg, a następnie stosuje 2|⍴na nich pociąg ).

Pobiera liczbę wejściową jako ciąg znaków i zwraca jej mod długości 2. Więc 123=> 3 mod 2=> 1.

Sekwencja zaczyna się tak:

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

więc można to uogólnić w następujący sposób: 9 1s 90 0s 900 1s ...

Pomnożenie tej liczby przez 9 daje nam liczbę Liouville , o której udowodniono, że jest transcendentalna.


Nie sądzę, żeby to była liczba Liouville - nie jest dla mnie oczywiste, że możesz uzyskać n> 10. Odpowiada to jednak silniejszemu twierdzeniu, które używali inni ludzie.
Ørjan Johansen

@ ØrjanJohansen Możesz wyrazić to jako 1 - 10^-9 + 10^-99 - 10^-999 + 10^-9999 - 10^-99999 + ..., więc jest to numer Liouville.
Leaky Nun

@LeakyNun Część kolejnych wykładników wynosi około 10, ale aby zmieścić się w definicji na Wikipedii, musi być nieograniczona - dlatego współczynniki 1 stałej oryginalnej Liouville'a używają silni, a nie wykładniczej.
Ørjan Johansen

3

Haskell, 25 bajtów 17 bajtów

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

Stała Champernowne może być zindeksowana 0 lub 1, ponieważ C10 * .01 jest wciąż transcendentalny.

Edycja: zgodnie z komentarzem nimisa możesz użyć listy monad, aby to zmniejszyć

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

2
=<<z listy monady jest concat.map: (!!)$show=<<[1..].
nimi

2

JavaScript, 73 bajty

Jest to program, który oblicza ndziesiątą cyfrę stałej Liouville'a, gdzie njest liczbą wejściową podaną przez wywołanie funkcji gjako g(arg)(i njest indeksowana 1). Pamiętaj, że nowa linia w kodzie jest konieczna.

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}

Wyjaśnienie

Program składa się z dwóch funkcji foraz g. fjest rekurencyjną funkcją obliczeniową i gjest główną funkcją programu. g zakłada jeden argument n. Definiuje domyślny argument ro wartości 0. Następnie iteruje wszystkie liczby całkowite od 0 do ni, w każdej iteracji, sprawdza, czy fzastosowana funkcja i(bieżący indeks) jest równa n, tj. Czy njest silnia z i. Jeśli tak się dzieje, rwartość jest ustawiana na 1. Na końcu funkcji rzwracana jest wartość.

Urywek do testowania

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>

Ostrzeżenie: nie umieszczaj bardzo dużej wartości w polu wprowadzania Snippet! W przeciwnym razie urządzenie może się zawiesić!


1

Pyth, 7 5 4 bajtów

@jkS

Wypróbuj online!

Wykorzystuje stałą Champernowne.

Zaoszczędzono 2 3 bajty dzięki Dziurawej Zakonnicy.


1
wierzę, że możesz użyć jkdo zastąpienia sm`d
Leaky Nun

1
Czy możesz użyć Szamiast Uh?
Leaky Nun

Myślę, że są funkcjonalnie identyczne, więc tak. Całkowicie przeczytałem dokumenty>.>
klaszczę

Nie są funkcjonalnie identyczne. Szaczyna się od 1i Uzaczyna się od 0.
Leaky Nun

Dlaczego cofnąłeś swoją edycję? Wynikowa liczba jest nadal transcendentalna.
Leaky Nun



1

Węgiel , 24 bajty (niekonkurencyjny)

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

Wypróbuj online!

Uwaga: Począwszy od postu czasie, nie działa n, gdzie njest dodatnia wielokrotność 14.

Wyjaśnienie

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)? Więc nie ma πpredefiniowanej zmiennej?
Neil

@Neil Jeszcze nie i nie zamierzam πwyrównywać liczby pi, ponieważ jest to język zorientowany na sztukę ASCII, a nie zorientowany na matematykę
tylko ASCII

1

Japt , 3 1 + 1 = 2 1 bajt

Kolejny port rozwiązania feersum .

Pobiera dane wejściowe jako ciąg.

g

Wypróbuj online


Wyjaśnienie

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

Dane wejściowe mogą być ciągiem, więc możesz zrobić gdla 1 bajtu :)
Oliver

Wyzwanie nie wspomina o ciągach wejściowych @obarakon, więc użyłem liczb całkowitych w moich portach JS, a następnie z kolei tutaj.
Kudłaty

Ach, gotcha. Wiele innych odpowiedzi używało wejściowych ciągów znaków. Ale masz rację, OP nie wspomniał o tym w wyzwaniu.
Oliver

1

TI-BASIC, 16 bajtów

Zasadniczo sprawdza, czy wejście N(indeksowane 1) jest liczbą trójkątną. Jest to to samo, co zwracanie Ndziesiątej cyfry 0.1010010001…, która okazała się transcendentalna. Sekwencja cyfr to OEIS A010054 .

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

0

Fourier, 16 bajtów

I~NL~S10PS~XN/Xo

Wypróbuj online!

Podobnie jak inne odpowiedzi, wypisuje pierwszą cyfrę wejścia.

Objaśnienie kodu:

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

0

JavaScript (ES6)

Tylko kilka portów innych rozwiązań


feersum's Python solution , 12 bytes

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


Rozwiązanie Dennisa w języku Python , 13 bajtów

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


xnor rozwiązanie Python , 20 bajtów

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



0

05AB1E , 3 1 bajt

EDYCJA : Korzystając z dowodu z innych odpowiedzi, zwraca pierwszą cyfrę wejścia

¬

1 indeksowany dla π (tylko do 100000 cyfr)

žs¤

Jak to działa

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

Lub, jeśli wolisz e (nadal 1-indeksowany) (tylko do 10000 cyfr)

žt¤

Wypróbuj online!


0

J, 2 bajty

To samo rozwiązanie, z którego korzystają wszyscy inni:

{.

Zwraca pierwszą cyfrę n. IO jest na sznurkach

Stała Liouville'a, 9 bajtów

(=<.)!inv

Zwraca, 1jeśli wejście jest silnią liczby całkowitej.

Pi, 13 bajtów

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

Ostatnia nie dziesiętna cyfra pi razy 10 ^ n.





Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.