এই পর্যন্ত অনুসরণ করা হয় কিভাবে ধীর পাইথন আসলেই কি হয়েছে? (অথবা কত দ্রুত আপনার ভাষা রয়েছে?) ।
দেখা যাচ্ছে যে আমার শেষ প্রশ্নের জন্য x100 স্পিডআপ পাওয়া কিছুটা সহজ ছিল। যারা চ্যালেঞ্জটি উপভোগ করেছেন তবে আরও শক্ত কিছু চান যেখানে তারা সত্যই তাদের নিম্ন স্তরের দক্ষতা ব্যবহার করতে পারেন, এখানে দ্বিতীয় খণ্ড রয়েছে। চ্যালেঞ্জটি হ'ল আমার কম্পিউটারে পরীক্ষিত হিসাবে নিম্নলিখিত অজগর কোডটির জন্য একটি x100 স্পিডআপ পাওয়া।
আরও অসুবিধা করতে আমি এবার পাইপি ব্যবহার করছি। পাইপি ২.২.১ ব্যবহার করে আমার জন্য বর্তমান সময়টি 1 মিনিট 7 সেকেন্ড ।
বিধি
- আমি চালাতে পারি এমন কোড জমা দেওয়ার প্রথম ব্যক্তিটি সঠিক এবং আমার মেশিনে এক্স 100 গুণ দ্রুত গতিতে 50 পয়েন্টের অনুদান দেওয়া হবে।
- আমি এক সপ্তাহ পরে দ্রুততম কোডটিতে জয়টি দেব will
import itertools
import operator
import random
n = 8
m = 8
iters = 1000
# creates an array of 0s with length m
# [0, 0, 0, 0, 0, 0, 0, 0]
leadingzerocounts = [0]*m
# itertools.product creates an array of all possible combinations of the
# args passed to it.
#
# Ex:
# itertools.product("ABCD", "xy") --> Ax Ay Bx By Cx Cy Dx Dy
# itertools.product("AB", repeat=5) --> [
# ('A', 'A', 'A', 'A', 'A'),
# ('A', 'A', 'A', 'A', 'B'),
# ('A', 'A', 'A', 'B', 'A'),
# ('A', 'A', 'A', 'B', 'B'),
# etc.
# ]
for S in itertools.product([-1,1], repeat = n+m-1):
for i in xrange(iters):
F = [random.choice([-1,0,0,1]) for j in xrange(n)]
# if the array is made up of only zeros keep recreating it until
# there is at least one nonzero value.
while not any(F):
F = [random.choice([-1,0,0,1]) for j in xrange(n)]
j = 0
while (j < m and sum(map(operator.mul, F, S[j:j+n])) == 0):
leadingzerocounts[j] +=1
j += 1
print leadingzerocounts
আউটপুট অনুরূপ হওয়া উচিত
[6335185, 2526840, 1041967, 439735, 193391, 87083, 40635, 19694]
আপনাকে অবশ্যই আপনার কোডটিতে একটি এলোমেলো বীজ ব্যবহার করতে হবে এবং উপরের কাছাকাছি উত্তর দেওয়ার পক্ষে যথেষ্ট যে কোনও র্যান্ডম নম্বর জেনারেটর গ্রহণ করা হবে will
আমার মেশিনের সময়গুলি আমার মেশিনে চালিত হবে। এটি একটি এএমডি এফএক্স-8350 আট কোর কোর প্রসেসরে একটি স্ট্যান্ডার্ড উবুন্টু ইনস্টল। এর অর্থ হল আপনার কোডটি চালাতে আমার সক্ষম হওয়া দরকার।
কোড ব্যাখ্যা
এই কোডটি দৈর্ঘ্যের এন + মি -1 এর সমস্ত অ্যারে এস-এর পুনরাবৃত্তি করে যা -1 এবং 1 এস পর্যন্ত তৈরি। প্রতিটি অ্যারে এস এর জন্য 1000-অ-শূন্য এলোমেলো অ্যারে F এর দৈর্ঘ্যের এন -1,0 বা 1 দিয়ে 1/4, 1/2, / 14 এর প্রতিটি মান গ্রহণের সম্ভাবনা সহ নমুনা করা হয়। এরপরে এফ এবং দৈর্ঘ্যের এন এর প্রতিটি উইন্ডোর মধ্যে অভ্যন্তরীণ পণ্যগুলি গণনা করে যতক্ষণ না এটি একটি শূন্য-অভ্যন্তরীণ পণ্য খুঁজে পায়। এটি leadingzerocounts
প্রতিটি অবস্থানে 1 যোগ করে এটি একটি শূন্য অভ্যন্তরীণ পণ্য খুঁজে পায়।
অবস্থা
পার্ল । @ টোবাইঙ্ক দ্বারা ২.7 বার স্লোডাউন। (সিপাইথন নয় পাইপির তুলনায়।)
জে । 39 বার স্পিডআপ @ ইলেভেক্স দ্বারা
- গ । @ গতিবেগে 59 বার গতি বাড়ান।
- জুলিয়া । @ এক-মিনিট দ্বারা আরম্ভের সময়টি অন্তর্ভুক্ত না করে 197 বার দ্রুত faster প্রারম্ভকালীন সময় সহ 8.5 গুণ গতি বাড়ায় (এটি 8 এর চেয়ে 4 প্রসেসর ব্যবহার করে দ্রুত)।
- ফোরট্রান । @ আধা-বহির্মুখী দ্বারা 438 বার গতি বাড়ান।
- Rpython । 258 বার @ প্রিমো দ্বারা গতি বাড়ায়।
- সি ++ । 508 বার @ ইলমাইল দ্বারা গতি বাড়ান।
(আমি নতুন উন্নতিগুলির সময়সীমা বন্ধ করে দিয়েছিলাম কারণ এগুলি খুব দ্রুত এবং এটির সংস্থানগুলি খুব কম ছিল))
এটি চিহ্নিত করা হয়েছিল যে এক সেকেন্ডের নীচের সময়গুলি অবিশ্বাস্য এবং কিছু ভাষার স্টার্ট-আপ ব্যয়ও হয়। যুক্তিটি হল যে আপনি যদি অন্তর্ভুক্ত করতে চান তবে আপনার সি / সি ++ ইত্যাদি সংকলনের সময়ও অন্তর্ভুক্ত করা উচিত Here এখানে পুনরাবৃত্তির সংখ্যা সহ দ্রুততম কোডের সময় 100,000 হয়ে গেছে।
- জুলিয়া । এক সেকেন্ড-মিনিটে @ 42 সেকেন্ড
- সি ++ । 14 সেকেন্ড @ গুয়েসার্টন দ্বারা।
- ফোরট্রান । 14 টি @ অর্ধ-বহিরাগত দ্বারা।
- সি ++ । 12s @ ইলমেলে দ্বারা
- Rpython । 18 এর দশকে @ প্রিমো।
- সি ++ । @ স্টেফান দ্বারা 5s।
বিজয়ী .. স্টেফান!
ফলো-আপ চ্যালেঞ্জ পোস্ট করা হয়েছে। কিভাবে উচ্চ আপনি যেতে পারেন? (একটি কোডিং + অ্যালগোরিদম চ্যালেঞ্জ) । এই এক কঠিন।