গডনেস গিজা গল্ফ!


41

একটি "গিজা নাম্বার", যে একটি চিত্তাকর্ষকভাবে একটি টিমি সংখ্যা নামে পরিচিত এটি হ'ল এমন কোনও সংখ্যা যেখানে অঙ্কগুলি একটি পিরামিডকে প্রতিনিধিত্ব করে ( A134810 )। উদাহরণস্বরূপ, "12321" একটি গিজা নম্বর কারণ এটি এটির মতো ভিজ্যুয়ালাইজ করা যায়:

  3  
 2 2
1   1

তবে, "123321" এর মতো কিছু গিজা নম্বর নয় কারণ পিরামিডের শীর্ষে দুটি অঙ্ক রয়েছে

  33  
 2  2
1    1

অন্য কথায়, নীচের সমস্ত শর্ত পূরণ করা হলে একটি সংখ্যা একটি গিজা সংখ্যা:

  • এটিতে একটি বিজোড় সংখ্যা রয়েছে এবং কেন্দ্রের সংখ্যাটি সবচেয়ে বড়

  • এটি প্যালিনড্রোমিক (একই পঠিত ফরোয়ার্ড বা পিছনের দিকে), এবং

  • অঙ্কগুলির প্রথমার্ধটি কঠোরভাবে একের সাথে বাড়ছে। (যেহেতু এটি অবশ্যই প্যালিনড্রোমিক হতে হবে, এর অর্থ হ'ল অঙ্কের দ্বিতীয়ার্ধটি অবশ্যই একের সাথে কঠোরভাবে হ্রাস পাবে)

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

মোট 45 টি গিজা সংখ্যা রয়েছে, সুতরাং এই ইনপুটগুলির যে কোনও একটিতে সত্যবাদী মান হওয়া উচিত:

1
2
3
4
5
6
7
8
9
121
232
343
454
565
676
787
898
12321
23432
34543
45654
56765
67876
78987
1234321
2345432
3456543
4567654
5678765
6789876
123454321
234565432
345676543
456787654
567898765
12345654321
23456765432
34567876543
45678987654
1234567654321
2345678765432
3456789876543
123456787654321
234567898765432
12345678987654321

অন্য কোনও ইনপুট একটি মিথ্যা মান দিতে হবে। অবশ্যই, আপনাকে অবৈধ ইনপুটগুলি হ্যান্ডেল করতে হবে না যেমন নন-পজিটিভ সংখ্যা, অ-পূর্ণসংখ্যা বা অ-সংখ্যা।

যথারীতি, এটি , সুতরাং স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে, এবং বাইটের সংক্ষিপ্ত উত্তরটি জিতেছে!


0 সম্পর্কে কি? এটা কি থ্রোথি?
tuskiomi

টাস্কোমিও প্রযুক্তিগতভাবে, না, তবে এটি অপ্রাসঙ্গিক কারণ আপনাকে অ-পজিটিভ সংখ্যাগুলি পরিচালনা করতে হবে না।
ডিজেএমসিএমহেম

1
আমি জিজ্ঞাসা করার কারণটি কারণ এটি যদি একটি গিজা সংখ্যা হয় তবে 1210, 123210 ইত্যাদির মতো সংখ্যাগুলিও সত্য হবে।
tuskiomi

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

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

উত্তর:


30

পাইথন 2, 48 47 46 বাইট

lambda s:s[~len(s)/2:]in'987654321'>s==s[::-1]

আইডিয়নে এটি পরীক্ষা করুন ।

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

পাইথনে, একটি শৃঙ্খলাবদ্ধ তুলনা যদি সত্য হয় এবং কেবলমাত্র সমস্ত স্বতন্ত্র তুলনা একই হয় returns এই সুনির্দিষ্ট ক্ষেত্রে, আমাদের লাম্বদা নীচে সমস্ত শর্ত পূরণ করা হয় তবেই সত্য ফিরে আসে ।

  • s[~len(s)/2:]in'987654321'

    একটি স্ট্রিং জন্য গুলি দৈর্ঘ্যের 2n + 1 টি , ~len(s)/2আয় ~ (2n + 1 টি) / 2 = - (2n + + 2) / 2 = - (ঢ + 1 টি) , তাই s[~len(s)/2:]ডানদিকের উৎপাদ এন + 1 টি অক্ষর গুলি

    একইভাবে, একটি স্ট্রিং জন্য গুলি দৈর্ঘ্যের 2n , ~len(s)/2আয় ~ (2n) / 2 = - (2n + 1 টি) / 2 = - (ঢ + 1 টি) (পূর্ণসংখ্যা বিভাজন সবসময় প্রতি বৃত্তাকার -∞ , তাই s[~len(s)/2:]আরো একবার ডানদিকে অবস্থিত উৎপাদ , n + 1 অক্ষর গুলি

    তুলনাটি সত্য হয় যদি এবং কেবলমাত্র ডানদিকে n + 1 অক্ষর একটি স্ট্রিং তৈরি করে তবেই প্রত্যাবর্তন ঘটে 987654321

    মনে রাখবেন যদি তারা এবং গুলি হয়েছে 2n অক্ষর, গুলি একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে হতে পারে না; ডান দিক থেকে n তম এবং (এন + 1) তম অক্ষর পৃথক হবে এবং পরেরটিটি বাম দিক থেকে n তম অক্ষর।

  • '987654321'>s

    এটি স্ট্রিকসকে অভিধানের সাথে তুলনা করে। যেহেতু 9 হ'ল একমাত্র গিজা নম্বর যা 9 দিয়ে শুরু হয় , সমস্ত গিজা সংখ্যা এই তুলনাটি সন্তুষ্ট করে।

    নোট করুন যে এই স্ট্রিংগুলির তুলনা করা আমাদের সিদ্ধান্ত সমস্যার অংশ হিসাবে গঠন করে না; >sএর চেয়ে কম তিনটি অক্ষর ছোট and s

  • s==s[::-1]

    এই আয় সত্য যদি এবং কেবল যদি গুলি একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে হয়।


8
এই উত্তরটি উন্মাদ জাদুকরী। আমি বুঝতে পারি এর বিটস এবং টুকরাগুলি কীভাবে কাজ করে তবে আপনি কীভাবে এটি ব্যবহার করে এসেছেন তা বুঝতে শুরু করতে পারছি না। এবং সেখানে এক মুহুর্তের জন্য আমি আমার
of৪ টি

2
আমি সেই 3 বাইটগুলি বাঁচানোর গ্যারান্টিযুক্ত তুলনা পছন্দ করি
গ্রেইশিফট

22

পার্ল, 39 37 42 39 + 1 = 40 বাইট

একটি নতুন পদ্ধতি ব্যবহার করে, আমি বিপুল সংখ্যক বাইটগুলি কাটাতে সক্ষম হয়েছি। -nপতাকা নিয়ে দৌড়াও। রানটাইমে বারবার ইনপুট গ্রহণ করে, সেই অনুযায়ী 0 বা 1 মুদ্রণ করে।

আমাকে 5 বাইট যুক্ত করতে হয়েছিল কারণ আমি এগুলি না করেই বুঝতে পারি, কোডটি ইনপুটগুলির জন্য কাজ করেছে যেমন 1234567900987654321, যা কোনও গিজা নম্বর নয়। যেহেতু গিজা সংখ্যায় কখনই সংখ্যাটি 0 থাকে না (এবং প্রয়োজনীয়তার সাথে সমস্ত মিথ্যা ধনাত্মক অঙ্কটি 0 থাকে) তাই এই 5 বাইট তার জন্য অ্যাকাউন্ট করে account

say!/0/*($_- s/..?/1/gr**2)=~/^(.)\1*$/

ব্যাখ্যা:

say!/0/*($_- s/..?/1/gr**2)=~/^(.)\1*$/  #$_ contains input by default.
   !/0/                                  #Ensure that the initial text doesn't contain the number 0
       *                                 #Since both halves of this line return either 0 or 1, multiplying them together only yields 1 if both are true (which we want).
             s/   / /gr                  #Perform a substitution regex on $_ (see below)
                                         #/g means keep replacing, /r means don't modify original string; return the result instead
               ..?                       #Replace 1 or 2 characters (2, if possible)...
                   1                     #...with the number 1
                       **2               #Square this number...
        ($_-              )              #...and subtract it from the input
                           =~            #Do a regex match on the result
                             /^      $/  #Make sure the regex matches the WHOLE string
                               (.)       #Match any character...
                                  \1*    #...followed by itself 0 or more times
say                                      #Finally, output the result of the whole line of code.

প্রতিস্থাপনের রেজেক্সের উদ্দেশ্য হ'ল 1 টি এর স্ট্রিং তৈরি করা যার দৈর্ঘ্য ইনপুটটির অর্ধেক দৈর্ঘ্য হয় ed সুতরাং, একটি ইনপুট 12321স্ট্রিং উত্পাদন করবে 111, যা পরে স্কোয়ার হয় (নীচে ব্যাখ্যা)। এমনকি দৈর্ঘ্যের ইনপুটগুলি চূড়ান্ত রেজেক্স সফল কিনা তা নিশ্চিত করার জন্য খুব ছোট এমন স্ট্রিং উত্পাদন করবে।

এই কোডটি কাজ করার কারণ নিম্নলিখিত কারণগুলি:

        1         =         1**2
       121        =        11**2
      12321       =       111**2
     1234321      =      1111**2
    123454321     =     11111**2
   12345654321    =    111111**2
  1234567654321   =   1111111**2
 123456787654321  =  11111111**2
12345678987654321 = 111111111**2

আমরা পরিষ্কারভাবে দেখতে পারি যে আরএইচএসে 1 এর সংখ্যা এলএইচএসের অর্ধেকের চেয়ে 1/2 এর সমান। (আরও 1 টি কেটে দিলে)। উপরন্তু:

567898765 - 123454321 = 444444444, যা কেবল 4 পুনরাবৃত্তি। সুতরাং যখন আমরা আমাদের নম্বর থেকে আমাদের স্কোয়ারটি বিয়োগ করি, আমরা যদি একটি পুনঃ ডিজিট পাই তবে আমাদের মূল সংখ্যাটি একটি গিজা নম্বর।

পুরানো কোড এবং পুরানো পদ্ধতি (58 + 1 = 59 বাইট)

@ দাদাকে ধন্যবাদ 1 বাইট সংরক্ষিত

-nপতাকা ব্যবহার করে পাইপ পাঠ্য সহ চালনা করুনecho

say$_==($;=join"",/(.)/..($==y///c/2+/(.)/)-1).$=.reverse$

দৈর্ঘ্য এবং অগ্রণী পূর্ণসংখ্যার দ্বারা নির্ধারিত অনন্য গিজা নম্বর গণনা করে এবং এটি ইনপুটটির সাথে মেলে কিনা sees

echo -n "123454321" | perl -M5.010 -n giza.pl রিটার্ন হিসাবে চালান 1এটি যদি গিজা নম্বর হয় তবে অন্যথায় নালান।


2
এটি দ্বিতীয় পদ্ধতির জন্য একটি সুন্দর পর্যবেক্ষণ।
ট্রাইকোপল্যাক্স

15

জেলি , 10 7 6 বাইট

9ẆŒBḌċ

সমস্ত 45 গিজা নম্বর নম্বর উত্পন্ন করে তারপরে সদস্যতার জন্য পরীক্ষা করে।

এটি অনলাইন চেষ্টা করুন! অথবা উত্পন্ন সংখ্যাগুলি দেখুন

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

9ẆŒBḌċ  Main link. Argument: n

9       Set the return value to 9.
 Ẇ      Windows; yield all "substrings" of [1, ..., 9].
  ŒB    Bounce; map each [a, ..., b] to [a, ..., b, ..., a].
    Ḍ   Undecimal; convert the digit arrays to integers.
     ċ  Count the number of occurrences of n.

10

জাভাস্ক্রিপ্ট (ES6), 46 45 42 41 বাইট

f=([c,...s])=>s+s&&c-s.pop()|c-~-f(s)?0:c

স্ট্রিং হিসাবে ইনপুট নেয় এবং মিথ্যাচারের জন্য সত্যের জন্য একক-অঙ্কের স্ট্রিং 0দেয়।

প্রাথমিক ধারণাটি কয়েকটি জিনিস পরীক্ষা করা:

  • স্ট্রিংটি যদি একটি চর দীর্ঘ হয় তবে, ও
  • প্রথম চরটি সর্বশেষ চর হিসাবে একই, এবং
  • মাঝের অংশটিও একটি গিজা নম্বর এবং
  • দ্বিতীয় চরটি এখানে প্রথম চরের তুলনায় আরও একটি।

দুঃখিত, আমি প্রশ্নটি ভুলভাবে পড়েছি।
নিল

10

জাভা 7, 128 119 105 বাইট

boolean t(long n){long a=1,b=1,c=0;for(;a<n/10;b=b*b<=n/10?b*10+1:b,c^=1)a=a*10+1;return(n-b*b)%a<1&c<1;}

আর স্ট্রিং নেই! সুতরাং, এখন আমি 111...ইনপুট ( a) হিসাবে একই দৈর্ঘ্যের একটি সংখ্যা এবং এক থেকে ছোট থেকে স্কোয়ার ( b) তৈরি করে শুরু করি। তারপরে আপনি b*bইনপুট থেকে বিয়োগ করতে পারেন এবং এর দ্বারা বিভাজ্যতা পরীক্ষা করতে পারেন acবিজোড় / সমান পরীক্ষা করার জন্য কেবল সেখানেই রয়েছে, এটিকে কোনও মাইন্ড দিবেন না> _>

Whitespaced:

boolean t(long n){
    long a=1,b=1,c=0;
    for(;a<n/10;b=b*b<=n/10?b*10+1:b,c^=1)
        a=a*10+1;
    return(n-b*b)%a<1&c<1;
}

পুরানো পদ্ধতি, 119 বাইট

boolean g(char[]a){int i=1,l=a.length,b=1,d;for(;i<l;b*=i++>l/2?d==-1?1:0:d==1?1:0)d=a[i]-a[i-1];return b>0?l%2>0:0>1;}

অ্যারের মধ্য দিয়ে যায়, প্রতিটি অঙ্কের মধ্যে 1 (বা -1, যা অর্ধের উপর নির্ভর করে) এর পার্থক্য পরীক্ষা করে। তারপরে দৈর্ঘ্যটি বিজোড় হয় তা পরীক্ষা করে দেখুন।

Whitespaced:

boolean g(char[]a){
    int i=1,l=a.length,b=1,d;
    for(;i<l;b*=i++>l/2?d==-1?1:0:d==1?1:0)
        d=a[i]-a[i-1];
    return b>0?l%2>0:0>1;
}

প্রথমটি শেষের মতো একই কিনা তা দেখতে আপনার চেক করা দরকার কেন?
নাথান মেরিল

3
আপনি কী বলতে চাইছেন তা আমার কোনও ধারণা নেই> _>
জিওবিটস

সমস্যাটি বিবেচনা করে কী এটি একটি বৈধ উত্তর নির্দিষ্ট করে যে ফাংশনটি অবশ্যই ইতিবাচক পূর্ণসংখ্যা গ্রহণ করবে? অবশ্যই একটি চর অ্যারে একটি ধনাত্মক পূর্ণসংখ্যার প্রতিনিধিত্ব করতে পারে, তবে আমি মনে করি এটি একটি গুরুত্বপূর্ণ পার্থক্য।
হাইপিনো

1
@ হাইপিনো সমস্যাটি বলে যে ইনপুটটিকে স্ট্রিং বা পূর্ণসংখ্যার হিসাবে নেওয়া যেতে পারে এবং এখানে char[] স্ট্রিং হিসাবে গণনা করা যায়, তাই আমি বলব এটি বৈধ।
জিওবিটস

@ জিওবিটস আহ আমি সেই অংশটিকে মিস করেছি যেখানে এটি বলেছিল যে এটি স্ট্রিং হিসাবে নেওয়া যেতে পারে।
হাইপিনো

6

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

Truthy হয় 1 , falsy হয় 0

9LŒ€ûJ¹å

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


আমি মনে করি এটি 2ä¬û¹Qকাজ করবে এবং দুটি বাইট সংরক্ষণ করবে।
ব্যবহারযোগ্য

@ সম্ভাব্য 12521 একটি গিজা সংখ্যা নয়, এটি মাঝারি উপাদানটির জন্য ব্যর্থ।
ম্যাজিক অক্টোপাস উরন

আমি এখন বুঝতে পারি যে আমি তৃতীয় পয়েন্টটি (পরপর সংখ্যাগুলি) এড়িয়ে গেছি। কিছু মনে করো না!
ওবলযোগ্য

আহ্ ... আমি উপসর্গগুলি ব্যবহার করছিলাম, আমি ভবিষ্যতের প্রচেষ্টার জন্য সাবস্ট্রিংগুলি রাখব, ঝরঝরে সামান্য হ্যাক।
ম্যাজিক অক্টোপাস উরন

6

পাইথন 2, 77, 76, 64 , 63 বাইট

f=lambda s:2>len(s)or(s[0]==s[-1]==`int(s[1])-1`and f(s[1:-1]))

একটি সাধারণ পুনরাবৃত্তি সমাধান। প্রথম এবং শেষ সংখ্যাগুলি একে অপরের সমান এবং দ্বিতীয় অঙ্কের বিয়োগফল এক কিনা তা পরীক্ষা করে দেখুন। তারপরে পরীক্ষা করুন যে মাঝখানেটিও একটি গিজা নম্বর। এটি একবারে এক অঙ্কে নেমে গেলে সত্যটি প্রত্যাবর্তন করে।

একটি বাইট @ রডকে ধন্যবাদ রক্ষা করেছে, একটি টন বাইট ডিএলকস এবং ইটিএইচ প্রডাকশনকে ধন্যবাদ!


আপনি অদলবদল করতে পারেন len(s)==1সঙ্গে 1==len(s)স্থান সংরক্ষণ 1 বাইট, এছাড়াও, ands এর সাথে প্রতিস্থাপিত হতে পারে *3 বাইট সংরক্ষণ করতে
ডান্ডা

কেবল রডের মন্তব্যে যুক্ত করতে: 1orকাজ করেও। (যতক্ষণ না এটি 0পূর্ববর্তী নয় - oততক্ষণ পাইথন মনে করে এটি একটি
অষ্টাল

1
আপনি সাধারণত প্রতিস্থাপন করতে পারবেন না andসঙ্গে *, যখন স্বল্প-পরিক্রমার আচরণ প্রয়োজন বোধ করা হয় যেমন একটি recursive ফাংশন আছে। প্রথমটি andপ্রতিস্থাপনযোগ্য হওয়া উচিত তবে এর জন্য দুটি সেট বন্ধনী প্রয়োজন যা কোনও সঞ্চয়কে অবহেলা করে। (সিসি: @ রড)
ডিএলসক

1
আমি বেশি পাইথন জানি না, তবে আপনি কি 1) এর int()কাছাকাছি সরিয়ে ফেলতে পারেন s[0]বা 2) ব্যবহার করতে পারেন s[0]==`int(s[1])-1` ?
ইটিএইচ প্রডাকশন

1
@ ইথ প্রডাকশন পরামর্শের উপর বিল্ডিং: s[-1]==s[0]==`int(s[1])-1`(বিশেষত পাইথন 2 প্রয়োজন)।
DLosc

6

পাওয়ারশেল ভি 3 +, 147 108 67 বাইট

$args[0]-in(1..9+(1..8|%{$i=$_;++$_..9|%{-join($i..$_+--$_..$i)}}))

মূলত পরিবর্তিত পদ্ধতির। সব সম্ভব গিজা সংখ্যা, এবং তারপর চেক উত্পন্ন কিনা ইনপুট $args[0]হয় -inযে সংগ্রহ। নীচে কীভাবে গিজা সংখ্যা সংগ্রহ করা হয় তা:

1..9+(1..8|%{$i=$_;++$_..9|%{-join($i..$_+--$_..$i)}})
      1..8|%{                                       }  # Loop from 1 up to 8
             $i=$_;                                    # Set $i to the current number
                   ++$_..9|%{                      }   # Loop from one higher up to 9
                                   $i..$_+--$_..$i     # Build two ranges and concatenate
                                                       # E.g., 2..5 + 4..2
                             -join(               )    # Join into a single string
1..9+(                                               ) # Array concatenate with 1 to 9

উদাহরণ রান:

PS C:\Tools\Scripts\golfing> 12321,5678765,121,4,123321,1232,5678,13631|%{"$_ --> "+(.\giza-numbers.ps1 "$_")}
12321 --> True
5678765 --> True
121 --> True
4 --> True
123321 --> False
1232 --> False
5678 --> False
13631 --> False

108 -> 67 ... দেখে মনে হচ্ছে আপনি এবার জিতলেন (এবং সম্ভবত বেশিরভাগ সময়): পি
ইয়ডল

5

পাইথন 3, 65 বাইট

lambda x:len(x)<18and x[:len(x)//2+1]in'0123456789'and x[::-1]==x

আমি পুরোপুরি নিশ্চিত নই, তবে আমি মনে করি এটি কাজ করে।


1
কোনও গিজা নম্বর নেই যা দিয়ে শুরু হয় 0, আপনি এটি সরাতে পারেন :) এছাড়াও 17 এর চেয়ে বেশি কোনও সংখ্যা থাকবে না যা এই শর্তটি পূরণ করে যাতে আপনারও এটির প্রয়োজন হয় না। ডেনিসের মূলত এটি একই সমাধান :)
কেড

@ শেবাং তবে এটি পোস্ট করা হয়েছিল সবার আগে ...
রড

@ রড আমি দাবি করছিলাম না তিনি অনুলিপি করেছেন বা কিছু করেছেন :)
কেড

@ শেবাং নয় আমিই সি:
রড

5

পাইথন 2, 68 73 66 বাইট

lambda n:n==`int('1'+len(n)/2%9*'1')**2+int(len(n)*`int(n[0])-1`)`

সত্য যে অপব্যবহারের 11^2=121, 111^2=12321এবং তাই, আমি এই নিরূপণ যোগ 1111..হিসাবে অফসেট যথেষ্ট বার।
উদাহরণ:
23432=111^2+11111*1
676=11^2+111*5


যেহেতু আপনি কল করছেন না f, আপনার এটির নাম দেওয়ার দরকার নেই। আপনি অপসারণ করে দুটি বাইট সংরক্ষণ করতে পারেনf=
ডিজেএমসিএমহেম

আপনার এটির উপর একটি ক্যাপ সেট করা উচিত। ইনপুট 1234567900987654321সত্য ফিরে আসে, যখন এটি মিথ্যা হওয়া উচিত।
জিওবিটস

@ জিওবিটস আওপস, স্থির (আমার ধারণা?)
রড

4

পার্ল, 41 বাইট

40 বাইট কোড + -pপতাকা।

s/(.)(?=(.))/$1-$2/ge;$_=/^(-1(?1)1|).$/

আউটপুট 1 যদি ইনপুটটি গিজা নম্বর হয়, অন্যথায় কিছুই নয়। এটি চালানোর জন্য চূড়ান্ত নিউলাইন ছাড়াই ইনপুট সরবরাহ করুন:

echo -n '123456787654321' | perl -pe 's/(.)(?=(.))/$1-$2/ge;$_=/^(-1(?1)1|).$/'

ব্যাখ্যা : প্রথমে, s/(.)(?=(.))/$1-$2/geপ্রতিটি অঙ্ক $1(এরপরে $2) প্রতিস্থাপন করুন $1-$2। যদি এটি একটি গিজা নম্বর হয়, তবে প্রতিটি অঙ্ক শুরুতে পরবর্তীগুলির চেয়ে একের কম এবং শেষের দিকে আরও একটি হয়, তবে স্ট্রিংটি কেবলমাত্র -1প্রথম অংশে এবং 1দ্বিতীয়টিতে থাকতে হবে (শেষটি অপরিবর্তিত রেখে দেওয়া ব্যতীত) । এটিই দ্বিতীয় অংশটি /^(-1(?1)1|).$/যাচাই করে: একটি এর -1পরে পুনরাবৃত্তি অনুসরণ করে 1

-১ বাইট ধন্যবাদ মার্টিন ইন্ডারকে।


আমার পূর্ববর্তী সংস্করণটি 15 বাইট বেশি লম্বা (বেশ আলাদা তাই আমি এটি এখানে দেব):

echo -n '123456787654321' | perl -F -pe '$\=$_ eq reverse;$\&=$F[$_-1]+1==$F[$_]for 1..@F/2}{'

এর একমাত্র অংশটি আমি বুঝতে পারি না |দ্বিতীয় রেজেেক্সের উদ্দেশ্য ।
গ্যাব্রিয়েল বেনামি

@ গ্যাব্রিয়েল বেনামি এটি পুনরাবৃত্ত ব্লকের বেস কেস (যেমন এটি কোনও কিছুর সাথে মেলে না এবং পুনরাবৃত্তি থামিয়ে দেয়)।
দাদা

3

> <> FISH 57 52 49 48 বাইট

i:1+?!vi00.;n1<
%?v0n;>~l:1-?!^2
{:<11 ^?:=@:$+=

1 সম্পাদনা করুন: = 0 বা 1 প্রদান করে যদি সত্য হয় তবে একটি চেক মুছে ফেলা হয় এবং এই মানটিকে বৃদ্ধি হিসাবে ব্যবহার করা হয়, তবে এটি যাইহোক পরে সমতা পরীক্ষা করে। (6 টি বাইট সংরক্ষণ করা হয়েছে, নতুন লাইনের জন্য 1 টি হারিয়েছে)

সম্পাদনা 2: 3 দিকনির্দেশক চিহ্নিতকারীগুলি মুছে ফেলা হয়েছে এবং 11 টি ফাঁক করে রাখা হয়েছে মিথ্যা বল প্রয়োগ করার জন্য স্ট্যাকটিকে একটি দৈর্ঘ্যে অফসেট করতে (3 বাইট সংরক্ষণ করা হয়েছে),

সম্পাদনা 3: এমওডিকে 2 এবং লেন (1) দ্বারা পরীক্ষা করার জন্য স্ট্যাকের দৈর্ঘ্যের সদৃশ করুন, এর আগে দু'বার দৈর্ঘ্য রেখে এই কাজ করা হয়েছিল তবে এটি এখন লাইনের 2 (1 বাইট সংরক্ষণিত) ফাঁকা স্থান পূরণ করেছে।


3

সি #, 120 86 108 102 92 বাইট

x=I=>{var Z=I.Length;return Z<2?1>0:I[0]==I[Z-1]&I[1]-0==I[0]+1?x(I.Substring(1,Z-2)):0>1;};

কিছু পরীক্ষার মামলা সহ সম্পূর্ণ প্রোগ্রাম:

class a
{
    static void Main()
    {
        Func<string, bool> x = null;

        x = I=>
        {
            var Z=I.Length;
            return Z==1?                           // length == 1?
                     1>0:                          // return true (middle of #)
                     I[0]==I[Z-1]&I[1]-0==I[0]+1?  // else start == end and the next number is 1 above the current?
                       x(I.Substring(1,Z-2)):      // recursive call on middle
                       0>1;                        // else false
        };

        Console.WriteLine("1 -> " + (x("1") == true));
        Console.WriteLine("9 -> " + (x("9") == true));
        Console.WriteLine("121 -> " + (x("121") == true));
        Console.WriteLine("12321 -> " + (x("12321") == true));
        Console.WriteLine("4567654 -> " + (x("4567654") == true));
        Console.WriteLine("12345678987654321 -> " + (x("12345678987654321") == true));
        Console.WriteLine("12 -> " + (x("12") == false));
        Console.WriteLine("1221 -> " + (x("1221") == false));
        Console.WriteLine("16436346 -> " + (x("16436346") == false));
        Console.WriteLine("123321 -> " + (x("123321") == false));
        Console.WriteLine("3454321 -> " + (x("3454321") == false));
        Console.WriteLine("13631 -> " + (x("13631") == false));
        Console.WriteLine("191 -> " + (x("13631") == false));
        Console.Read(); // For Visual Studio
    }
}

একক লাইনের শর্তসাপেক্ষের জন্য হুরয়, এখন জাভা উত্তরটি মারধর করুন :)! আমার প্রথম ব্যাখ্যামূলক মন্তব্য লিখতেও পেল, যদিও এটি সম্ভবত স্ব-বর্ণনামূলক। আমার অ্যালগরিদম নিয়ে সমস্যা খুঁজে পাওয়ার জন্য @ দাদাকে ধন্যবাদ (13631 এর মতো মিরর করা সংখ্যার ক্ষেত্রে এটি সত্য)। আপাতত 100 টি যেহেতু আপাতদৃষ্টিতে% 2 দৈর্ঘ্যের জন্য পরীক্ষা করা নিরর্থক।


1
এই trueমত সংখ্যার জন্য ফিরে না 13631? এছাড়াও যেহেতু আপনি পুনরাবৃত্তি কল করেন x, তাই আমার মনে x=হয় আপনার বাইট গণনায় অন্তর্ভুক্ত করা দরকার ।
দাদা

@ দাদা হাহ ভাল কথা, আমি জানতাম যে আমি কিছু মিস করছি ... এবং ঠিক আছে, আমি এগুলি গণনায় যুক্ত করব।
Yodle

দাঁড়াও, এখন কি মারছ? ;)
জিওবিটস

@ জিওবিটস দঙ্গিত! আমি আগামীকাল কী করতে পারি তা দেখতে পাচ্ছি: পি
ইয়ডল

3

বাশ, 111 বাইট

হালনাগাদ

নোট করুন যে ইনপুট নম্বরটির সাধারণীকরণ সম্ভবত পুরোপুরি এড়িয়ে যেতে পারে, যদি আপনি কেবল নিজের উত্পন্ন GIZA নম্বরটিতে প্রথম অঙ্কটি যুক্ত করেন তবে :

01210 + 6 => 67876

এবং তারপরে সরাসরি এটি সরাসরি ইনপুটটির সাথে তুলনা করুন।

দাবি অস্বীকার: এটি সত্যই অনুকূলিত নয়, সুতরাং এটি প্রকৃত প্রতিযোগীর চেয়ে ধারণার প্রমাণ

Golfed

G() { I=`sed "s/./\0-${1::1}\n/g"<<<$1|bc`;Z=`seq 0 $((${#1}/2))`;A=`rev <<<$Z`;cmp -s <(echo $I) <<<$Z${A:1}

অ্যালগরিদম

যে কোনও জিআইজিএ নম্বরটি প্রথমে বাকীটি থেকে তার প্রথম সংখ্যাটি বিয়োগ করে তার প্রমিত আকারে স্বাভাবিক করা যায়:

67876 - 6 => 01210
78987 - 7 => 01210

এবং নির্দিষ্ট দৈর্ঘ্যের একমাত্র প্রৌ can় GIZA সংখ্যা রয়েছে।

এটি জানতে পেরে আমরা সহজেই ইনপুট নম্বর দৈর্ঘ্যের উপর ভিত্তি করে একটি ক্যানোনিকাল জিআইজিএ নম্বর উত্পন্ন করতে পারি :

 Z=`seq 0 $((${#1}/2))`;A=`rev <<<$Z` => $Z${A:1}

তারপরে ইনপুট নম্বরটি স্বাভাবিক করুন:

 I=`sed "s/./\0-${1::1}\n/g"<<<$1|bc`

এবং তুলনা

 cmp -s <(echo $I) <<<$Z${A:1};

পরীক্ষা

for i in `seq 0 1000`; do G $i && echo $i; done

0
1
2
3
4
5
6
7
8
9    
121
232
343
454
565
676
787
898

...

G 12345678987654321 && echo "OK" || echo FALSE     
OK

G 123456789987654321 && echo "OK" || echo FALSE
FALSE

আমি আশা করি আপনি কিছু মনে করবেন না, আমি আমার উত্তরে এই অ্যালগরিদমের একটি অংশ প্রয়োগ করেছি :)
ফ্লিপট্যাক

1

আসলে , 22 বাইট

9uR;∙`xR;RdX+εj`M;░#íu

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

উদ্ধৃত স্ট্রিং হিসাবে ইনপুট নেয় (যেমন "12321")। আউটপুট সত্য এবং 0মিথ্যা জন্য ধনাত্মক পূর্ণসংখ্যা ।

ব্যাখ্যা:

9uR;∙`xR;RdX+εj`M;░#íu
9uR;∙                   cartesian product of [1,2,3,4,5,6,7,8,9,10] with itself
     `xR;RdX+εj`M       for each pair:
      x                   construct the half-open (end-exclusive) range ([1, 5] -> [1, 2, 3, 4])
       R                  reverse
        ;RdX+             duplicate, reverse, remove first element, prepend ([1, 2, 3, 4] -> [1, 2, 3, 4, 3, 2, 1])
             εj           concatenate into a string
                 ;░     filter out empty strings
                   #íu  test for membership

1

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

(`elem`[[j..pred i]++[i,pred i..j]|i<-['1'..'9'],j<-['1'..i]])

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

সমস্ত গিজা নম্বরগুলির একটি তালিকা তৈরি করে যদি এটিতে নম্বরটি থাকে। তালিকাটি লুপিংয়ের iমাধ্যমে '1'..'9'এবং তারপরে উপাদানগুলির jমাধ্যমে '1'..iতৈরি করা হয় j .. i-1 , i , i-1 .. j


1

> <> , 62 বাইট

i:0(   ?v
v!1&!~{!<:=$:@&-1=+2=*>l!-3!1(!:?
>l!;2!n=!0?!<-1=n;

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

গিজা সংখ্যাটির জন্য আউটপুট 1; 0 অন্যথায়। ইনপুটটিকে একটি ডেকিউতে চাপিয়ে দিয়ে কাজ করে (ঠিক আছে, প্রযুক্তিগতভাবে একটি বিপরীতমুখী স্ট্যাক) এবং বারবার উভয়ের সমতার জন্য উভয় প্রান্তের পরীক্ষা করে, পাশাপাশি এটি পূর্বের মানের তুলনায় একেবারে বড় কিনা তা নিশ্চিত করে।


1

সিজেম , 20 19 বাইট

l_$_W=),\ci>_W<W%+=

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

ব্যাখ্যা

মূল ধারণাটি হ'ল ন্যূনতম এবং সর্বাধিক অঙ্ক সন্ধান করা, তারপরে সেগুলি থেকে একটি গিজা নম্বর তৈরি করুন এবং তারপরে পরীক্ষা করুন যে এটি ইনপুটটির সমতুল্য।

l       e# Read input.
_$      e# Get a sorted copy of the input.
_W=     e# Get its last character, i.e. the maximum digit M.
),      e# Get a string with all characters from the null byte up to M.
\c      e# Get the first character of the sorted string, i.e. the minimum
        e# character m.
i>      e# Convert to its character code and discard that many leading
        e# characters from the string we generated before. Now we've got
        e# a string with all digits from m to M, inclusive.
_W<W%+  e# Palindromise it, by appending a reversed copy without M.
=       e# Check that it's equal to the input.

সর্বনিম্ন অক্ষরের পরিবর্তে আমরা একই বাইট গণনার জন্য প্রথম অক্ষরটিও ব্যবহার করতে পারি:

l_:e>),1$ci>_W<W%+=

1

গণিত, 62 61 60 বাইট

@ মার্টিনইেন্ডারের কারণে 2 বাইট সংরক্ষণ করা হয়েছে ।

MatchQ[{a:1...,b___}/;{b}==-{a}]@*Differences@*IntegerDigits

কার্যাবলী রচনা। ইনপুট এবং রিটার্ন Trueবা Falseআউটপুট হিসাবে একটি সংখ্যা নেয় ।


1

রেটিনা, 55 54 36 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

.
$*1:
+`^(1+:)(1\1.*)\b\1$
$2
^1+:$

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

প্রতিটি অঙ্কটি আনলিতে রূপান্তর করুন, কলোন দ্বারা পৃথক করা। লুপ, পরের অঙ্কটি যদি আরও একটি হয় তবে ম্যাচের বাইরের অঙ্কগুলি সরিয়ে ফেলুন। একটি একক বাকি অঙ্কটি মেলে।


1
এটি গ্রহণ করে12312
মার্টিন ইন্ডার


1

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

for($t=$i=max(str_split($s=$argv[1]));$t!=$s&&--$i;)$t="$i$t$i";echo$i;

ইনপুট থেকে বৃহত্তম অঙ্ক নিয়ে আসে এবং নীচে গণনা করা হয়, ইনপুট এবং তুলনা স্ট্রিং সমান - বা $iহয় না হওয়া পর্যন্ত তুলনামূলক স্ট্রিংয়ে নতুন অঙ্ক যুক্ত করে 0

টিমি সংখ্যাটির জন্য সর্বনিম্ন অঙ্ক মুদ্রণ করে, 0অন্যথায়।


1

পুশি , 30 15 বাইট

আমি আজ সকালে ঘুম থেকে উঠেছি এবং বুঝতে পেরেছি যে আমার উত্তরটির অর্ধেক দৈর্ঘ্য আমি ...

s&K-kL2/OvhXwx#

(ভাষা পোস্টডেটস চ্যালেঞ্জ হিসাবে অ-প্রতিদ্বন্দ্বী)

ইনপুট কমান্ড লাইন দেওয়া হয়: $ pushy gizas.pshy 34565431সত্য এবং মিথ্যা জন্য আউটপুট 0। এখানে ভাঙ্গন:

s                  % Split the number into its individual digits
 &K-               % Subtract all digits by the last 
    kL2/  h        % Get the halved length of the stack (+1)
        Ov X       % In stack 2, generate range (0, halved length)
            w      % Mirror the range 
             x#    % Check stack equality and output

অ্যালগোরিদম বাশ উত্তরের দ্বারা অনুপ্রাণিত হয়েছিল: প্রথমে সংখ্যাটি স্বাভাবিক করুন, ( 45654 -> 01210), তারপরে একই দৈর্ঘ্যের নরমালাইজড গিজা সংখ্যা উত্পন্ন করুন (কেবল একটিই আছে), এবং তুলনা করুন।


ওল্ড সলিউশন

s&K-Y?kL2%?L2/:.;&OvhXx#i;;;0#

1

র‌্যাকেট 292 বাইট

(let*((s(number->string n))(sn string->number)(st string)(lr list-ref)(sl(string->list s))(g(λ(i)(-(sn(st(lr sl(add1 i))))
(sn(st(lr sl i)))))))(cond[(even?(string-length s))#f][(not(equal? s(list->string(reverse sl))))#f][(andmap identity
(for/list((i(floor(/(length sl)2))))(= 1(g i))))]))

Ungolfed:

(define(f n)
  (let* ((s (number->string n))
         (sn string->number)
         (st string)
         (lr list-ref)
         (sl (string->list s))
         (g (λ (i) (- (sn(st(lr sl (add1 i))))
                      (sn(st(lr sl i)))))))
    (cond
      [(even? (string-length s))
       #f]
      [(not(equal? s (list->string (reverse sl))))
       #f]
      [else
       (andmap identity
               (for/list ((i (floor(/(length sl)2))))
                 (= 1 (g i))))]
      )))

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

(f 12321) 
(f 123321)  ; only this should be false; 

(f 9)
(f 787)
(f 67876)
(f 4567654)
(f 123454321)
(f 12345654321)
(f 1234567654321)
(f 123456787654321)
(f 12345678987654321)

আউটপুট:

#t
#f
#t
#t
#t
#t
#t
#t
#t
#t
#t

1

জাভা 8, 162 + 19 বাইট

19 জন্য import java.util.*;

s->{List f=new ArrayList();for(int i=0;i<9;){String l=String.valueOf(++i);for(int j=i;j>0;){f.add(l);String k=String.valueOf(--j);l=k+l+k;}}return f.contains(s);}

অন্যান্য জাভা উত্তরের ভিন্ন পদ্ধতির জন্য, আমি চেষ্টা করতে এবং সমস্ত সম্ভাব্য টিমি সংখ্যা তৈরি করার পদ্ধতিটি ব্যবহার করতে এবং আমাদের স্ট্রিংটি তাদের মধ্যে অন্তর্ভুক্ত রয়েছে কিনা তা পরীক্ষা করে দেখতে চেয়েছিলাম।


1

অক্টাভা, 56 বাইট

@(n)nnz(n)<2||~(abs(diff(+n))-1)&&diff(+n(1:1+end/2))==1

সমস্ত পরীক্ষার কেসগুলি এখানে পরীক্ষা করে দেখুন ।

এটি এমএটিএলবিতে দুটি কম বাইট হবে, যেহেতু diff(n)স্ট্রিংয়ের জন্য কাজ করে। অক্টেভ, আপনি প্রয়োজন diff(+n)

ব্যাখ্যা:

@(n)                  % Anonymous function taking a string `n` as argument
    nnz(n)<2          % True if there is only one element in n
            ||        % Short circuit or operator. Expression will be true if this is true
~(abs(diff(+n))-1)    % Takes the absolute value of the difference between adjacent numbers
                      % which should always be 1. Subtracts 1, to get 0
                      % and negates it to get 1 (true)
diff(+n(1:1+end/2))==1   % Checks if the difference between the first half of the numbers
                         % is 1.
                      % If either the first, or both the second and third argument is true
                      % then the function will return 1, otherwise 0. 


1

জাভা 7, 129 119 109 বাইট

boolean e(char[]a){int l=a[0]-1,f=0,b=a.length-1;for(;f<b&&a[f]==++l&a[f++]==a[b--];);return f==b&l==a[b]-1;}

পুরাতন রিকার্সিভ পদ্ধতি, 119

boolean b(char[]a){int b=a.length;return b>1&&a[0]==a[b-1]&a[0]+1==a[1]?b(java.util.Arrays.copyOfRange(a,1,b-1)):b==1;}

জিওবিটসকে -10 বাইট ধন্যবাদ thanks আমরা হয় বাঁধা ছিল ...

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


আমি মনে করি আপনি 1 বাইটটি বিটওয়াইসের সাহায্যে সাশ্রয় করতে পারবেন and, আমার মনে হয় আপনি এটি একবার ব্যবহার করেছিলেন তবে অন্যবার করেন নি? বা আমি এটি ভুল পড়ছি।
Yodle

@ ইয়ডল আমি এটি একবার ব্যবহার করেছি কারণ প্রথম শর্তে আমার শর্ট সার্কিটের প্রয়োজন to
পোকে

1
দেখে মনে হচ্ছে আপনি একবার কেবল আমদানি ব্যবহার করছেন, তাই আপনার java.util.Arrays.copyOfRange(...)আমদানি লাইন এড়িয়ে ব্যবহার করে এটি ছোট করা উচিত to
জিওবিটস

@ জিওবিটস ভাল ক্যাচ ... আমি ডার্প
পোকে



0

পাইথন 2, 50 82 81 80 বাইট

def f(a):b=len(a)/2+1;print(1,0)[a[:b-1]!=a[b:][::-1]or a[:b]not in'123456789']

সহজ পদ্ধতির। কেবল স্ট্রিংটি অর্ধে বিভক্ত করুন (মাঝের চরিত্রটি বাদ দিলে বা মাঝের চরিত্রের পরে একটি যদি এটি দৈর্ঘ্যের হয় তবে) দ্বিতীয়ার্ধকে বিপরীত করে তারপরে দুটিটি তুলনা করে এবং প্রথম অর্ধেকে 1 থেকে 9 এর স্ট্রিংয়ের সাথে তুলনা করে।

সম্পাদন করা

সহযোগী গল্ফারদের কাছ থেকে গঠনমূলক প্রতিক্রিয়া এবং আমার ভুলগুলি উপলব্ধি করে ও সংশোধন করার পরে পোস্ট করা হয়েছে।

একটি (অপচয়) স্থান হারাতে জন্য -1

প্রশ্নটি আবার পড়ার জন্য এবং বুঝতে পেরে আমাদের 0 টি বিবেচনার দরকার নেই for কর্মক্ষেত্রে দীর্ঘ দিন পরে অবশ্যই গল্ফ করা বন্ধ করতে হবে।


1
সংখ্যাগুলি কঠোরভাবে একের দ্বারা বাড়ছে কিনা তা এটি পরীক্ষা করে না। উদাহরণস্বরূপ, 13531এবং 6543456উভয়ই ভুলভাবে সত্যকে প্রত্যাবর্তন করে।
ডিজেএমসিএমহেম

1
এছাড়াও, স্ট্রিং '0'এবং '1'উভয়ই সত্যবাদী।
ডেনিস

পুরোপুরি সঠিক. এটি একটি দীর্ঘ দিন ছিল. অবৈধ হিসাবে মুছে ফেলবে।
এলপেড্রো

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