এটি কি অঙ্কের প্যাটার্নের সাথে মেলে?


23

সম্প্রতি আমি একটি গণিত পরীক্ষা করেছি এবং লক্ষ্য করেছি যে পরীক্ষার একটি নির্দিষ্ট নম্বর একটি আকর্ষণীয় ধরণের সাথে মেলে। সংখ্যাটি ( 28384) এমন একটি জেনেরিক অঙ্কের ক্রমের সাথে মেলে যা এর মতো দেখায়

(n)(x)(n+1)(x)(n+2)(x)(n+3) etc...

যেখানে nএবং xএকক অঙ্কের পূর্ণসংখ্যা হয়। ক্রম পারেন সঙ্গে শুরু করতে পারবেন xবা nসঙ্গে শেষ হয় xবা n+y

আপনার কাজটি হ'ল একাধিক অঙ্কের ধনাত্মক পূর্ণসংখ্যা দেওয়া, ইনপুট প্যাটার্নটির সাথে মেলে কিনা তার উপর নির্ভর করে সত্যবাদী বা মিথ্যা মান আউটপুট দেয়। ইনপুটটি 4 থেকে 18 ডিজিটের মধ্যে দীর্ঘ হবে। আপনি পূর্ণসংখ্যার স্ট্রিং প্রতিনিধিত্ব হিসাবে ইনপুট নিতে পারেন। ইনপুটটি 0 দিয়ে শুরু হবে না তবে 0 টি দিয়ে ধারণ করতে পারে বা শেষ হতে পারে।

n+y সর্বদা একক অঙ্কের সংখ্যা হবে (সুতরাং দৈর্ঘ্যের সীমা কেন 18)।

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

এগুলির একটি সত্য মানের মূল্য আউটপুট করা উচিত

182838485868788898
4344
85868
12223242526

এবং এগুলি ভুয়া হওয়া উচিত

12345
6724013635
36842478324836
1222232425
5859510511

সমস্ত কোড গল্ফের মতো, সংক্ষিপ্ততম কোডের জয়! সৌভাগ্য এবং মতবিরোধগুলি, আপনার পক্ষে সর্বদা থাকুন!


আমরা কি স্ট্রিং হিসাবে ইনপুট নিতে পারি?
ক্রিটসি লিথোস

@ ক্রিটিক্সিলিথস "আপনি পূর্ণসংখ্যার স্ট্রিং উপস্থাপনা হিসাবে ইনপুট নিতে পারেন।"
মিঃ এক্সকোডার

নিয়ম মাপসই করা সংখ্যার জন্য কি উভয় xএবং nশূন্য নয়?
মিঃ এক্সকোডার

@ মিঃ এক্সকোডারটি 0 দিয়ে শুরু হতে পারে না তবে 0 এর সাথে শেষ হতে পারে বা শেষ হতে পারে
caird coinheringaahing

উত্তর:


8

পাইথন 2 , 84 81 80 79 বাইট

-1 বাইট ধন্যবাদ ওভেসকে ধন্যবাদ

lambda x:g(x,1)|g(x,0)
g=lambda x,a:len(set(x[a::2]))==(x[a<1::2]in"123456789")

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


পাইথন 3 , 82 79 78 77 বাইট

lambda x:g(x,1)|g(x,0)
g=lambda x,a:len({*x[a::2]})==(x[a<1::2]in"123456789")

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

পাইথন 3-তে সামান্য সংক্ষিপ্ত, তবে আমি এটির নিজের উত্তরটির প্রাপ্য বলে মনে করি নি।


ব্যাখ্যা

আমরা gস্ট্রিং এবং সূচি গ্রহণ করে এমন একটি ফাংশন সেট আপ করি (হয় 1 বা 0)। gতারপরে ফিরে আসবে কি না len(set(x[a::2])), এটি অন্য প্রতিটি পজিশনে অনন্য অঙ্কের সংখ্যা, সমান (x[a==0::2]in"123456789"), অন্য সংখ্যাগুলি ক্রমবর্ধমান ক্রমে রয়েছে কিনা। অঙ্কগুলি যদি আরোহী ক্রমে থাকে তবে এটি সমস্ত একই হয় কিনা তা এই ফেরত দেয়, সেটটি খালি কিনা তা জিজ্ঞাসা করবে, যা এটি হতে পারে না, এইভাবে সর্বদা মিথ্যা প্রত্যাবর্তন করে।


যথারীতি আমি> outgolfed হয়েছে <।
জনাব Xcoder

x[a<1::2]in"123456789"হতে পারে "0"<x[a<1::2]<":"(চরগুলি তুলনা করে চারকোডগুলি তুলনা করে)
ক্যালকুলেটরফলাইন

@ ক্যালকুলেটরফ্লাইন আমার কাছে এটি সত্য বলে মনে হয় না। এটি কেবল পরীক্ষা করে যে স্ট্রিংটি একটি সংখ্যা দিয়ে শুরু হয়।
গম উইজার্ড

ওহ ঠিক আছে, তবে এটি একক অক্ষরের জন্য কাজ করে।
ক্যালকুলেটরফলাইন

তবে আপনার আসলে কি দরকার a<1? মনে হয় ঠিক হতে পারে a
ক্যালকুলেটরফলাইন


2

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

TG9LNýN.øŒ})˜Iå

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

ব্যাখ্যা

TG9LNýN.øŒ})˜Iå
TG        }     # For 1 to 9...
  9L             # Push [1 .. 9]
    Ný           # Join with current value 
      N.ø        # surround with current value
         Œ       # Push substrings
           )    # Wrap stack to array
            ˜   # Deep flatten the array
             I  # Push input
              å # Is the input in the array?
                # Implicit print

এটি কাজ করা উচিত (পরীক্ষার কেসগুলি করেছে) তবে যদি কোনও ত্রুটি খুঁজে পান তবে দয়া করে আমাকে জানান।

14 যদি কোনও আউটপুট মিথ্যা হিসাবে গণনা না করে বাইট:

TG9LNýN.øŒIåi1


2

Haskell,, 108 113 97 95 বাইট

d(x:_:r)=x:d r
d r=r
c(x:n:r)=and$all(==x)(d r):zipWith(==)(d$n:r)[n..]
f s@(_:n:_)=c s||c(n:s)

নমুনা কল: f "182838485868788898"ফলনTrue

ব্যাখ্যা সহ বর্ণহীন সংস্করণ:

-- Take every other element from the string, starting with the first
d (x:_:r) = x : d r
d r       = r
c (x:n:r) = and $ all (== x) (d r)              -- Every other char is equal to the first
                : zipWith (==) (d $ n:r) [n..]  -- The remaining chars are a prefix of n(n+1)(n+2)...
f s@(_:n:_) = c s      -- The case where s already starts with x
           || c (n:s)  -- If not, prepend a dummy x and try again

2
বিশেষত পিপিসিজি এবং হাস্কেল গল্ফিংয়ে আপনাকে স্বাগতম! isPrefixOfপ্রিলিওডে নেই, সুতরাং আপনাকে import Data.Listআপনার কোডে অন্তর্ভুক্ত করতে হবে বা বিকল্প ব্যবহার করতে হবে, যেমন and(zipWith(==)(n:r)[n..])
লাইকনি

@ লাইকনি: ইঙ্গিতটির জন্য ধন্যবাদ! আমি সেই অনুযায়ী ফাংশনটি প্রতিস্থাপন করেছি।
সেরাকুসা

1
আমি মনে করি x/=yশুধু হতে পারে 1>0কারণ যদি না x/=yতারপর x==yও প্রথম ক্ষেত্রে এটা ক্যাচ।
ক্যালকুলেটরফলাইন

আপনার প্রয়োজনও নেই where, সংজ্ঞা দেওয়া cএবং এর dবাইরে যেমন বাহ্যিক কার্যকারিতা fঠিক আছে তেমন। fতারপর সংক্ষিপ্ত করা যেতে পারে f s@(_:n:_)=c s||c(n:s)
লাইকনি

1
তারপরে আপনি হাসকেলে গল্ফিং বিধি সম্পর্কিত গাইডে আগ্রহী হতে পারেন । যদিও এটি কোনও নিয়ম নয়, আপনি এর পরিবর্তে নিউলাইনগুলি ব্যবহার করতে পারেন ;। এটি একই বাইট গণনা কিন্তু কোডের পঠনযোগ্যতা উন্নত করে।
লাইকনি

1

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

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

s=>[...s].every((d,i)=>d-s[j^(k=i+j&1)]==k*i>>1,j=s[2]-s[0])

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



1

পাইথন 3 , 99 96 89 বাইট

  • 3 বাইট সংরক্ষণ করা: all()ফাংশন ব্যবহার
  • @ ওয়েট উইজার্ড 7 টি বাইট সংরক্ষণ করেছেন: শর্টহ্যান্ডিং & |এবং এর মাধ্যমে অতিরিক্ত ভেরিয়েবল প্রতিস্থাপন করুনk<1
lambda x,g=lambda x,k:(x[k<1::2]in'123456789')&all(j==x[k]for j in x[k::2]):g(x,0)|g(x,1)

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

ব্যাখ্যা:

প্রথমে স্ট্রিংটিকে দুটি তালিকায় বিভক্ত করুন: একটি বিজোড়-সূচকযুক্ত এবং অন্যটি সম-সূচকযুক্ত উপাদানগুলির সাথে। এ এবং বি দুটি তালিকা এমন যে অনুমান করা হয়:

  1. A তে একই সংখ্যা রয়েছে এবং বিতে ক্রমান্বয়ে ক্রমযুক্ত ক্রমাগত সংখ্যা রয়েছে।

বা ঠিক বিপরীত

  1. বি তে একই সংখ্যা রয়েছে এবং এটিতে ক্রমান্বয়ে ক্রমাগত সংখ্যা রয়েছে।

একটানা শর্তটি এটি দ্বারা পরীক্ষা করা হয়: a in '123456789'

একই নম্বর শর্তটি পরীক্ষা করে দেখেছে: all(i=a[x] for i in a)


1
আপনি দৃষ্টান্ত প্রতিস্থাপন করতে পারেন iসঙ্গে k<1এবং ড্রপ iসব একসাথে যুক্তি।
গম উইজার্ড

1
আপনি প্যারেন্সে প্রথম শিকারী ঘিরে ফেলতে পারেন এবং এর &পরিবর্তে ব্যবহার করতে পারেন and। আপনার পাশাপাশি orপ্রতিস্থাপন করা যেতে পারে |
গম উইজার্ড

1
আমি অবশেষে এটি আপনার উত্তরের দিকে রূপান্তরিত হতে দেখছি ..: ডি
অফিসিয়ালাইম

1

পিএইচপি , 68 বাইট

for(;$v<10;)$s.=strstr(+$v.join(+$v,range(1,9)).+$v++,$argn);echo$s;

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

অনুসন্ধান স্ট্রিংয়ের আউটপুট অংশটি সত্যই মূল্য হিসাবে এবং মিথ্যাচারের জন্য কিছুই হিসাবে অনুসন্ধান স্ট্রিংয়ের শেষ পর্যন্ত ইনপুটটির প্রথম উপস্থিতি থেকে শুরু করে অন্তর্ভুক্ত

2 বাইট জন্য আরো আপনি প্রতিস্থাপন করতে পারেন echo$s;সঙ্গে !!echo$s;পেতে1 truthy মান হিসাবে

অ্যারেতে নিম্নলিখিত স্ট্রিংগুলির মধ্যে একটিতে ইনপুটটির উপস্থিতি সন্ধান করুন

Array
(
    [0] => 0102030405060708090
    [1] => 1112131415161718191
    [2] => 2122232425262728292
    [3] => 3132333435363738393
    [4] => 4142434445464748494
    [5] => 5152535455565758595
    [6] => 6162636465666768696
    [7] => 7172737475767778797
    [8] => 8182838485868788898
    [9] => 9192939495969798999
)

1

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

f=
s=>[...s].every((e,i)=>i<2|e-s[i-2]==(s[2]!=s[0])^i%2)
<input oninput=o.textContent=this.value[3]?f(this.value):``><pre id=o>

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


1

এমএটিএল , 15 বাইট

2L&),duw]hSFTX=

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

আড্ডায় @ লুইস মেনডোর কিছু সহায়তায়। নোট যে, যদি খালি আউটপুট + + ত্রুটি বিবেচনা করা হয় 'falsy', Xবাদ যাবে, এর স্কোর আনয়ন 14 বাইট

2L&)     % Split the input into odd and even-indexed elements
    ,   ] % Do twice (new feature since MATL v20.0), i.e., on both halves of the input
     d     % Pairwise differences of the array. Results in [0,0,...] for the 'constant' part,
            %  and [1,1,...] for the 'increasing' part.
      u      % Get unique elements. Results in [0] for the constant part, [1] for the increasing part.
       w      % Swap the stack to do the same for the other half of the input.
         hS    % Horizontal concatenation followed by sort. Results in [0,1] for the desired string.
           FTX= % Check if the result is indeed [0,1]. Implicit display.

0

গণিত, 121 বাইট

(m[x_]:=Take[s=IntegerDigits@#,{x,Length@s,2}];w[b_,n_]:=Union@Differences@m@b=={1}&&Length@Union@m@n==1;w[1,2]||w[2,1])&

0

Pyth , 20 বাইট

ASm.+sMd.Tcz2&-GZ-H1

আউটপুট [] যখন সংখ্যা অঙ্ক ধরণের সাথে মেলা, অন্য কিছু অন্যথায়।

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

ব্যাখ্যা (ইনপুট সহ উদাহরণ 85868)

ASm.+sMd.Tcz2&-GZ-H1

          cz2           # Chop the input in pairs: ['85', '86', '8']
        .T              # Transpose, ignore absences: ['888', '56']
     sM                 # Convert to integers: [[8, 8, 8], [5, 6]]
  m.+  d                # Compute deltas: [[0, 0], [1]]
 S                      # Sort: [[0, 0], [1]]
A                       # Assign first list to G and second list to H
              -GZ       # Filter 0 on G (on absence): [0, 0] -> []
                 -H1    # Filter 1 on H (on absence): [1] -> []
             &          # Check both lists are empty (logical and): [] & [] -> []

0

পাইথ, 17 বাইট

qU2Ssm{.+d.TcjQT2

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

আমার জেলি উত্তর হিসাবে একই অ্যালগরিদম।

ব্যাখ্যা:

qU2Ssm{.+d.TcjQT2 Accepts an integer
             jQT  Take digits of input
            c   2 Split in pairs
          .T      Transpose
     m            Map the following on each of the two resulting lists:
       .+d          Take deltas
      {             Deduplicate
    s             The list is now in [[a, b, ...], [A, B, ...]] format, convert it to [a, b, ..., A, B, ...]
   S              Sort
qU2               Check if equal to [0, 1]

0

পাইথন 3 , 167 161 157 131 106 বাইট

@ হুইট উইজার্ডের পরামর্শের জন্য -৫০ বাইট ধন্যবাদ thanks

def g(t):k,c,f,j=t[::2],t[1::2],'123456789',''.join;return(len({*k})and j(c)in f)or(len({*c})and j(k)in f)

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


আরও গল্ফ করা যেতে পারে। আমি ইতিমধ্যে সম্পাদনা করছি।
মিঃ এক্সকোডার

আপনি আমার উত্তরে এই কৌশলটি দেখে থাকতে পারেন তবে set(c)একইরকম {*c}। (কমপক্ষে অজগর 3 এ)
গম উইজার্ড

@ ওয়েট উইজার্ড ধন্যবাদ। সম্পাদনা করা হচ্ছে
মিঃ এক্সকোডার

3
[t[z]for z in range(0,len(t),2)]এছাড়াও কেবল একটি তালিকা বিচ্ছিন্ন। আপনি সহজভাবে এটি করতে পারেন t[::2]। আপনি যদি এই সিনট্যাক্সের সাথে পরিচিত না হন তবে আমি ডক্সের উপর নজর দেওয়ার পরামর্শ দিচ্ছি, কারণ এটি বেশ কার্যকর।
গম উইজার্ড

@ উইট উইজার্ড বাহ, এটি সত্যই কার্যকর। দুঃখের বিষয়, আমি এখনই উত্তরটি সম্পাদনা করতে পারি না। আমি যত তাড়াতাড়ি পারব তাই করব। পরামর্শের জন্য অনেক ধন্যবাদ ...
মিঃ এক্সকোডার

0

জাভা (ওপেনজেডিকে 8) , 128 119 118 108 107 104 বাইট

s->{int i=3,a=s[2]-s[0],b=s[3]-s[1];for(;++i<s.length;)a+=b-(b=s[i]-s[i-2]==a?a:2);return(a|b)==1&a!=b;}

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

ব্যাখ্যা:

s->{                             // lambda
  int i=3,                       //  iterating index
      a=s[2]-s[0],               //  diff of even-indexed characters
      b=s[3]-s[1];               //  diff of odd-indexed characters
  for(;++i<s.length;)            //  iterate
    a+=b-(b=                     //   swap a and b
        s[i]-s[i-2]==a?a:2       //    or set b to 2 if the diffs don't match
      ));                        //
  return (a|b)==1                //  return true if both a and b are in (0,1)
        &a!=b;                   //         but different
}

0

রেটিনা , 47 বাইট

.
$*11;
(1+)(?<=\1;1+;\1)

^1+;1+

^;?(;1;)+;?$

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

আউটপুটগুলি 1 টি যদি প্যাটার্নের সাথে মেলে তবে 0 যদি এটি না মেলে

ব্যাখ্যা

.
$*11;

প্রতিটি ডিজিটকে সেমিকোলন দ্বারা পৃথক করে আনারিতে এন +1 এ রূপান্তর করুন

(1+)(?<=\1;1+;\1)

(ট্রেলিং নিউলাইন) প্রতিটি অঙ্ককে তার আগে এবং তার আগে একটি 2 দাগের মধ্যে পার্থক্যে রূপান্তরিত করে

^1+;1+

(ট্রেলিং নিউলাইন) প্রথম 2 টি সংখ্যা সরিয়ে দেয়

^;?(;1;)+;?$

এই প্যাটার্নের মিলগুলির সংখ্যা গণনা করে, যা 0 এবং 1 এর বিকল্পের জন্য পরীক্ষা করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.