逆Champernowneサブストリング


8

Champernowne定数は、無理数0.1234567891011 ...無限に拡張されます。

私たちはやった質問をする前に、それについて。しかし、この質問はその逆数であり、逆シャンペローネ定数として知られています。これは約8.10000007です。

1から3桁の文字列(すべての3桁の文字列は小数点以下最初の10,000以内に表示されます)を前提として、その文字列の最初の出現に先行する逆Champernowne定数の小数部分の小数点以下の桁数を指定します。

これを直接実行するか、これらの定数のいずれかの近似値を生成する組み込み関数は禁止されていますが、任意の精度の演算用の組み込み関数は引き続き許可されます。

これはコードゴルフなので、バイト数で見ると最短のプログラムが優先されます。

テストケース:

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
最初の10,000の逆Champernowne定数桁をファイルに投稿できますか?
orlp 2016

@orlp gist.github.com/SuperJedi224/9c9adad78d872e4d568f小数点以下10,000桁(プログラムは小数点の右側の部分だけを見る必要があります)
SuperJedi224

結果は1ベースですか?
Luis Mendo 2016

@LuisMendo仕様は現在0ベースを規定しています
SuperJedi224

回答:


3

MATL、37バイト

Octsympyのvpa関数を支援してくれた@AndrasDeakに感謝します。

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

EDIT(2016年6月11日):言語の変化に起因する、交換する0ことにより、Jコードインチ 以下のリンクにはその変更が含まれています

オンラインでお試しください!

オンラインコンパイラでは時間がかかります(1分未満)。

'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バイト

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

スコア:55ソースコードバイト+ -rbigdecimalフラグの12 。

かなり簡単です。奇妙な部分は、リターンto_s#{}構築によって暗黙的に呼び出されることですBigDecimal

0.81000000670 [...] 3036E1

したがって、正しいインデックスを取得するには、3を引く必要があります。


1

Python 2、69バイト

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

これは、「8」の入力に対しては機能しません。
マイナス7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.