गोल्फस्क्रिप्ट - 26 बाइट्स
{:i.)+.,{;10*i%.}%i>|,}:f;
संपादित करें: 1यदि दशमलव समाप्त होता है, तो दशमलव प्रतिनिधित्व की लंबाई के बजाय आउटपुट पर अपडेट किया जाता है।
एक काफी कुशल संस्करण। मान 67890 लगभग 10 सेकंड और 99991 लगभग 20 सेकंड में चलता है । यह पहले की तुलना में थोड़ा धीमा है (लगभग आधा उपवास के रूप में), क्योंकि जो रेंज पुनरावृत्त है उसे दोगुना कर दिया गया है, जिसमें से पहली छमाही को अनदेखा किया गया है।
वैकल्पिक, 26 बाइट्स भी
{:i.)+.n*{*i%.}%i>)^^,}:f;
यह एक स्ट्रिंग पर पुनरावृत्ति करके काम करता है "\n"*(2*i+1), जहां iफ़ंक्शन को पास किया गया मान है। प्रत्येक बार ब्लॉक को दिया गया मान उस का मूल मान है "\n", जो 10 है ।
)^^एक काम के आसपास का एक सा है। जब आप किसी वर्ण को स्ट्रिंग से हटाते हैं , तो परिणाम उस वर्ण का क्रमिक मान निकाल दिया जाता है, जैसा कि ऊपर बताया गया है। हालाँकि, उस मूल्य को वापस लेने से चरित्र के बजाय उस संख्या के स्ट्रिंग प्रतिनिधित्व को जोड़ दिया जाएगा - काफी निरर्थक व्यवहार, और मेरी राय में एक डिजाइन दोष। यदि आप वास्तव में ऐसा करना चाहते हैं, तो पहले सख्त करने पर केवल एक बाइट का खर्च आएगा।
अंतिम मूल्य की एक अतिरिक्त प्रतिलिपि पहले से ही स्टैक पर है, इसलिए मैं फिर से अंतिम मान को हटाता हूं ), इसे स्ट्रिंग के साथ xor करता हूं , और फिर इसे फिर से xor करता हूं , ताकि जो भी अक्षर पहले xor द्वारा जोड़े गए या हटाए गए हैं उन्हें पुनर्स्थापित किया जाए। यदि int op stringइसके स्ट्रिंग प्रतिनिधित्व के बजाय एक चरित्र के रूप में व्यवहार किया जाता है, )^^तो इसे प्रतिस्थापित किया जा सकता है |।
ध्यान दें कि स्ट्रिंग्स के दौरान (जो कि गोल्फस्क्रिप्ट में इन्टस की एक सरणी के रूप में संग्रहीत किया जाता है) प्रत्येक वर्ण मॉड के मूल्य को प्रदर्शित करेगा 256 का मान का मान स्वयं इस सीमा के बाहर हो सकता है। जब विशिष्टता (सेट संचालन के माध्यम से) या समता (माध्यम से ?) के लिए परीक्षण किया जाता है, तो यह वास्तविक मूल्य है जिसकी तुलना प्रदर्शन मूल्य के बजाय की जाती है।
के लिए एक पैच फ़ाइल वर्तमान गोल्फस्क्रिप्ट दुभाषिया के :
61c61
< to_gs
---
> Gstring.new([self])
ऊपर केवल string op int(और इसके विपरीत) के व्यवहार को प्रभावित करेगा , जहांop एक है
+-|&^। के व्यवहार सहित बाकी सब अप्रभावित रहता है Gint`।
निम्नलिखित 24 बाइट समाधान तब मान्य हो जाएगा:
{:i.)+.n*{*i%.}%i>|,}:f;
और यह बहुत सारे अन्य को भी ठीक करता है वास्तव में बदसूरत काम के आसपास ।
पायथन - 48 बाइट्स
f=lambda n:len(set(10**-~i%n for i in range(n)))
सबसे कुशल समाधान नहीं है, लेकिन इससे कम मूल्यों के लिए उचित है 100000 ।
FWIW, मूल तत्व मेरे समाधान के लिए समान है दशमलव में उत्पन्न चक्रीय संख्या के ।
एक ही कोड का एक अधिक कुशल संस्करण ( 70 बाइट्स) ):
def f(n):
a=[];i=10%n
while i not in a:a+=i,;i=i*10%n
return len(a)
99991 का मूल्य एक सेकंड से भी कम समय लेता है।