PowerShell v3 +, 183 바이트
param($n)$b=@();for($a=$n;$a-gt1){2..$a|?{'1'*$_-match'^(?!(..+)\1+$)..'-and!($a%$_)}|%{$b+=$_;$a/=$_}}$n-notin$b-and(([char[]]"$n")-join'+'|iex)-eq(($b|%{[char[]]"$_"})-join'+'|iex)
내장 된 프라임 검사가 없습니다. 내장 팩터링이 없습니다. 내장 숫자 합계가 없습니다. 모든 것이 손으로 만들어졌습니다. :디
입력을받습니다 $n
을 정수로$b
빈 배열과 동일하게 설정합니다 . 여기 $b
에 주요 요소의 모음이 있습니다.
다음은 for
루프입니다. 먼저 $a
입력 번호와 동일하게 설정 하고 조건은 $a
1보다 작거나 같을 때까지 입니다.이 루프는 주요 요인을 찾습니다.
우리 는 요소 에서 소수 를 추출하기 위해 ( )를 사용 2
하여 반복한다 . 그것들은 내부 루프로 공급되어 요소를 배치합니다$a
Where-Object
|?{...}
!($a%$_)
|%{...}
$b
나누고 나눕니다 $a
(따라서 결국 우리는 갈 것입니다 1
).
이제 모든 주요 요소가에 $b
있습니다. 부울 출력을 공식화 할 시간입니다. 우리는 검증 할 필요가 $n
있다 -notin
$b
는 의미이다 경우 때문에, $n
그래서 소수, 그리고 스미스 번호가 아닙니다. 또한 ( -and
)는 두 자릿수의 합계가 가 -eq
ual . 결과 부울은 파이프 라인에 남아 있고 출력은 암시 적입니다.
NB--notin
연산자에 v3 이상이 필요합니다 . 나는 여전히 입력을 실행하고 있는데 4937775
(이는 계산 하기가 느리다 ), 완료되면 이것을 업데이트 할 것이다. 3 시간 이상이 지나면 stackoverflow 오류가 발생했습니다. 어딘가에 상한이 있습니다. 오 잘
음수 입력, 0 또는 1에 대해 작동합니다. 왜냐하면 -and
숫자의 합 (아래 그림 참조)을 계산하려고 시도 할 때 오른쪽 이 오류를 제거하므로 $false
평가시 절반으로 이동하기 때문입니다 . STDERR은 기본적으로 무시되고 올바른 출력이 계속 표시되므로 문제가 없습니다.
테스트 사례
PS C:\Tools\Scripts\golfing> 4,22,27,58,85,94,18,13,666,-265,0,1|%{"$_ -> "+(.\is-this-a-smith-number.ps1 $_)}
4 -> True
22 -> True
27 -> True
58 -> True
85 -> True
94 -> True
18 -> False
13 -> False
666 -> True
Invoke-Expression : Cannot bind argument to parameter 'Command' because it is an empty string.
At C:\Tools\Scripts\golfing\is-this-a-smith-number.ps1:1 char:179
+ ... "$_"})-join'+'|iex)
+ ~~~
+ CategoryInfo : InvalidData: (:String) [Invoke-Expression], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.InvokeExpressionCommand
-265 -> False
Invoke-Expression : Cannot bind argument to parameter 'Command' because it is an empty string.
At C:\Tools\Scripts\golfing\is-this-a-smith-number.ps1:1 char:179
+ ... "$_"})-join'+'|iex)
+ ~~~
+ CategoryInfo : InvalidData: (:String) [Invoke-Expression], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.InvokeExpressionCommand
0 -> False
Invoke-Expression : Cannot bind argument to parameter 'Command' because it is an empty string.
At C:\Tools\Scripts\golfing\is-this-a-smith-number.ps1:1 char:179
+ ... "$_"})-join'+'|iex)
+ ~~~
+ CategoryInfo : InvalidData: (:String) [Invoke-Expression], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.InvokeExpressionCommand
1 -> False