더빙을 함께하세요 게시물 번호를 추측하려고합니다

4chan에서는 인기있는 게임이 제공됩니다. 사이트의 모든 게시물은 순차적 게시물 ID를받습니다. 영향을 미치거나 결정할 수 없기 때문에 사람들은 일반적으로 처음 몇 자리 숫자 인 자신의 게시물 번호를 추측하려고합니다 (적어도 일부). 다른 버전의 게임을 더빙이라고하며, 목표는 숫자 끝에 반복되는 숫자를 얻는 것입니다 (예 : 1234555).

당신의 임무는 그것을 받아들이고 싶다면 포스트 ID를 입력으로 사용하는 프로그램을 작성하는 것입니다 (표준 정수, 2 ^ 32 이하로 가정 할 수 있음). 반복되는 숫자가 몇 개인지를 반환합니다.

규칙

  • 표준 허점은 허용되지 않습니다 .
  • 프로그램은 외부 계산되지 않은 코드 / 인수가 실행되지 않는 한 실제로 작동하는 기능, 전체 프로그램, REPL 명령 일 수 있습니다.
  • STDIN, 함수 인수, 명령 행 인수, 파일 등 어떤 것이 든 입력이 가능합니다.

테스트 사례

Input: 14892093
Output: 1

Input: 12344444
Output: 5

Input: 112311
Output: 2

Input: 888888
Output: 6

Input: 135866667 //Post number I got on /pol/ few days ago, rip
Output: 1


답변

매스 매 티카, 29 바이트

산술 솔루션은 어떻습니까?

IntegerExponent[9#+#~Mod~10]&

나는 이것이 간단한 Mathematica 접근 방식을 능가한다는 것을 매우 기쁘게 생각합니다.

설명

코드 자체는 9 * n + n % 10을 계산 한 다음 입력을 나누거나 다시 말해서 0을 세는 최대 10의 거듭 제곱을 찾습니다 . nk의 반복 된 숫자로 끝나는 지 , 9 * n + n % 10k의 후행 0 이 있는지 표시해야합니다 .

담당자 숫자는 99999 ( 10 5 -1 ) 와 같은 숫자 를 9 로 나누고 반복 된 숫자를 곱하여 수학적으로 가장 쉽게 표현할 수 있습니다 . 우리는 쓸 수 있도록 N = 10 m * K + D * (10 K -1) / 9 , m ≢ D (모드 10) ,되도록 N이 끝나지 않는 이상 K 반복 숫자. 참고 D가 N = 10 % .

이것을 우리의 공식 9 * n + n % 10에 연결합시다 . 우리는 9 * m * 10 k + d * (10 k -1) + d를 얻습니다 . 끝 의 d 는 취소되었으므로 9 * m * 10 k + d * 10 k = (9 * m + d) * 10 k로 남습니다 . 그러나 9 ≡ -1 (mod 10) 이므로 9 * m + d ≡ d-m (mod 10) . 그러나 우리는 m ≢ d (mod 10)d-m ≢ 0 (mod 10) 이라고 주장했습니다 .

다시 말해, 9 * m + d10으로 나눌 수 없으므로 9 * n + n % 10 = (9 * m + d) * 10 k 를 나누는 10 의 최대 거듭 제곱 은 k , 후행 반복 자릿수

보너스로이 솔루션 은 input에 대한 올바른 결과를 인쇄합니다 0.


답변

레티 나 , 9 바이트

&`(.)\1*$

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

(.)\1*$동일한 문자의 접미사와 일치하는 정규 표현식 인 겹치는 일치 수를 계산합니다 .


답변

Brachylog , 4 바이트

ẹḅtl

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

설명

ẹ       Elements: split to a list of digits
 ḅ      Blocks: group consecutive equal digits into lists
  t     Tail: take the last list
   l    Length: Output is the length of that last list

정수에서 직접 작업 한 경우 (왜 그렇게 구현하지 않았는지 잘 모르겠습니다), 필요하지 않으므로 3 바이트 만됩니다 .


답변

파이썬 2 , 47 41 바이트

lambda s:len(`s`)-len(`s`.rstrip(`s%10`))

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

36 바이트-보다 유연한 입력

lambda s:len(s)-len(s.rstrip(s[-1]))

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


답변

자바 스크립트 (ES6), 55 52 32 30 바이트

a=>a.match`(.)\\1*$`[0].length
  • 저장 (19)는 정규식을 대체하여 @MartinEnder 덕분 바이트
  • 태그가있는 템플릿 리터럴을 사용하여 @ user81655 덕분에 2 바이트 절약

마지막 숫자의 마지막 그룹과 일치시키기 위해 정규식 사용

참고 : 처음 게시 주저하지 말고 발언하십시오.

f=a=>a.match`(.)\\1*$`[0].length


console.log(f("14892093"));//1
console.log(f("12344444"));//5
console.log(f("112311"));//2
console.log(f("888888"));//6
console.log(f("135866667 "));//1

답변

C, 62 56 48 47 바이트

@Steadybox 덕분에 바이트를 절약했습니다!

j,k;f(n){for(k=j=n%10;j==n%10;n/=10,k++);k-=j;}

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


답변

PHP, 47 45 40 바이트

while($argn[-++$i]==$argn[-1]);echo$i-1;

로 실행 echo <n> | php -nR '<code>

루프가 여전히 첫 번째 대답보다 작은 것 같습니다. 단순히 마지막과 같은 문자를 계산하십시오. PHP 7.1 의 음수 문자열 오프셋을 사용합니다 .

Titus에 의해 -5 바이트 감사 !


이전 답변 :

<?=strlen($a=$argv[1])-strlen(chop($a,$a[-1]));

가장 오른쪽 문자와 일치하는 모든 문자를 오른쪽에서 제거하고 길이의 차이를 계산합니다.