পাওয়ারশেল 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
আমাদের প্রধান উপাদানগুলির সংগ্রহ collection
এরপরে একটি for
লুপ। আমরা প্রথমে $a
আমাদের ইনপুট সংখ্যার সমান সেট করেছিলাম , এবং শর্তসাপেক্ষে 1 $a
-এর চেয়ে কম বা সমান 1 না হওয়া অবধি এই লুপটি আমাদের মূল কারণগুলি সন্ধান করতে চলেছে।
আমরা থেকে লুপ 2
পর্যন্ত $a
, ব্যবহারসমূহ Where-Object
( |?{...}
) উঠিয়ে ফেলা মৌলিক যে কারণ !($a%$_)
। এগুলি একটি অভ্যন্তরীণ লুপে খাওয়ানো হয় |%{...}
যা ফ্যাক্টরটিকে মধ্যে $b
ভাগ করে দেয় এবং ভাগ করে দেয় $a
(এভাবে আমরা শেষ পর্যন্ত যাব1
)।
সুতরাং, এখন আমরা আমাদের প্রধান উপাদানগুলির মধ্যে রয়েছে $b
। আমাদের বুলিয়ান আউটপুট গঠনের সময়। আমাদের তা যাচাই করা প্রয়োজন $n
হয় -notin
$b
, কারণ যদি তা না হয় তার মানে তাদের $n
মৌলিক, এবং তাই একটি স্মিথ সংখ্যা নয়। উপরন্তু, ( -and
) আমরা নিশ্চিত রয়েছে যা আমাদের দুটি সেট করতে হবে অঙ্ক অঙ্কের হয় -eq
ual। ফলস্বরূপ বুলিয়ান পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।
এনবি - -notin
অপারেটরের জন্য ভি 3 বা নতুন প্রয়োজন । আমি এখনও ইনপুটটি চালিয়ে যাচ্ছি 4937775
(এটি গণনা করা ধীর ), সুতরাং শেষ হয়ে গেলে আমি এটি আপডেট করব।3+ ঘন্টা পরে, আমি স্ট্যাকওভারফ্লো ত্রুটি পেয়েছি। সুতরাং, কোথাও কিছু উপরের আবদ্ধ আছে। আচ্ছা ভালো.
এটি নেতিবাচক ইনপুট, শূন্য বা একের জন্য কাজ করবে, কারণ -and
অঙ্কের ডানহাতিটি একটি ত্রুটি ঘটাবে যখন এটি অঙ্ক অঙ্কগুলি গণনা করার চেষ্টা করবে (নীচে দেখানো হয়েছে), যা $false
মূল্যায়নের সময় সেই অর্ধেককে যেতে বাধ্য করবে । যেহেতু STDERR ডিফল্টরূপে উপেক্ষা করা হয় এবং সঠিক ফলাফল এখনও প্রদর্শিত হয়, এটি ঠিক আছে fine
পরীক্ষার মামলা
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