অনুভূমিক ASCII পোষা সাপটি যাচাই করা হচ্ছে


22

সম্প্রতি বেশ কয়েকটি এএসসিআইআই পোষা সাপের চ্যালেঞ্জ হয়েছে (যেমন এখানে )

            0 0               
  0        0 0 000            
00 0     00       000 0      0
    000 0            0 0   00 
       0                000   

এই চ্যালেঞ্জটি এলোমেলোভাবে উত্পন্ন অনুভূমিক পোষা সাপ (পাঁচটি লাইনের উচ্চতা, 30 এর দৈর্ঘ্য) নেওয়া এবং যাচাই করা হ'ল:

  • প্রতিটি কলামে একটি মাত্র রয়েছে 0
  • প্রত্যেকটি 0তার 0আগে এবং পরে "সংযুক্ত" থাকে (কেবল 0 বা 1 লাইন দ্বারা উল্লম্বভাবে ব্যবধানযুক্ত)

ফাইনাল আউটপুট হতে পারে trueবা 1যদি সর্প বৈধ, বা falseবা 0সাপ অবৈধ তাহলে

সম্পাদনা করুন-ব্যাখ্যা

ইনপুট ধরে নিন:

  • একটি স্ট্রিং
  • কেবল '', '0' এবং '\ n' রয়েছে
  • প্রতিটি লাইন ঠিক 30 অক্ষর আছে
  • ঠিক 5 লাইন আছে

অর্থাৎ সাপটি সংযুক্ত রয়েছে কিনা তা যাচাই করুন এবং কোনও বিভ্রান্ত অক্ষর নেই। সাপটি যে "ক্যানভাস" মুদ্রিত হয়েছে তা বৈধ করার দরকার নেই।


4
হাই এবং পিপিজি-তে স্বাগতম: :) ​​এটি প্রথম পোস্টের জন্য একটি ভাল চ্যালেঞ্জ, তবে আপনি সম্ভবত ব্যতিক্রমী সাপগুলি ধরা এমন আরও কয়েকটি পরীক্ষার কেস যুক্ত করতে চান। আপনি সম্ভবত সিদ্ধান্ত নিতে চাইবেন যে সাপটি শূন্য দ্বারা প্রতিনিধিত্ব করতে হবে বা কোনও চরিত্র হতে পারে। ভবিষ্যতে, দয়া করে স্যান্ডবক্স ব্যবহার বিবেচনা করুন । শুভ কামনা :)
FryAmTheEggman

5
এটি স্টিং হিসাবে নেওয়া হয়? অথবা এটি 2 ডি অ্যারে হিসাবে ইনপুট হতে পারে?
জেএসিফ

6
আমরা কি গ্যারান্টিযুক্ত যে ইনপুটটি 0 এর এবং ফাঁকা স্থান নিয়ে গঠিত? প্রতিটি লাইনের দৈর্ঘ্য 30? যে 5 লাইন আছে?
xnor

9
যেহেতু এটি একটি সিদ্ধান্ত-সমস্যা হয় truthy/falseyতার চেয়ে বরং কীভাবে true/false?
জোনাথন অ্যালান

3
@ জেএসিফ আমি নিশ্চিত একটি সাপ বাইট?
মারিওডিএস

উত্তর:


14

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

s=>!/0(.{30}|.{60,62}(.{31})*)0|( .{30}){4} /s.test(s)

ইনপুটটি একটি একক স্ট্রিং:

  • নতুন লাইনের পিছনে ছাড়াই
  • কেবল স্থান '0' এবং '\ n' থাকতে পারে
  • প্রতিটি লাইন 30 টি অক্ষর, 5 লাইন, মোট 154 অক্ষর

পতাকা sমানে একটি বিন্দু মিলে যে কোনও কিছুই ('\ n' সহ)। এই বৈশিষ্ট্যটি বর্তমানে কমপ্যাট -টেবিলের উপর ভিত্তি করে ক্রোম 63+, অপেরা 50+, সাফারি 11.1+ দ্বারা সমর্থিত । আপনি এই সমর্থিত ব্রাউজারের সাথে এই ফাংশনটি পরীক্ষা করতে পারেন। পৃষ্ঠাটি লোড করার সময় আপনি একটি ব্যতিক্রম পাবেন যদি আপনার ব্রাউজারটি এই বৈশিষ্ট্যটি সমর্থন না করে।

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

  • নেই সহ কোনও কলাম নেই 0:
    • মিলছে না /( .{30}){4} /
  • কোনও 0কলামে দু'জন নেই :
    • মিলছে না /0.{30}(.{31})*0/
  • 0এর প্রতিবেশীদের সাথে কোনও সংযোগ নেই :
    • মেলে না /0.{60}(.{31})*0/,/0.{62}(.{31})*0/

এই সমস্ত রেজেক্সকে মার্জ করুন এবং অবশেষে আপনি এটি পেয়ে যাবেন।

মার্টিন ইন্ডারকে ধন্যবাদ জানিয়েছি যে একটি একক !অপারেটর 8 বাইট বাঁচাতে পারে।


8

স্নেকএক্স , 51 বাইট

এটি স্পষ্টতই কাজের জন্য সঠিক ভাষা। : ^ ডি

s:({c<L>}{c<R>}0[(<R> <L>)(<L> <R>)_?])%{30}
c:0 *$

এটি যদি একটি বৈধ সাপ হয় তবে পুরো ইনপুটটির সাথে মেলে; এটি না হলে মিলতে ব্যর্থ। এখানে চেষ্টা করুন!

ব্যাখ্যা

স্নেকএক্স একটি 2-ডি প্যাটার্ন মেলানো ভাষা । একটি প্রোগ্রাম "সাপ" এর সংজ্ঞাগুলির একটি তালিকা নিয়ে গঠিত যা ইনপুট মিলের অক্ষরগুলির চারদিকে ক্রল করে, দিকনির্দেশ পরিবর্তন করে এবং অন্যান্য সাপকে আটকায়। আমাদের প্রোগ্রামে আমরা দুটি সাপকে সংজ্ঞায়িত করি sএবং c

আমরা cএটি শুরু করব কারণ এটি সহজ। এর সংজ্ঞাটি হ'ল 0 *$, আপনি যদি রেজেক্স জেনে থাকেন তবে যথেষ্ট পঠনযোগ্য হওয়া উচিত: ম্যাচ 0, শূন্য বা তার বেশি স্পেসের পরে গ্রিডের প্রান্তটি অনুসরণ করুন। এখানে মূল ধরা: এই মিলটি যে কোনও দিকে এগিয়ে যেতে পারে। আমরা প্রতিটি কলামে cঅতিরিক্ত কোনও নেই তা যাচাই করতে, সাপ থেকে উপরের এবং নীচে উভয়ই ব্যবহার করব 0

এখন মূল সাপের জন্য s,। এটি ফর্মটি গ্রহণ করে (...)%{30}যার অর্থ "30 বার বার বন্ধনীগুলির বিষয়বস্তু মেলে" - 0সাপের প্রত্যেকটির জন্য একবার । এ পর্যন্ত সব ঠিকই. প্রথম বন্ধনীর ভিতরে কি যায়?

{c<L>}

এটি একটি নতুন cসাপ তৈরি করেছে, 90 ডিগ্রি বাম দিকে পরিণত হয়েছে। দিকটি sসাপের দিকের সাথে তুলনামূলক , সুতরাং নতুন সাপটি গ্রিডের শীর্ষ দিকে অগ্রসর হয় (মূল সাপটি ডানদিকে এগিয়ে চলেছে)। cসাপ চেক বর্তমান গ্রিড সেল একটি হল 0এবং এটা উপরে যে সেল একটি স্থান। এটি ব্যর্থ হলে পুরো ম্যাচ ব্যর্থ হয়। যদি এটি সফল হয় তবে আমরা চালিয়ে যাচ্ছি

{c<R>}

যা একই জিনিসটি করে, কেবল ডানদিকে ঘুরে (গ্রিডের নীচের দিকে)।

নোট করুন যে এই স্প্যানগুলি প্রধান সাপে ম্যাচের পয়েন্টারের অবস্থানকে প্রভাবিত করে না। তারা কিছুটা রেগেক্সে লুক হেডসের মতো। (সম্ভবত এখানে আমরা তাদের "লুক বাইসাইড" বলতে পারি?) সুতরাং আমরা একটিটিকে নির্দেশ করছি 0এবং বাকি কলামে কেবল ফাঁকা স্থান রয়েছে তা যাচাই করার পরে, আমাদের আসলে এটির সাথে মেলে নেওয়া দরকার 0:

0

এখন ম্যাচের পয়েন্টারটি ডানদিকে অক্ষরে রয়েছে 0। আমাদের তিনটি পৃথক বিকল্প পরীক্ষা করতে হবে: সাপটি নীচে কোণে, সাপটি কোণে বা সাপটি সোজা হয়ে যায়। এর জন্য, আমরা একটি ওআর এক্সপ্রেশন ব্যবহার করতে পারি:

[...]

আমাদের OR এর ভিতরে আমাদের তিনটি সম্ভাবনা রয়েছে:

(<R> <L>)

ডানদিকে ঘুরুন, একটি জায়গার সাথে মিল করুন এবং আবার বাম দিকে ঘুরুন (সাপের নীচে কোণে)।

(<L> <R>)

বাম দিকে ঘুরুন, একটি জায়গার সাথে মিল করুন এবং আবার ডানদিকে ঘুরুন (সাপের কোণগুলি উপরে)।

_?

ম্যাচ শূন্য বা একটি আন্ডারস্কোর। ইনপুটটিতে যেহেতু কোনও আন্ডারস্কোর নেই, তাই এটি সর্বদা একটি খালি ম্যাচ হবে (সাপ সোজা হয়ে যায়)।

উপরোক্ত তিনটি বিকল্পের মধ্যে একটির সাথে মিলে যাওয়ার পরে, ম্যাচ পয়েন্টারটি 0পরবর্তী কলামের দিকে ইশারা করা উচিত , আবার প্রথম বন্ধনী প্রকাশের সাথে মিল রাখতে প্রস্তুত।


2

সিজেম , 35 34 বাইট

{z_{'0e=1=}%:*\'0f#2ew::-[W0X]-!*}

এটি অনলাইন চেষ্টা করুন! ইনপুট হ'ল অক্ষরের অ্যারেগুলির একটি আয়তক্ষেত্রাকার অ্যারে। ধরে নিই ইনপুটটিতে কেবল এবং রয়েছে 0

ব্যাখ্যা:

{z_{'0e=1=}%:*\'0f#2ew::-[W0X]-!*}   Function taking a character matrix:
 z                                      Transpose.
   {      }%                            Consider whether each row
      e=                                  contains
        1=                                exactly one
    '0                                    of the character '0'.
            :*                            This must be true for every row.
                  #                     Next, find the position
               '0                         of the character '0'
                 f                        at every row
  _           \                           in the original input.
                       :-               Find the differences between
                      :                   each
                   2                      pair
                    ew                    of adjacent elements (in other words, compute
                                            the increments).
                                        For the snake to be valid, this array of increments
                                            must only contain {0, 1, -1}, so
                              -         Remove from this list
                         [   ]            the elements
                          W                 -1,
                           0                0,
                            X               and 1,
                               !          and then check whether the array is empty.
                                *       The previous code tested two different properties
                                          of the matrix; they both must be true for a
                                          valid snake.

2

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

ζDε0k}¥Ä2‹sεþg}ìPΘ

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

ব্যাখ্যা

ζ                    # transpose
 D                   # duplicate
  ε  }               # for each row in the first copy (column of input)
   0k                # get the index of the first 0
      ¥Ä             # calculate absolute delta's
        2‹           # check that each is less than 2
          sε  }      # for each row in the second copy (column of input)
            þg       # calculate the length of the string with non-digits removed
               ì     # concatenate the lists
                P    # calculate product
                 Θ   # truthify (turn false values to 0)

2

হুশ , 12 বাইট

নিয়মের স্পষ্টতার উপর নির্ভর করে 11 বাইট বা 13 বাইট হতে পারে ।

±Λ=;1Ẋ×≈mηfT

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

ইনপুট হল শূন্যস্থান এবং 0 টি সমেত লাইনগুলির একটি তালিকা; যদি কোনও একক স্ট্রিংয়ের প্রয়োজন হয় তবে লাইনে বিভক্ত হওয়ার জন্য প্রোগ্রামটিকে প্রিপেন্ড করুন । টিআইও লিঙ্কটি ইতিমধ্যে স্বচ্ছতার জন্য এটি করেছে। আউটপুট 0 বা 1; যদি কোনও মিথ্যাবাদী এবং সত্যবাদী মান ভাল হয় তবে ±তা সরানো যেতে পারে।

ব্যাখ্যা

±Λ=;1Ẋ×≈mηfT  Implicit input: a list of lines.
           T  Transpose into list of columns.
        m     For each column,
         ηf   get list of indices of truthy elements.
              In Husk, whitespace characters are falsy and other are truthy,
              so this gets us the indices of 0s on each column.
     Ẋ        For each adjacent pair of these index lists,
      ×       for all pairs drawn from the two lists,
       ≈      give 1 if they differ by at most 1, otherwise 0.
              For each adjacent pair, this produces a list of 1s and 0s.
 Λ            Do all of these lists
  =;1         equal [1]? Return either 0 or 30 (length of the outer list + 1).
±             Signum; convert to 0 or 1.

এই ধারণাটি ×≈গ্যারান্টি হিসাবে ব্যবহার করা হয় যে (ক) সমস্ত কলামগুলিতে অবশ্যই একটি 0 রয়েছে এবং (খ) তাদের অবস্থানগুলি সর্বাধিক একটির দ্বারা পৃথক। উদাহরণ হিসাবে, 8-কলামের ইনপুট বিবেচনা করুন

0  0  0 
 000 0  
  00   0

প্রথমে mηfTসূচক তালিকার তালিকায় এটি রূপান্তরিত করে

[[1],[2],[2,3],[1,2,3],[],[2],[1],[3]]

তারপরে Ẋ×≈দেয়

[[1],[1,1],[1,1,0,1,1,1],[],[],[1],[0]]

প্রত্যেকটি 1সূচকগুলির একটি জুটির সাথে মিল রাখে যা সর্বাধিক 1 দ্বারা পৃথক হয় এবং প্রতিটি 0মিল এমন একটি জুটির সাথে মিলিত হয় যা নয়। [1]উভয় তালিকার একটি সূচক থাকে তখন প্রতিটি ফলাফল সূক্ষ্মভাবে সমান হয় এবং সূচকগুলি সর্বাধিক 1 দ্বারা পৃথক হয়।


2

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

f=lambda s:s[1]<' 'or'0'in s[::31]in' %s '%s[1::31]in'%6s'%0*2*f(s[1:])

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

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

প্রথম কলামটি হিসাবে s[::31]এবং দ্বিতীয়টি হিসাবে বের করা হয় s[1::31]এবং সেগুলি বৈধতার জন্য পরীক্ষা করা হয়। আমরা sপ্রথম অক্ষরটি সরিয়ে ফেলার পুনরাবৃত্তি করি , যার ফলে ক্রমাগত জোড় কলামগুলি চেক করা যায়।

দুটি কলামের জন্য inচেক একাধিক চেক একত্রিত করার জন্য পাইথনের তুলনা শৃঙ্খলা ব্যবহার করে :

  • '0'in s[::31] প্রথম কলামে কমপক্ষে একটি রয়েছে তা পরীক্ষা করে 0
  • s[::31]in' %s '%s[1::31]প্রথম কলামটি দুটি কলামের মধ্যে দ্বিতীয় কলামের স্যান্ডউইচগুলির একটি স্ট্রিং যা এটি পরীক্ষা করে যে 0এটির অবস্থানটি সর্বাধিক এক জায়গায় স্থানান্তরিত হয়েছে তা নিশ্চিত করে
  • ' %s '%s[1::31]in'%6s'%0*2দ্বিতীয় কলামে সর্বাধিক একটি রয়েছে তা পরীক্ষা করে 0

শেষটি *f(s[1:])পুনরাবৃত্তির ঘটনাটিকে সত্য হতে বাধ্য করে।


এখন যখন আমি এটি সম্পর্কে চিন্তা করি, পাইথন এই "সাপ" চ্যালেঞ্জগুলির জন্য দুর্দান্ত ভাষা esome : পি
গোঁফ মুজ

2

সি (জিসিসি) ,246 245 232 215 212 বাইট

#define F)exit(1);
#define L for(i=l=0;i<30;i++)
#define X b[7][i]
char b[8][31];k,j,l;main(i){for(;j++<5;){gets(b);L{if(i[*b]>47){if(X++F memset(b[j+1]+i-1,l=1,3);}else if(!X&b[j][i]F}k+=!!l;}if(k<5 F L if(!X F}

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

ভেবেছি আমি আমার পছন্দের ভাষাটি এখানে নিয়ে যাব (যদিও আমি অন্যান্য অনেকগুলি, ছোট এন্ট্রিগুলির কাছ থেকে দেখতে পাচ্ছি এটি সম্ভবত এই ধরণের চ্যালেঞ্জের জন্য আদর্শ থেকে অনেক দূরে) এবং সি আমি কী পরিচালনা করতে পারতাম। সমস্যাটি সম্পর্কে প্রোগ্রামটির পদ্ধতির তুলনা তুলনামূলকভাবে সহজ, কেবলমাত্র প্রচুর বাইট পেনি-পিনচিংয়ের সাথে; এটি স্ট্ডিনে সাপটি নিয়ে যায় এবং এর ফলাফলটি মূলটির মান দেয় (এইভাবে প্রস্থান কোড;সমস্যা হিসাবে অনুরোধ 0 হিসাবে একটি অযৌক্তিক সাপ এবং 1 বৈধ ইঙ্গিত করে এমনকি একটি বহিরাগত কোড যা অদ্ভুতপ্রস্থান কোড 0 এর জন্য আদর্শ হিসাবে একটি বৈধ সাপ এবং 1 একটি অবৈধ সাপ)। ম্যাক্রোগুলি প্রসারিত এবং কিছু সুন্দর সাদা স্থান সহ এটি আরও নীচের মত দেখাচ্ছে:

char b[8][31];l,j,k;                           //Declares a buffer to work in, initialized all to 0; l j and k default to int and as globals are init to 0
main(i) {                                      //This is run no-args, so argc is 1 and the undeclared type defaults to int.
  for (; j++ < 5;) {                           //Iterating over each row, 1-indexed for convenience accessing the buffer
    gets(b);                                   //Reads into b[0] because of stack array decl layout
    for (i = l = 0; i < 30; i++) {             //j and l both init each time we begin this overall loop
      if (i[*b] > 47) {                        //Did we read a zero?
        if(b[7][i]++) exit(1);                 //If the snake already had a zero in this column, fail out
        memset(b[j+1] + i-1, l = 1, 3);        //Expect them on the next row in the columns left and right of this one (also set l)
      } else if (!b[7][i] & b[j][i]) exit(1);  //If we didn't read a zero, and we had reason to expect one this row, and there wasn't already a zero in this column, fail out
    }
    k+=!!l;                                    //Adds 1 to k iff l is nonzero 
  } if (k < 5) exit(1);                        //If less than 5 rows had zeroes in them, fail out
  for(i = l = 0 ; i < 30; i++) {               //l isn't relevant in this loop but saves some bytes when sharing a macro with the other horizontal loop
    if(!b[7][i]) exit(1);                      //If any columns didn't have zeroes, fail out
  }                                            //Else, snake is valid. main default returns 0.
}

বাফারের প্রথম সারিতে ইনপুট রেখাগুলি পড়া হয়, পরবর্তী পাঁচটি প্রতিটি বর্তমানের পরে সারিতে শূন্য রয়েছে এমন স্থানগুলি (পড়ুন: অবশ্যই) ট্র্যাকিংয়ের জন্য এবং শেষটি শূন্যটি ইতিমধ্যে রয়েছে কিনা তা ট্র্যাক করার জন্য যে কোনও সারিতে প্রদত্ত কলামে পড়েছি। প্রোগ্রামটি প্রতিটি সারি পরিবর্তে প্রক্রিয়া করে।

এটি gets()মোটেও দৃ not় নয় ( কেবলমাত্র শুরু) এবং ইনপুটটিতে অবশ্যই সমস্ত প্রাসঙ্গিক স্পেস থাকতে হবে (উদাহরণস্বরূপ কোনও বাম-অফ ট্রেইলিং হোয়াইটস্পেস নেই), এবং জিসিসি স্প্রেস এবং সতর্কতা এবং স্টাডলিব কার্যকারিতা সম্পর্কে নোটগুলি স্পষ্টভাবে ঘোষণা করা হয়েছে ইত্যাদি, তবে, সি La Vie.

এটি আরও ধরে নিয়েছে যে সাপের মাথাটি মাঝের সারিটিতে থাকা উচিত নয় এবং একটি বৈধ সাপের প্রতিটি সারিতে কমপক্ষে একটি শূন্য থাকতে হবে (অর্থাত্ 5 ইনপুট সারিগুলিতে সমস্ত জায়গার কোনও সারি নেই)। যদি পরবর্তী কোনও প্রয়োজন না হয় তবে এটি কিছুটা ছোট করা যেতে পারে - প্রোগ্রামের সাথে kএবং lপ্রোগ্রামে করা সমস্ত কিছুকে এই ক্ষেত্রে কোডের কম বাইটের সাহায্যে প্রতিস্থাপন বা প্রতিস্থাপন করা যেতে পারে।

প্রায় 202029 ব্যবহারকারীকে ধন্যবাদ। 26 বাইট সংরক্ষণ করা হয়েছে।



আপনি -1 বাইট #define Fএবং এর মধ্যবর্তী স্থানটি ছেড়ে দিতে পারেন )
ব্যবহারকারী 202729

এছাড়াও, কারণ ইনপুটটিতে কেবল \n(10), <space>(32) এবং 0(48) আপনি (-1 বাইট) ==48দিয়ে পরীক্ষা করতে পারেন >47। / ভেরিয়েবলটি বিশ্বব্যাপী ={0}হলে আপনি যখন আরম্ভ করতে পারেন তা সরিয়ে ফেলতে bপারেন। একইভাবে kগ্লোবাল এবং iএকটি (টাইপযুক্ত -> int) প্যারামিটার তৈরি করুন main( argcযার স্থানে 1)।
ব্যবহারকারী 202729

ধন্যবাদ! আমি পরবর্তী পরামর্শগুলি দেখার আগে সম্পাদিত; আমি তাদের মাধ্যমে আমার পথটি টিক দেব (এটি প্রতিভা iহিসাবে argc)। এর প্রথম খসড়াগুলি 400 বাইটেরও বেশি ছিল; আমাকে এটিকে 300 এবং তার পরে 256 এর ব্যক্তিগত লক্ষ্যগুলিতে টেনে আনতে যথেষ্ট দীর্ঘ সময় নিয়েছে তাই এটিকে পাতলা করার আরও অনেক উপায় থাকতে পারে যা আমি মিস করেছি।
সেভেনস্টারকনস্টলেশন

না করার সিদ্ধান্ত নিয়েছে k, jএবং lসব globals পৃথক থাকার উপর সংরক্ষণ করতে intঘোষণা, তারপর অক্ষমতা উপলব্ধি আমাকে সম্পূর্ণরূপে টাইপ বন্ধ রেখে দিয়ে পার পেতে দিন হবে। আবার ধন্যবাদ!
সেভেনস্টারকনস্টলেশন

1

এমএটিএল , 18 17 বাইট

32>&fun30=wd|2<vA

ইনপুট একটি 2 ডি চর অ্যারে। কোনও ফাঁকা স্থান অক্ষর সাপের জন্য ব্যবহার করা যেতে পারে।

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

ব্যাখ্যা

32>      % Implicit input. Transform non-space into 1, space into 0
&f       % Push vector of row indices and vector of column indices of nonzeros
u        % Unique: vector of deduplicated entries
n        % Length
30=      % Does it equal 30? (*)
w        % Swap. Moves vector of row indices to top
d|       % Absolute consecutive differences
2<       % Is each value less than 2? (**)
v        % Concatenate results (*) and (**) vertically
A        % All: true if all entries are nonzero. Implicit display

1
অনুমানটি বোঝায় যে লাইন দৈর্ঘ্য 30 হচ্ছে গ্যারান্টিযুক্ত, সুতরাং আমি মনে করি আপনি কয়েকটি সংরক্ষণ করতে পারবেন।
জোনাথন অ্যালান

@ জোনাথান অ্যালান ধন্যবাদ! আমি un30=সমস্ত কলাম সূচি পৃথক কিনা তা পরীক্ষা করতে ব্যবহার করছি এবং 30 টি কলামের কোনওটিই খালি নেই। সম্ভবত আমি এটি আরও সরাসরি পরীক্ষা করতে পারি, তবে আমি কীভাবে তা দেখতে পাচ্ছি না
লুইস মেন্ডো


1

জেলি , 19 বাইট

Zn⁶T€L€=1$$;FIỊ$$$Ạ

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

-২ বাইটস মিঃ এক্সকোডারকে ধন্যবাদ

ব্যাখ্যা

Zn⁶T€L€=1$$;FIỊ$$$Ạ  Main Link
Z                    Transpose the matrix of characters
                         (string -> list of chars in Jelly)
 n⁶                  != " " (vectorizing)
   T€                For each column, get (row) indices of snake parts
     L€=1$$          For each index list, is its length 1? (that is, exactly one snake part per column)
           ;     $   Append (helper part)
            FIỊ$$    helper part:
            F        flatten index list
             I       get increments/forward differences
              Ị      are the values insignificant? (|z| <= 1)
                  Ạ  Are these all true?

ইনপুট স্ট্রিংগুলির তালিকা হিসাবে


@ মিঃ এক্সকোডার হু ব্যর্থ, জেলি স্ট্রিং উপস্থাপনের বিষয়টি হ'ল। 1 বাইট খোলার মাধ্যমে স্থির
হাইপার নিউট্রিনো

1

জেলি , (14? *) 13 বাইট

Zn⁶T€z-IỊ0-¦Ȧ

একটি মোনাডিক লিঙ্ক পাঁচটি স্ট্রিং *, প্রতিটি দৈর্ঘ্যের 30 টির মধ্যে ফাঁকা স্থান এবং অন্য কোনও অক্ষর (যেমন 0গুলি) এর তালিকা তৈরি করে এবং একটি পূর্ণসংখ্যা ফেরত (1 নির্ধারিত হিসাবে একটি সাপ, 0 অন্যথায়)

* যদি ইনপুট অবশ্যই একটি একক স্ট্রিং (অক্ষরের তালিকা) হয় তবে লাইন ফিডগুলিতে স্ট্রিংকে বিভক্ত করতে প্রিপেন্ড করুন।

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

কিভাবে?

Zn⁶T€z-IỊ0-¦Ȧ - Link: list of lists of characters, Lines
Z             - transpose the lines -> columns
  ⁶           - literal space character
 n            - not equal? -> 0 where there were spaces and 1 where there were "0"s
   T€         - truthy indices for each -> e.g. [0,0,1,0,0] -> [3] or [0,1,1,0,0] -> [2,3]
              -                           note: [0,0,0,0,0] -> []
      -       - literal minus one
     z        - transpose with filler (-1) -> {valid: a single list of heights {top:1,...,bottom:5}
              -                              invalid: list of >1 lists, some of which contain -1
              -                                       ...OR an empty list (no 0s in the input at all)}
       I      - differences -> {up:-1; down:1; flat:0; invalid:-6,-5,...,-2,2,...4}
        Ị     - insignificant (abs(z)<=1) -? {up/down/flat:1; invalid:0}
           ¦  - sparse application///
         0    - ...action: literal zero
          -   - ...to indices: [-1] -> make penultimate list into a zero (when one exists)
            Ȧ - any & all -> when flattened:{empty or contains a 0:0; otherwise:1}

আহ ভেবেছিলাম আমি সমস্ত প্রান্তের মামলাগুলি চেষ্টা করেছি, মাথা উঁচু করার জন্য ধন্যবাদ; পরে সম্বোধন করতে হবে।
জোনাথন অ্যালান

@ লুইসমেন্দো হে এবং ঠিক করার সময় আমি তিনটি বাঁচিয়েছি, তাই আবারও ধন্যবাদ!
জোনাথন অ্যালান

... আহ, তবে আমি আরেকজনকে পরিচয় করিয়ে দিয়েছি। আরও 3 :( এর জন্য স্থির করা
জোনাথন অ্যালান

যদিও কোনও খারাপ বাইট-কাউন্ট নেই :-)
লুইস মেন্ডো

1

স্ট্যাক্স , 20 বাইট সিপি 437

Å┴m▐◘5)ît╢V¼≥+╝╜►º½ê

প্যাকেজযুক্ত যখন 24 বাইট,

LM{'0|Ic%vChm:-{Jh!f%29=

চালান এবং অনলাইন ডিবাগ!

সেরা গল্ফ হওয়া নাও হতে পারে তবে আমি মনে করি পদ্ধতিটি উপন্যাস এবং আকর্ষণীয়।

ব্যাখ্যা

LM                          Load the input string as a 2d array of characters, and transpose it

  {         m               Map array with block
   '0|I                     Get all indices of substring "0"
       c%vC                 Map to nothing if the indices are not unique
           h                Otherwise map to the unique index

             :-             Take pairwise difference

               {   f        Filter array with block
                Jh!         Only keep 0, 1 and -1

                    %29=    Check whether the final array has exactly 29 elements

1

জে , 38, 37 30 বাইট

-8 বাইট ধন্যবাদ ফ্রাউনফ্রোগের জন্য

[:($e.~[:(-:*)2-/\])@:I.'0'=|:

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


1
কীভাবে [:(-:*)2-/\, সমস্ত পার্থক্য −1, 0 বা 1 হয় কিনা তা পরীক্ষা করে দেখুন
কিনা তা যাচাই করুন ফ্রাউনফ্রগ

@ ফারাউনিফ্রোগ হ্যাঁ, এটি অনেকটা বেটার! ধন্যবাদ!
গ্যালেন ইভানভ

@ ফ্রাউনফ্র্যাগ হুম, আমি তা বুঝতে পারি নি। আমি এটি ঠিক করার চেষ্টা করব। এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ।
গ্যালেন ইভানভ

1
[:(#@{.=[:(-:*)2-/\])@:I.'0'=|:
ফ্রাউনফ্রোগ

1
ওহ, এটিও কাজ করে [:($e.~[:(-:*)2-/\])@:I.'0'=|:
ফ্রাউনফ্রগ

1

জেলি , 16 বাইট

Zµi€”0IỊ;ċ€⁶=4ƊẠ

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

ধরে নেওয়া হয় যে ইনপুট স্ট্রিংয়ে সর্বদা কেবলমাত্র ফাঁকা স্থান এবং জিরো থাকবে। স্ট্রিংগুলির তালিকা হিসাবে প্রতিটি ইনপুট নেয় (প্রতিটি লাইন উপস্থাপন করে), এবং সত্যবাদী হলে 1 আউটপুট দেয়, অন্যথায় 0 করে

ব্যাখ্যা

Zµi€”0IỊ;ċ€⁶=4ƊẠ | Monadic full program.
Z                | Transpose.
 µ               | Start a new monadic chain.
  i€”0           | Retrieve the first index of 0 in each column.
      IỊ         | Check whether their increments are insignificant (element-wise).
        ;     Ɗ  | Append the result of the following:
         ċ€⁶     | In each list of characters, count the occurrences of a space.
            =4   | Check whether they equal 4 (returns a boolean array).
               Ạ | All. Check whether all the elements are truthy.


0

পাইথন 2 এবং পাইথন 3 , 122 120 119 বাইট

lambda s:s.count('0')<31and all(s[i-31*(i>30):31*(i<124)-~i:31].strip(' ')for i,x in enumerate(s,1)if' '<x)and' '<s[62]

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

ইনপুট ফর্ম্যাটটি দৈর্ঘ্যের একটি স্ট্রিং 154 (5 x 30 অক্ষর, 4 টি নতুন লাইন):

'''
            0 0               
  0        0 0 000            
00 0     00       000 0      0
    000 0            0 0   00 
       0                000   '''[1:] # to exclude starting newline

যদি মাথাটি কেন্দ্রের সারি হতে না হয়

কেন্দ্র-সারি-মাথার প্রয়োজনীয়তা মূল চ্যালেঞ্জের মধ্যে ছিল, তবে আমি দেখতে পেয়েছি যে এটি এখানে ঘটেনি (কমপক্ষে এটি স্পষ্টভাবে উল্লেখ করা হয়নি)।

পাইথন 2 এবং পাইথন 3 , 124 123 বাইট

lambda s:s.count('0')<31and all(s[i-31*(i>30):31*(i<124)-~i:31].strip(' ')for i,x in enumerate(s,1)if' '<x)and'0'in s[::31]

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


সম্পাদনা:

  • ==প্রতিটি কোডের জন্য অসমতায় ( ) সমান ( ) পরিবর্তন করে 2 বাইট হ্রাস পেয়েছে ।
  • কম সীমাবদ্ধ সংস্করণে ভুলগুলি খুঁজে পেয়েছে এবং এটি সংশোধিত করেছে। (ভাগ্যক্রমে এটি খুব ভয়ঙ্কর নয়, সুতরাং আমি সমস্ত সংস্করণ দৈর্ঘ্যে একইরকম রাখতে পারতাম)) আপনি পরবর্তী দুটি টিআইও লিঙ্কগুলিতে অতিরিক্ত পরীক্ষার ক্ষেত্রে দেখতে পারেন।
  • পাই 2 সমাধানগুলিতে একটি ঝোলা বাইট পেয়েছে, পাইটিকে পাই 3-এ all()অর্থহীন তৈরি করেছে , তাই উভয় সংস্করণকে একত্রিত করা হয়েছে।

0

এক্সেল (ভিবিএ), 68 বাইট

অবিলম্বে উইন্ডোটি Cell[A6]আউটপুট হিসাবে ব্যবহার করা হচ্ছে ।

[A1:AD5]="=CHOOSE(ROUND(RAND()+1,),0,"""")":[A6]="=COUNT(A1:AD5)=30"




0

জাভাস্ক্রিপ্ট (নোড.জেএস) , 128 126 বাইট

ইনপুট স্পষ্টতার পরে উল্লেখ করা হয়েছে যে ইনপুটটি "স্ট্রিং"।

F=(a,l=29,r=0,t=/^( *)0 *$/.exec(a.split`
`.map(p=>p[l]).join``),q=t&&~t[1].length)=>q&&(s=q-(r=r||q))>-2&s<2?l?F(a,l-1,q):1:0

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


0

পাইথন 3 , 197 185 বাইট

কমান্ড প্রম্পট করুন verify.py<snake.txtবা বাশ করুন cat snake.txt | python verify.pysnake.txtযাচাই করার জন্য একটি ফাইল যেখানে একটি সাপ রয়েছে।

সাপ ঠিক থাকলে কিছুই আউটপুট হবে না। এটি সঠিক না হলে পাইথন একটি ত্রুটি উত্থাপন করবে।

import sys
s=sys.stdin.read().split("\n")
x=0
exec('t,y="",0\nwhile y<5:t+=s[y][x];y+=1\ns+=[t];x+=1;'*30)
s=list(map(lambda l:len(l.rstrip()),s))
while y<35:"ee"[abs(s[y]-s[y+1])];y+=2

ওহ, খেয়াল করেনি যে আমার ফলাফলটি সত্য বা মিথ্যা হতে হয়েছিল। ত্রুটি কোডটি কি গণনা ফিরিয়ে দেয়?
গোঁফ মোসেস

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