এটি কি একটি সিঁড়ি নম্বর?


15

চ্যালেঞ্জ:

পরীক্ষা করে দেখুন প্রদত্ত সংখ্যার ফর্ম একটি যদি number staircaseবা না


ইনপুট :

একটি পূর্ণসংখ্যা (দশমিকের চেয়ে বড় এবং দশমিক নয়)। দ্রষ্টব্য: আপনি স্ট্রিং হিসাবে অঙ্কের অ্যারে নিতে পারেন।


আউটপুট:

সংখ্যাটি সিঁড়ি গঠন করে কিনা তার উপর নির্ভর করে একটি সত্যবাদী / মিথ্যা মান


নম্বর সিঁড়ি:

একটি সংখ্যা সিঁড়ি একটি পূর্ণসংখ্যা যা বাম থেকে ডানে পড়তে হয়:

  • 1 দিয়ে শুরু হয়
  • যা অনুসরণ করা যেতে পারে 2
  • যা 3 দ্বারা অনুসরণ করা যেতে পারে
  • এবং তাই অবধি n
  • তারপরে সংখ্যাটি n - 1 থেকে শুরু হবে
  • তারপরে এন - 2
  • তারপরে এন - 3
  • এবং এটি 1 না পৌঁছানো পর্যন্ত

বিঃদ্রঃ :

হতে পারে অংশ নির্দেশ করে দৈর্ঘ্য যদি> তুলনায় 1. বেশী যদি তা না হয় যেমন অর্ডার অনুসরণ করা আবশ্যক ব্যবহার করা হয়। অর্থাত: 12321


উদাহরণ:

12321                          ---> true
12345654321                    ---> true
9                              ---> false
1                              ---> true
2                              ---> false
123421                         ---> false
112312318901323                ---> false
123456789101110987654321       ---> true

বিঃদ্রঃ :

প্রদত্ত ইনপুটটি সর্বদা 0 এর চেয়ে বড় পূর্ণসংখ্যা এবং দশমিক হবে না। আপনার আউটপুট অবশ্যই truthy or falsyইনপুট উপর নির্ভর করে একটি মান হতে হবে


বিধিনিষেধসমূহ:

এটি তাই বাইটে প্রতিটি সংক্ষিপ্ততম কোড (প্রতিটি প্রোগ্রামিং ভাষার জন্য) জয়ী।



2
আমরা কি অঙ্কের তালিকা হিসাবে ইনপুট নিতে পারি? পছন্দ [1,2,3,4,5,6,7,8,9,1,0,1,1,1,0,9,8,7,6,5,4,3,2,1]করেন 123456789101110987654321?
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার: আমি বরং পছন্দ করতাম যদি আপনি না করেন তবে আমার ধারণা আপনি করতে পারেন
মুহাম্মদ সালমান

ইনপুট উপর একটি উচ্চতর সীমা আছে?
মাইপিটলিয়ন

@ মাইপিটলিয়ন: আসলেই নয়, এটি আপনার কোডটি যতটা সমর্থন করতে পারে তত বেশি উচ্চতায় (হার্ডকোডযুক্ত এবং নিখুঁত লোকে বাদ দিয়ে)) সাধারণত আপনার ভাষা সমর্থন করতে পারে সর্বোচ্চ (তবে এই ক্ষেত্রে নয়)
মুহাম্মদ সালমান

আমরা কি কোনও ফাংশনে ইনপুট হিসাবে অক্ষরের একটি স্ট্রিং নিতে পারি? (বা এটি কোনও সম্পূর্ণ-প্রোগ্রামের জন্য একমাত্র গ্রহণযোগ্য ইনপুট?)
জোনাথন অ্যালান

উত্তর:


5

আর , 97 বাইট

function(n)"if"(n>1,{while({T=T+1;x=paste(c(1:T,T:2-1),collapse="");nchar(x)<nchar(n)})0;x==n},T)

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

nএকটি characterবা একটি হিসাবে গ্রহণ করে integer; ব্যবহার characterপূর্ণসংখ্যার একটি 64-বিট হিসাবে অবিকল অনুষ্ঠিত করা যাবে না জন্য সঠিক ফলাফল দেবে double

সিঁড়ি সংখ্যা তৈরি করে যতক্ষণ না এটি কমপক্ষে যতক্ষণ একজন খুঁজে না পাওয়া nযায়, তারপরে সাম্যের জন্য পরীক্ষা করে।

সমতুল্য:

function(n)
    if(n > 1){
        T <- T + 1
        x <- paste(c(1:T,T:2-1),collapse="")
        while(nchar(x) < nchar(n)){
            T <- T + 1
            x <- paste(c(1:T,T:2-1),collapse="")
        }
        return(x == n)
    } else
        return(TRUE)


প্রতিস্থাপন করবে না function(n)সঙ্গে n=scan();খাটো হতে পারে? (অবশ্যই পূর্ণসংখ্যার জন্য)
pajonk

@ পাজোনক আমি মনে করি তবে আমি বলব যে আমি এটিকে একটি স্ট্রিং হিসাবে নিচ্ছি তাই বড় উত্তরগুলির জন্য এই উত্তরটি সঠিক।
জিউসেপে


3

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

@ L4m2 ধন্যবাদ 2 বাইট সংরক্ষণ করা

একটি বুলিয়ান ফেরত দেয়।

f=(s,k=1)=>(m=s.match(`^${k}(.*)${k}$`))?f(m[1],k+1):s==k

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

কিভাবে?

কে = 1 দিয়ে শুরু করে , আমরা স্ট্রিংয়ের শুরুতে এবং শেষের দিকে k সন্ধান করি এবং পুনরাবৃত্তভাবে কে + 1 সহ বাকি মধ্যম সাব-স্ট্রিংয়ের প্রক্রিয়াটি পুনরাবৃত্তি করি । আর কোনও মিল নেই বলেই পুনরাবৃত্তি থামে। ইনপুট একটি সিঁড়ি সংখ্যা যদি গত উপ-স্ট্রিং সমান k

S = "1234321" এর উদাহরণ:

 k | s         | match     | s == k 
---+-----------+-----------+--------
 1 | "1234321" | 1(23432)1 | no     
 2 | "2343"    | 2(343)2   | no     
 3 | "343"     | 3(4)3     | no     
 4 | "4"       | null      | yes    

55 বাইট । 0 কে সত্যবাদী এবং মিথ্যা হিসাবে নাল হিসাবে ধরে নিন (তিনি তিনি ঠিক কী করেন নি)

হাম আমি দেখিনি যে অনুমানটি এটি অবৈধ। দুঃখিত

@ আইননুন কোন উদ্বেগ নেই! আকর্ষণীয়ভাবে, m[0]==s&পরিবর্তে অপসারণ এটি সমস্ত পরীক্ষার কেসগুলিতে উত্তীর্ণ করবে (তবে এখনও অন্য ক্ষেত্রে যেমন ব্যর্থ হয় "123217")।
আর্নৌল্ড

f=(s,k=1)=>(m=s.match(`^${k}(.*)${k}$`))?f(m[1],k+1):s==k?
l4m2


2

পাইথ, 13 12 বাইট

/mjk+Sd_Stdl

আরকে ধন্যবাদ একটি বাইট সংরক্ষণ করা।
এখানে চেষ্টা করুন

ব্যাখ্যা

/mjk+Sd_Stdl
 m         lQ   For each d up to the length of the (implicit) input...
    +Sd_Std     ... get the list [1, 2, ..., d, d-1, ..., 1]...
  jk            ... concatenated.
/               Count how many times the input appears.

আপনি যদি সত্যিই কোনও পূর্ণসংখ্যা হিসাবে ইনপুটটি চান তবে আপনি }Qmsjk+Sd_Stdপরিবর্তে এটি ব্যবহার করতে পারেন তবে এটি ভয়াবহভাবে ধীর slow


এর /পরিবর্তে আপনি এটি ব্যবহার করতে পারেন এটি শেষে }Qস্বয়ংক্রিয়ভাবে পূর্ণ Qহয়
আরকে।


2

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 138 107 102 বাইট

bool t(List<int>s)=>s.Select((j,i)=>s[0]==1&&s.Last()==1&&(i==0||j+1==s[i-1]||j-1==s[i-1])).All(x=>x);

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

ব্যাখ্যা:

bool t(List<int>s)=>
    s.Select((j,i) =>         //iterate over each item and store the return value
        s[0]==1&&s.Last()==1  //does the sequence start and end with 1?
        &&                    //AND
        (i==0                 //is it the first item?
        ||                    //OR
        j+1==s[i-1]           //is the item 1 greater than the previous?
        ||                    //OR
        j-1==s[i-1])          //is the item 1 smaller than the previous?
    ).All(x=>x);              //did all pass the criteria?

প্রকৃতপক্ষে, Zip...Skipআমার আগের মন্তব্যে পদ্ধতিটি ব্যর্থ হয় [1,1], যা trueযদি আমি অনুমানটি বুঝতে পারি তবে ফিরে আসা উচিত । আমি এটি মুছে ফেলেছি।
বেনজ 2240

যাই হোক ধন্যবাদ! আমি আগে কখনও জিপ ব্যবহার করিনি, তবে এখন এটি কীভাবে কার্যকর হতে পারে তা আমি দেখতে পাচ্ছি।
কাহাজার

1

05 এ বি 1 ই , 9 8 বাইট

L€L€ûJså

সতর্কতা: খুব কম! gএটির গতি বাড়ানোর জন্য শুরুতে যুক্ত করুন ।

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

ব্যাখ্যা:

L           1..input
 €L         for each element, map to 1..element 
   €û       palindromize each element
     J      join each element from a list to a string
      så    is the input in that list?

পুরানো ব্যাখ্যা:

F           For [0 .. input] map over
 NL          Push 1..i
   û         Palindromize
    J        Join
     ¹       First input
      Q      Equal?
       }   end loop
        O  Sum.

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


Palindromize? এটি কি করে? কারণ আপনি জানেন যে 10+ এর সিঁড়ি কোনও প্যালিনড্রোম নয়
ইয়াসিন হাজাজ

@ ইয়াসিনহাজাজ এটি অ্যারেকে প্যালিনড্রোমাইজ করে, স্ট্রিংকে নয়
Okx

তথ্যের জন্য ঠিক আছে ধন্যবাদ
ইয়াসিন হাজাজ

@ ইয়াসিনহাজাজ gLη€ûJsåআর একটি, যেখানে আপনি €ûপ্রতিটি প্যালিনড্রাইজ ব্যবহার করে প্যালিনড্রোমাইজেশনের ভেক্টরাইজেশন দেখতে পাবেন ।
ম্যাজিক অক্টোপাস উর্ন

@okx gLη€ûJsåএকটি 8-বাইটের জন্য যা টিআইও উড়িয়ে দেয় না।
ম্যাজিক অক্টোপাস উর্ন

1

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

lambda s,r=range:s in[''.join(map(str,r(1,k+2)+r(k,0,-1)))for k in r(len(s))]

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


চার্জ সংরক্ষণ করুন পূর্ণসংখ্যা গ্রহণ করে যদি আমরা ত্রুটি করতে পারি একবার আমরা লম্বা আঘাত করলে: টিআইও । আমাদের যাইহোক যে মুহুর্তে বেশ কিছু সময় এবং স্মৃতি প্রয়োজন!
জোনাথন অ্যালান


1

সংযুক্তি , 57 55 46 বাইট

{GenerateFirst[N@Join@Bounce@1&`:,`>=:`#&_]=_}

এটি অনলাইন চেষ্টা করুন! আহ, এটি আরও মার্জিত।

সঙ্গে Generate(49 বাইট):

{g@Generate[{g@_>=#_2}&_]=_}g:=N@Join@Bounce@1&`:

ব্যাখ্যা

{GenerateFirst[N@Join@Bounce@1&`:,`>=:`#&_]=_}
{                                            }   anonymous lambda, argument: _
 GenerateFirst[                  ,        ]      find the first element satisfying...
               N@Join@Bounce@1&`:                    this generation function
                                  `>=:`#&_           and this condition
                                           =_    is it equal to the input?

প্রজন্মের ফাংশনটি কেবলমাত্র Nসিঁড়ি নম্বর তৈরি করে । তারপরে, এই অনুসন্ধানটি একবারে `>=:`#&_সন্তুষ্ট হয়ে শেষ হয়। প্রসারিত, এটি হল:

 `>=:`#&_
 (`>= : `#) & _      NB. remember _ is the input
                     NB. also, f:g is f[...Map[g, args]]
 { #_1 >= #_2 } & _
 { Size[_1] >= Size[_2] } & _
 { Size[_1] >= Size[the original input] }
 [n] -> { Size[n] >= Size[input] }

সুতরাং, প্রজন্মের ফাংশনটির আউটপুটটির দৈর্ঘ্য কমপক্ষে ইনপুটগুলির চেয়ে একবার শেষ হয়ে যায়। সুতরাং, এটি অন্তত ইনপুট নম্বর হিসাবে দীর্ঘতম সিঁড়ি নম্বর উত্পন্ন করে। সুতরাং, যদি ইনপুটটি সিঁড়ি নম্বর হয় তবে ফলাফলটি একই সিঁড়ি নম্বর হবে এবং অন্যথায় পরবর্তী দীর্ঘতম সিঁড়ি নম্বর। যেমন, মূল ইনপুটটির সমতা সহ একটি সাধারণ চেক এটি সিঁড়ি নম্বর ছিল কিনা তা নির্ধারণের জন্য যথেষ্ট।

সংযুক্তি, 55 বাইট

0&{If[#_2>#g[_],$[_+1,_2],_2=g!_]}g:=N@Join@Bounce@1&`:

এটি অনলাইন চেষ্টা করুন! পরিকল্পনা ওল 'পুনরাবৃত্তি সঙ্গে।




1

কে , 36 বাইট

{|/($x)~/:{,/$(1+!x),1+1_|!x}'1+!#x}

প্যারামিটার হিসাবে "12321" এর মতো স্ট্রিং নেয়।

এই ফাংশনটি ফাংশন অ্যাপ্লিকেশনের দীর্ঘ শৃঙ্খলা হিসাবে লেখা হয়েছে f g h x, সুতরাং নীচে থেকে মন্তব্য করা সংস্করণগুলি পড়ুন, উপরে যাচ্ছেন। {x+1}হল lambda x: x+1, এক্স একটি ডিফল্ট পরম নাম। পরীক্ষা করে দেখুন https://pastebin.com/cRwXJn7Z বা অপারেটর অর্থ জন্য অনুবাদক সহায়তা।

আমরা nমাঝখানে সিঁড়ি নম্বরটি তৈরি করি যার মাধ্যমে {,/$(1+!x),1+1_|!x}:

{,/                      / join all the chars
   $                     / tostring each number
     (1+!x)              / take the range [0..x-1]; add 1 to each
            ,            / concat
             (1+1_|!x)}  / take the range [0..x-1]; reverse it; drop 1; add 1 to each

পুরো ফাংশন {|/($x)~/:{,/$(1+!x),1+1_|!x}'1+!#x}:

{|/                                   / any_is_true
   ($x)~/:                            / match the string with each of the generated staircases
          {,/$(1+!x),1+1_|!x}'        / make staircase number of each of the numbers
                                      / (note: the x in the inner lambda shadows the outer x)
                              1+!#x}  / take the range [1..length of the string, inclusive]

0

Haskell, , 64 60 58 বাইট

-বিএমও -6 কে ধন্যবাদ!

elem.show<*>(`take`[[1..n]++[n-1,n-2..1]>>=show|n<-[1..]])

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


তাত্ত্বিকভাবে এর জন্য কাজ করে 12345678910987654321, যদি আপনি সেই অনেক উপাদান দিয়ে একটি তালিকা তৈরি করতে সক্ষম হন।
ফল

@ বিএমও আমি জানতাম যে এটি করার একটি উপায় থাকতে হবে। ধন্যবাদ
Esolanging ফল

@ বিএমও আপনার গল্ফ সত্যিই
অন্ধকারের

এটিও খুব কাছাকাছি, আমি যদি এটি ইতিমধ্যে পোস্ট না করতাম তবে এটি উন্নতি হিসাবে পরামর্শ দিতাম (আমি আমার পোস্ট না করা পর্যন্ত আমি আপনার দেখি না)।
25


0

জাভা 10, 142 বাইট

s->{int n=1,l,f=1;try{for(;;s=s.substring(l=(n+++"").length(),s.length()-l))if(!s.matches(n+".*"+n)&!s.equals(n+""))f=0;}finally{return f>0;}}

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

ব্যাখ্যা:

s->{                 // Method with String parameter and boolean return-type
  int n=1,           //  Stair integer, starting at 1
      l,             //  Length integer to reduce bytes
      f=1;           //  Result-flag, starting at 1
  try{for(;;         //  Loop until an error occurs
          s=s.substring(l=(n+++"").length(),s.length()-l))
                     //    After every iteration: remove `n` from the sides of the String
        if(!s.matches(n+".*"+n)
                     //   If the current String with the current `n` isn't a stair
           &!s.equals(n+""))
                     //   And they are also not equal (for the middle)
          f=0;       //    Set the flag to 0
   }finally{         //  After the error (StringOutOfBoundsException) occurred:
      return f>0;}}  //   Return whether the flag is still 1

0

জাপট, 11 বাইট

স্ট্রিং হিসাবে ইনপুট নেয়।

Êõõ mê m¬øU

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


ব্যাখ্যা

                :Implicit input of string U
Ê               :Length of U
 õ              :Range [1,Ê]
  õ             :Range [1,el] for each element
    mê          :Map & palidromise
       m¬       :Map & join
         øU     :Contains U?

বিকল্প, 10 9 বাইট

এই সমাধানটি, যা স্ট্রিং বা পূর্ণসংখ্যার হিসাবে ইনপুট নিতে পারে, সত্যতার জন্য সংখ্যার একটি অ্যারের ফেরত দেয় বা শেষ পর্যন্ত, এটি যদি ব্রাউজারকে পঙ্গু না করে তবে মিথ্যাটির জন্য একটি ত্রুটি নিক্ষেপ করবে। সতর্কতার সাথে ব্যবহার করুন.

@¥Xê q}aõ

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


0

রেটিনা , 45 43 বাইট

$
;1
+`^(.+)(.*)\1;\1$
$2;$.(_$1*
^(.+);\1$

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। সম্পাদনা: 2 লিট সংরক্ষিত @ লিওকে ধন্যবাদ ব্যাখ্যা:

$
;1

ইনিশিয়ালাইজ nকরার 1

+`^(.+)(.*)\1;\1$

যখন sশুরু হয় এবং এর সাথে শেষ হয় n:

$2;$.(_$1*

মুছে ফেলা nএর প্রান্ত sএবং বৃদ্ধি থেকেn

^(.+);\1$

nবাকি আছে কিনা পরীক্ষা করুন ।


আমি মনে করি আপনার \d.
লিও


-1

নিম্নলিখিত ব্যবহারকারীদের ধন্যবাদ:

@Nooneishere
@LyricLy
@JoKing

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

g=s=input()
f=1
o='1'==s[0]
while`f`==s[0]:s=s[len(`f`):];f+=1
f-=2
o&=`f`==s[0]
while s and`f`==s[0]:s=s[len(`f`):];f-=1
o&=f==0
o|=g=='1'
print o

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


আউটপুটটি স্ট্রিং trueএবং falseসত্যবাদী এবং মিথ্যা মান হতে হবে না। 1এবং 0উদাহরণস্বরূপ কাজ করবে
dylnan

@ এললান: আমি কেবল এটি পড়েছি, ধন্যবাদ। এখনও গল্ফ করছে (অনেক কিছু যেতে হবে)

আপনি কেবল s[0]পরিবর্তে ব্যবহার করতে পারবেন না startswith? ত্রুটিগুলি অনুমোদিত, এবং আপনি সিঁড়ির জন্য সিঁড়ির জন্য 'আউটপুট 1' বলতে পারেন, অন্য কিছু নয় (কিছুই সহ নয়) [যেহেতু স্ট্যাডারর উপেক্ষা করা হয় না] সিঁড়িহীন জন্য '।
NoOneIsHere

@ নন আইনেহির: ভাল ধারণা। আপাতদৃষ্টিতে ঘুমানোর সময় কোডিং করা এত ভাল ধারণা নয়

1
আপনার 138 বাইট সমাধানটি সর্বদা মিথ্যা প্রত্যাবর্তন করে, যেহেতু gকখনই 1 নয় You আপনার পোস্ট করার আগে সম্ভবত এই সমাধানগুলি পরীক্ষা করা উচিত ...
জো কিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.