सबसे चिकनी संख्या का पता लगाएं


59

आपकी चुनौती किसी दी गई सीमा पर सबसे सुगम संख्या का पता लगाना है। दूसरे शब्दों में, वह संख्या ज्ञात करें जिसका सबसे बड़ा प्रधान गुण सबसे छोटा है।

एक चिकनी संख्या वह है जिसका सबसे बड़ा मुख्य कारक छोटा है। तेजी से फूरियर रूपांतरण एल्गोरिथ्म, क्रिप्टानालिसिस और अन्य अनुप्रयोगों के लिए इस प्रकार की संख्या उपयोगी है।

उदाहरण के लिए, सीमा से अधिक 5, 6, 7, 8, 9, 10, 8 सबसे चिकनी संख्या है, क्योंकि 8 का सबसे बड़ा अभाज्य गुणक 2 है, जबकि अन्य सभी संख्याओं का मुख्य कारक 3 या उससे अधिक है।

इनपुट: इनपुट दो धनात्मक पूर्णांक होंगे, जो एक सीमा को परिभाषित करते हैं। सीमा में न्यूनतम स्वीकार्य पूर्णांक 2 है। आप चुन सकते हैं कि क्या सीमा समावेशी, अनन्य, अर्ध-अनन्य, आदि है, जब तक कि आपकी भाषा की सीमा के भीतर एक मनमाना सीमा निर्दिष्ट की जा सकती है। आप फ़ंक्शन इनपुट, स्टडिन, कमांड लाइन तर्क, या अपनी भाषा के लिए किसी भी समकक्ष विधि के माध्यम से नंबर ले सकते हैं। इनपुट में कोई एन्कोडिंग अतिरिक्त जानकारी नहीं।

आउटपुट: रिटर्न, प्रिंट या समकक्ष एक या एक से अधिक पूर्णांक इनपुट रेंज में जो अधिकतम चिकनी (न्यूनतम सबसे बड़ा कारक) हैं। एकाधिक परिणाम लौटना वैकल्पिक है, लेकिन यदि आप ऐसा करना चुनते हैं तो परिणाम स्पष्ट रूप से सीमांकित होने चाहिए। कई परिणामों के लिए मूल आउटपुट स्वरूप ठीक है।

कृपया अपने उत्तर में बताएं कि आप कैसे इनपुट ले रहे हैं और आउटपुट दे रहे हैं।

स्कोरिंग: कोड गोल्फ। यदि ASCII में लिखा है तो वर्णों द्वारा गणना करें, या यदि ASCII में नहीं तो 8 * बाइट्स / 7।

परीक्षण के मामलों:

नोट: ये पाइथन-स्टाइल रेंज हैं, जिनमें कम अंत है लेकिन उच्च अंत नहीं है। अपने कार्यक्रम के लिए उपयुक्त के रूप में बदलें। केवल एक परिणाम आवश्यक है।

smooth_range(5,11)
8
smooth_range(9,16)
9, 12
smooth_range(9,17)
16
smooth_range(157, 249)
162, 192, 216, 243
smooth_range(2001, 2014)
2002

(प्रारंभ, अंत) के बजाय स्वीकार्य (प्रारंभ, लंबाई) के रूप में निर्दिष्ट श्रेणियां स्वीकार्य हैं?
कोडइन्कॉउंस

1
@CodesInChaos ज़रूर। यह "या जो भी" खंड के अंतर्गत आता है।
isaacg

3
मुझे गैर-एएससीआईआई जवाबों को दंडित करने में बिंदु नहीं दिखता है। सभी मामलों में केवल बाइट्स गिनना सरल होगा।
nyuszika7h

1
@ nyuszika7h Ascii एक बाइट से काफी छोटा है - यह केवल 7 बिट्स का उपयोग करता है। इसलिए, मैं एक चरित्र को 7 बिट्स द्वारा निरूपित करता हूं, और तदनुसार अन्य भाषाओं को स्केल करता हूं। हालाँकि, यदि भाषा गैर-एएससीआईआई है, लेकिन इसके सभी पात्रों को 7 बिट्स में पैक कर सकते हैं, तो मैं अधिभार नहीं लगाऊंगा। जे / के बनाम एपीएल देखें। tl; डॉ बाइट्स सरल है, लेकिन APL एट ​​देता है। अल। एक सूक्ष्म लेकिन अनुचित लाभ।
isaacg

3
@ लिसाक आप छोटे वर्ण सेटों का उपयोग करके छद्म भाषाओं के निर्माण को प्रोत्साहित कर रहे हैं। अगर हम 7-बिट कैरेक्टर सेट को 8-बिट कैरेक्टर सेट से अलग करते हैं, तो कोई सबसे आधुनिक भाषाओं को 6 बिट्स में पैक कर सकता है (64 अक्षर हमें AZ, 0-9, मुट्ठी भर व्हाट्सएप, 20 विराम चिह्न, और कुछ को छोड़ दें) ।
Sparr

जवाबों:


99

सीजाम - 13

q~,>{mfW=}$0=

इसे http://cjam.aditsu.net/ पर आज़माएं

उदाहरण इनपुट: 2001 2014
उदाहरण आउटपुट:2002

व्याख्या:

q~पढ़ता है और इनपुट का मूल्यांकन करता है, स्टैक पर 2 संख्याओं को कहते हैं (न्यूनतम और अधिकतम)
,एक सरणी बनाता है [0 1 ... अधिकतम -1]
>मिनट पर शुरू होने वाले सरणी को स्लाइस करता है, जिसके परिणामस्वरूप [मिनट ... अधिकतम -1]
{…}$सॉर्टिंग कुंजी की गणना करने के लिए ब्लॉक का उपयोग करके सरणी
mfको एक संख्या के सभी प्रमुख कारकों के साथ एक सरणी मिलती है, क्रम
W=में सरणी का अंतिम तत्व (W = -1) प्राप्त होता है, इस प्रकार एक के रूप में उपयोग किए जाने वाले सबसे बड़े प्रमुख कारक को प्राप्त करना सॉर्टिंग कुंजी
0=को (सॉर्ट किया गया) सरणी का पहला तत्व मिलता है


38
खैर, मुझे लगता है कि ऐसा है।
एरिक ट्रेसलर

5
मुझे अजगर को एक फैक्टराइज़ फ़ंक्शन जोड़ने की आवश्यकता है।
isaacg

6
यह भाषा विज़ार्डरी है।
ब्रोबिन

8
यह लगभग कुछ HQ9 + s ** t खींचने के समान है क्योंकि यह एक खामियों के बिना हो सकता है। बहुत बढ़िया!
इंगो बुर्क

25
ヽ ༽ ヽ ل͜ ຈ ノmfWit किसी ने इसे 13 वर्णों में हल किया।
तेह इंटर्नेट

66

रेगेक्स ( .NET PCRE फ्लेवर), 183 129 बाइट्स

घर पर यह कोशिश मत करो!

यह वास्तव में जीत का दावेदार नहीं है। लेकिन एरिक ट्रेसलर ने इस समस्या को एक रेगेक्स के साथ हल करने का सुझाव दिया, और मैं इसे देने का विरोध नहीं कर सका। यह हो सकता है के रूप में अच्छी तरह से PCRE में संभव है (और भी कम, नीचे देखें), लेकिन मैं नेट चुना क्योंकि मेरी समाधान मनमाना-लंबाई lookbehinds की जरूरत है। ये रहा:

(?<=^(1+),.*)(?=\1)(?=((11+)(?=.*(?=\3$)(?!(11+?)\4+$))(?=\3+$)|(?!(11+)\5+$)1+))(?!.+(?=\1)(?:(?!\2)|(?=((11+)(?=.*(?=\7$)(?!(11+?)\8+$))(?=\7+$)|(?!(11+)\9+$)1+)).*(?=\2$)(?=\6)))1+

इनपुट एक सम्मिलित अल्पविराम से अलग की गई श्रेणी के रूप में एन्कोडेड है, जहां दोनों संख्याओं को 1एस का उपयोग करते हुए एकात्म संकेतन में दिया जाता है । मैच की सीमा S1 एस होगी जहां Sसीमा में सबसे चिकनी संख्या है। छोटी संख्या के पक्ष में संबंध टूट जाते हैं।

तो प्रश्न से दूसरा उदाहरण निम्नलिखित स्ट्रिंग (मिलान रेखांकित) होगा

111111111,1111111111111111
                 =========

यह (अब तक बल्कि अच्छी तरह से ज्ञात) प्राइम-चेकिंग रेगेक्स पर आधारित है , जिनमें से विविधताएं 6 बार में अंतर्निहित हैं।

यहां उन लोगों के लिए निःशुल्क रिक्ति और टिप्पणियों का उपयोग करने वाला एक संस्करण है जो जानना चाहते हैं कि क्या हो रहा है।

# Note that the beginning of the match we're looking for is somewhere
# in the second part of the input.
(?<=^(1+),.*)          # Pick up the minimum range MIN in group 1
(?=\1)                 # Make sure there are at least MIN 1s ahead

                       # Now there will be N 1s ahead of the cursor
                       # where MIN <= N <= MAX.


(?=(                   # Find the largest prime factor of this number
                       # store it in group 2.
  (11+)                # Capture a potential prime factor P in group 3
  (?=                  # Check that it's prime
    .*(?=\3$)          # Move to a position where there are exactly 
                       # P 1s ahead
    (?!(11+?)\4+$)     # Check that the remaining 1s are not composite
  )
  (?=\3+$)             # Now check that P is a divisor of N.
|                      # This does not work for prime N, so we need a 
                       # separate check
  (?!(11+)\5+$)        # Make sure that N is prime.
  1+                   # Match N
))

(?!                    # Now we need to make sure that here is not 
                       # another (smaller) number M with a smaller 
                       # largest prime factor

  .+                   # Backtrack through all remaining positions
  (?=\1)               # Make sure there are still MIN 1s ahead

  (?:
    (?!\2)             # If M is itself less than P we fail 
                       # unconditionally.
  |                    # Else we compare the largest prime factors.
    (?=(               # This is the same as above, but it puts the
                       # prime factor Q in group 6.
      (11+)
      (?=
        .*(?=\7$)
        (?!(11+?)\8+$)
      )
      (?=\7+$)
    |
      (?!(11+)\9+$)
      1+
    ))
    .*(?=\2$)          # Move to a position where there are exactly 
                       # P 1s ahead
    (?=\6)             # Try to still match Q (which means that Q is
                       # less than P)
  )
)
1+                     # Grab all digits for the match

आप इसे यहाँ पर ऑनलाइन टेस्ट कर सकते हैं । हालांकि बहुत बड़े इनपुट की कोशिश न करें, मैं इस राक्षस के प्रदर्शन के बारे में कोई गारंटी नहीं देता हूं।

संपादित करें:

मैंने इसे PCRE (जो केवल दो चरणों की आवश्यकता है) के लिए पोर्टिंग समाप्त कर दिया, और लगभग एक तिहाई से रेगेक्स को छोटा कर दिया। यहाँ नया संस्करण है:

^(1+),.*?\K(?=\1)(?=((11+)(?=.*(?=\3$)(?!(11+?)\4+$))(?=\3+$)|(?!(11+)\5+$)1+))(?!.+(?=\1)(?:(?!\2)|(?=((?2))).*(?=\2$)(?=\6)))1+

यह दो बदलावों के साथ अनिवार्य रूप से समान है:

  • पीसीआरई मनमाने ढंग से लंबाई की खोज का समर्थन नहीं करता है (जिसका उपयोग मैं MINसमूह में करता था 1)। हालाँकि, PCREसमर्थन करता है \Kजो मैच की शुरुआत को वर्तमान कर्सर स्थिति में रीसेट करता है। इसलिए (?<=^(1+),.*)बन जाता है ^(1+),.*?\K, जो पहले से ही दो बाइट्स बचाता है।
  • असली बचत पीसीआरई के रिकर्सन फीचर से होती है। मैं वास्तव में पुनरावृत्ति का उपयोग नहीं कर रहा हूं, लेकिन आप एक सबरूटीन कॉल के समान फिर से (?n)समूह nसे मिलान करने के लिए उपयोग कर सकते हैं । चूंकि मूल रेगेक्स में एक नंबर के सबसे बड़े प्रमुख कारक को दो बार खोजने के लिए कोड था, इसलिए मैं दूसरे के पूरे थोक को एक साधारण से बदलने में सक्षम था (?2)

37
भगवान की पवित्र माँ
Newb

1
@ टिमवी मुझे यह जांचने की जरूरत है कि सबसे बड़ा प्रमुख कारक (समूह 3या 7) वास्तव में प्रमुख है। इसके लिए जरूरी है कि पहले कैप्चर करने के बाद फैक्टर की एक और कॉपी हो, जो कि प्राइम्स के मामले में नहीं होगी। जबकि मैं उसके चारों ओर काम करता हूं। .NET में कहीं-कहीं एक लुकबाइंड डालकर ऐसा होता है कि मैं चेक के लिए थोड़ा पीछे हट सकता हूं, यह चर-लंबाई के लुकहाइन्ड्स की कमी के कारण छोटे पीसीआरई संस्करण में संभव नहीं होगा। यह शायद है कि थोड़ा छोटा करने के लिए संभव है, लेकिन मैं सिर्फ बदलते नहीं लगता कि +करने के लिए *काम करता है।
मार्टिन एंडर

2
@MartinEnder हाय! मुझे लगता है कि आप इस चुनौती से लंबे समय से हैं, लेकिन मैं अभी सामने आया, एक रेगेक्स समाधान देखा, और मदद नहीं कर सका, लेकिन इस पोस्ट के शीर्ष पर आपकी चेतावनी को पूरी तरह से नजरअंदाज कर दिया :) मुझे यह अन्य लोगों के कोड के लिए मुश्किल लगता है इसलिए आपके रेगेक्स को देखने और भ्रमित होने के बाद, मैंने इसे खरोंच से निकालने का प्रयास किया और (.*),.*?\K(?=(..+)((?=((?(R)\6|\2))*$).*(?=\4$)(?!(..+)\5+$)))(?!.+(?=\1)(?=(..+)(?3)).*(?!\2)\6).+ पीसीआरई में 99 बाइट्स के साथ आया । इसके अलावा, मैं इस साइट पर आपके बहुत काम आया हूँ और मैं एक बहुत बड़ा प्रशंसक हूँ: D भविष्य में एक रेगेक्स लड़ाई की प्रतीक्षा कर रहा है!
ज्येष्ठ

1
मैं उस टिप्पणी के साथ कोड गोल्फ खेल रहा था, इसलिए मैं सिर्फ यहां परिशिष्ट डालूंगा: आप लुकहेड से निकालकर \4$और नकारात्मक लुकहेड के बाद इसे चिपका कर 4 बी खटखटा सकते हैं , लेकिन यह गंभीर रूप से प्रभाव (अंकों के प्रत्येक उपसमूह <= \ _) को प्रभावित करता है 4 को कंपोजिटिविटी के लिए सिर्फ \ _ के बजाय 4) चेक किया जाता है और लंबे इनपुट पर विफल रहता है।
ज्येष्ठ

1
@ संजय को इस पर आप को वापस पाने के लिए हमेशा के लिए क्षमा करें। चूंकि आपने खरोंच से बात लिखी है, इसलिए मुझे लगता है कि आपको एक अलग उत्तर देना चाहिए। यह एक शानदार स्कोर है और आप इसके लिए श्रेय के हकदार हैं। :)
मार्टिन एंडर

16

रेगेक्स (पीसीआरई फ्लेवर), 66 (65 by) बाइट्स

यह देखते हुए कि मार्टिन एंडर और जेएटिया , दो रेगेक्स जीनियस, ने इस कोड गोल्फ के रेगेक्स समाधान लिखे, मैंने खरोंच से अपना लिखा। प्रसिद्ध प्राइम-चेकिंग रेगेक्स मेरे समाधान में कहीं भी प्रकट नहीं होता है।

यदि आप नहीं चाहते हैं कि यह आपके लिए कुछ ख़राब रेगेक्स मैजिक खराब हो तो इसे न पढ़ें। यदि आप स्वयं इस जादू का पता लगाने के लिए शॉट लेना चाहते हैं, तो मैं अत्यधिक ECMAScript अंकुश में कुछ समस्याओं को हल करके शुरू करने की सलाह देता हूं:

  1. प्राइम नंबर से मिलान करें (यदि आप regex में ऐसा करने से पहले से परिचित नहीं हैं)
  2. 2 की मैच शक्तियों (यदि आपने पहले से ऐसा नहीं किया है)। या सिर्फ रेगेक्स गोल्फ के माध्यम से अपना काम करें , जिसमें प्राइम और पॉवर्स शामिल हैं। दोनों क्लासिक और Teukon समस्या सेट करना सुनिश्चित करें।
  3. N की शक्तियों से मेल खाने के लिए सबसे छोटा तरीका खोजें जहाँ N कुछ स्थिर है (यानी रेगेक्स में निर्दिष्ट है, इनपुट नहीं) जो कि समग्र हो सकता है (लेकिन होना आवश्यक नहीं है)। उदाहरण के लिए, 6 की मैच शक्तियों।

  4. Nth शक्तियों के मिलान का एक तरीका खोजें, जहाँ N कुछ स्थिर है = = 2। उदाहरण के लिए, सही वर्गों का मिलान करें। (वार्मअप के लिए, प्रमुख शक्तियों का मिलान करें ।)

  5. सही गुणन कथनों का मिलान करें। त्रिकोणीय संख्याओं का मिलान करें।

  6. मैच फाइबोनैचि संख्या (यदि आप मेरे जैसे पागल हैं), या यदि आप किसी छोटी चीज़ से चिपके रहना चाहते हैं, तो घातांक के सही बयानों का मिलान करें (वार्मअप के लिए, 2 की शक्ति के आधार 2 में लघुगणक मैच के रूप में लौटें - बोनस, किसी भी संख्या के लिए भी ऐसा ही करें, फिर भी उसे पसंद करें), या फैक्टरियल नंबर (वार्मअप के लिए, प्राइमरी नंबर से मिलान करें )।

  7. प्रचुर संख्या में मिलान करें (यदि आप मेरे जैसे पागल हैं)

  8. अनुरोधित परिशुद्धता के लिए एक अपरिमेय संख्या की गणना करें (उदाहरण 2 के वर्गमूल द्वारा इनपुट को विभाजित करें, एक मैच के रूप में गोल परिणाम लौटाएं)

( मेरे द्वारा लिखा गया रेगेक्स इंजन मदद का हो सकता है, क्योंकि यह एकरी मैथ रेगीक्स में बहुत तेज है और इसमें एक यूरी संख्यात्मक मोड शामिल है, जो प्राकृतिक संख्या की रेंज का परीक्षण कर सकता है (लेकिन इसमें एक स्ट्रिंग्स मोड भी है जो गैर-अनपेक्षित रेगेक्स, या यूरी का मूल्यांकन कर सकता है। सीमांकक के साथ)। डिफ़ॉल्ट रूप से यह ईसीएमएस्क्रिप्ट संगत है, लेकिन इसमें वैकल्पिक एक्सटेंशन हैं (जो चुनिंदा पीसीआरटी के सबसेट, या यहां तक ​​कि आणविक लुकहेड को जोड़ सकते हैं, कुछ ऐसा जो किसी अन्य रेगीक्स इंजन के पास नहीं है)।

अन्यथा, पर पढ़ें, और इस GitHub Gist (चेतावनी, कई स्पॉइलर) को भी पढ़ें , जो बढ़ती संख्या के प्राकृतिक कार्यों से निपटने के लिए ECMAScript regex को आगे बढ़ाने की यात्रा को आगे बढ़ाती है, जो कि टेकोन के पहेलियों के सेट से शुरू होती है, उनमें से सभी गणितीय नहीं हैं, जिसने इसे चमकाया। यात्रा)।

इस समस्या के अन्य रेगेक्स समाधानों के साथ, इनपुट को दो संख्याओं के रूप में दिया गया है, जिसमें एक विशेष सीमा का प्रतिनिधित्व करते हुए, अल्पविराम द्वारा अलग किया गया है। केवल एक नंबर लौटा है। रेगेक्स को उन सभी नंबरों को वापस करने के लिए संशोधित किया जा सकता है जो अलग-अलग मैचों के रूप में एक ही सबसे छोटे सबसे बड़े प्रमुख कारक को साझा करते हैं, लेकिन इसके लिए चर-लंबाई लुकअप की आवश्यकता होगी और या तो \Kएक लुकहेड में डाल दिया जाएगा या एक मैच के बजाय कैप्चर के रूप में परिणाम लौटाएगा ।

छोटी प्राइम फैक्टर द्वारा बार-बार निहित विभाजन का उपयोग यहां की तकनीक मैच स्ट्रिंग्स में उपयोग किए जाने के समान है, जिसकी लंबाई एक चौथी शक्ति का उत्तर है जिसे मैंने कुछ समय पहले पोस्ट किया था।

कोई आगे की हलचल के साथ: ((.+).*),(?!.*(?=\1)(((?=(..+)(\5+$))\6)*)(?!\2)).*(?=\1)\K(?3)\2$

आप इसे यहाँ आज़मा सकते हैं।

और मुक्त रिक्ति संस्करण, टिप्पणियों के साथ:

                        # No ^ anchor needed, because this algorithm always returns a
                        # match for valid input (in which the first number is less than
                        # or equal to the second number), and even in /g mode only one
                        # match can be returned. You can add an anchor to make it reject
                        # invalid ranges.

((.+).*),               # \1 = low end of range; \2 = conjectured number that is the
                        # smallest number in the set of the largest prime factor of each
                        # number in the range; note, it is only in subsequent tests that
                        # this is implicitly confined to being prime.
                        # We shall do the rest of our work inside the "high end of range"
                        # number.

(?!                     # Assert that there is no number in the range whose largest prime
                        # factor is smaller than \2.
  .*(?=\1)              # Cycle tail through all numbers in the range, starting with \1.

  (                     # Subroutine (?3):
                        # Find the largest prime factor of tail, and leave it in tail.
                        # It will both be evaluated here as-is, and later as an atomic
                        # subroutine call. As used here, it is not wrapped in an atomic
                        # group. Thus after the return from group 3, backtracking back
                        # into it can increase the value of tail – but this won't mess
                        # with the final result, because only making tail smaller could
                        # change a non-match into a match.

    (                   # Repeatedly divide tail by its smallest prime factor, leaving
                        # only the largest prime factor at the end.

      (?=(..+)(\5+$))   # \6 = tool to make tail = \5 = largest nontrivial factor of
                        # current tail, which is implicitly the result of dividing it
                        # by its smallest prime factor.
      \6                # tail = \5
    )*
  )
  (?!\2)                # matches iff tail < \ 2
)

# now, pick a number in the range whose largest prime factor is \2
.*(?=\1)                # Cycle tail through all numbers in the range, starting with \1.
\K                      # Set us up to return tail as the match.
(?3)                    # tail = largest prime factor of tail
\2$                     # Match iff tail == \2, then return the number whose largest
                        # prime factor is \2 as the match.

एल्गोरिथ्म को आसानी से सबमाउटीन की एक प्रति के साथ सबरूटीन कॉल की जगह, और मैच को कैप्चर ग्रुप के रूप में \ K का उपयोग करके ECMAScript में पोर्ट किया जा सकता है। परिणाम लंबाई में 80 बाइट्स है:

((x+)x*),(?!.*(?=\1)((?=(xx+)(\4+$))\5)*(?!\2)).*(?=\1)(((?=(xx+)(\8+$))\9)*\2$)

इसे ऑनलाइन आज़माएं!

ध्यान दें कि सही कार्यक्षमता की हानि के साथ 1 बाइट (66 से 65 बाइट्स ) द्वारा आकार ((.+).*)को बदलना ((.+)+), लेकिन रेक्सएक्स घातीयता में विस्फोट हो जाता है।

इसे ऑनलाइन आज़माएं! (79 बाइट ECMAScript घातीय-मंदी संस्करण)


11

अजगर 2, 95

i=input()
for a in range(*i):
 s=a;p=2
 while~-a:b=a%p<1;p+=1-b;a/=p**b
 if p<i:i=p;j=s                                        
print j

ट्रायल डिवीजन द्वारा संख्याओं की संख्या की चिकनाई को तब तक प्राप्त किया जाता है जब तक कि संख्या 1 नहीं है। iअब तक की सबसे छोटी चिकनाई को jसंग्रहीत करता है , उस चिकनाई को देने वाली संख्या को संग्रहीत करता है।

गोल्फ के लिए @xnor को धन्यवाद।


1
वह if/elseछोटा पड़ गया है। मेरी पहली सोचा है b=a%p<1;p+=1-b;a/=p**b। या एक निष्पादन जो दो में से एक को एक interleaved स्ट्रिंग में चलाता है। इसके अलावा, शायद while~-aकाम करता है।
xnor

isaacg - मुझे यह उत्तर पसंद है! सबसे बड़ा अभाज्य कारक खोजने के लिए आपको क्या शानदार तरीका मिला! मैंने आपके तरीके को उधार देने के लिए अपने जवाब को अपडेट किया है, इस पद्धति पर आपको क्रेडिट के साथ।
टॉड लेहमन

महान समाधान! @, @ Xnor के विचारों का उपयोग करते हुए s,p=a,2, i,j=p,sअनावश्यक इंडेंटेशन को हटाने और जबकि ब्लॉक को एक पंक्ति में डालने से 95 वर्ण मिलते हैं। निश्चित नहीं है कि आप 98 के साथ कैसे आए ...
फाल्को

यह कोड इमोटिकॉन्स से भरा है, :)
रोसेन्थल

@ फालो उन दो बदलावों से कोई वर्ण नहीं बचा है। 7-> 7।
isaacg

10

जे, 22 20 19 वर्ण

({.@/:{:@q:)@(}.i.)

उदाहरण के लिए

   2001 ({.@/: {:@q:)@(}. i.) 2014
2002

(जे में दो तर्क लेने वाले कार्य infix हैं)


मुझे इस पर एक दरार भी थी, यह इस उत्तर के रूप में छोटा नहीं मिला। अभी भी:(#~ (= <./)@:(i:"1&1)@:*@:(_&q:))@:([ + i.@-~)
ıʇǝɥʇuʎs

यहाँ के {:रूप में एक ही है >./और 1 बाइट बचाता है।
रैंडम

@randomra तुम सही हो - अच्छी कॉल!
फायरफली

सुंदर। TIO यदि आप इसे जोड़ना चाहते हैं: इसे ऑनलाइन आज़माएं!
योना

9

हास्केल, 96 94 93 86 80 वर्ण

x%y|x<2=y|mod x y<1=div x y%y|0<1=x%(y+1)
a#b=snd$minimum$map(\x->(x%2,x))[a..b]

GHCi (एक हास्केल शेल) के माध्यम से उपयोग:

>5 # 9
8
>9 # 15
9

संपादित करें: अब एक बहुत सरल एल्गोरिथ्म।

इस समाधान में दोनों संख्याएँ शामिल हैं (इसलिए 8 # 9और 7 # 8दोनों 8 हैं)

स्पष्टीकरण:

(%) फ़ंक्शन दो पैरामीटर लेता है, x और y। जब y 2 होता है, तो फ़ंक्शन x की चिकनाई लौटाता है।

यहाँ से एल्गोरिदम सरल है - इनपुट में संख्याओं की सभी स्मूथनेस की संयुक्त सूची प्राप्त करें, प्रत्येक स्मूथनेस के साथ यह मूल संख्या को संदर्भित करते हुए क्रमबद्ध करें, फिर सबसे छोटा पाने के लिए सॉर्ट करें, और इसे संदर्भित संख्या लौटाएं।


यहाँ एक ही एल्गोरिथ्म के साथ एक ungolfed जावास्क्रिप्ट संस्करण है:

function smoothness(n,p)
{
    p = p || 2
    if (x == 1)
        return p
    if (x % p == 0)
        return smoothness(x/p, p)
    else
        return smoothness(x,p+1);
}
function smoothnessRange(a, b)
{
    var minSmoothness = smoothness(a);
    var min=a;
    for(var i=a+1;i <= b;i++)
        if(minSmoothness > smoothness(i))
        {
            minSmoothness = smoothness(i)
            min = i
        }
    return min;
}

क्या कम से कम किसी अन्य व्यक्ति को उपनाम देना संभव होगा? ऐसा लगता है कि यह कुछ पात्रों को बचाएगा।
isaacg

मैंने इसे आजमाया, लेकिन मोनोमोर्फिज्म प्रतिबंध के कारण वास्तव में एक चरित्र
पर गर्व होता है

आप सिर्फ m = न्यूनतम नहीं कर सकते हैं? हास्केल अभी भी एक रहस्य है।
isaacg

1
@isaacg मोनोमोर्फिज्म प्रतिबंध को दरकिनार करने के लिए लिखना होगाm l=minimum l
गर्व हैस्केलर

2
मैं एक हास्केल समाधान पोस्ट करने जा रहा था, जब तक कि मैंने आपका देखा जो मेरे अधूरे संस्करण को भी धड़कता है ... +1
nyuszika7h

9

गणितज्ञ, ६१ ४५ ३ ९ पात्र

Range@##~MinimalBy~Last@*FactorInteger&

अनाम फ़ंक्शन के रूप में कल्पना का बहुत सीधा कार्यान्वयन।

  • रेंज (समावेशी) प्राप्त करें।
  • सभी पूर्णांक कारक।
  • न्यूनतम खोजें, सबसे बड़े प्रमुख कारक द्वारा छांटे गए।

8

लूआ - 166 वर्ण

मैं नहीं है (अभी तक!) पर टिप्पणी करने से नहीं था पर्याप्त प्रतिष्ठा AndoDaan के समाधान , लेकिन यहाँ अपने कोड पर कुछ सुधार कर रहे हैं

a,b=io.read("*n","*n")s=b for i=a,b do f={}n=i d=2 while n>1 do while n%d<1 do f[#f+1]=d n=n/d end d=d+1 end p=math.max(unpack(f))if p<s then s=p c=i end end print(c)

परिवर्तन :

  • n%d==0द्वारा n%d<1जो इस मामले में बराबर है
  • एक स्थान हटा दिया
  • table.insert(f,d)द्वारा प्रतिस्थापित f[#f+1]=d ( #fएफ के तत्वों की संख्या है)

आह, खुशी है कि मैं यहाँ नज़र आया। आह, पहले दो को मुझे जांचना चाहिए था और पकड़ा जाना चाहिए, लेकिन आपका तीसरा सुधार मेरे लिए नया है (मेरा मतलब है जो मैं इस्तेमाल कर रहा हूं उससे अलग)। कि यहाँ मेरी बहुत मदद करने के लिए और golf.shinh.com पर जा रहा है। धन्यवाद!
AndoDaan

8

बैश + कोरुटिल्स, 56 बाइट्स

seq $@|factor|sed 's/:.* / /'|sort -nk2|sed '1s/ .*//;q'

इनपुट बिल्कुल दो कमांड लाइन तर्कों से है (धन्यवाद @ nyuszika7h !!!)। आउटपुट एक विलक्षण परिणाम है जिसे STDOUT में मुद्रित किया जाता है।

  • seq कमांड-लाइन तर्कों से संख्याओं की सीमा, प्रति पंक्ति, प्रदान करता है।
  • factorउन नंबरों को पढ़ता है और प्रत्येक संख्या के बाद एक कोलोन और उस नंबर के प्रमुख कारकों की क्रमबद्ध सूची को आउटपुट करता है। तो सबसे बड़ा प्रमुख कारक प्रत्येक पंक्ति के अंत में है।
  • पहला sedबृहदान्त्र और सभी को हटाता है, लेकिन अंतिम / सबसे बड़ा प्रमुख कारक है, इसलिए प्रत्येक संख्या (स्तंभ 1) और इसके सबसे बड़े प्रमुख कारक (स्तंभ 2) की एक सूची छोड़ देता है।
  • sort संख्यात्मक रूप से कॉलम 2 द्वारा बढ़ते क्रम में।
  • अंतिम sedमिलान पंक्ति 1 (संख्या जिसका सबसे बड़ा प्रमुख कारक सूची में सबसे छोटा है), पहली जगह सहित और उसके बाद सब कुछ हटा देता है, फिर छोड़ देता है। sedछोड़ने से पहले स्वचालित रूप से इस प्रतिस्थापन के परिणाम को प्रिंट करता है।

आउटपुट:

$ ./smooth.sh 9 15
12
$ ./smooth.sh 9 16
16
$ ./smooth.sh 157 249
162
$ ./smooth.sh 2001 2014
2002
$ 

इस संदर्भ में नोट सीमा नहीं है समावेशी दोनों अंतिमबिंदुओं की।


1
seq $@3 बाइट्स कम है, यदि आप मान सकते हैं कि केवल दो तर्क हैं।
nyuszika7h

@ nyuszika7h अच्छा विचार - धन्यवाद!
डिजिटल ट्रामा

5

अजगर 2, 67

f=lambda R,F=1,i=2:[n for n in range(*R)if F**n%n<1]or f(R,F*i,i+1)

एक और गोल्फ के बारे में सोचकर मुझे एक नए एल्गोरिथ्म के लिए सहजता की जांच करने का विचार मिला, इसलिए देर से जवाब।

फैक्टरियल के मुख्य कारक i!में अधिकांश में बिल्कुल प्राइम शामिल हैं i। इसलिए, यदि nअलग-अलग primes का उत्पाद है , तो इसकी चिकनाई (सबसे बड़ा प्रमुख कारक) सबसे छोटा iहै जिसके nलिए एक भाजक है i!। में बार-बार प्रमुख कारकों के लिए खाते में n, हम इसके बजाय पर्याप्त रूप से उच्च शक्ति का उपयोग कर सकते हैं i!। विशेष रूप से, (i!)**nपर्याप्त है।

कोड फैक्टरिंग को बढ़ाने की कोशिश करता है F=i!, पुनरावर्ती रूप से अपडेट किया जाता है। हम Fइनपुट रेंज के विभाजकों के लिए फ़िल्टर करते हैं , और यदि कोई हो, तो उन्हें आउटपुट करते हैं, और अन्यथा आगे बढ़ते हैं (i+1)!

परीक्षण का मामला:

>> f([157, 249])
[162, 192, 216, 243]

4

C,  149   95

संपादित उत्तर:

मैं इस समाधान के लिए क्रेडिट का दावा नहीं कर सकता। यह अपडेट किया गया उत्तर इसहाक द्वारा उनके पायथन समाधान में इस्तेमाल की गई सुंदर विधि को उधार लेता है । मैं यह देखना चाहता था कि क्या इसे सी में नेस्टेड for/ whileलूप के रूप में बिना घुंघराले ब्रेसिज़ के साथ लिखना संभव है , और यह है!

R(a,b,n,q,p,m){for(;a<b;m=p<q?a:m,q=p<q?p:q,n=++a,p=2)while(n>1)if(n%p)p++;else n/=p;return m;}

व्याख्या:

  • फ़ंक्शन R(a,b,n,q,p,m)सीमा aको स्कैन करता है b-1और पाया जाने वाला पहला सबसे आसान नंबर लौटाता है। मंगलाचरण निम्न प्रपत्र के पालन की आवश्यकता है: R(a,b,a,b,2,0)इतना है कि समारोह के अंदर चर प्रभावी रूप से प्रारंभ कर रहे हैं इस प्रकार है: n=a;q=b;p=2;m=0;

मूल उत्तर :

यह मेरा मूल उत्तर था ...

P(n,f,p){for(;++f<n;)p=p&&n%f;return p;}
G(n,f){for(;--f>1;)if(n%f==0&&P(f,1,1))return f;}
R(a,b,p,n){for(;++p;)for(n=a;n<b;n++)if(G(n,n)==p)return n;}

व्याख्या:

  • यदि प्राइमरी या नॉन- प्राइमरी (शून्य) है तो फंक्शन P(n,f,p)टेस्ट वैल्यू nप्राइमलिटी और रिटर्न के लिए सही है (नॉनजेरो) । और दोनों को 1 के रूप में पारित किया जाना चाहिए।nnfp
  • फ़ंक्शन G(n,f)सबसे बड़ा प्रमुख कारक है nfके रूप में पारित किया जाना चाहिए n
  • फ़ंक्शन R(a,b,p,n)सीमा aको स्कैन करता है b-1और पाया जाने वाला पहला सबसे आसान नंबर लौटाता है। p1. के रूप में पारित किया जाना चाहिए nकिसी भी मूल्य हो सकता है।

परीक्षण चालक:

test(a,b){printf("smooth_range(%d, %d)\n%d\n",a,b,S(a,b,1,0));}
main(){test(5,11);test(9,16);test(9,17);test(157,249);test(2001,2014);}

आउटपुट:

smooth_range(5, 11)
8
smooth_range(9, 16)
9
smooth_range(9, 17)
16
smooth_range(157, 249)
162
smooth_range(2001, 2014)
2002

मेरा तर्क है कि यह "इनपुट में कोई अतिरिक्त जानकारी नहीं एन्कोडिंग" खंड के गलत हो जाएगा।
अल्चाइमेस्ट

@ एलाइमिस्ट - आप सही हो सकते हैं ... लेकिन मुझे नहीं लगता कि छद्म तर्क में कोई वास्तविक अतिरिक्त जानकारी है। कम से कम ऐसी कोई जानकारी नहीं जो जवाब देने के लिए किसी भी तरह का सुराग हो।
टॉड लेहमन

4

हास्केल - 120

import Data.List
import Data.Ord
x!y=(minimumBy(comparing(%2)))[x..y]
x%y|x<y=y|x`mod`y==0=(x`div`y)%y|otherwise=x%(y+1)

उदाहरण का उपयोग:

> 5 ! 10
8
> 9 ! 15
9
> 9 ! 16
16
> 157 ! 248
162
> 2001 ! 2013
2002

1
क्या आप <1इसके बजाय उपयोग नहीं कर सकते ==0?
dfeuer

हाँ, यह एक अच्छा सुधार होगा। बहुत सारी छोटी चीजें हैं जिन्हें बेहतर तरीके से किया जा सकता है। सौभाग्य से यह उत्तर पहले से ही उन सभी को करता है: codegolf.stackexchange.com/a/36461
टेलर फॉसक

4

Q, 91 अक्षर K, 78 वर्ण

{(x+{where x=min x}{(-2#{x div 2+(where 0=x mod 2_til x)@0}\[{x>0};x])@0}'[(x)_til y+1])@0}

k शायद एक दर्जन पात्रों को शेव करेगा

संपादित करें: वास्तव में, इस समय ऊपरी बाध्य को गैर समावेशी माना जाता है

{*:x+{&:x=min x}{*:-2#{6h$x%2+*:&:x={y*6h$x%y}[x]'[2_!x]}\[{x>0};x]}'[(x)_!y]}

4

नोट: यह उत्तर स्वीकार्य नहीं है।

इस जवाब में चुनौती के बाद जोड़े गए पायथ की कई विशेषताओं का उपयोग किया गया है।

मैंने एक और नया फीचर जोड़ा, 2 एलिमेंट टपल पर अनार्य रेंज को कॉल करना, जो दो वर्णों के समाधान को इस तक सीमित करता है:

अजगर ,,

hoePNUQ

इनपुट अब अलग से अल्पविराम लिया गया है। बाकी वही है।


यह उत्तर पायथ की एक विशेषता का उपयोग करता है जिसे इस प्रश्न के बाद जोड़ा गया था, विशेष रूप से @ aditsu के अद्भुत CJam समाधान को देखने के बाद। कहा जा रहा है, मैं यह प्रदर्शित करना चाहता था कि उस सुविधा को जोड़ने से क्या संभव हुआ है। यह सुविधा है P, जो कि एक एरीटी -1 फ़ंक्शन है जो पूर्णांक इनपुट पर इनपुट के सभी प्रमुख कारकों की एक सूची देता है , जो सबसे छोटे से सबसे बड़े क्रमबद्ध हैं।

अजगर , ९

hoePNrQvw

पायथन-शैली की श्रेणियों का उपयोग करता है, STDIN पर अलग की गई नई रेखा। STDOUT के लिए सबसे छोटा समाधान आउटपुट।

व्याख्या:

      Q = eval(input())                         Implicit, because Q is present.
h     head(                                     First element of
 o         order_by(                            Sort, using lambda expression as key.
                    lambda N:                   Implicit in o
  e                          end(               Last element of
   PN                            pfact(N)),     List containing all prime factors of N.
  r                 range(                      Python-style range, lower inc, upper exc.
   Q                      Q,                    A variable, initialized as shown above.
   vw                     eval(input()))))      The second entry of the range, same way.

टेस्ट:

$ newline='
'

$ echo "9${newline}16" | ./pyth.py -c 'hoePNrQvw'
9

$ echo "9${newline}17" | ./pyth.py -c 'hoePNrQvw'
16

$ echo "157${newline}249" | ./pyth.py -c 'hoePNrQvw'
162

$ echo "2001${newline}2014" | ./pyth.py -c 'hoePNrQvw'
2002

@ मार्टिनबटनर येप, जैसा कि सीजेएम समाधान पर उनकी टिप्पणी द्वारा सुझाया गया है
एड्रिएब

@ मार्टिनबटनर हाँ, पी, नई सुविधा है। मैं जवाब में डालूँगा।
isaacg

1
स्वीकार्य या नहीं, न केवल मुझे यह पसंद है, लेकिन मुझे यह भी लगता है कि यदि आप ध्यान देते हैं तो वे छोटे "मैक्रोज़" पठनीय हैं - वे सीधे अजगर को बदल देते हैं, आखिरकार। एक गोल्फ भाषा के लिए कुछ कहना पड़ता है जो गोल्फ के लिए अच्छा है लेकिन जरूरी नहीं कि वह अड़ियल हो।
कुबा ओबर

@ कुबाओबर धन्यवाद, कुबा। पाइथ लिखने में मेरा हमेशा से यही इरादा रहा है कि इसे जितना संभव हो उतना गोल्फ और आसानी से पढ़ा जा सके। मुझे खुशी है कि यह काम कर रहा है।
isaacg

3

लुआ - 176 वर्ण

a,b=io.read("*n","*n")s=b for i=a,b do f={}n=i d=2 while n>1 do while n%d==0 do table.insert(f, d)n=n/d end d=d+1 end p=math.max(unpack(f))if p<s then s=p c=i end end print(c)

मुझे वास्तव में लुआ में गोल्फिंग बंद कर देना चाहिए। कोई मतलब नहीं है।


14
IMHO, कोड गोल्फिंग मुक्केबाजी की तरह है: भार वर्ग हैं। एक दी गई भाषा सीधे तौर पर नहीं जीत सकती है, लेकिन यह मजेदार है और उस वर्ग / भाषा के भीतर गोल्फ के लिए रोशन है।
माइकल ईस्टर

3

क्लोजर - 173 170 वर्ण

मैं क्लोजर नौसिखिया हूं। golfed:

(defn g[x,d](if(and(= 0(mod x d))(.isProbablePrime(biginteger d) 1))d 0))(defn f[i](apply max-key(partial g i)(range 2(inc i))))(defn s[a,b](first(sort-by f(range a b))))

नमूना चलता है:

सीमाओं में निम्न-अंत शामिल हैं, उच्च-अंत को बाहर करें: [a, b) केवल सबसे चिकनी संख्याओं में से एक को प्रिंट करता है, यदि कई होते हैं।

(println (s 5 11))
(println (s 9 16))
(println (s 9 17))
(println (s 157, 249))
(println (s 2001, 2014))

पैदावार:

bash$ java -jar clojure-1.6.0.jar range.clj
8
9
16
192
2002

Ungolfed:

(defn g [x,d] (if (and (= 0(mod x d)) (.isProbablePrime (biginteger d) 1)) d 0))
(defn f [i] (apply max-key (partial g i) (range 2 (inc i))))
(defn s [a,b] (first (sort-by f (range a b))))

1
एक सीमा जिसमें कम अंत शामिल होता है और उच्च अंत को शामिल करता है आमतौर पर [ए, बी) लिखा जाता है।
murgatroid99

हां, नोट के लिए धन्यवाद
माइकल ईस्टर

3

रूबी, ६५ ६२

require'prime'
s=->a,b{(a..b).min_by{|x|x.prime_division[-1]}}

Https://codegolf.stackexchange.com/a/36484/6828 पर माफी के साथ , यह उस का गोल्फ (और थोड़ा सरलीकृत) संस्करण है। एक समावेशी सीमा का उपयोग करता है क्योंकि यह एक चरित्र छोटा है।

1.9.3-p327 :004 > s[157,249]
 => 192 
1.9.3-p327 :005 > s[5,11]
 => 8 
1.9.3-p327 :006 > s[9,15]
 => 12 
1.9.3-p327 :007 > s[9,16]
 => 16 

और तीन पात्रों को बचाने के लिए येन.फर्स्ट का धन्यवाद।


1
आप वास्तव में [0] के बिना दूर हो सकते हैं, क्योंकि सरणी तुलना वैसे भी पहले तत्व को प्राथमिकता देगी। यह अलग, लेकिन अभी भी सही परिणाम देगा।
येन द फ़र्स्ट

3

C # LINQ: 317 303 289 262

using System.Linq;class P{static void Main(string[]a){System.Console.Write(Enumerable.Range(int.Parse(a[0]),int.Parse(a[1])).Select(i=>new{i,F=F(i)}).Aggregate((i,j)=>i.F<j.F?i:j).i);}static int F(int a){int b=1;for(;a>1;)if(a%++b<1)while(a%b<1)a/=b;return b;}}

Ungolfed:

using System.Linq;

class P
{
  static void Main(string[]a)
  {
    System.Console.Write(
      Enumerable.Range(int.Parse(a[0]), int.Parse(a[1])) //create an enumerable of numbers containing our range (start, length)
        .Select(i => new { i, F = F(i) }) //make a sort of key value pair, with the key (i) being the number in question and the value (F) being the lowest prime factor
        .Aggregate((i, j) => i.F < j.F ? i : j).i); //somehow sort the array, I'm still not entirely sure how this works
  }
  static int F(int a)
  {
    int b=1;
    for(;a>1;)
      if(a%++b<1)
        while(a%b<1)
          a/=b;
    return b;
  }
}

यह कमांड लाइन से शुरू और लंबाई में लेता है और सबसे बड़ी चिकनी संख्या को लौटाएगा।

मैंने अपना उत्तर बनाने के लिए यहाँ और यहाँ से उत्तर दिए।

इसे ट्विक करने और 12 बाइट्स हटाने के लिए विजुअलमेलन का धन्यवाद! मैं भी 2 बाइट्स को बचाने में ब्रेसिज़ से छुटकारा पा लिया, और CodeInChaos ने मुझे याद किया कुछ स्पष्ट सामान (फिर से धन्यवाद) बताया।


सामान्य प्रयोजन की छोटी चीजों के जोड़े, आप मी के बगल में Fपरिभाषित करके 4 बाइट बचा सकते हैं int b। स्थानों के एक जोड़े में आप तुलना प्रदर्शन a%b==0, और aऔर bहमेशा सकारात्मक अगर यह 1 से कम आप की जाँच करके प्रत्येक के लिए एक बाइट कटौती कर सकते हैं कर रहे हैं a%b<1। आप इसे शुरू करने की बजाय 1 की तुलना में bयदि if की स्थिति में वृद्धि करके एक बाइट को बचा सकते हैं a%++b<0। मुझे भी लगता है कि इस मामले में यह पूरी तरह से योग्य है System.Console.WriteLineऔर namespaceखंड से बचने के लिए सस्ता है ।
विजुअलमेल

@VisualMelon धन्यवाद, आपके विचारों के साथ अद्यतन :)
ldam

m=...:m;Thingy जबकि पाश के बाहर गिर जाता है। इसलिए, आप ड्रॉप कर सकते हैं m=0,और return m;साथ बदल सकते हैं return m=b>m?b:m;। फिर, आप m=...:m;पूरी तरह से छोड़ सकते हैं ।
tomsmeding

यह अजीब लग सकता है, लेकिन यह है- मेरे लिए- सीजेएम और जे से कम redable और मुझे लगता है कि C # को वर्बोज़ बनाने के लिए डिज़ाइन किया गया था, और इसे कम बनाने के प्रयास इसे अपठनीय बनाते हैं? हम्म ....
कुबा ओबेर

नहीं, मैं सहमत हूँ, LINQ एक दानव की तरह दिखता है जब आप इसे यहाँ और वहाँ देखते हैं और वास्तव में इसके साथ कभी नहीं खेलते हैं। एक बार जब आप इसे समझ लेते हैं, तो यह वास्तव में अच्छा होता है :) इसके साथ ही कहा, मुझे अभी भी पूरी तरह से समझ नहीं आया है कि Aggregateयह कैसे काम करता है, मैंने इसे सिर्फ एक क्षेत्र के बजाय अपनी नई वस्तु को प्राप्त करने के लिए एक और उत्तर में देखने के बाद इसे आज़माया, और यह सिर्फ पूरी तरह से काम करने के लिए हुआ :)
ldam

2

आर, 83

library(gmp)
n=a:b
n[which.min(lapply(lapply(lapply(n,factorize),max),as.numeric))]

जहां इनपुट रेंज के नीचे aऔर ऊपर (समावेशी) को सौंपा गया है b

gmpएक पैकेज है जो CRAN पर उपलब्ध है। यह तब तक गंदा लगा जब तक कि मैंने mfसीजेएम में उस बेतुके कार्य को नहीं देखा। install.packages("gmp")कंसोल में टाइप करके इंस्टॉल करें ।


1
यदि आप lapply3 बार उपयोग कर रहे हैं, तो आप इसे उपनाम देना चाहते हैं (यानी l=lapplyऔर फिर उपयोग करें l(...)। इसी तरह से factorizeकेवल वही फ़ंक्शन है जो आप पैकेज से उपयोग करते हैं जो gmpआप gmp::factorizeलाइब्रेरी को लोड करने और फिर उपयोग करने के बजाय उपयोग कर सकते हैं factorize। इस प्रकार आपका कोड l=lapply;n=a:b;n[which.min(l(l(l(n,gmp::factorize),max),as.numeric))]69 बाइट्स बन जाएगा ।
प्लेनैपस

2

पॉवरशेल - 85

($args[0]..$args[1]|sort{$d=2
while($_-gt1){while(!($_%$d)){$m=$d;$_/=$d}$d++}$m})[0]

यह प्रत्येक संख्या के अधिकतम अभाज्य गुणनखंड के आधार पर संख्याओं की संख्या (समावेशी) को छाँटेगा। यह सबसे कम छांटे गए तत्व को वापस करता है।

> smooth 5 10
8
> smooth 9 15
12
> smooth 9 16
16
> smooth 157 248
243
> smooth 2001 2013
2002

2

जे - 16 चार

टिप्पणियों द्वारा अनुमत सीमा के अनुसार ( प्रारंभ , लंबाई ) शैली का उपयोग करना ।

(0{+/:{:@q:@+)i.

डाइएडिक क्रिया के रूप में उपयोग करने के लिए: बाएं तर्क शुरू होता है , दाईं ओर लंबाई होती है

   5 (+)i. 6              NB. range
5 6 7 8 9 10
   5 (q:@+)i. 6           NB. prime factorizations
5 0 0
2 3 0
7 0 0
2 2 2
3 3 0
2 5 0
   5 ({:@q:@+)i. 6        NB. largest prime factors
5 3 7 2 3 5
   5 (+/:{:@q:@+)i. 6     NB. sort range by smallest factors
8 6 9 5 10 7
   5 (0{+/:{:@q:@+)i. 6   NB. take first entry
8
   f=:(0{+/:{:@q:@+)i.    NB. can also be named
   2001 f 13
2002

A ( स्टार्ट , एंड ) समाधान +2 वर्ण है, और अंत को बाहर करता है; अंत सहित +2 अधिक है। लेकिन उज्ज्वल पक्ष पर, यह अच्छा लग रहा है क्योंकि हम सभी {ब्रेसेस} से मेल खाते हैं।

(0{}./:{:@q:@}.)i.    NB. excluding
(0{}./:{:@q:@}.)1+i.  NB. including

2

गंभीरता से, 8 * 14/7 = 16 (गैर-प्रतिस्पर्धी)

,x;`yM`M;m@í@E

इस चुनौती के बाद गंभीरता से बनाया गया था, लेकिन मैं इस उत्तर को पोस्ट करना चाहता था क्योंकि यह इस प्रकार की चुनौतियों का उदाहरण देता है जो गंभीरता से अच्छा है।

इसे ऑनलाइन आज़माएं!

व्याख्या:

,x;`yM`M;m@í@E
,x;             make two copies of range(a,b) (a,b = input())
   `  `M;       make two copies of the result of the map:
    yM            push maximum prime factor
         m@í    push index of minimum element from prime factors
            @E  push element from range with given index

2

अजगर , 7 बाइट्स

.mePbrF

यहाँ कोशिश करो!

[a,b)[a,b]}r

.mePbrF – Full program with arguments a and b.
     rF – Fold by half-inclusive range. Yields the integers in [a, b).
.m      – Values b in that list which give minimal results when applied f.
  ePb   – function / block f. 
   Pb   – Prime factors of b.
  e     – Last element. This is guaranteed to yield the largest, as they're sorted.

1

कोबरा - 150

def f(r as vari int)
    x,y=r
    c,o=y,0
    for n in x:y,for m in n:0:-1
        p=1
        for l in 2:m,if m%l<1,p=0
        if n%m<=0<p
            if m<c,c,o=m,n
            break
    print o

यह भी सुनिश्चित नहीं है कि मैंने क्यों परेशान किया, कोबरा अभी यहां प्रतिस्पर्धा नहीं कर सकता है।


1
कोबरा अजगर के समान दिखता है ... क्या अंतर हैं?
बीटा डेके

जब आप Cth को Python का सिंटैक्स देते हैं तो @BetaDecay कोबरा होता है। कोबरा वेबसाइट
ousurous

1

रूबी - 113 वर्ण

Stdlib का उपयोग करना। एक परिणाम देता है। माणिक 2.1.2 पर परीक्षण किया गया।

require 'prime'
def smooth_range(a,b)
  (a...b).sort_by{|e|e.prime_division.flat_map{|f,p|[f]*p}.uniq.max}[0]
end

1
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ स्टैक एक्सचेंज में आपका स्वागत है। अपना परिणाम पोस्ट करने के लिए धन्यवाद। चूंकि यह एक कोड-गोल्फ प्रश्न है, कृपया अपने वर्ण गणना को अपने उत्तर में शामिल करें। आप इस तरह के रूप में एक उपकरण का उपयोग कर सकते हैं: javascriptkit.com/script/script2/charcount.shtml
isaacg

1

पर्ल (5.10+), 83

for(<>..<>){$n=$_;$p=2;$_%$p&&$p++or$_/=$p while$_>1;$m=$p,$r=$n if$p<$m||!$m}
say$r

(लाइनब्रेक हटाया जा सकता है)। स्टड की दो पंक्तियों पर एक समावेशी सीमा के दो अंत बिंदुओं को लेता है (क्योंकि <>एक्सेस करने से सस्ता है ARGV) और स्टंपआउट के लिए सबसे चिकनी आउटपुट देता है। यदि सबसे चिकनी के लिए एक टाई है, तो सबसे छोटा प्रिंट करता है। एक चरित्र की कीमत पर सबसे बड़ा प्रिंट कर सकता है।

एल्गोरिथ्म मूल रूप से isaacg का सबसे बड़ा प्रमुख कारक खोजने का तरीका है, हालांकि हम स्वतंत्र रूप से इसके साथ आए थे। उस हिस्से को खूबसूरती से पर्ल में एक बयान में नीचे दिया गया है, बाकी हिस्सों में अधिक ओवरहेड है, हालांकि मैं चाहूंगा।

के तहत perl -Eया use 5.012प्रस्तावना के साथ चलाया जाना चाहिए । आप ऐसा नहीं कर सकते हैं, तो बदलने के say$rसाथ print$r,$/


1

अजगर 2 (84)

f=lambda n,p=2:n>1and f(n/p**(n%p<1),p+(n%p>0))or p
print min(range(*input()),key=f)

@ isaacg का समाधान , लेकिन minस्पष्ट मिनट-खोज के स्थान पर फ़ंक्शन कुंजी और पुनरावृत्ति की भूमिका निभाते हुए एक पुनरावर्ती फ़ंक्शन के साथ।

पुनरावृत्ति सीमा से बचने के लिए स्टैकलेस पायथन में दौड़ें

यह परोपकारी स्थिति का उपयोग करने के लिए बेकार लग रहा है (n%p<1), फिर इसकी उपेक्षा भी परांठे में दोहराएं (n%p>0), लेकिन मुझे जो सबसे अच्छा मिला। मैंने चीजों की एक गुच्छा कोशिश की, लेकिन वे बदतर हो गए।

f(n/p**(n%p<1),p+(n%p>0))     # Current for comparison
f(*[n/p,n,p,p+1][n%p>0::2])
n%p and f(n,p+1)or f(n/p,p)
f(*n%p and[n,p+1]or[n/p,p])

मैं आपके द्वारा किए गए किसी भी सुधार का स्वागत करता हूं।


1

जावा 8 - 422 454 वर्ण

मैं जावा 8 सीख रहा हूं, और यह जावा (या यहां तक ​​कि जावा 8 धाराओं) के सापेक्ष शॉट देना चाहता था।

अन्य भाषाओं की तुलना में, यह क्रूर लेकिन एक दिलचस्प अभ्यास है।

golfed:

import java.util.stream.*;import java.math.*;
class F{int v;int i;public int getV() { return v; }
F(int i){this.i = i;v=IntStream.range(2,i+1).map(j->((i%j==0)&&new BigInteger(""+j).isProbablePrime(1))?j:0).max().getAsInt();}}
public class T{
int s(int a, int b){return IntStream.range(a,b+1).boxed().map(F::new).sorted(java.util.Comparator.comparingInt(F::getV)).collect(java.util.stream.Collectors.toList()).get(0).i;}}

Ungolfed:

import java.util.stream.*;
import java.math.*;

class F {
    int v;
    int i;
    public int getV() { return v; }
    F (int i) { 
        this.i = i;
        v = IntStream.range(2,i+1)
                     .map( j -> ((i%j==0) && 
                           new BigInteger(""+j).isProbablePrime(1))?j:0)
                     .max()
                     .getAsInt();
    }
}

public class T {
    int s(int a, int b) {
        return IntStream.range(a,b+1)
                    .boxed()
                    .map(F::new)
                    .sorted(java.util.Comparator.comparingInt(F::getV))
                    .collect(java.util.stream.Collectors.toList())
                    .get(0).i;
    }
}

उदाहरण रन का उपयोग:

public static void main(String[] s) {
    System.out.println(new T().s(157,249));
}

192

1

MATL ( गैर-प्रतिस्पर्धी ), 20 बाइट्स

इस भाषा को चुनौती के बाद डिजाइन किया गया था

रेंज दोनों सिरों पर समावेशी है। संख्या को दो अलग-अलग इनपुट के रूप में लिया जाता है।

2$:t[]w"@YfX>v]4#X<)

इसे ऑनलाइन आज़माएं!

व्याख्या

2$:          % implicitly input two numbers. Inclusive range
t            % duplicate                      
[]           % empty array
w            % swap elements in stack         
"            % for each                  
  @          %   push loop variable
  Yf         %   prime factors                  
  X>         %   maximum value
  v          %   vertical concatenation         
]            % end for each                         
4#X<         % arg min 
)            % index with this arg min into initial range of numbers

मुझे लगता है कि आज यह 17 बाइट &:[]y"@YfX>h]&X<)या शायद 16 होगा :[]y"@YfX>h]&X<)&वास्तव में एक बहुत अच्छा विचार था (और मैं कर रहा हूँ अनुमान लगाने yवापस तो उपलब्ध नहीं था?)।
सूंदर

और ऐसा लगता है कि Yfउपसर्ग 1 के साथ प्रसारण यहां भी उपयोगी होगा, लेकिन यह सामान्य रूप से एक अच्छा विचार तय करने के लिए पर्याप्त नहीं है। :)
सूंदर

हां, यह बहुत शुरुआत थी, इसलिए नहीं yया &। बाद के बहुत उपयोगी शब्दार्थ के लिए स्वेकर को श्रेय (मेरा प्रारंभिक विचार यह था कि इसका अर्थ "डिफ़ॉल्ट से एक इनपुट अधिक है")। यदि हम अधिक उदाहरण देखते Yfहैं कि कहां जोड़ना उपयोगी होगा, तो यह वास्तव में उस सुविधा को जोड़ने के लायक हो सकता है। समस्या यह है कि लगभग 34 उत्तर हैं जो इस स्क्रिप्ट केYf अनुसार उपयोग करते हैं , इसलिए यह बता पाना मुश्किल है
लुइस मेंडू

1

जेली , 7 बाइट्स, स्कोर = 7 8 7 × 8 = 8, भाषा चुनौती देती है

rÆfṀ$ÐṂ

इसे ऑनलाइन आज़माएं!

निम्न और ऊपरी श्रेणी के समापन बिंदुओं को दो अलग-अलग तर्कों के रूप में लेता है। रेंज में सभी सबसे चिकनी संख्याओं की सूची को आउटपुट करता है। (इसे एक फ़ंक्शन के रूप में देखा जा सकता है, जिस स्थिति में आउटपुट एक जेली सूची है, या एक पूर्ण कार्यक्रम के रूप में, जिस स्थिति में आउटपुट उसी सूची प्रतिनिधित्व का उपयोग करने के लिए होता है जो JSON करता है।)

व्याख्या

जब आपका जेली कार्यक्रम कल्पना का सिर्फ एक शाब्दिक अनुवाद है ...

rÆfṀ$ÐṂ
r        Range from {first argument} to {second argument}
     ÐṂ  Return the elements which have the minimum
   Ṁ$      largest
 Æf          prime factor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.