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의 거듭 제곱을 찾습니다 . n 이 k의 반복 된 숫자로 끝나는 지 , 9 * n + n % 10 에 k의 후행 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 + d 는 10으로 나눌 수 없으므로 9 * n + n % 10 = (9 * m + d) * 10 k 를 나누는 10 의 최대 거듭 제곱 은 k , 후행 반복 자릿수
보너스로이 솔루션 ∞
은 input에 대한 올바른 결과를 인쇄합니다 0
.
답변
답변
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]));
가장 오른쪽 문자와 일치하는 모든 문자를 오른쪽에서 제거하고 길이의 차이를 계산합니다.