জাভাস্ক্রিপ্ট (ES6), 153 142 139 বাইট
n=>([...n].map((c,i,[...a])=>[...''+1e9].map((u,j)=>s+=j+i&&j!=c?p((a.splice(i,1,j),a.join``)):0),s=0,p=q=>eval('for(k=q;q%--k;);k==1')),s)
স্ট্রিং হিসাবে ইনপুট গ্রহণ করে। অবৈধ ইনপুটটির জন্য অপরিজ্ঞাত আচরণ, যদিও এটি ভাবতে পারে এমন কোনও স্ট্রিংয়ের ত্রুটি ছাড়াই এটি শেষ করা উচিত। অগত্যা মহাবিশ্বের তাপ-মৃত্যুর আগে নয়, বিশেষত দীর্ঘ স্ট্রিংয়ের জন্য।
ডেমো
f=
n=>([...n].map((c,i,[...a])=>[...''+1e9].map((u,j)=>s+=j+i&&j!=c?p((a.splice(i,1,j),a.join``)):0),s=0,p=q=>eval('for(k=q;q%--k;);k==1')),s)
console.log([...''+1e19].map((_,i)=>f(i+1+'')).join())
i.onchange=()=>console.log(f(i.value))
<input id=i>
উন্নতি
reduce()
কলগুলিতে কলগুলি রিফ্যাক্ট করে 11 টি বাইট সংরক্ষণ করা হয়েছে এবং কলটির প্রসঙ্গের পরিবর্তে ফাংশন প্যারামিটারে map()
সুস্পষ্টভাবে অ্যারে অনুলিপি করে ।a
splice()
রূপান্তরিত করার জন্য @ নীলের পরামর্শের জন্য 3 বাইট সংরক্ষণ করা [...Array(10)]
হয়েছে [...''+1e9]
।
অবিহিত কোড
input => (
[...input].map(
(char, decimal, [...charArray]) =>
[...'' + 1e9].map(
(unused, digit) => sum +=
digit + decimal && digit != char ?
prime(
(
charArray.splice(decimal, 1, digit)
, charArray.join``
)
) :
0
)
, sum = 0
, prime = test => eval('for(factor = test; test % --factor;); factor == 1')
)
, sum
)
ব্যাখ্যা
এই উত্তরটিmap()
থেকে ধার এবং সংশোধন করা হয়েছিল এমন প্রাথমিকতা পরীক্ষায় পাস করা পরিমাণের পরিমাণের যোগফলটি ফাংশনটি দ্বি-স্তরের ব্যবহার করে ।
(আসল উত্তর)
reduce((accumulator, currentValue, currentIndex, array) => aggregate, initialValue)
সুতরাং উদাহরণস্বরূপ, একটি অ্যারের সমষ্টি নিরূপণ করা, আপনি একটি পাস হবে initialValue
এর 0
, এবং একটি আসতে aggregate
সমান accumulator + currentValue
। এই পদ্ধতির সামান্য পরিবর্তন করে, আমরা পরিবর্তে আদিমতার পরীক্ষায় উত্তীর্ণ হওয়া অনুমানের সংখ্যা গণনা করি:
reduce(
(passedSoFar, currentDecimal, currentIndex, digitArray) =>
isValidPermutation() ?
passedSoFar + prime(getPermutation()) :
passedSoFar
, 0
)
এটি মূলত অন্তঃস্থল reduce()
, যা digitArray
প্রতিটি decimal
নির্দিষ্টকে পরিবর্তিত করে এর সমস্ত ক্রিয়াকলাপকে পুনরায় করে permutatedDigit
। তারপরে আমাদের reduce()
প্রতিটি সম্ভাব্য permutatedDigit
যা পুনরায় প্রতিস্থাপন করতে হবে তার পুনরাবৃত্তি করতে একটি বহিরাগত প্রয়োজন decimal
, যা সঠিক 0-9
।
বাস্তবায়নে অস্বাভাবিকতা
[...''+1e9].map((u,j)=>...
সংক্ষিপ্ততম উপায়টি ছিল নীল কোনও যুক্তির 0
মাধ্যমে পুনরাবৃত্তি করার কথা ভাবতে পারে 9
। এটি করা ভাল হবে u
তবে u
এই ক্ষেত্রে অ্যারের প্রতিটি উপাদানগুলির জন্য কার্যকর নয়।
i+j
ত্রৈমাসিক অবস্থায় 0
চ্যালেঞ্জের বিবরণী অনুসারে এটি নিশ্চিত করা যায় যে এটি কোনও শীর্ষস্থানীয় অঙ্কের অনুমান নয়। j!=c
আসলটি প্রাথমিক n
পরীক্ষার মধ্য দিয়ে যাওয়ার জন্য প্রার্থী নয় তা নিশ্চিত করে ।
(a.splice(i,1,j),a.join``)
এক ধরণের গন্ডগোল। splice()
এ অঙ্ক প্রতিস্থাপন decimal == i
সঙ্গে permutatedDigit == j
, কিন্তু যেহেতু splice()
আয় সরানো উপাদান (এই ক্ষেত্রে, সমান হবে [a[i]]
রুপান্তরিত অ্যারের পরিবর্তে), আমরা পরিবর্তিত অ্যারের পাস কমা অপারেটর ব্যবহার করা আবশ্যক a
আগে primality পরীক্ষা, কিন্তু না join()
এটা ing একটি সংখ্যা স্ট্রিং মধ্যে।
শেষ অবধি, eval()
যেহেতু আরও বৌদ্ধিক পদ্ধতির তুলনায় এটি একটি বাইট সংরক্ষণ করা হয়, এটি ছোট হয়:
q=>eval('for(k=q;q%--k;);k==1')
q=>{for(k=q;q%--k;);return k==1}
প্রাইম টেস্টের রেফারেন্স কলটির p
অব্যবহৃত যুক্তিতে প্রাথমিকভাবে শুরু করা হয় map()
।
n
আউটপুট সবচেয়ে ক্ষুদ্রতর জন্য চিন্তা করার চেষ্টা করছি0
। আমি মনে করি এটিn = 200
। আমিও মনে করি তারা আখা আসা:200,202,204,206,208
,320,322,...,328
,510,...,518
,620,...628
,840,...,848
, ইত্যাদি