पलिंड्रोमिक अवशेष


25

आज, जैसा कि मैं यह लिख रहा हूं, 31 मार्च है। अमेरिका में, यह है 3/31। मैं 331एक चुनौती के साथ आने के लिए एक संख्या के रूप में चारों ओर खेल रहा था , और पाया कि इसके अवशेष (मोडुलो छोटी संख्या) तालमेल है। 331%2=1, 331%3=1, 331%4=3, 331%5=1, 331%6=1( 11311)।

आपकी चुनौती यहां है, जब पूर्णांक दिया जाता है, तो n > 2पहले nसकारात्मक संख्याओं का उत्पादन होता है जिसमें मॉडुलो को लिया जाता है [2,n]

उदाहरण के लिए, इनपुट के लिए, 7आउटपुट होना चाहिए 1, 42, 43, 140, 182, 420, 421। यहाँ चार्ट समझा रहा है कि ऐसा क्यों है:

        mod
num | 2 3 4 5 6 7
-----------------
  1 | 1 1 1 1 1 1
 42 | 0 0 2 2 0 0
 43 | 1 1 3 3 1 1
140 | 0 2 0 0 2 0
182 | 0 2 2 2 2 0
420 | 0 0 0 0 0 0
421 | 1 1 1 1 1 1

इनपुट

एक एकल सकारात्मक पूर्णांक nके साथ n > 2 किसी भी सुविधाजनक प्रारूप में

उत्पादन

nऊपर उल्लिखित के रूप में पहले पलिंडोमिक अवशेषों की परिणामी सरणी / सूची । फिर से, किसी भी उपयुक्त प्रारूप में।

नियम

  • के लिए n > 10, अवशेषों की सूची को जाँचने से पहले चपटा हुआ मान लें कि क्या यह एक पैलिंड्रोम है। यह है, [1, 10, 11]palindromic है, लेकिन [1, 10, 1]नहीं है।
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं। यदि कोई फ़ंक्शन है, तो आप इसे प्रिंट करने के बजाय आउटपुट वापस कर सकते हैं।
  • यदि संभव हो, तो कृपया ऑनलाइन परीक्षण वातावरण का लिंक शामिल करें ताकि अन्य लोग आपके कोड को आज़मा सकें!
  • मानक खामियों को मना किया जाता है।
  • यह इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।

उदाहरण

[input]
[output]

3
[1, 6, 7]

4
[1, 4, 5, 8]

5
[1, 50, 60, 61, 110]

6
[1, 30, 31, 60, 61, 90]

7
[1, 42, 43, 140, 182, 420, 421]

8
[1, 168, 169, 336, 337, 504, 505, 672]

9
[1, 2520, 2521, 5040, 5041, 7560, 7561, 10080, 10081]

10
[1, 280, 281, 560, 1611, 1890, 1891, 2170, 2171, 2241]

11
[1, 22682, 27720, 27721, 50402, 55440, 55441, 78122, 83160, 83161, 105842]

क्या आउटपुट का आदेश दिया जाना है?
अरनौलद

@ अर्नुलड यह नहीं होना चाहिए, नहीं, बशर्ते कि इसमें केवल पहले nतत्व शामिल हों।
AdmBorkBork

2
arrgh ... आपकी चुनौती = आपके नियम, लेकिन " [1, 10, 11]पैलिंड्रोमिक है, लेकिन [1, 10, 1]ऐसा नहीं है" ऐसा गणितीय रूप से गलत लगता है।
ग्रेग मार्टिन

1
@GregMartin Stringy palindromes, मैथि palindromes नहीं। ;-)
AdmBorkBork

1
grr। मैथी पलिंद्रोम के बजाय पूरा स्ट्रीक कुछ विशेष भाषाओं में इसे हजार गुना कठिन बनाता है। ओह अच्छा।
मिल्डलीमिल्कॉस्ट

जवाबों:


9

हास्केल, 57 बाइट्स

f n=take n[x|x<-[1..],(==)=<<reverse$show.mod x=<<[2..n]]

प्रयोग उदाहरण: f 4-> [1,4,5,8]इसे ऑनलाइन आज़माएं!

पहला =<<फंक्शन के संदर्भ में है और लैम्ब्डा में अनुवादित है \x -> reverse x == xऔर दूसरा =<<लिस्ट के संदर्भ में है और इसके समकक्ष है concatMap, यानी मैप-एंड-फ्लैटन-वन-लिस्ट-लेवल।


5

05AB1E , 12 बाइट्स

µN2¹Ÿ%JÂQD½–

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

व्याख्या

µ              # until counter equals input do:
 N             # push current iterations number
     %         # modulus each in
  2¹Ÿ          # range [2 ... input]
      J        # joined to string
       ÂQ      # equals it's reverse
         D     # duplicate
          ½    # if true, increase counter
           –   # if true print iteration number

क्या आप अपने फोन से 05AB1E उत्तर पोस्ट करते हैं? क्योंकि आप इन त्वरित योग्यताओं को करते हैं।
मैजिक ऑक्टोपस Urn

@ कोरसोकोम्पुटिंग: cp-1252 में बहुत सारे पात्रों के रूप में बहुत कम फोन पर टाइप / कॉपी-पेस्ट करने के लिए परेशान हैं। इससे पहले कि मैं रात के खाने के बाद अपने कंप्यूटर की जाँच करता, यह सही था, इसलिए मुझे बहुत अच्छा समय मिला :)
Emigna


4

जावास्क्रिप्ट (ईएस 6), 104 बाइट्स

f=(n,x=(k=--n,2))=>k?([...Array(n)].map(_=>(r=x%++i+r,x%i),i=1,r='').join``==r?k--&&x+' ':'')+f(n,x+1):1

डेमो

NB : कई पुनरावर्ती कॉल के कारण, यह फ़ायरफ़ॉक्स पर n> 8 और क्रोम पर n> 10 के लिए क्रैश होगा ।


4

पायथन 2, 98 97 बाइट्स

n=input();i=j=0
while i<n:
 j+=1;l=''
 for k in range(2,n+1):l+=`j%k`
 if l==l[::-1]:i+=1;print j

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



@ धन्यवाद, लेकिन मेरा मानना ​​है कि 12एक अजीब नियम के कारण इनपुट पर विफल हो जाएगा, जिसे [1, 10, 11]माना जाता है
गणित नशेड़ी

3

MATL , 19 बाइट्स

कोड के पुराने संस्करण में एक गलती को इंगित करने के लिए @AdmBorkBork का धन्यवाद, अब सही किया गया

`@Gq:Q\VXztP=?@]NG<

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

व्याख्या

`        % Do...while
  @      %   Push iteration index, starting at 1
  Gq:Q   %   Push [2 3 ... n], where n is the input
  \      %   Modulo, element-wise
  V      %   Convert to string. Numbers are separated by spaces
  Xz     %   Remove spaces
  tP     %   Duplicate, flip
  =      %   Equal? (element-wise)
  ?      %   If all results were true
    @    %     Push current iteration index. It is one of the sought numbers
  ]      %   End
  N      %   Push number of elements in stack
  G      %   Push input n
  <      %   Less than? This is the loop condition
         % End (implicit). Display (implicit)

3

स्काला, 90 86 82 बाइट्स

(n:Int)=>Stream.from(1)filter{i=>val d=(2 to n)map(i%)mkString;d.reverse==d}take(n)

व्याख्या

Stream.from(1)                              // From an infinite Stream starting from 1,
    filter ( i => {                         // keep only elements matching the next condition :
        val d=(2 to n)map(i%)mkString;      // Generate residues and convert to String,
        d.reverse==d                        // return true if palindrom, false otherwise
    })take(n)                               // Finally, take the n first elements matching the condition

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

val f = (n:Int)=>...    // assign function
(3 to 11).foreach { i =>
    println(i + "\n" + f(i).mkString(", ") + "\n")
}

परिणाम

3
1, 6, 7

4
1, 4, 5, 8

5
1, 50, 60, 61, 110

6
1, 30, 31, 60, 61, 90

7
1, 42, 43, 140, 182, 420, 421

8
1, 168, 169, 336, 337, 504, 505, 672

9
1, 2520, 2521, 5040, 5041, 7560, 7561, 10080, 10081

10
1, 280, 281, 560, 1611, 1890, 1891, 2170, 2171, 2241

11
1, 22682, 27720, 27721, 50402, 55440, 55441, 78122, 83160, 83161, 105842

संपादित करता

# 1 (90 => 86)

  • अनाम फ़ंक्शन

# 2 (86 => 82)

  • कोष्ठक या कोष्ठक के बाद बेकार डॉट वर्णों को हटा दें (उदा।: (2 to n).map(%i)=>(2 to n)map(%i)

1
PPCG में आपका स्वागत है!
मार्टिन एंडर

धन्यवाद! अगर मैं बदल सकता है मैं सोच रहा था def f(n:Int)=करने के लिए (n:Int)=>है, क्योंकि यह भी है (लेकिन नाम के बिना) एक समारोह को परिभाषित करता है। यह 4 बाइट्स बचाता है!
norbjd

हां, अनाम कार्यों की अनुमति है , बशर्ते आपको पुनरावर्ती कॉल के लिए नाम की आवश्यकता न हो या ऐसा कुछ हो।
मार्टिन एंडर

महान, संपादित :) :)
norbjd

2

जेली , 12 बाइट्स

%ЀḊDFŒḂ
1ç#

कैसे?

1ç# - Main link: n
1   - initialise "i" at 1
  # - increment i and yield a list of the first n truthful results of:
 ç  -     last link (1) as a dyad

%ЀḊDFŒḂ - Link 1, test a value "i" for mod [2,n] being palindromic: i, n
 Ѐ      - for each, mapped over the right argument, i.e. for j = 1 to n:
%        -     i modulo j
   Ḋ     - dequeue, i.e. discard the modulo 1 result
    D    - convert to decimal list (vectorises)
     F   - flatten into one list
      ŒḂ - is palindromic?

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


1

सीजेएम , 28 बाइट्स

0ri:N{{)_N),2>f%s_W%#}g_p}*;

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

व्याख्या

0          e# Push 0, the value we'll repeatedly increment to search for valid outputs.
ri:N       e# Read input, convert to integer, store in N.
{          e# Run this block N times...
  {        e#   Run this block until the condition is true, which will find the next
           e#   number with palindromic residues...
    )_     e#     Increment and duplicate.
    N),2>  e#     Push [2 3 ... N].
    f%     e#     Take the current value modulo each of these.
    s      e#     Flatten them into a single string.
    _W%    e#     Duplicate and reverse.
    #      e#     Try to find the reverse in the original. A common way to compute
           e#     "not equal" for strings of the same length.
  }g
  _p       e#   Print a copy of the result.
}*
;          e# Discard the final result to prevent printing it twice.

1

PHP, 93 बाइट्स

for(;$x<$a=$argn;$s="")for($i=1,++$n;$i++<$a;)if($i==$a&strrev($s.=$n%$i)==$s)echo$n._.!++$x;

स्ट्रिंग के रूप में ऑनलाइन संस्करण 2 लूप्स आउटपुट

विस्तारित

for(;$x<$a=$argn;$s="") 
for($i=1,++$n;$i++<$a;)
    if($i==$a&strrev($s.=$n%$i)==$s)echo$n._.!++$x; 

PHP 130 बाइट्स

for(;count($r)<$a=$argn;$s=[])for($i=1,++$n;$i++<$a;){$s[]=$n%$i;if(count($s)==$a-1&strrev($j=join($s))==$j)$r[]=$n; }print_r($r);

ऑनलाइन संस्करण 2 लूप्स

विस्तारित

for(;count($r)<$a=$argn;$s=[])
for($i=1,++$n;$i++<$a;){
    $s[]=$n%$i;
    if(count($s)==$a-1&strrev($j=join($s))==$j)$r[]=$n; 
}
print_r($r);

PHP, 1 लूप के साथ 139 बाइट्स

for($i=$n=1;count($r)<($a=$argn)&$i++<$a;){$s[]=$n%$i;if(count($s)==$a-1){if(strrev($j=join($s))==$j)$r[]=$n;$n++;$s=[];$i=1;}}print_r($r);

ऑनलाइन संस्करण 1 लूप

साथ दौड़ो

echo '<string>' | php -nR '<code>'

विस्तारित

for($i=$n=1;count($r)<($a=$argn)&$i++<$a;){
    $s[]=$n%$i;
    if(count($s)==$a-1){
        if(strrev($j=join($s))==$j)$r[]=$n;
        $n++;
        $s=[];
        $i=1;
    }
}
print_r($r);

1

QBIC , 48 बाइट्स

:{A=G[2,a|A=A+!q%b$]~A=_fA||h=h+1?q]q=q+1~h=a|_X

गणितज्ञ धड़कता है! नमूना रन:

Command line: 10
 1 
 280 
 281 
 560 
 1611 
 1890 
 1891 
 2170 
 2171 
 2241 

स्पष्टीकरण:

:{          Get 'a' from the command line, start an inf. loop
A=G         Clear out whatever's in A$
[2,a|       For each of the numbers we want to modulo
A=A+        Add to A$ 
     q%b       our current number MODULO te loop iterator
    !   $      cast to string
]           NEXT
~A=_fA|     If the string of remainders is a palindrome (_f ... | is Reverse())
|h=h+1      THEN h=h+1 (h starts at 0) - this counts how many hits we've had
 ?q            also, print the number with the palindromic remainder
]           END IF
q=q+1       Test the next number
~h=a|_X     If we've had 'a' hits, quit.
            The last IF and the infinite loop are closed implicitly.

1

जाप , 26 बाइट्स

L³o fR{C=Uò2@R%Xì ¥CwÃj1U

इसे ऑनलाइन आज़माएं! सभी सूचनाओं पर कुछ सेकंड लगते हैं, इसलिए कृपया धैर्य रखें।

यह काफी कम (और तेज) होगा यदि पहले एन नंबर प्राप्त करने के लिए कुछ स्थिति को संतुष्ट करने के लिए अंतर्निहित थे:

R{C=Uò2@R%Xì ¥Cw}aU
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.