술어
증가하는 숫자는 각 숫자가 왼쪽의 모든 숫자보다 크거나 같은 숫자입니다 (예 : 12239).
감소하는 숫자는 각 숫자가 왼쪽의 모든 숫자보다 작거나 같은 숫자입니다 (예 : 95531).
탄력 번호는 증가하거나 감소하지 않는 숫자입니다. 최소 3 자리 숫자가 필요하기 때문에 첫 번째 탄력 번호는 101입니다.
작업
정수 n이 1보다 크거나 같으면 첫 번째 n 탄력 숫자의 합을 찾으십시오.
규칙
- 이것은 코드 골프이므로 가장 짧은 바이트 수의 답이 이깁니다.
- 언어에 정수 크기 (예 : 2 ^ 32-1)에 대한 제한이있는 경우, 합계가 정수에 맞을만큼 충분히 작습니다.
- 입력은 합리적인 형식 (stdin, 파일, 명령 행 매개 변수, 정수, 문자열 등) 일 수 있습니다.
- 출력은 합리적인 형식 (stdout, 파일, 숫자를 표시하는 그래픽 사용자 요소 등) 일 수 있습니다.
테스트 사례
1 > 101
10 > 1065
44701 > 1096472981
답변
젤리 , 10 8 바이트
ṢeṚƬ¬µ#S
작동 원리
ṢeṚƬ¬µ#S Main link. No arguments.
# Read an integer n from STDIN and call the chain to the left with argument
k = 0, 1, 2, ... until n of them return a truthy result.
Yield the array of successful values of k.
µ Monadic chain. Argument: k (integer)
Ṣ Sort, after promoting k to its digit array.
ṚƬ Reverse 'til the results are no longer unique and yield unique results.
Calling Ṛ on k promotes it to its digit array. If k = 14235, the
result is [14235, [5,3,2,4,1], [1,4,2,3,5]].
e Check if the result to the left appears in the result to the right.
¬ Negate the resulting Boolean.
S Take the sum.
답변
Pyth , 10 바이트
s.f!SI#_B`
어떻게 작동합니까?
sf! SI # _B` – 전체 프로그램. STDIN에서 정수 Q를 가져 와서 STDOUT으로 출력합니다. .f – 특정 조건을 만족하는 첫 번째 Q 양의 정수를 찾습니다. ! SI # _B – 조건. 탄력 번호에 대해서만 true를 리턴합니다. _B` – 숫자를 문자열로 캐스트하고 그 반대로 뒤집습니다. # – 필터 유지 ... 나는 – 그것은 변하지 않는 ... S – 정렬. – 명확히하기 위해, I (불변)는 두 개의 입력을받는 Pyth 연산자입니다. 함수와 값을 확인하고 function (value) == value인지 확인합니다. 이것은 기술적으로 내장 된 것이 아닙니다. ! – 논리적이 아닙니다. 빈 목록은 true로, 다른 값은 false로 매핑됩니다. s – 합계
답변
K (ngn / k) , 37 바이트
{+/x{{(a~&\a)|a~|\a:10\x}(1+)/x+1}\0}
{
}
인수가있는 함수입니다 x
x{
}\0
중간 결과를 유지하면서 정시 {}
에 적용0
x
(1+)
후속 기능입니다
{
}(1+)/x+1
x+1
이후에 {}
true를 리턴 할 때까지 후속 함수를 적용 합니다.
10\x
십진수입니다 x
a:
할당하다 a
|\
최대 스캔 (부분 최대 값) a
&\
마찬가지로, 최소 스캔입니다
a~|\a
않습니다 a
자사의 최대 스캔 일치?
|
또는
a~&\a
최소 스캔?
+/
합집합
답변
자바 스크립트 (ES6), 77 바이트
f=(i,n=0,k,p)=>i&&([...n+''].map(x=>k|=x<p|2*(p<(p=x)))|k>2&&i--&&n)+f(i,n+1)
댓글
f = ( // f = recursive function taking:
i, // i = number of bouncy numbers to find
n = 0, // n = current value
k, // k = bitmask to flag increasing/decreasing sequences
p // p = previous value while iterating over the digits
) => //
i && ( // if there's still at least one number to find:
[...n + ''] // turn n into a string and split it
.map(x => // for each digit x in n:
k |= // update k:
x < p | // set bit #0 if x is less than the previous digit
2 * (p < (p = x)) // set bit #1 if x is greater than the previous digit
// and update p
) // end of map()
| k > 2 // if both bits are set (n is bouncy):
&& i-- // decrement i
&& n // and add n to the total
) + f(i, n + 1) // add the result of a recursive call with n + 1
답변
파이썬 2, 110 92 89 바이트
n=input()
x=s=0
while n:b={-1,1}<=set(map(cmp,`x`[:-1],`x`[1:]));s+=x*b;n-=b;x+=1
print s
이 함수는 숫자가 탄력적인지 여부를 결정합니다.
lambda x:{-1,1}<=set(map(cmp,`x`[:-1],`x`[1:]))
답변
파이썬 2 , 84 바이트
i=s=0
n=input()
while n:b=`i`>`sorted(`i`)`[2::5]<`i`[::-1];n-=b;s+=b*i;i+=1
print s
온라인으로 사용해보십시오! 또는 테스트 스위트를 참조하십시오.
답변
망막 , 93 바이트
K`:
"$+"{/(?=.*;(_*);\1_)(?=.*_(_*);\2;)/^{`:(#*).*
:$1#;$.($1#
)`\d
*_;
)`:(#+).*
$1:$1
\G#
온라인으로 사용해보십시오! 설명:
K`:
초기화합니다 s=i=0
. ( s
는 #
의 앞에 있는 수이고 :
, 뒤에 i
있는 수입니다 #
.)
"$+"{
...
)`
n
시간을 반복하십시오 .
/(?=.*;(_*);\1_)(?=.*_(_*);\2;)/^{`
...
)`
i
탄력이없는 동안 반복하십시오 .
:(#*).*
:$1#;$.($1#
증분 i
하고 10 진수로 복사합니다.
\d
*_;
사본의 자릿수를 단항으로 변환하십시오. 바운스 테스트는 단항 사본을 사용하므로 한 번만 i
증분 된 경우에만 작동합니다 .
:(#+).*
$1:$1
추가 i
로 s
내부 루프의 다음 패스의 bounciness 테스트가 실패하고 그래서, 및 단항 숫자의 사본을 삭제 i
한 번에 적어도 증가됩니다.
\G#
s
십진수로 변환 합니다.
121 바이트 버전은 10 진수로 계산하므로 더 큰 값을 사용할 수 있습니다 n
.
K`0:0
"$+"{/(?=.*;(_*);\1_)(?=.*_(_*);\2;)/^{`:(\d+).*
:$.($1*__);$.($1*__)
)+`;\d
;$&*_;
)`\d+:(\d+).*
$.(*_$1*):$1
:.*
온라인으로 사용해보십시오! 설명:
K`0:0
초기화합니다 s=i=0
.
"$+"{
...
)`
n
시간을 반복하십시오 .
/(?=.*;(_*);\1_)(?=.*_(_*);\2;)/^{`
...
)
i
탄력이없는 동안 반복하십시오 .
:(\d+).*
:$.($1*__);$.($1*__)
증분 i
하고 사본을 만듭니다.
+`;\d
;$&*_;
사본의 자릿수를 단항으로 변환하십시오. 바운스 테스트는 단항 사본을 사용하므로 한 번만 i
증분 된 경우에만 작동합니다 .
\d+:(\d+).*
$.(*_$1*):$1
추가 i
로 s
내부 루프의 다음 패스의 bounciness 테스트가 실패하고 그래서, 및 단항 숫자의 사본을 삭제 i
한 번에 적어도 증가됩니다.
:.*
삭제 i
.