Golf nomor transendental


46

Definisi

  • Bilangan aljabar adalah bilangan yang merupakan nol dari polinomial non-nol dengan koefisien integer. Misalnya, akar kuadrat dari 2adalah aljabar, karena itu adalah nol x^2 - 2.
  • Bilangan transendental adalah bilangan real yang bukan aljabar.

Tugas

Anda harus memilih nomor transendental.

Kemudian, tulis program / fungsi yang mengambil bilangan bulat positif ndan nhasilkan angka desimal ke- setelah titik desimal dari nomor transendental yang Anda pilih. Anda harus menyatakan dengan jelas dalam kiriman Anda, nomor transendental mana yang digunakan.

Anda dapat menggunakan pengindeksan 0 atau pengindeksan 1.

Contoh

e^2=7.389056098...adalah angka transendental. Untuk nomor ini:

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

Perhatikan bahwa inisial 7diabaikan.

Seperti yang saya sebutkan di atas, Anda dapat memilih nomor transendental lainnya.

Mencetak gol

Ini adalah . Skor terendah dalam byte menang.


Bagaimana jawaban yang berbeda menangani fakta bahwa ada sejumlah terbatas bilangan bulat yang dapat digunakan sebagai argumen? 0 akan menjadi jawaban yang dapat diterima karena ada bilangan transendental yang memiliki digit maxInteger pertama 0
WNG

1
@WNG Bahasa memiliki ketepatan yang berubah-ubah. Tidak ada maxinteger.
Leaky Nun

1
@WNG Anda dapat menganggap indeks input sebagai string, bukan bilangan bulat, dalam bahasa yang tidak memiliki tipe angka besar secara sewenang-wenang.
isaacg

Jawaban:


112

Python , 3 byte

min

Cobalah online!

Mengambil string angka, menampilkan digit terkecilnya sebagai karakter terkecil. Misalnya, 254memberi 2. Desimal dengan digit ini dimulai

0.0123456789011111111101222222220123333333012344444401234555550123456666012345678801234567

Ini adalah OEIS A054054 .

Klaim: Nomor ini cbersifat transendental

Bukti: Catatan yang csangat jarang: hampir semua digitnya nol. Itu karena besar n, ada probabilitas tinggi nmemiliki nol digit, memberikan digit nol. Selain itu, cmemiliki jangka panjang nol berturut-turut. Kami menggunakan hasil yang ada yang menyatakan bahwa ini berarti cbersifat transendental.

Mengikuti pertanyaan math.SE ini , mari kita Z(k)mewakili posisi kdigit bukan nol daric , dan mari c_kmenjadi digit bukan nol itu, seluruh angka antara 1dan 9. Kemudian, kita mengungkapkan ekspansi desimal c, tetapi hanya mengambil nol digit, sebagai sebagai jumlah lebih k=1,2,3,...dari c_k/10^Z(k).

Kami menggunakan hasil dari poin 4 dari jawaban ini oleh George Lowther: yaitu ctransendental jika ada banyak sekali angka nol yang setidaknya merupakan fraksi konstan dari jumlah digit sejauh ini. Secara formal, harus ada ε>0sehingga Z(k+1)/Z(k) > 1+εuntuk banyak orang k. Kami akan gunakanε=1/9

Untuk setiap jumlah digit d, mengambil kdengan Z(k) = 99...99dengan dsembilan. Seperti kada karena digit ini cadalah a 9, dan bukan nol. Menghitung dari99...99 , angka-angka ini semua mengandung angka nol, jadi ini menandai dimulainya nol dalam jangka panjang c. Digit bukan nol berikutnya tidak sampai Z(k+1) = 1111...11dengan yang d+1satu. Rasio Z(k+1)/Z(k)sedikit melebihi 1+1/9.

Ini memenuhi syarat untuk setiap d , menyiratkan hasilnya.


Saya akan sangat senang melihat buktinya.
Leaky Nun

1
Apakah ini diizinkan? minitu sendiri tidak mengambil input apa pun dan tidak memberikan output apa pun, sesuatu yang tampaknya menjadi persyaratan oleh pertanyaan itu. Tentu, ini adalah fungsi kunci secara keseluruhan, tetapi tidak melakukan apa-apa tanpa generator dan pernyataan cetak yang terlihat di 'Coba online'.
Mast

6
@ Ya, masalahnya adalah untuk mengeluarkan digit ke-n yang diberikan, bukan untuk menghasilkan desimal. Kode tes adalah untuk menunjukkan urutan angka. Dan ekspresi yang mengevaluasi fungsi, termasuk fungsi literal, adalah penyerahan fungsi yang valid .
xnor

1
menyenangkan :)))
Noodle9

38

Pyth, 1 byte

h

Input dan output adalah string. Fungsi ini mengambil digit pertama dari indeks. Angka transendental yang dihasilkan terlihat seperti:

0.0123456789111111111122222222223 ...

Ini transendental karena memang demikian 1/9 ditambah bilangan yang memiliki panjang nol nol setidaknya sebagian kecil dari bilangan itu. Berdasarkan jawaban math.stackexchange ini , itu berarti bahwa jumlahnya adalah transendental.

Ada rentang nol dari digit 100 ... 000ke 199 ... 999, jadi rasioZ(k+1) to Z(k)adalah 2 tak terhingga sering.

Dengan demikian, angka di atas minus 1/9adalah transendental, sehingga angka di atas adalah transendental.


1
Perhatikan bahwa pertanyaan yang diajukan dalam pos M.SE tertaut tidak berlaku untuk nomor ini, tetapi poin 4 dari jawaban oleh George Lowther.
Henning Makholm

16

Python 2 , 19 byte

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

The n th digit adalah 1 jika n adalah kekuatan 2 dan 0 sebaliknya.

Cobalah online!


3
Saya akan menjawab ini, tetapi saya tidak menemukan bukti transendensinya. Apa yang membuat Anda percaya bahwa angka ini transenden? n&~-n>0lebih pendek dengan cara.
orlp



@ Atau saya harus bertanya OP apakah Booleans baik-baik saja.
Dennis

1
@Scrooble Boolean Ini.
Dennis

11

brainfuck, 2 byte

,.

Demikian pula untuk beberapa jawaban lain, kembalikan digit desimal pertama dan abaikan sisanya.



5

Retina, 4 byte

1!`.

Mengembalikan digit pertama dari nomor input. Karena port itu sangat membosankan, berikut adalah beberapa port lagi:

O`.
1!`.

(8 byte) Mengembalikan digit minimum dari nomor input.

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

(25 byte) Mengembalikan 1 jika nomor input adalah kekuatan 2.

.+
$*_

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

(30 byte) Konstanta Champernowne.


4

Brachylog 2, 7 byte

⟦₁c;?∋₎

Cobalah online!

Menghitung digit dari konstan Champernowne (mungkin kali kekuatan sepuluh karena masalah pengindeksan, yang jelas tidak masalah di sini). Pada dasarnya, ini hanya menyatukan bilangan bulat, dan kemudian mengambil digit ke - n .


Mengapa Anda perlu ⟦₁?
Leaky Nun

@ LeakyNun: Karena kalau tidak kita akan mulai menggabungkan angka dengan 0, dan Anda tidak dapat melakukan itu karena 0123bukan angka (angka nol di depannya, yang tidak sesuai dengan konsep Brachylog tentang apa angka itu).

4

Python 2, 13 byte

Input dan output adalah string.

lambda n:n[0]

Digit n angka adalah digit n yang paling signifikan ketika ditulis dalam desimal.


4
Anda harus memasukkan mengapa angka ini transendental.
orlp

2
@orlp Sepertinya referensi xnor dapat dengan mudah diterapkan di sini juga - kurangi 1/9 dari angka dan kemudian Z (n + 1) / Z (n) ~ = 2 sering jauh (antara 10 ^ x dan 2 * 10 ^ x ).
feersum


3

JavaScript, 51 byte

Fungsi ini menghitung ndigit Konstan Champernowne. Tambahkan f=di awal dan aktifkan like f(arg). Perhatikan bahwa n1-diindeks.

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

Penjelasan

Fungsi ini mengambil satu argumen n. Ini, kemudian, menciptakan nString karakter-panjang 1s berulang. Kemudian, ia membagi String itu menjadi Array 1s. Setelah itu, ia mengulangi setiap elemen dari Array dan mengalikannya dengan indeks mereka di dalam Array yang bertambah dengan 1. Kemudian, ia menggabungkan Array bersama-sama di atas ""(String kosong) untuk membentuk sebuah String. Akhirnya, mengembalikann elemen th dari String yang diperoleh.

Catatan: Jenis nilai yang dikembalikan selalu berupa String .

Cuplikan Tes

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 byte

Konstanta Champernowne.

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

Mengapa Anda perlu n+1?
Leaky Nun

@ LeakyNun Karena lain saya mendapatkan kesalahan pengindeksan untuk n <= 1.
orlp

Anda dapat menggunakan pengindeksan 1.
Leaky Nun

@ LeakyNun n <= 1.
orlp

Saya pikir Anda perlu menentukan Python 2 untuk yang satu ini.
numbermaniac

3

APL (Dyalog) , 3 byte

2|⍴

Cobalah online! (ruang tes menghasilkan kisaran angka dari 1hingga 10000, mengubahnya menjadi string, dan kemudian menerapkan kereta 2|⍴pada mereka).

Mengambil nomor input sebagai string dan mengembalikan mod panjangnya 2. Jadi 123=> 3 mod 2=> 1.

Urutannya dimulai seperti ini:

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

jadi ini bisa digeneralisasi seperti: 9 1s 90 0s 900 1s ...

Mengalikan angka ini dengan 9 memberi kita angka Liouville , yang terbukti transendental.


Saya tidak berpikir ini adalah angka Liouville - tidak jelas bagi saya bahwa Anda bisa mendapatkan n> 10. Ini tidak sesuai dengan teorema kuat orang lain di sini telah menggunakan, meskipun.
Ørjan Johansen

@ ØrjanJohansen Anda dapat menyatakannya sebagai 1 - 10^-9 + 10^-99 - 10^-999 + 10^-9999 - 10^-99999 + ..., jadi ini adalah nomor Liouville.
Leaky Nun

@LeakyNun Fraksi eksponen berturut-turut adalah sekitar 10, tetapi agar sesuai dengan definisi di Wikipedia, harus tidak dibatasi - itulah sebabnya mengapa indeks 1 konstan Liouville asli menggunakan faktorial, dan bukan eksponensial.
Ørjan Johansen

3

Haskell, 25 byte 17 byte

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

Konstan Champernowne bisa 0 atau 1 diindeks karena C10 * .01 masih transendental.

Sunting: sesuai komentar nimis, Anda dapat menggunakan daftar monad untuk mengurangi ini

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

2
=<<dari daftar monad adalah concat.map: (!!)$show=<<[1..].
nimi

2

JavaScript, 73 byte

Ini adalah program yang menghitung ndigit ke-5 dari Konstanta Liouville, di mana nadalah nomor input yang diberikan dengan memanggil fungsi gsebagai g(arg)(dan ndiindeks 1). Perhatikan bahwa baris baru dalam kode diperlukan.

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}

Penjelasan

Program ini terdiri dari dua fungsi, fdan g. fadalah fungsi komputasi faktorial rekursif, dan gmerupakan fungsi utama program. g mengasumsikan memiliki argumen tunggal n. Ini mendefinisikan argumen default rdengan nilai 0. Ini, kemudian, iterates atas semua Integer dari 0 hingga n, dan, dalam setiap iterasi, memeriksa apakah fungsi yang fditerapkan lebih dari i(indeks saat ini) sama dengan n, yaitu apakah nmerupakan faktorial dari i. Jika itu yang terjadi,r nilainya diatur ke 1. Di akhir fungsi, rdikembalikan.

Cuplikan untuk Pengujian

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>

Peringatan: Jangan menaruh nilai yang sangat besar di kotak input Snippet! Jika tidak, perangkat Anda dapat membeku!


1

Pyth, 7 5 4 byte

@jkS

Cobalah online!

Menggunakan konstanta Champernowne.

Disimpan 2 3 byte berkat Leaky Nun.


1
Anda dapat menggunakan jkuntuk mengganti sm`d, saya percaya.
Leaky Nun

1
Bisakah Anda menggunakan Sbukan Uh?
Leaky Nun

Saya pikir mereka identik secara fungsional, jadi ya. Saya benar-benar membaca dokumen>.>
bertepuk tangan

Mereka tidak identik secara fungsional. Smulai dengan 1dan Umulai dengan 0.
Leaky Nun

Mengapa Anda mengembalikan hasil edit Anda? Jumlah yang dihasilkan masih transendental.
Leaky Nun



1

Arang , 24 byte (tidak bersaing)

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

Cobalah online!

Catatan: Pada waktu posting, tidak berfungsi untuk ntempat nkelipatan positif 14.

Penjelasan

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)? Jadi, tidak ada πvariabel yang ditentukan sebelumnya?
Neil

@Neil Belum, dan saya tidak bermaksud πmenyamai pi karena ini adalah bahasa yang berorientasi seni ASCII, bukan yang berorientasi matematika
hanya ASCII

1

Japt , 3 1 + 1 = 2 1 byte

Port lain dari solusi feersum .

Mengambil input sebagai string.

g

Cobalah online


Penjelasan

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

Input dapat berupa string, sehingga Anda dapat melakukannya gselama 1 byte :)
Oliver

Tantangannya tidak menyebutkan input string, @obarakon, jadi saya menggunakan integer di port JS saya dan kemudian, di sini, di sini.
Shaggy

Ah, mengerti. Banyak jawaban lain menggunakan input string. Tapi Anda benar, OP tidak menyebutkannya dalam tantangan.
Oliver

1

TI-BASIC, 16 byte

Pada dasarnya menguji apakah input N(1-diindeks) adalah angka segitiga. Ini sama dengan mengembalikan Ndigit ke-0,1010010001 ..., yang terbukti bersifat transendental. Urutan digit adalah OEIS A010054 .

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

0

Fourier, 16 byte

I~NL~S10PS~XN/Xo

Cobalah online!

Seperti jawaban lain yang telah dilakukan, output digit pertama dari input.

Penjelasan kode:

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

0

JavaScript (ES6)

Hanya beberapa port dari beberapa solusi lain


solusi Python feersum , 12 byte

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


Solusi Python Dennis , 13 byte

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


Solusi Python xnor , 20 byte

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



0

05AB1E , 3 1 byte

EDIT : Menggunakan bukti dari jawaban lain, mengembalikan digit input pertama

¬

1-diindeks untuk π (hanya hingga 100000 digit)

žs¤

Bagaimana itu bekerja

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

Atau, jika Anda lebih suka e (masih 1-diindeks) (hanya hingga 10.000 digit)

žt¤

Cobalah online!


0

J, 2 Bytes

Solusi yang sama yang digunakan orang lain:

{.

Mengembalikan digit pertama n. IO aktif

Liouville's Constant, 9 Bytes

(=<.)!inv

Mengembalikan 1jika input adalah faktorial dari integer.

Pi, 13 Bytes

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

Digit non-desimal terakhir kali pi 10 ^ n.





Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.