পারমুটাপালিন্ড্রোমিক সংখ্যা


18

Nইনপুট হিসাবে একটি পূর্ণসংখ্যা দেওয়া হয় , Nপার্কুটপ্যালিনড্রমিক সংখ্যার আউটপুট দেয় ।

একটি পেরুটোপ্যালিন্ড্রোমিক সংখ্যাটি একটি কঠোর ইতিবাচক পূর্ণসংখ্যার মতো যে এর অঙ্কগুলির কমপক্ষে একটির অনুক্রম থাকে যার ফলস্বরূপ প্যালিনড্রোম হয় (যেমন একটি সংখ্যা যা তার নিজস্ব বিপরীত)।

উদাহরণস্বরূপ, 117এটি একটি পারমুটাপালিন্ড্রমিক সংখ্যার যেহেতু এর অঙ্কগুলিতে অনুমতি দেওয়া যেতে পারে 171যা একটি প্যালিনড্রোম।

আমরা বিবেচনা করি যে সংখ্যাগুলি প্যালিনড্রোম 10সত্ত্বেও পেরুটোপ্যালিনড্রমিক সংখ্যা নয় 01 = 1। আমরা চাপিয়ে দিয়েছি যে প্যালিনড্রমিক ক্রমশক্তিটির অবশ্যই একটি শূণ্য নেই (যেমন, 0নিজেই পেরুটোপ্যালিনড্রোমিক নয়)।

ইতিমধ্যে প্যালিনড্রোমযুক্ত নম্বরগুলিও পারমুটাপালিনড্রোমিক, কারণ কোনও কিছুই অনুমতি দেওয়া বৈধ নয়।

ইনপুট এবং আউটপুট

  • Nহয় 0-ইনডেক্সড বা 1-ইনডেক্সেড হতে পারে। আপনার উত্তর দুটি ব্যবহার করে দয়া করে নির্দেশ করুন।
  • ইনপুটটি STDINকোনও ফাংশন আর্গুমেন্ট হিসাবে বা আপনার পছন্দের ভাষাতে অনুরূপ কোনও কিছুর মাধ্যমে নেওয়া যেতে পারে । আউটপুট এতে লেখা যেতে পারে STDOUT, কোনও ফাংশন থেকে ফিরে আসতে পারে, বা আপনার পছন্দের ভাষায় অনুরূপ কিছু।
  • ইনপুট এবং আউটপুট অবশ্যই দশমিক বেসে থাকা উচিত।

পরীক্ষার মামলা

নিম্নলিখিত পরীক্ষার কেসগুলি 1-সূচকযুক্ত। আপনার প্রোগ্রামটি অবশ্যই এখানে উপস্থাপিত যে কোনও পরীক্ষার ক্ষেত্রে সর্বাধিক 1 মিনিটে পাস করতে সক্ষম হতে হবে।

N      Output

1      1
2      2
3      3
4      4
5      5
6      6
7      7
8      8
9      9
10     11
42     181
100    404
128    511
256    994
270    1166

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins


এটা তোলে বেশ অসম্ভব না এক মিনিটে শেষ testcase পাস ...
লিকি নূনের

OEIS A084050 (অতিরিক্ত কেসগুলি যেমন রয়েছে 10)
লিক নুন

বৃহত্তম ইনপুট কি?
Adám

@ অ্যাডম আপনার প্রোগ্রামটি তাত্ত্বিকভাবে যে কোনও সংখ্যার জন্য কাজ করা উচিত, যত বড়ই হোক না কেন।

1
@ অ্যাডম এটি একটি দুর্দান্ত স্বেচ্ছাসেবী সীমা যা ব্যবহৃত ভাষার উপর নির্ভরশীল। আসুন আমরা বলি যে এটি তাত্ত্বিকভাবে আপনার ভাষাটি ডিফল্টরূপে উপস্থাপন করতে পারে এমন সবচেয়ে বড় পূর্ণসংখ্যার জন্য কাজ করা উচিত (সুতরাং সমস্ত ভাষার সংখ্যা যদি আপনার ভাষাতে বিগনামস ডিফল্ট হয়)।

উত্তর:


8

05 এ বি 1 , 15 14 13 বাইট

Emigna একটি বাইট ধন্যবাদ সংরক্ষণ করা ! কোড:

µNœvyJÂïÊP}_½

ব্যাখ্যা:

µ               # c = 0, when c is equal to the input, print N.
 N              # Push N, the iteration variable.
  œ             # Push all permutations of N.
   vyJ    }     # For each permutation...
      Â         #   Bifurcate, which is short for duplicate and reverse.
       ï        #   Convert the seconds one to int, removing leading zeros.
        Q       #   Check if they are not equal.
         P      #   Product of the stack.
           _    # Logical not.
            ½   # Pop a value, if 1 then increase c by 1.

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


1
µNœvyJÂïQ}O__½14.
এমিগানা

@ এমিগনা ধন্যবাদ! আমি এটা ভাবিনি।
আদনান

7

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

~l<:1at.
.=pPrPl~l?

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

প্রায় 17 সেকেন্ড সময় নেয় N = 270

ব্যাখ্যা

  • প্রধান শিকারী:

    ~l            Create a list whose length is Input.
      <           The list is strictly increasing.
       :1a        Apply predicate 1 to each element of the list.
          t.      Output is the last element of the list.
    
  • ভবিষ্যদ্বাণী 1:

    .=            Input = Output = an integer
      pPrP        A permutation P of the Output is its own reverse
          l~l?    The length of P is equal to the length of the Input
    

5

ব্র্যাচল্যাগ , 21 20 বাইট

1 বাইট ধন্যবাদ ফ্যাটালাইজ।

আপনি ব্র্যাচল্যাগের জন্য চ্যালেঞ্জটি ডিজাইন করেছিলেন?

:1yt.
0<.={@epcPrP!}

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

270 এখানে প্রায় আধ মিনিট সময় নেয়।

Z = 1166
real    0m27.066s
user    0m26.983s
sys     0m0.030s

Exit code:     0

পূর্বাভাস 0 (প্রধান ভবিষ্যদ্বাণী)

:1yt.
:1y    find the first Input solutions to predicate 1
   t.  unify the output with the last element

ভবিষ্যদ্বাণী 1 (সহায়ক ভবিষ্যদ্বাণী)

0<.={@epcPrP!}
0<.              0 < Output
  .=             Assign a value to Output (choice point)
    {        }   Inline predicate:
     @e              Digits of the Output
       p             A permutation (choice point)
        c            Concatenate (fails if leading zero present)
         P           store as P
          rP         assert that P reversed is still P
            !        remove the choice point in this predicate, so
                     that it will not return twice for the same number.

5

পাইথ, 14

e.ff&_ITshT.p`

এটি এখানে চেষ্টা করুন বা একটি টেস্ট স্যুট চালান

সম্প্রসারণ:

e.ff&_ITshT.p`ZQ   # Auto-fill variables
 .f            Q   # Find the first input number of numbers that give truthy on ...
           .p`Z    # Take all the permutations of the current number
   f&              # Keep those that give a truthy value for both:
     _IT           # Invariance on reversing (is a palindrome)
        shT        # The integer value of the first digit (doesn't start with zero)
                   # A list with any values in it it truthy, so if any permutation matches
                   # these conditions, the number was a permutapalindrome
e                  # Take only the last number

5

জাভাস্ক্রিপ্ট (ES6), 99 বাইট

f=(n,i=1)=>(n-=/^.0+$/.test(i)</^((.),\2,)*(.)(,\3)?(,(.),\6)*$/.test([...i+''].sort()))?f(n,i+1):i

ব্যাখ্যা:

f=(n,i=1)=>             look for n numbers starting at 1
 (n-=                   test whether current guess is
  /^.0+$/.test(i)<      not a round number and
  /^((.),\2,)*          pairs of comma-separated digits
   (.)(,\3)?            possible single digit
   (,(.),\6)*$/         pairs of comma-separated digits
   .test(               matches the comma-joined
    [...i+''].sort()))  digits in ascending order
 ?f(n,i+1)              if not n numbers found try next number
 :i                     found it!

1100 একটি বৃত্তাকার পেরুটোপ্যালিনড্রমিক নম্বর।
Adám

@ অ্যাডাম এটি গোলাকার নয়, এতে কমপক্ষে দুটি ননজারো অঙ্ক রয়েছে।
নীল

@ নীল: +২ বাইট - আপনার f=পরে এটি উল্লেখ করার সময় আপনার অবশ্যই গণনা করা উচিত
চার্লি

@ চার্লি দুঃখিত, আমি সবসময় এটি করতে ভুলে যাই।
নীল

4

আর, 145 বাইট

g=function(n){d=b=0 
while(d<n){b=b+1
if(sum(a<-table(strsplit(n<-as.character(b),""))%%2)==nchar(n)%%2&(!names(a)[1]==0|a[1]|sum(!a)>1))d=d+1}
b}

ungolfed

f=function(b){
    a<-table(strsplit(n<-as.character(b),""))%%2
    sum(a)==nchar(n)%%2&(!names(a)[1]==0|a[1]|sum(!a)>1)
}
g=function(n){
    d=b=0
    while(d<n){
         b=b+a
         if(f(b)) d=d+1
    }
    b
}

মূলত - পারমুটাপালিন্ড্রোমিক সেটে সদস্যতা যাচাই করা একটি ক্রিয়াকলাপ এবং এটি নবম সদস্যকে না পাওয়া পর্যন্ত কিছুক্ষণ লুপ ইনক্রিমেন্টিং।


3

পাইথন 2.7, 163 154 বাইট:

from itertools import*;I,F,Q=input(),[],2
while len(F)<I:F=[g for g in range(1,Q)if any(i==i[::-1]*(i[0]>'0')for i in permutations(`g`))];Q+=1
print F[-1]

যথেষ্ট সহজ। মূলত whileপেরুটোপালিন্ড্রমিক সংখ্যার সমন্বয়ে বার বার অ্যারে তৈরি করতে একটি লুপ ব্যবহার করে [1,Q)যতক্ষণ Qনা অ্যারেতে Inputআইটেমের সংখ্যা থাকে এত বড় হয় large এরপরে এটি অ্যারের শেষ উপাদানটিকে আউটপুট করে।

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


2

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

{(1..*).grep(*.comb.permutations.grep({+.join.flip eq.join}))[$_]}

0 ভিত্তিক

ব্যাখ্যা:

# bare block lambda which takes an implicit parameter 「$_」
{
  # all numbers greater than 0
  (1..*)\

  # remove any which aren't permutapalindromic
  .grep(

    # 「*」 here starts a Whatever lambda
    *\
    # split into list of digits
    .comb\
    # get all of the permutations of the digits
    .permutations\
    # find out if there are any palindromes
    .grep(

      # another bare block lambda taking 「$_」 as implicit parameter
      {
        # compare the current permutation with its reverse stringwise
        # numify only one side to get rid of leading 「0」
        +$_.join.flip eq $_.join
      }
    )

  # get the value at the index
  )[$_]
}

টেস্ট:

#! /usr/bin/env perl6
use v6.c;
use Test;

my &permutapalindromic = {(1..*).grep(*.comb.permutations.grep({+.join.flip eq.join}))[$_]}

my @tests = (
  1   => 1,
  2   => 2,
  3   => 3,
  4   => 4,
  5   => 5,
  6   => 6,
  7   => 7,
  8   => 8,
  9   => 9,
  10  => 11,
  42  => 181,
  100 => 404,
  128 => 511,
  256 => 994,
  270 => 1166,
);

plan +@tests + 1;

my $start-time = now;
for @tests -> $_ ( :key($input), :value($expected) ) {
  # zero based instead of one based, so subtract 1
  is-deeply permutapalindromic( $input - 1 ), $expected, .gist;
}
my $finish-time = now;

my $total-time = $finish-time - $start-time;

cmp-ok $total-time, &[<], 60, 'Less than 60 seconds for the tests';
diag "$total-time seconds";

2

ডায়ালগ এপিএল , 51 বাইট

এক-ইন্ডেক্স।

{⍵⊃{⍵/⍨{(⍵≤9)∨(1<≢c~'0')∧1≥+/2|+⌿c∘.=∪c←⍕⍵}¨⍵}⍳5×⍵}

{ একটি ফাংশন যেখানে ⍵ আর্গুমেন্ট উপস্থাপন করে

⍵⊃{ ফাংশনের ফলাফল থেকে বাছতে যুক্তিটি ব্যবহার করুন

⍵/⍨{ ফাংশন ফলাফল সঙ্গে যুক্তি ফিল্টার

(⍵≤9)∨ যুক্তিটি 9 বা OR এর চেয়ে কম বা সমান

(1<≢c~'0')∧ জিরোগুলি মুছে ফেলা হয় এবং যখন সেখানে একাধিক অঙ্ক থাকে

1≥+/ 0 বা 1 এর যোগফল

2| এর বিজোড়তা

+⌿ এর কলামের যোগফল

c∘.=∪cতুলনা টেবিল এবং অনন্য উপাদান , যেখানে ...

←⍕⍵ আর্গুমেন্টের স্ট্রিং প্রতিনিধিত্ব

}¨⍵ প্রতিটি আর্গুমেন্ট প্রয়োগ

}⍳5×⍵ যুক্তিটি} 1, 2, 3, ..., 5 বার প্রয়োগ করা হয়েছে}

} [কার্য শেষ]

সমস্ত পরীক্ষার কেস তাত্ক্ষণিকভাবে ট্রাইএপিএল সমাপ্ত করে


আপনি কি তা প্রমাণ করতে পারবেন a(n) <= 5n?
লিকি নুন

দ্বিতীয় সমাধানটি ভুল ফলাফল উত্পন্ন করে।
লিকি নুন

প্রথম সমাধানটিও ভুল ফলাফল উত্পন্ন করে।
ফাঁস নুন

পছন্দ করুন এবং যদি 5 enough পর্যাপ্ত না হয় তবে 9 × এর জন্য স্থান রয়েছে ...
অ্যাডাম

@ লিকিউন রাইট, আমি 100 ইত্যাদি অন্তর্ভুক্ত করছি যা অনুমোদিত নয়।
Adám

2

জাভাস্ক্রিপ্ট (ES6), 92

n=>eval("for(a=0;n-=(a++<9||(b=[...a+``].sort().join``)>9&!b.replace(/(.)\\1/g,``)[1]););a")

কম গল্ফড

n=>{
  for( a = 0;
       n -= // decrement n (and exit when 0) if the check below is true == a is permutapalindromic
            (a ++ < 9 // single digit (meanwhile, increment a)
             || // or...
             ( b=[...a+``].sort().join`` )// build a string with the digits sorted
               > 9 // required at least 2 non zero digits
             & ! b.replace(/(.)\1/g,``)[1] // removed all digits pair, there must be just 1 or no single digits remaining
            );
     );
   return a;
}

পরীক্ষা

f=n=>eval("for(a=0;n-=(a++<9||(b=[...a+``].sort().join``)>9&!b.replace(/(.)\\1/g,``)[1]););a")

function update() {
  O.textContent=f(+I.value)
}

update()
<input id=I oninput=update() type=number value=100>
<pre id=O></pre>


1

জাভাস্ক্রিপ্ট (বহিরাগত গ্রন্থাগার ব্যবহার করে - গণনাযোগ্য) (142 বাইট)

   n=>_.Sequence(n,i=>{l=i+"";p=_.Permutations(_.From(l),l.length).Any(y=>y.First()!="0"&&y.SequenceEqual(y.Reverse()));if(p){return i;}}).Last()

লিবে লিঙ্ক: https://github.com/mvegh1/Eeumerable/

কোড ব্যাখ্যা: _.সিক্যয়েন্সির স্বাক্ষরের ("i" টেরেশন , "একটি" সেকিউমুলেটেড অ্যারে ) এর উপর ভিত্তি করে "এন" উপাদানগুলির একটি গণনার জন্য একটি গণনা করা যায় creates বর্তমান পুনরাবৃত্তিটি একটি স্ট্রিংয়ে কাস্ট করুন এবং এটি থেকে সমস্ত ক্রমান্বয়ে একটি সংখ্যাযুক্ত তৈরি করুন। "0" দিয়ে শুরু না করার পরীক্ষার যদি আদেশের কোনওটি সন্তুষ্ট করে এবং পরীক্ষার বিপরীতটি আদেশের সমান হয় তবে পরীক্ষা করুন। অনুক্রমের শেষ উপাদানটি ফিরে আসুন কারণ এটি ওপি অনুযায়ী পছন্দসই আউটপুট

এখানে চিত্র বর্ণনা লিখুন


1

পাইথন 2, 93 বাইট

S=sorted
f=lambda n,i=1:n and-~f(n-(S(`i`)in[S(`k`)for k in range(9*i)if`k`==`k`[::-1]]),i+1)

1-ইন্ডেক্স। আপনার সিস্টেমের উপর নির্ভর করে, শেষ পরীক্ষার ক্ষেত্রে অনুমোদিত পুনরাবৃত্তির গভীরতা অতিক্রম করতে পারে।

অনুমানের গণনা করে না। পরিবর্তে, এই সত্যটি ব্যবহার করুন যে বাছাই করার সময় দুটি স্ট্রিং সমান হয়। কোনও সংখ্যা পেরুটোপ্যালিনড্রোমিক কিনা তা পরীক্ষা করতে, পরীক্ষা করা হয়েছে যে এর সাজানো অঙ্কগুলি কোনও প্যালিনড্রোমের বাছাই করা অঙ্কের সাথে একটি বাউন্ড পর্যন্ত সমান কিনা তা পরীক্ষা করে।


96 বাইট:

f=lambda n,i=1:n and-~f(n-(sum(`i`.count(`d`)%2for d in range(10))<2*(set(`i`[1:])!={'0'})),i+1)

1-ইন্ডেক্স। আপনার সিস্টেমের উপর নির্ভর করে, শেষ পরীক্ষার ক্ষেত্রে অনুমোদিত পুনরাবৃত্তির গভীরতা অতিক্রম করতে পারে।

এটি ক্রমবিয়োগের দিকে নজর দেয় না এবং এর পরিবর্তে নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করে:

একটি সংখ্যা হুবহু ঠিক তখন

  • এর অঙ্কগুলির বেশিরভাগটিতেই একটি বিজোড় সংখ্যা প্রদর্শিত হয় এবং
  • এতে এক বা একাধিক শূন্যের সাথে d00 ... 00 ফর্মটি নেই।

এটি সত্য কারণ কোনও প্যালিনড্রোমের একটি সম্ভাব্য কেন্দ্রের অঙ্ক বাদে শুরু এবং শেষের থেকে অঙ্কগুলি জোড়া করা আবশ্যক। ব্যতিক্রমটি অগ্রণী সংখ্যাটি ননজারো হওয়ার প্রয়োজন থেকে আসে এবং তাই সংখ্যার একক-সংখ্যা না হলে কিছু ননজারো ডিজিট অবশ্যই দু'বার প্রদর্শিত হবে।



0

সি, 254 বাইট

#define W while
#define R return
f(j){int c=0,a[16]={0};do++a[j%10],++c;W(j/=10);if(c>1&&a[0]>=c-1)R 0;c%=2;W(j<10)if(a[j++]%2&&(!c||++c>2))R 0;R 1;}g(n){int k=0,i=1;W(k<n)if(f(i++))++k;R i-1;}main(a){printf("N>");scanf("%d",&a);printf("%d\n",g(a));}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.