JavaScript에서 Kaprekar의 상수
6174
를 보았습니다. 이것은 인도 수학자D. R. Kaprekar의 이름을 딴 Kaprekar 상수라는 특수한 숫자인 것으로 밝혀졌습니다.2개 이상의 다른 숫자가 포함된 4자리 숫자로 시작합니다. 숫자가 4자리 미만이면 0으로 채울 수 있습니다. 예를 들어
42
는 0042
가 됩니다.결과는 적은 수의 반복 후에 항상
6174
로 수렴됩니다.예를 들어,
628
8620 - 268 = 8352
8532 - 2358 = 6174
하지만 이 작업을 손으로 하는 것은 지루합니다. Kaprekar의 알고리즘을 더 자세히 알아보기 위해 몇 가지 코드를 작성해 봅시다!
개념에서 코드로
핵심 알고리즘은 다음과 같이 JavaScript로 구현될 수 있습니다.
먼저 주어진 숫자를 문자열로 변환합니다padded with leading zeros.
> var num = 423;
> num.toString().padStart(4, '0');
'0423'
그런 다음 숫자를 배열로 분할하여 최소 및 최대 숫자로 배열할 수 있습니다. 배열 작업은 제자리에서 수행되므로 각 값에 대해 새 배열이 생성됩니다.
> var min = num.split('').sort()
[ '0', '2', '3', '4' ]
> var max = num.split('').sort().reverse()
[ '4', '3', '2', '0' ]
마지막으로
join
를 사용하여 각 배열을 다시 문자열로 변환하고 parseInt
를 사용하여 값을 뺄 수 있도록 다시 숫자로 변환합니다.> parseInt(min.join(''))
234
> parseInt(max.join(''))
4320
자바스크립트 구현
최종 코드는
validate
함수를 통합하여 여러 자리 숫자가 없는 숫자를 거부하고 임의의 4자리 숫자를 사용하여 알고리즘을 자동으로 실행합니다.유효성 검사 = 함수(숫자) {
for (var i = 0; i < 10000; i += 1111) {
if (숫자 == i) {
거짓을 반환합니다.
}
}
true를 반환합니다.
}
kaprekar = 기능 (숫자) {
if (!validate(num)) {
console.log("잘못된 숫자 "+ num);
반품;
}
console.log(숫자);
동안 (숫자! = 6174) {
var str = num.toString().padStart(4, '0');
var max = parseInt(str.split('').sort().reverse().join(''));
var min = parseInt(str.split('').sort().join(''));
숫자 = 최대 - 최소;
console.log(숫자);
}
}
var n = Math.random() * 10000 | 0;//출처 https://stackoverflow.com/a/61696576
카프레카르(n);
하지만 더 있습니다!
다음은 모든 4자리 숫자에 대해
6174
에 도달하는 데 걸리는 많은 반복의 히스토그램을 생성하는 프로그램의 변형입니다.카운트 = {};
유효성 검사 = 함수(숫자) {
for (var i = 0; i < 10000; i += 1111) {
if (숫자 == i) {
거짓을 반환합니다.
}
}
true를 반환합니다.
}
kaprekar = 함수(숫자) {
변수 개수 = 0;
if (!validate(num)) {
반품;
}
동안(숫자!= 6174) {
str = num.toString().padStart(4, '0');
max = parseInt(str.split('').sort().reverse().join(''));
min = parseInt(str.split('').sort().join(''));
숫자 = 최대 - 최소;
카운트++;
}
카운트[카운트] = 카운트[카운트] || 0;
카운트[카운트]++;
}
for (var i = 1; i < 10000; i++) {
카프레카르(i);
}
console.log(개수);
이 코드를 실행하면 최대 7번 반복한 후에
6174
에 도달하는 것을 볼 수 있습니다.{ '0': 1,
'1': 383,
'2': 576,
'3': 2400,
'4': 1272,
'5': 1518,
'6': 1656,
'7': 2184 }
결론
그리고 그게 다야! 이 재미있는 소소한 정보를 즐기셨기를 바랍니다.
여러분의 생각을 댓글로 자유롭게 남겨주세요☀️ 😄 👍
Reference
이 문제에 관하여(JavaScript에서 Kaprekar의 상수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/justinethier/kaprekars-constant-in-javascript-if7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)