PowerShell v3 +, 183 byte
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)
Không có kiểm tra nguyên tố tích hợp. Không có bao thanh toán tích hợp. Không có chữ số tổng hợp. Mọi thứ đều được làm bằng tay. : D
Lấy đầu vào $n
là một số nguyên, đặt $b
bằng một mảng trống. Đây $b
là bộ sưu tập các yếu tố chính của chúng tôi.
Tiếp theo là một for
vòng lặp. Trước tiên, chúng tôi đặt $a
bằng số đầu vào của chúng tôi và điều kiện là cho đến khi $a
nhỏ hơn hoặc bằng với 1. Vòng lặp này sẽ tìm các yếu tố chính của chúng tôi.
Chúng tôi lặp từ 2
lên đến $a
, sử dụng Where-Object
( |?{...}
) để rút ra các số nguyên tố cũng là các yếu tố !($a%$_)
. Những cái đó được đưa vào một vòng lặp bên trong |%{...}
đặt yếu tố vào $b
và phân chia $a
(do đó cuối cùng chúng ta sẽ nhận được 1
).
Vì vậy, bây giờ chúng tôi có tất cả các yếu tố chính của chúng tôi trong $b
. Thời gian để xây dựng đầu ra Boolean của chúng tôi. Chúng ta cần phải xác minh rằng $n
là -notin
$b
, bởi vì nếu nó là phương tiện mà $n
là số nguyên tố, và do đó không phải là số Smith. Ngoài ra, ( -and
) chúng tôi cần đảm bảo rằng hai tập hợp chữ số của chúng tôi là -eq
ual. Boolean kết quả được để lại trên đường ống và đầu ra là ẩn.
NB - Yêu cầu v3 hoặc mới hơn cho -notin
toán tử. Tôi vẫn đang chạy đầu vào cho 4937775
(điều này chậm để tính toán), vì vậy tôi sẽ cập nhật thông tin này khi kết thúc. Sau hơn 3 giờ, tôi đã gặp lỗi stackoverflow. Vì vậy, có một số giới hạn ở đâu đó. Ồ tốt
Điều này sẽ hoạt động cho đầu vào âm, bằng 0 hoặc một, bởi vì bên phải của ý -and
chí sẽ phát hiện ra lỗi trong khi nó cố gắng tính tổng các chữ số (hiển thị bên dưới), điều này sẽ khiến một nửa đi đến $false
khi được đánh giá. Vì STDERR được bỏ qua theo mặc định và đầu ra chính xác vẫn được hiển thị, điều này là tốt.
Các trường hợp thử nghiệm
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