Palindromic প্রাইম ফ্যাক্টর


15

Palindromic প্রাথমিক সমস্যাগুলি বেশ সাধারণ, তবে এটি এই প্রশ্নটি সম্পর্কে নয়। এই চ্যালেঞ্জে, সংখ্যাটি প্যালিনড্রোম হতে হবে না, এর প্রধান কারণগুলি।

কার্য

আপনার কোডটি ইনপুট হিসাবে একক ধনাত্মক পূর্ণসংখ্যার নিতে হবে। তারপরে পরীক্ষা করে দেখুন যে সংক্ষিপ্ত হওয়ার সময় সেই পূর্ণসংখ্যার মৌলিক উপাদানগুলির অনুমতিগুলির কোনও প্যালিনড্রোমিক হয় কিনা if যদি তা হয় তবে এর মধ্যে একটি আউটপুট করুন (উপাদানগুলির তালিকা, সংক্ষিপ্ত স্ট্রিং নয়)। অন্যথায়, আপনি আউটপুট করতে হবে-1

এটি , তাই বাইটে সংক্ষিপ্ততম কোড !

পরীক্ষার কেস

11 -> [11]
4 -> [2, 2]
39 -> [3, 13]
6 -> -1
1207 -> [17, 71]
393 -> -1
2352 -> [2, 2, 7, 3, 7, 2, 2]

1
-1ফিরিয়ে দেওয়ার চেয়ে আলাদা আলাদা আলাদা মান কী? পার্ল 6 এ আমি Nil, Failবা অন্যান্য অপরিবর্তিত মানগুলি নিয়ে ভাবছি । এছাড়াও আউটপুট কোনও অবস্থানগত মান হতে পারে?
ব্র্যাড গিলবার্ট 182

তালিকা, অ্যারে, সিক, ব্যাপ্তি, বুফ, স্লিপ সমস্ত অবস্থানগত মান। এটাই তারা পজিশনাল রোল করে।
ব্র্যাড গিলবার্ট বিবিগিল

সুতরাং .. আমাদের জন্য একটি খালি তালিকা আউটপুট করা উচিত 1, বা -1?
জো কিং

-1 উপাদান হিসাবে একটি অ্যারে পৃথক পৃথক যা কেবলমাত্র -1 রয়েছে
রোজলুপ

উত্তর:



3

পাইথ, 14 বাইট

@ ফ্রাইআমডেজিগম্যান -2 বাইটস

h+f_IjkT.pPQ_1

ব্যাখ্যা:

h                 first element of
 +                (append a -1 to the end in case the filter is empty)
  f                 filter by lambda T:
   _I                 is invariant under reversing
     jkT              stringified list
   .p                over permutations of
     P Q             prime factors of Q with duplicates
  _1              -1

আমাকে সম্পর্কে স্মরণ করিয়ে দেওয়ার জন্য @ ফ্রাইআম দ্য এজিগম্যানকে ধন্যবাদ I। আমি এটি আগে ব্যবহার করেছি বলে মনে হয় না।

পরীক্ষা স্যুট


jkযেমনটি রয়েছেs`M
মালটিসেন

3

সিজেম - 17 বাইট

আমাকে 10 বাইট সংরক্ষণ করার জন্য মার্টিন বাটনারকে ধন্যবাদ !

Wqimfe!{s_W%=}=p;

সিজেমে আমার প্রথম লেখা! ব্যাখ্যা:

W              # Push a -1 onto the stack
q               # Get input
i               # Convert to integer
mf              # Find prime factorization
e!              # Find all permutations
{...}=          # Find permutation which...
s               # Convert to string
_               # Copy string
W%              # Get inverse
=               # Check if inverse == original
p;              # Print top of stack and discard the rest

3
আপনি এর সাথে একটি স্ট্রিং (বা অ্যারে) বিপরীত করতে পারেন W%=প্রথম প্যালিনড্রোমিক প্রাইম ফ্যাক্টরিয়েশন পেতে আপনি একটি ব্লক দিয়েও ব্যবহার করতে পারেন । এটি 18 বাইট তৈরি করে: Wrimfe!{s_W%=}=p];... আপনি একটি ত্রুটি দিয়ে সমাপ্ত করে আরও একটি বাঁচাতে পারবেন (যেহেতু ত্রুটির আউটপুটটি STDERR এ যায়):Wrimfe!{s_W%=}=p;
মার্টিন

3
@ মার্টিনবাটনার এই কারণেই আমি পিপিসিজি পছন্দ করি। সবাই তাই সহায়ক এবং বন্ধুত্বপূর্ণ!
কোরিয়ানওয়ালগ্লাস 14

2

রুবি, 89 + 7 = 96 102 + 7 = 109

->n{n.prime_division.flat_map{|*a,b|a*b}.permutation.find{|x|x.join==x.join.reverse}||-1}

-rprimeপতাকা জন্য +7 ।

দীর্ঘশ্বাস , কিছু রুবি বিল্টিনের এমন দীর্ঘ নাম রয়েছে ... কমপক্ষে কোডটি মোটামুটি স্ব-বর্ণনামূলক করে তোলে।

flat_mapবিট কারণ prime_divisionরিটার্ন প্রাক্তন। [[2, 2], [3, 1]]ইনপুট জন্য 12(যা উপস্থাপন করে)2231 )।

13 বাইটের জন্য @ হিস্টোক্র্যাটকে ধন্যবাদ !


@ ইতিহাসবিদ এটি ওপির পক্ষ থেকে একটি ভুল ছিল (প্রশ্নের মন্তব্য দেখুন) ধন্যবাদ, এটি স্প্লিটের সাথে একটি ঝরঝরে কৌশল।
ডুরকনব

2

জুলিয়া, 132 122 বাইট

n->(x=filter(p->(q=join(p))==reverse(q),permutations(foldl(vcat,[[repeated(k,v)...]for(k,v)=factor(n)]))))==[]?-1:first(x)

এটি একটি ল্যাম্বদা ফাংশন যা একটি পূর্ণসংখ্যা গ্রহণ করে এবং হয় অ্যারে বা -1 প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

Ungolfed:

function f(n::Int)
    # Construct an array of all prime factors of n
    P = foldl(vcat, [[repeated(k, v)...] for (k, v) in factor(n)])

    # Filter the set of permutations of this array to only
    # those such that the string constructed by concatenating
    # all elements is a palindrome
    x = filter(p -> (q = join(p)) == reverse(q), P)

    # If x is empty, return -1, otherwise get the first array
    # in the collection
    return x == [] ? -1 : first(x)
end

গ্লেন ওকে 10 বাইট সংরক্ষণ করা হয়েছে!


এক নজরে, আমি এর উন্নতি করার কয়েকটি উপায় দেখতে পাচ্ছি (কেবলমাত্র বেসিক গল্ফের উপর ভিত্তি করে)। foldlপরিবর্তে ব্যবহার করুন reduce(তারা একই জিনিস করেন তবে foldlঅর্ডার সংজ্ঞায়িত করেছেন এবং এটি একটি বাইট সংক্ষিপ্ত)। পরিবর্তে একটি খালি কাঠামোর সাথে সরাসরি তুলনা ব্যবহার করুন isempty(আমি কী ধরণের তা 100% নিশ্চিত নই x, তবে এটি যদি সেট থাকে তবে উদাহরণস্বরূপ, ব্যবহার করুন x==[])। এবং আরও দুটি বাইট সংরক্ষণ করতে ফিল্টারটিতে (q=join(p))এবং তারপরে ব্যবহার করুন q
গ্লেন ও

এছাড়াও, আমার ভুল হতে পারে, তবে যদি xঅ্যারে হয় তবে তার চেয়ে বরং first(x)কেবল ব্যবহার করুন x[]
গ্লেন ও

@ গ্লেনো সর্বদা হিসাবে অনেক ধন্যবাদ! আমি প্রথমে চেষ্টা করেছি ==[]এবং এটি আমাকে ত্রুটি দিচ্ছিল তবে আমি এখন আবার চেষ্টা করেছি এবং এটি কাজ করছে। আমি অবশ্যই আগে কিছু গণ্ডগোল করেছিলাম। \ \ _ (ツ) _ / ¯ একমাত্র পরামর্শ আমি ব্যবহার করতে পারি না তা হ'ল মুক্তি first; এই ক্ষেত্রে আমাকে ব্যবহার করতে হবে firstকারণ xএটি একটি পুনরাবৃত্তি / সংগ্রহ / এমন কিছু যা getindexসংজ্ঞায়িত হয়নি।
অ্যালেক্স এ।

2

ব্র্যাচল্যাগ , 10 বাইট

ḋp.cX↔X∨_1

এটি অনলাইন চেষ্টা করুন!

  .           The output is
 p            a permutation of
ḋ             the prime factorization of
              the input
   c          such that concatenated
    X         it is the variable X
     ↔        which reversed
      X       is still X;
       ∨      if this is not possible,
              the output is
        _1    -1.

প্রাথমিকভাবে, আমি প্রত্যাশা করেছিলাম যে -1ব্যর্থ হওয়ার পরিবর্তে আউটপুট পাওয়াটা মোটামুটি বড় বাইট ব্যয়ে হবে, তবে যেহেতু সাফল্যের ক্ষেত্রে আউটপুটটি সংক্ষিপ্ত করা যায় না, এটি লিখতে কেবল দুটি বাইট ব্যয় করতে হবে _1(যদি আমরা সেইসব মুছে, এটা ছেড়ে দিতেন আউটপুট খেলাপি সংকোচহীন 0, এবং যদি আমরা অতিরিক্ত পরিবর্তিত করতে , বিধেয় পরিবর্তে ব্যর্থ হবে) কারণ আমরা অন্তর্নিহিত আউটপুট উভয় ক্ষেত্রেই সঙ্গে একীকরণ বিরতি প্রয়োজন। (যদি কনটেন্টেশনটি সাফল্যের আউটপুট ছিল তবে -1তবুও ব্যর্থতার আউটপুট ছিল, আমরা ḋpc.↔|∧_1বা চাইতাম ḋpc.↔.∨_1the সংক্ষিপ্ত ক্ষেত্রে, যেখানে আউটপুটটি সংশ্লেষিত হয় এবং প্রাকটিক ব্যর্থ হতে পারে, পুরো জিনিসটি কেবল পাঁচটি বাইট):ḋpc.↔। যদিও প্রকৃত কারণগুলি আউটপুট না করা এটিকে অনুভূতি আরও দেয় ...)


1

হাস্কেল, 122 বাইট

import Data.Numbers.Primes
import Data.List
f x=head$[p|p<-permutations$primeFactors x,s<-[show=<<p],s==reverse s]++[[-1]]

ব্যবহারের উদাহরণ: f 39-> [3,13]

সুস্পষ্ট বর্বর শক্তি পদ্ধতির। মূল কারণগুলির সমস্ত ক্রিয়াকলাপের উপরে আইট্রেট করা এবং প্যালিনড্রোমগুলি পরীক্ষা করুন। প্রথমটি চয়ন করুন যদি কিছুই না থাকে তবে তালিকাটি খালি এবং সংযুক্তি [-1]লাফিয়ে।


1

পার্ল 6 , 100 বাইট

{$/=$_;map(->\f{|({$/%f||($//=f)&&f}...^*!==f)},2..$_).permutations.first({.join.flip eq.join})||-1}
{
  # store copy of argument in $/
  $/ = $_;
  # uses $/ so that I don't have to declare a variable

  # find the prime factors
  map(
    ->\f{
      # Slip so that outer list of all prime factors is flat
      |(
        {
          $/ % f    # return modulus
          ||        # or
          ($/ /= f) # factor the prime out of $/
          &&        # and
          f         # return factor
        }
        # produce a list of them and
        # stop when it returns something other than the factor
        # also ignoring the last non-factor value
        ...^ * !== f
      )
    },
    # find the factors out of the values from 2
    # up to the original argument
    2..$_
    # don't need to skip the non-primes as their
    # prime factorization will have already be
    # factored out of $/
  )

  # try all permutations of the prime factors
  .permutations

  # find the first palindromic one
  .first({ .join.flip eq .join })

  # return -1 if .first returned Nil or empty list
  || -1
}

ব্যবহার:

# give it a lexical name
my &prime-palindrome = {...}

say prime-palindrome    1; # -1
say prime-palindrome    2; # (2)
say prime-palindrome   11; # (11)
say prime-palindrome   13; # -1
say prime-palindrome   39; # (3 13)
say prime-palindrome   93; # (31 3)
say prime-palindrome    6; # -1
say prime-palindrome 1207; # (17 71)
say prime-palindrome  393; # -1
say prime-palindrome 2352; # (2 2 7 3 7 2 2)
say prime-palindrome 2351; # -1
say prime-palindrome 2350; # -1

এর প্রায় অর্ধেক (53 বাইট) মূল ফ্যাক্টরিয়েশন কোডটি নিয়েছে।

$/=$_;map(->\f{|({$/%f||($//=f)&&f}...^*!= f)},2..$_)

কোনও prime-factorizeপদ্ধতি থাকলে পুরো জিনিসটি উল্লেখযোগ্যভাবে খাটো হতে পারে।

{.prime-factorize.permutations.first({.join.flip eq.join})||-1} # 63

একটি সংক্ষিপ্ত প্রধান ফ্যাক্টর কোড বিভাগ হতে পারে$!=$_;({+$!/($!/=1+(2...$!%%*))}...{2>$!})
জো কিং

1

জেলি , 16 বাইট

ÆFŒṙŒ!VŒḂ$ƇḢ¹-¹?

আমার প্রত্যাশার চেয়ে লম্বা, বাইট গণনা এবং এটি লেখার সময়টি উভয়ই।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

ÆFŒṙŒ!VŒḂ$ƇḢ¹-¹?
ÆFŒṙ                Get the prime factors (gets them as exponents then run-length decodes).
    Œ!              Get the permutations.
          Ƈ         Filter (keep) the ones that...
       ŒḂ$          ...are palindromic when...
      V             ...joined.
           Ḣ        Take the first.
              ¹?    If the value is truthy...
            ¹       ...return the value...
             -      else return -1.

1

Japt -F-1 , 9 বাইট

k á æ_¬êS

চেষ্টা করে দেখুন


আপনার লিঙ্কটি এই উইন্ডো ফোনে ঠিক নেই ...
রোজলুপ

@ রোসলুপি দোভাষী এখনও মোটামুটি নতুন। আমি শেগিকে পিং করব, স্রষ্টা। এখানে একটি টিআইও লিঙ্ক রয়েছে
অলিভার

1
@ রোসলুপি, আপনি কোন ব্রাউজারটি ব্যবহার করছেন?
শেগি

উইন্ডোজ ফোন 8.1 এর জন্য ইন্টারনেট এক্সপ্লোরার: (সেলফোন) এমন কিছু যা অদৃশ্য হয়ে যাচ্ছে, সম্ভবত এটি আমার ব্র্যান্ডের নতুন ফোন অ্যান্ড্রয়েড বা উইন্ডোজ 10 এর ব্রাউজার ব্যবহার করুন (এজ মনে হয় তারা কল করেন)
রোজলুপুর

0

জাপট, 18 বাইট

সিজেএম হিসাবে প্রায় সংক্ষিপ্ত ...

Uk á f_¬¥Z¬w} g ªJ

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

        // Implicit: U = input, e.g. 2352
Uk      // Factorize the input.      [2,2,2,2,3,7,7]
á       // Take permutations.        [[2,2,2,2,3,7,7],[2,2,2,2,7,3,7],[2,2,2,7,2,3,7],...]
f_   }  // Filter to only the ones that return truthily to this function:
Z¬¥Z¬w  //  Return Z.join('') == Z.join('').reverse().
        //                           [[2,2,7,3,7,2,2],[2,7,2,3,2,7,2],[7,2,2,3,2,2,7]]
g       // Take the first item.      [2,2,7,3,7,2,2]
ªJ      // If falsy, resort to -1.   [2,2,7,3,7,2,2]

0

জাভাস্ক্রিপ্ট (ES6), 256 244 208 187 বাইট

@ নীলকে ধন্যবাদ 36 বাইট সংরক্ষণ করা হয়েছে

x=>eval("for(a=[],i=2;x>1;x%i?i++:(a.push(i),x/=i));p=-1,f=(z,t=[])=>z[0]?z.map((u,i)=>f([...z.slice(0,i),...z.slice(i+1)],[...t,u])):(y=t.join``)==[...y].reverse().join``&&(p=t),f(a),p")

একটি বেনামী ফাংশন সংজ্ঞা দেয়; F=এটি ব্যবহার করার জন্য যেমন প্রিপেন্ড । এটি 2352 ইনপুটটিতে আসলে খুব দ্রুত, কেবলমাত্র আমার কম্পিউটারে শেষ করতে ~ 150 মিলিসেকেন্ড নেয়।


আমি দ্রুত তবে স্পষ্টতই সংক্ষিপ্ত সম্পর্কে জানি না:x=>eval("for(a=[],i=2;x>1;x%i?i++:(a.push(i),x/=i));p=[],f=(z,t=[])=>z.length?z.map((u,i)=>f([...z.slice(0,i),...z.slice(i+1)],[...t,u])):(y=t.join``)==[...y].reverse().join``&&p.push(t),f(a),p[0]||-1")
নিল

@ নীল ধন্যবাদ, এটি আমার অ্যালগরিদমের চেয়ে কয়েকগুণ দ্রুত হতে পারে!
ETH প্রোডাকশনগুলি

36 বাইট? আমি মনে করি এটি আমার জন্য একটি রেকর্ড হতে হবে।
নীল

0

এপিএল (এনএআরএস), 169 চর, 338 বাইট

∇r←F w;i;k;a;m;j
  r←⊂,w⋄→0×⍳1≥k←↑⍴w⋄a←⍳k⋄j←i←1⋄r←⍬⋄→C
A: m←i⊃w⋄→B×⍳(i≠1)∧j=m⋄r←r,m,¨∇w[a∼i]⋄j←m
B: i+←1
C: →A×⍳i≤k
∇
G←{F⍵[⍋⍵]}
f←{∨/k←{⍵≡⌽⍵}¨∊¨⍕¨¨v←Gπ⍵:↑k/v⋄¯1}

জি ক্রিয়াকলাপ খুঁজে পেতে ফাংশন হবে এবং চ এই অনুশীলনের ফাংশন; পরীক্ষা:

  ⎕fmt f¨11 4 39 6 1207 393 2352 
┌7───────────────────────────────────────────────────┐
│┌1──┐ ┌2───┐ ┌2────┐    ┌2─────┐    ┌7─────────────┐│
││ 11│ │ 2 2│ │ 3 13│ ¯1 │ 17 71│ ¯1 │ 2 2 7 3 7 2 2││
│└~──┘ └~───┘ └~────┘ ~~ └~─────┘ ~~ └~─────────────┘2
└∊───────────────────────────────────────────────────┘
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.