Nghịch đảo Champernowne


8

Hằng số Champernowne là số vô tỷ 0.1234567891011 ... mở rộng quảng cáo infinum.

Chúng tôi đã thực hiện một câu hỏi về nó trước đây. Nhưng câu hỏi này là về sự đối ứng của nó, được gọi là Hằng số Champernowne. Đây là khoảng 8.10000007.

Đưa ra một chuỗi từ một đến ba chữ số (mỗi chuỗi 3 chữ số xuất hiện trong 10.000 vị trí thập phân đầu tiên), hãy đưa ra số vị trí thập phân trong phần thập phân của Hằng số Champernowne trước xuất hiện đầu tiên của chuỗi đó.

Các nội dung thực hiện điều này trực tiếp hoặc tạo ra các xấp xỉ của một trong hai hằng số này đều bị cấm, nhưng các nội dung cho số học chính xác tùy ý vẫn được cho phép.

Đây là mã golf, vì vậy chương trình ngắn nhất, tính bằng byte, sẽ thắng.

Các trường hợp thử nghiệm:

1 0
2 52
3 13
4 29
5 36
6 7
7 8
8 27
9 23
10 0
100 0
998 187
999 67
01 321
001 689
010 418

1
Bạn có thể gửi một tập tin 10.000 chữ số không đổi Champernowne đầu tiên không?
orlp

@orlp gist.github.com/SuperJedi224/9c9adad78d872e4d568f đến 10.000 vị trí thập phân (chương trình của bạn chỉ nên nhìn vào phần bên phải của dấu thập phân)
SuperJedi224

Kết quả có thể dựa trên 1?
Luis Mendo

@LuisMendo Các thông số kỹ thuật hiện đang ra lệnh dựa trên 0
SuperJedi224

Câu trả lời:


3

MATL , 37 byte

Cảm ơn @AndrasDeak vì sự giúp đỡ của anh ấy với vpachức năng của Octsympy !

'1/'1e4:"@V]N$h1e4H$Y$t32>)I0h)jXf1)q

EDIT (ngày 11 tháng 6 năm 2016): do thay đổi ngôn ngữ, thay thế 0bằng Jmã. Liên kết dưới đây bao gồm sửa đổi đó

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

Phải mất một lúc trong trình biên dịch trực tuyến (ít hơn 1 phút).

'1/'        % literal string
1e4:        % array [1,2,...,1e4]
"           % for each number in that array
  @V        % push number and convert to string
]           % end loop
N$h         % concatenate all strings
1e4H$Y$     % compute 1/123456789101112... as a string with 1e4 significant digits
t32>)       % remove unwanted spaces and newlines in the output string
I0h)        % remove the first two characters ('8.')
j           % input string
Xf          % find indices of occurrences of input string within computed string
1)          % take first index
q           % subtract 1

2

Ruby, 69 67 byte

->x{"#{1/BigDecimal.new(?.+[*1..9999]*'')}".index(x)-3}

Điểm: 55 byte mã nguồn + 12 cho -rbigdecimalcờ.

Khá đơn giản. Chỉ là một phần kỳ lạ là to_smặc nhiên được gọi bởi #{}xây dựng trên BigDecimallợi nhuận

0.81000000670 [...] 3036E1

vì vậy cần phải trừ 3 để có chỉ số chính xác.


1

Python 2, 69 byte

lambda s:str(10**30000/int("".join(map(str,range(3000))))).index(s)-1

Điều này sẽ không hoạt động cho đầu vào của "8".
âm bảy
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.