Champernowne 상수에서 숫자 찾기

소개

밑 10에서, Champernowne 상수는 연속 정수의 표현을 연결하여 정의됩니다. 기본 10에서 : 0.1234567891011121314151617...등등.

첫 번째 출현이 10 진수 로 15시작되는 것을 볼 수 있습니다 20th.

  Position
  0000000001111111111222222222233333333334444444444555555555566666666
  1234567890123456789012345678901234567890123456789012345678901234567
                     ^
0.1234567891011121314151617181920212223242526272829303132333435363738...
                     ^^
                     15 = position 20

첫 번째 출현은 소수 45에서 시작합니다 4th.

  Position
  0000000001111111111222222222233333333334444444444555555555566666666
  1234567890123456789012345678901234567890123456789012345678901234567
     ^
0.1234567891011121314151617181920212223242526272829303132333435363738...
     ^^
     45 = position 4

따라서 작업이 쉽습니다. 음수가 아닌 정수가 주어지면 Champernowne 상수의 정수 위치를 출력하십시오.

규칙

  • 기능이나 프로그램을 제공 할 수 있습니다
  • 이것은 이므로 바이트 수가 가장 적은 제출이 승리합니다!

테스트 사례

Input: 20
Output: 30

Input: 333
Output: 56

Input: 0
Output: 11 (note that the 0 before the decimal point is ignored)

Input: 2930
Output: 48


답변

피스, 10

hxjkS+QT`Q

첫 번째 input + 10숫자를 연결 한 다음 0 기반 색인에 1을 더한 것을 찾습니다. 추가 10은 0에만 필요합니다.

테스트 스위트


답변

LabVIEW, 29 LabVIEW 프리미티브

이것은 현재 문자열을 사용합니다. 입력을 패턴으로 일치시키고 오프셋-(입력 길이 -1)을 출력합니다.


답변

자바 스크립트, 57 바이트

a=prompt();for(y=b=" ";y<a+11;)b+=++y;alert(b.indexOf(a))

Conor O’Brien 덕분에 1 바이트를 절약했습니다.


답변

하스켈, 62 바이트

a#b|and$zipWith(==)a b=1|1<2=1+a#tail b
(#(show=<<[1..])).show

사용 예 : (#(show=<<[1..])).show $ 2930-> 48.

작동 원리 : a # b의 위치를 찾아 a내를 b다음과 같은 경우 a의 접두어 b반환 1, 다른 추가 1로 재귀 호출에가 a # tail b. pointfree 함수 (#(show=<<[1..])).show는 (이름이없는) 인수를 기대 n하고를 호출합니다 show n # show=<<[1..].

이 기능 subIndex은의 작업을 수행 #하지만 필요한 기능 import Data.List.Utils은 보상하지 않습니다.


답변

루비, 28

->n{[*0..n+10]*''=~/\B#{n}/}

일치하는 항목이 색인되도록 시작 부분에 0을 포함하지만 \B일치 항목이 문자열의 시작 부분이 아니어야합니다.


답변

apt, 11 바이트

이것은 원래 Pyth를 때리는 것이었지만 input에는 효과가 없었습니다 0.

1+1oU+B ¬bU

온라인으로 사용해보십시오!

작동 원리

1+1oU+B ¬ bU
1+1oU+B q bU  // Implicit: U = input integer
  1oU+B       // Generate the range [0, U+11).
        q bU  // Join and take the index of U.
1+            // Add one to get the correct result.
              // Implicit: output last expression

답변

루아, 54 바이트

s=""for i=1,1e4 do s=s..i end print(s:find(io.read()))

참고 : 현재이 프로그램은 문자열의 첫 번째 문자와 해당 문자가 끝나는 지점을 모두 인쇄합니다. 이것이 허용되지 않으면 몇 바이트가 더 필요합니다. 내 프로그램이 입력 번호의 첫 번째 위치와 마지막 위치를 모두 인쇄하기 때문에 보너스를 신청하고 싶습니다.