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) हम यह सुनिश्चित करें कि के बारे में हमारी दो सेट बनाने की जरूरत अंकों रकम हैं -eqUAL। परिणामस्वरूप बूलियन को पाइप लाइन पर छोड़ दिया जाता है और आउटपुट निहित होता है।
NB - -notinऑपरेटर के लिए v3 या नए की आवश्यकता है । मैं अभी भी इनपुट के लिए चल रहा हूं 4937775(यह गणना करने के लिए धीमा है), इसलिए मैं इसे पूरा करूंगा जब वह पूरा हो जाएगा। 3+ घंटे के बाद, मुझे स्टैकओवरफ़्लो त्रुटि मिली। तो, कहीं न कहीं ऊपरी सीमा है। ओह अच्छा।
यह नकारात्मक इनपुट, शून्य, या एक के लिए काम करेगा, क्योंकि -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