विभिन्न मामलों में प्राइम्स


17

चुनौती:

आपको आधार 10 नंबर दिया गया है। प्रत्येक आधार के लिए 10 से नीचे की गिनती के आधार 2:

  1. मूल इनपुट संख्या को आधार 10 स्ट्रिंग के रूप में लें, और संख्या के किसी भी अंक को हटा दें जो आधार के लिए अमान्य हैं।
  2. उस आधार में परिणामी संख्या स्ट्रिंग की व्याख्या करें। यदि यह 1 या 0 देता है, तो पूरी प्रक्रिया को समाप्त करें।
  3. दशमलव संख्या के रूप में इसका सबसे बड़ा मुख्य कारक आउटपुट या प्रिंट करना।

आउटपुट सबसे बड़े प्रमुख कारकों की एक सरणी हो सकती है।

नमूना मामलों:

इनपुट:

987654321

आउटपुट:

379721
10593529
1091
179
1493
293
19
7

वैकल्पिक रूप से:

[379721,10593529,1091,179,1493,293,19,7]

यह 987654321, 87654321 9 = 42374116 10 , 7654321 8 = 2054353 10 के सबसे बड़े प्रमुख कारकों को प्रिंट करता है , और जब तक यह 1 2 तक नहीं पहुंच जाता है, जहां यह बंद हो जाता है।


2
मैं इस प्रक्रिया पर अस्पष्ट हूं। मैं शायद इसे उदाहरण से समझ सकता हूं, लेकिन आपके पास स्पष्ट निर्देश होना चाहिए ताकि इसकी आवश्यकता न हो। तो हम निचले आधार में परिवर्तित होते हैं, अमान्य अंक निकालते हैं, फिर सबसे बड़ा प्रमुख कारक प्रिंट करते हैं? इस कारक को हम किस आधार पर प्रिंट करते हैं? क्या फिर हम सबसे बड़े प्राइम फैक्टर और बेस वन लोअर के साथ ही प्रक्रिया करते हैं? या क्या हम इसे उस संख्या के साथ करते हैं जिसे हमने सच मान लिया है? क्या हम 10 या 9 से शुरू करते हैं?
xnor

साइट पर आपका स्वागत है!
DJMcMayhem

2
मैंने इसे स्पष्ट करने की चुनौती को फिर से लिखने की कोशिश की। मुझे आशा है कि यह आपका इरादा है। यदि नहीं, तो इसे बदलने के लिए स्वतंत्र महसूस करें।
xnor

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

3
कोई भी मौका यह Google कोड जाम से प्रेरित था?
मेगो

जवाबों:


6

पायथ, 25 बाइट्स

sfTm>1PiFdC,.u-N`tYKrT1zK
                       z   get input as a string
            .u      rT1    cumulative reduce over [10,9,...,2]
              -N`tY        remove one minus the number (10,9,...) from the input
          C,       K    K  pair each step along the chain with corresponding base
   m                       map over [["987654321", 10],...]:
       iFd                   apply the base-conversion (splat over i)
      P                      prime factorization, smallest to largest
    >1                       take [the last element], or [] if empty (1 or 0)
 fT                        remove the []s from 0s or 1s
s                          join the one-element arrays together

इसे यहाँ आज़माएँ।



4

MATL , 17 15 बाइट्स

9:PQ"G@ZAYfXzX>

यह संख्या को उद्धरण के साथ एक स्ट्रिंग के रूप में लेता है, जिसे डिफ़ॉल्ट रूप से अनुमति दी जाती है।

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

व्याख्या

9:PQ     % Push array [10, 9, ..., 2]
"        % For each number in that array. These are the bases to be considered
  G      %   Push input. Forces for input to be taken implicitly first time
  @      %   Push current base
  ZA     %   Convert from that base to base 10, discarding non-valid digits
  Yf     %   Prime factors. Gives empty for input 1, and 0 for input 0
  Xz     %   Non-zero values. Gives empty if previous result was 0, or else
         %   leaves it as it was
  X>     %   Maximum of array. For empty input gives empty
         % Implicitly end for each
         % Implicitly display. Empty arrays are not displayed

यह एक इनपुट में अंत नहीं के लिए एक 0 को आउटपुट करता है
poi830

'98765432' और '98765' (यादृच्छिक उदाहरण) इनपुट के लिए, यह समाप्ति से पहले सही संख्याओं को आउटपुट करता है।
पोई .३०

1
@ poi830 अब हल किया
लुइस

1

जूलिया, 101 बाइट्स

f(s,x=[],b=10)=(t=filter(c->c<=47+b,s))>"1"&&b>1?f(s,[x;maximum(keys(factor(parse(Int,t,b))))],b-1):x

यह एक पुनरावर्ती फ़ंक्शन है जो इनपुट को स्ट्रिंग के रूप में स्वीकार करता है और एक सरणी देता है।

Ungolfed:

function f(s, x=[], b=10)
    # Filter the string down to only the digits valid for base b
    t = filter(c -> c <= 47 + b, s)

    # If the filtered string isn't "1" or "0" and b is a valid base
    if t > "1" && b > 1
        # Call the function again, appending the maximum prime factor
        # of t in base b to the argument x and decrementing the base
        f(s, [x; maximum(keys(factor(parse(Int, t, b))))], b-1)
    else
        # Otherwise return the array
        x
    end
end

1

मैथेमेटिका, 83 बाइट्स

FactorInteger[Select[IntegerDigits@#,#<a&]~FromDigits~a][[-1,1]]~Table~{a,10,2,-1}&

बेनामी फ़ंक्शन, एक सूची देता है। ईमानदार होने के लिए जटिल नहीं है।


0

रूबी, 120 बाइट्स

पुनरावर्ती कार्य, इनपुट को एक स्ट्रिंग के रूप में लेता है।

f=->n,b=2{require'prime';i=n.tr([*b.to_s..?9].join,"").to_i(b)
b>10?[]:f[n,b+1]+[*i>1?Prime.prime_division(i).max[0]:p]}

1
आप -rprimeइसके बजाय कमांड लाइन ध्वज का उपयोग करके कुछ बाइट्स बचा सकते हैं require
दरवाज़े

-rprimeकिसी कारण से मेरे लिए काम नहीं करता है ...
वैल्यू इंक

0

पाइके, 19 बाइट्स, नॉनकमेटिंग

(जोड़ें splat_node functionalon)
DTAbPe
;1TtD=T`"":r

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

उद्धरणों में इनपुट लेता है, एक त्रुटि के साथ बाहर निकलता है।

स्पष्टीकरण (नई पंक्ति की जगह \ n):

D                    - Duplicate the first item on the stack (And get it from input first time)
 TAb                 - Convert input to base (whatever's in T, 10 default)
    Pe               - get the highest prime factor of the number
      \n;1           - print it out and get rid of it
          TtD=T      - T -= 1
               `"":  - input = input.replace(str(t), "")
                   r - GOTO start
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.