젤리 , 16 14 바이트
2 바이트를 절약 해 주셔서 감사합니다 Dennis!
ÆḌḊ,Ṗ߀€+U$FṂo
온라인으로 사용해보십시오!
논리 설명
숫자 n이 주어지면 :
표현은 a + b
또는 a × b
, where a
및 b
expression입니다.
a
및의 가능한 모든 값을 고려하십시오 b
.
- 표현 인 경우
a + b
, 다음 a
과 b
범위에있다 [1 .. n-1]
.
- 표현 인 경우
a × b
, a
그리고 b
적절한 약수이다 n
보다 클수록 1
.
두 경우 모두 목록 [[<proper divisors of n larger than 1>], [1, 2, ..., n-1]]
이 계산되고 ( ÆḌḊ,Ṗ
), 각 링크에 현재 링크를 매핑하고 ߀€
, 올바른 쌍을 함께 추가하고 ( +U$
) 최소값을 얻습니다 ( FṂo
).
코드 설명
ÆḌḊ,Ṗ߀€+U$FṂo Main link. Assume n = 10.
ÆḌ Proper divisors. [1,2,5]
Ḋ Ḋequeue, remove the first element. [2,5]
,Ṗ Pair with Ṗop. Auto convert n = 10 to range
[1,2,3,4,5,6,7,8,9,10] and remove the last element
10, get [1,2,3,4,5,6,7,8,9].
߀€ Apply this link over each element.
+U$ Add with the Upend of itself.
FṂ Flatten and get the Ṃinimum element.
o Logical or with n.
If the list is empty, minimum returns 0 (falsy), so logical or
convert it to n.