Golf một số siêu việt


46

Định nghĩa

  • Một số đại số là một số bằng 0 của một đa thức khác không với các hệ số nguyên. Ví dụ, căn bậc hai của 2đại số, bởi vì nó là số không x^2 - 2.
  • Một số siêu việt là một số thực không phải là đại số.

Bài tập, nhiệm vụ

Bạn phải chọn một số siêu việt.

Sau đó, viết một chương trình / hàm lấy một số nguyên dương nvà xuất ra chữ số thập phânn -th sau dấu thập phân của số siêu việt đã chọn của bạn. Bạn phải nêu rõ trong bài nộp của mình, số siêu việt nào được sử dụng.

Bạn có thể sử dụng lập chỉ mục 0 hoặc lập chỉ mục 1.

Thí dụ

e^2=7.389056098...là một số siêu việt. Đối với số này:

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

Lưu ý rằng ban đầu 7được bỏ qua.

Như tôi đã đề cập ở trên, bạn có thể chọn các số siêu việt khác.

Chấm điểm

Đây là . Điểm thấp nhất trong byte thắng.


Làm thế nào để các câu trả lời khác nhau xử lý thực tế là có một số nguyên hữu hạn có thể được sử dụng làm đối số? 0 sẽ là một câu trả lời chấp nhận được vì một số siêu việt tồn tại có chữ số maxInteger đầu tiên là 0
WNG

1
@WNG Ngôn ngữ có độ chính xác tùy ý. Không có maxinteger.
Leaky Nun

1
@WNG Bạn có thể nghĩ chỉ mục đầu vào là một chuỗi, không phải là số nguyên, trong các ngôn ngữ không có loại số lớn tùy ý.
isaacg

Câu trả lời:


112

Python , 3 byte

min

Hãy thử trực tuyến!

Lấy một chuỗi số, xuất ra chữ số nhỏ nhất của nó dưới dạng một ký tự nhỏ nhất. Ví dụ, 254cho 2. Số thập phân có các chữ số này bắt đầu

0.0123456789011111111101222222220123333333012344444401234555550123456666012345678801234567

Đây là OEIS A054054 .

Yêu cầu: Con số cnày là siêu việt

Bằng chứng: Lưu ý rằng crất thưa thớt: hầu như tất cả các chữ số của nó đều bằng không. Đó là vì lớn n, xác suất cao ncó chữ số 0, cho chữ số tối thiểu bằng 0. Hơn nữa, cđã chạy dài các số 0 liên tiếp. Chúng tôi sử dụng một kết quả hiện có nói rằng điều này có nghĩa clà siêu việt.

Theo câu hỏi toán học này . Hãy Z(k)biểu diễn vị trí của kchữ số khác không c, và hãy c_klà chữ số khác không, một số nguyên giữa 19. Sau đó, chúng tôi biểu thị sự mở rộng thập phân của c, nhưng chỉ lấy các chữ số khác không, làm tổng k=1,2,3,...của c_k/10^Z(k).

Chúng tôi sử dụng kết quả của điểm 4 của câu trả lời này của George Lowther: đó clà siêu việt nếu có vô số các số 0 ít nhất là một phần không đổi của số chữ số cho đến nay. Chính thức, phải có một ε>0cái như vậy Z(k+1)/Z(k) > 1+εcho vô số k. Chúng tôi sẽ sử dụngε=1/9

Đối với bất kỳ số chữ số d, mang ktheo Z(k) = 99...99với số liệu d. Như vậy ktồn tại bởi vì chữ số cnày là một 9, và vì vậy khác không. Đếm từ 99...99, những con số này đều chứa một chữ số 0, do đó, nó đánh dấu sự khởi đầu của một chuỗi số 0 dài c. Chữ số khác không tiếp theo cho đến khi Z(k+1) = 1111...11có chữ số d+1. Tỷ lệ Z(k+1)/Z(k)hơi vượt quá 1+1/9.

Điều này thỏa mãn điều kiện cho mọi d, ngụ ý kết quả.


Tôi sẽ khá phấn khích khi xem bằng chứng.
Nữ tu bị rò rỉ

1
Điều này có được phép không? minbản thân nó không nhận bất kỳ đầu vào nào và không cung cấp bất kỳ đầu ra nào, một câu hỏi dường như là một yêu cầu của câu hỏi. Chắc chắn, đó là chức năng chính trong toàn bộ, nhưng nó không làm gì cả nếu không có trình tạo và tuyên bố in rõ ràng trong 'Thử trực tuyến'.
Cột

6
@Mast Có, vấn đề là xuất ra chữ số thứ n cho n, không tạo ra số thập phân. Mã kiểm tra là để hiển thị chuỗi các chữ số. Và một biểu thức ước lượng cho một hàm, bao gồm cả một hàm bằng chữ, là một đệ trình hàm hợp lệ .
xnor

1
thú vị :)))
Noodle9

38

Bình thường, 1 byte

h

Đầu vào và đầu ra là các chuỗi. Hàm lấy chữ số đầu tiên của chỉ mục. Số siêu việt kết quả trông giống như:

0.0123456789111111111122222222223 ...

Điều này là siêu việt bởi vì nó 1/9cộng với một số có các số 0 có độ dài ít nhất là một phần không đổi của số. Dựa trên câu trả lời math.stackexchange này , điều đó có nghĩa là con số này là siêu việt.

Có trải dài của zero là từ chữ số 100 ... 000để 199 ... 999, vì vậy tỷ lệ Z(k+1)đến Z(k)là 2 vô thường.

Do đó, số trừ ở trên 1/9là siêu việt, và do đó, số trên là siêu việt.


1
Lưu ý rằng câu hỏi được hỏi trong bài đăng M.SE được liên kết không áp dụng cho số này, nhưng điểm 4 của câu trả lời của George Lowther thì không.
Henning Makholm

16

Python 2 , 19 byte

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

Chữ số thứ n1 nếu n là lũy thừa của 20 nếu không.

Hãy thử trực tuyến!


3
Tôi sẽ trả lời điều này, nhưng tôi không tìm thấy bằng chứng nào về sự siêu việt của nó. Điều gì khiến bạn tin rằng con số này là siêu việt? n&~-n>0bằng cách này ngắn hơn
orlp


1
Số @orlp Fredholm
Leaky Nun

@orlp Tôi phải hỏi OP xem Booleans có ổn không.
Dennis


11

cân não, 2 byte

,.

Tương tự như một số câu trả lời khác, trả về chữ số thập phân đầu tiên và bỏ qua phần còn lại.



5

Võng mạc, 4 byte

1!`.

Trả về chữ số đầu tiên của số đầu vào. Bởi vì cổng đó rất nhàm chán, đây là một số cổng khác:

O`.
1!`.

(8 byte) Trả về chữ số tối thiểu của số đầu vào.

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

(25 byte) Trả về 1 nếu số đầu vào là lũy thừa 2.

.+
$*_

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

(30 byte) Hằng số Champernowne.


4

Brachylog 2, 7 byte

⟦₁c;?∋₎

Hãy thử trực tuyến!

Tính các chữ số của hằng số Champernowne (có thể gấp mười lần sức mạnh do các vấn đề lập chỉ mục, điều này rõ ràng không quan trọng ở đây). Về cơ bản, điều này chỉ ghép các số nguyên với nhau, và sau đó lấy chữ số thứ n .


Tại sao bạn cần ⟦₁?
Leaky Nun

@LeakyNun: Bởi vì nếu không, chúng tôi sẽ bắt đầu ghép các số với 0 và bạn không thể làm điều đó vì 0123không phải là số (nó có số 0 đứng đầu, không phù hợp với khái niệm số của Brachylog về số đó là gì).

4

Python 2, 13 byte

Đầu vào và đầu ra là các chuỗi.

lambda n:n[0]

Chữ số thứ n của số là chữ số có nghĩa nhất của n khi nó được viết bằng số thập phân.


4
Bạn nên bao gồm tại sao con số này là siêu việt.
orlp

2
@orlp Hình như tham chiếu của xnor cũng có thể dễ dàng được áp dụng ở đây - trừ 1/9 khỏi số và sau đó Z (n + 1) / Z (n) ~ = 2 thường xuyên (giữa 10 ^ x và 2 * 10 ^ x ).
frageum


3

JavaScript, 51 byte

Hàm này tính toán nsố thứ tự của Hằng số Champernowne. Thêm vào f=lúc bắt đầu và gọi như thế f(arg). Lưu ý rằng nlà 1 chỉ mục.

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

Giải trình

Hàm này có trong một đối số duy nhất n. Sau đó, nó tạo ra một nchuỗi ký tự dài gồm 1 ký tự lặp lại. Sau đó, nó phân tách Chuỗi đó thành Mảng 1s. Sau đó, nó lặp lại qua mọi phần tử của Mảng và nhân chúng với chỉ số của chúng trong Mảng tăng thêm 1. Sau đó, nó kết hợp Mảng lại với nhau ""(Chuỗi trống) để tạo thành Chuỗi. Cuối cùng, nó trả về nphần tử thứ của Chuỗi thu được.

Lưu ý: Loại giá trị được trả về luôn là Chuỗi .

Kiểm tra đoạn trích

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

Champernowne là hằng số.

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

Tại sao bạn cần n+1?
Leaky Nun

@LeakyNun Bởi vì tôi nhận được lỗi lập chỉ mục cho n <= 1.
orlp

Bạn có thể sử dụng lập chỉ mục 1.
Nữ tu bị rò rỉ

@LeakyNun n <= 1.
orlp

Tôi nghĩ bạn cần chỉ định Python 2 cho cái này.
numbermaniac

3

APL (Dyalog) , 3 byte

2|⍴

Hãy thử trực tuyến! (bộ kiểm tra tạo ra một loạt các số từ 1đến 10000, chuyển đổi chúng thành một chuỗi và sau đó áp dụng các chuyến tàu 2|⍴trên chúng).

Lấy số đầu vào dưới dạng một chuỗi và trả về độ dài mod 2. Vì vậy 123=> 3 mod 2=> 1.

Trình tự bắt đầu như vậy:

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

vì vậy điều này có thể được khái quát như vậy: 9 1s 90 0s 900 1s ...

Nhân số này với 9 cho chúng ta một số Liouville , được chứng minh là siêu việt.


Tôi không nghĩ rằng đây nhất thiết phải là số Liouville - với tôi không rõ ràng rằng bạn có thể nhận được n> 10. Nó không phù hợp với định lý mạnh mẽ hơn mà những người khác ở đây đã và đang sử dụng.
Ørjan Johansen

@ RjanJohansen Bạn có thể diễn đạt nó 1 - 10^-9 + 10^-99 - 10^-999 + 10^-9999 - 10^-99999 + ..., vì vậy nó là số Liouville.
Leaky Nun

@LeakyNun Tỷ lệ số mũ liên tiếp xấp xỉ 10, nhưng để phù hợp với định nghĩa trên Wikipedia, nó cần phải không bị ràng buộc - đó là lý do tại sao các chỉ số 1 của hằng số Liouville ban đầu sử dụng một nhân tử, và không phải là số mũ.
Ørjan Johansen

3

Haskell, 25 byte 17 byte

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

Champernowne's Constant có thể là 0 hoặc 1 được lập chỉ mục vì C10 * .01 vẫn siêu việt.

Chỉnh sửa: theo nhận xét của nimis, bạn có thể sử dụng danh sách đơn nguyên để giảm điều này thành

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

2
=<<từ danh sách đơn nguyên là concat.map: (!!)$show=<<[1..].
nimi

2

JavaScript, 73 byte

Đây là chương trình tính toán nchữ số thứ của Hằng số Liouville, trong đó nsố đầu vào được đưa ra bằng cách gọi hàm gg(arg)(và nđược lập chỉ mục 1). Lưu ý rằng dòng mới trong mã là cần thiết.

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}

Giải trình

Chương trình bao gồm hai chức năng, fg. flà một chức năng tính toán đệ quy, và glà chức năng chính của chương trình. g giả sử có một đối số duy nhất n. Nó xác định một đối số mặc định rcó giá trị bằng 0. Nó, sau đó, lặp lại trên tất cả các số nguyên từ 0 đến n, và trong mỗi lần lặp, kiểm tra xem hàm fđược áp dụng trên i(chỉ mục hiện tại) có bằng không n, tức là liệu có phải nlà giai thừa không i. Nếu đó là trường hợp, rgiá trị của được đặt thành 1. Ở cuối hàm, rđược trả về.

Đoạn trích để kiểm tra

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>

Cảnh báo: Không đặt giá trị rất lớn vào hộp nhập của Snippet! Nếu không, thiết bị của bạn có thể đóng băng!


1

Pyth, 7 5 4 byte

@jkS

Hãy thử trực tuyến!

Sử dụng hằng số Champernowne.

Đã lưu 2 3 byte nhờ Leaky Nun.


1
bạn có thể sử dụng jkđể thay thế sm`d, tôi tin.
Nữ tu bị rò rỉ

1
Bạn có thể sử dụng Sthay vì Uh?
Nữ tu bị rò rỉ

Tôi nghĩ rằng chúng là giống nhau về chức năng, vì vậy có. Tôi hoàn toàn đọc qua các tài liệu>.>
vỗ tay vào

Chúng không giống nhau về chức năng. Sbắt đầu với 1Ubắt đầu với 0.
Nữ tu bị rò rỉ

Tại sao bạn hoàn nguyên chỉnh sửa của bạn? Số kết quả vẫn là siêu việt.
Rò rỉ Nun



1

Than , 24 byte (không biên dịch)

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

Hãy thử trực tuyến!

Lưu ý: Tính đến thời gian đăng bài, không hoạt động nở đâu nlà bội số dương của 14.

Giải trình

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)? Vì vậy, không có πbiến được xác định trước?
Neil

@Neil Chưa, và tôi không có ý định làm cho πbằng pi vì đây là ngôn ngữ theo định hướng nghệ thuật ASCII, không phải là ngôn ngữ định hướng toán học
ASCII - chỉ

1

Japt , 3 1 + 1 = 2 1 byte

Một cảng khác của giải pháp frageum .

Đưa đầu vào dưới dạng một chuỗi.

g

Dùng thử trực tuyến


Giải trình

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

Đầu vào có thể là một chuỗi, vì vậy bạn có thể thực hiện gtrong 1 byte :)
Oliver

Thách thức không đề cập đến đầu vào chuỗi, @obarakon, vì vậy tôi đã sử dụng các số nguyên trong các cổng JS của mình và sau đó, lần lượt, ở đây.
Xù xì

À, gotcha. Rất nhiều câu trả lời khác được sử dụng đầu vào chuỗi. Nhưng bạn đã đúng, OP đã không đề cập đến nó trong thử thách.
Oliver

1

TI-BASIC, 16 byte

Về cơ bản kiểm tra nếu đầu vào N(1 chỉ mục) là một số tam giác. Điều này giống như trả về Nchữ số thứ 0,1010010001, được chứng minh là siêu việt. Chuỗi các chữ số là OEIS A010054 .

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

0

Fourier, 16 byte

I~NL~S10PS~XN/Xo

Hãy thử trực tuyến!

Như các câu trả lời khác đã làm, xuất ra chữ số đầu tiên của đầu vào.

Một lời giải thích về mã:

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

0

JavaScript (ES6)

Chỉ cần một vài cổng của một số giải pháp khác


Giải pháp Python của frageum , 12 byte

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


Giải pháp Python của Dennis , 13 byte

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


Giải pháp Python của xnor , 20 byte

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



0

05AB1E , 3 1 byte

EDIT : Sử dụng bằng chứng từ các câu trả lời khác, trả về chữ số đầu tiên của đầu vào

¬

1 - được lập chỉ mục cho số pi (chỉ tối đa 100000 chữ số)

žs¤

Làm thế nào nó hoạt động

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

Hoặc, nếu bạn thích e (vẫn được lập chỉ mục 1) (chỉ tối đa 10000 chữ số)

žt¤

Hãy thử trực tuyến!


0

J, 2 byte

Giải pháp tương tự mà mọi người khác đang sử dụng:

{.

Trả về chữ số đầu tiên của n. IO là trên chuỗi

Hằng số Liouville, 9 byte

(=<.)!inv

Trả về 1nếu đầu vào là giai thừa của một số nguyên.

Pi, 13 byte

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

Chữ số không thập phân cuối cùng của số lần pi 10 ^ n.





Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.