Yatay bir ASCII evcil hayvan yılanı doğrulama


22

Son zamanlarda birkaç ASCII evcil hayvan yılanı mücadelesi yaşandı (örneğin, burada )

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

Bu zorluk rastgele oluşturulmuş bir yatay evcil hayvan yılanı almaktır (beş çizginin yüksekliği, 30'un uzunluğu) ve şunları doğrulayın:

  • Her sütunda yalnızca bir tane var 0
  • Her 0biri 0öncekine ve sonrasına "bağlanır" (yalnızca 0 veya 1 satırla dikey olarak aralıklı)

Nihai çıkış olabilir trueveya 1yılan geçerli olup, ya eğer falseya 0yılan geçersizse

Düzenleme Açıklayan

Girdiyi varsayalım:

  • Bir dizedir
  • Yalnızca '', '0' ve '\ n' içeriyor
  • Her satırda tam 30 karakter var
  • Tam olarak 5 satır var

Yani, yılanın bağlı olup olmadığını ve başıboş karakterler olmadığını doğrulayın. Yılanın basılı olduğu "kanvas" ı doğrulamanıza gerek yok.


4
Merhaba ve PPCG'ye hoş geldiniz :) Bu, ilk yazı için iyi bir mücadeledir, ancak muhtemelen istisnai yılanları yakalayan bazı test sınavları eklemek istersiniz. Ayrıca, yılanın sıfırlarla temsil edilip edilmemesi veya herhangi bir karakter olup olmadığına karar vermek isteyeceksiniz. Gelecekte, lütfen sanal alanı kullanmayı düşünün . İyi şanslar :)
FryAmTheEggman

5
Bu bir acı olarak mı alınır? Yoksa 2d dizisi olarak girilebilir mi?
JSchiff

6
Girişin 0 ve boşluktan oluştuğunu garanti ediyor muyuz? Her çizginin boyu 30'dur? 5 satır var mı?
xnor

9
Bu bir karar sorunu olduğu için truthy/falseydeğil true/falsemi?
Jonathan Allan,

3
@ JSchiff Eminim bir yılan Bytes?
MarioDS

Yanıtlar:


14

JavaScript (ES2018), 62 54 bayt

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

Giriş tek bir dizedir:

  • yeni hat takip etmeden
  • sadece '0' ve '\ n' boşluk içeren
  • Her satırda 30 karakter, 5 satır, toplamda 154 karakter

Bayrak s, herhangi bir noktayla eşleşen bir nokta anlamına gelir ('\ n' dahil). Bu özellik şu anda uyumlu bir tabloya dayanarak Chrome 63+, Opera 50+, Safari 11.1+ tarafından desteklenmektedir . Bu işlevi, desteklenen bu tarayıcılarla test edebilirsiniz. Tarayıcınız bu özelliği desteklemiyorsa, sayfayı yüklerken bir istisna göreceksiniz.

Nasıl çalışır:

  • No içermeyen sütun yok 0:
    • eşleşmiyor /( .{30}){4} /
  • 0Bir sütunda iki s yok :
    • eşleşmiyor /0.{30}(.{31})*0/
  • Hayır 0komşuları bağlanamaz:
    • eşleşmiyor /0.{60}(.{31})*0/,/0.{62}(.{31})*0/

Bütün bu regex birleştirmek ve sonunda bunu alacak.

Martin Ender sayesinde, tek bir !operatörün 8 bayt kurtarabileceğini belirtti.


8

SnakeEx , 51 bayt

Bu açıkça görevin görevi için doğru dil. : ^ D

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

Geçerli bir yılansa, tüm girişi eşleştirir; değilse eşleşemez. Burada dene!

açıklama

SnakeEx bir 2-B desen eşleştirme dilidir . Bir program, girdi eşleştirme karakterleri etrafında gezinen, yönleri değiştiren ve diğer yılanları yumurtlayan "yılanlar" için bir tanım listesinden oluşur. Programımızda iki yılan tanımlarız sve c.

Biz başlayacağız cdaha basit olduğu için. Tanımı, 0 *$eğer regex: eşleşirse 0, sıfır, ya da daha fazla boşluk, ardından ızgara kenarı izlerseniz, okunabilir olmalıdır . Burada ana yakalama: bu eşleşme herhangi bir yöne ilerleyebilir. Her sütunda cfazladan 0s olmadığını doğrulamak için yılandan yukarı ve aşağı doğru kullanacağız .

Şimdi ana yılan için s. Bu halini alır (...)%{30}kez her biri için - vasıta "parantez 30 kez içeriklerini eşleştirme", 0yılanda. Çok uzak çok iyi. Parantezin içine ne giriyor?

{c<L>}

Bu, yeni bir cyılan ortaya çıkardı , 90 derece sola döndü. Yön, syılanın yönüne göredir, bu nedenle yeni yılan, şebekenin üstüne doğru hareket eder (ana yılan sağa doğru hareket eder). cMevcut ızgara hücre, bir yılan kontrol 0yukarıda her hücrenin bir boşluk olduğu ve. Başarısız olursa, tüm maç başarısız olur. Eğer başarılı olursa, devam ediyoruz.

{c<R>}

aynı şeyi yapan, sadece sağa (ızgaraya doğru) döndü.

Bu yumurtların eşleştiricinin ana yılandaki konumunu etkilemediğine dikkat edin. Regex'te biraz görünüşlüler. (Belki burada onlara "bakıcılığımız" diyebiliriz?) Öyleyse, a'yı işaret ettiğimizi 0ve sütunun geri kalanında sadece boşluklar bulunduğunu doğruladıktan sonra , aslında 0:

0

Şimdi eşleşme işaretçisi, sağındaki karakterin üzerindedir 0. Üç farklı seçeneği kontrol etmemiz gerekiyor: yılan açıları aşağı, yılan açıları yukarı veya yılan düz gidiyor. Bunun için bir OR ifadesi kullanabiliriz:

[...]

Ameliyathanemizde üç olasılık var:

(<R> <L>)

Sağa dönün, bir boşluk eşleştirin ve tekrar sola dönün (yılan açıları aşağıya doğru).

(<L> <R>)

Sola dönün, bir boşluk eşleştirin ve tekrar sağa dönün (yılan açıları yukarı).

_?

Sıfır veya bir alt çizgi eşleştirin. Girişte alt çizgi olmadığından, bu her zaman boş bir eşleşme olur (yılan düz gider).

Yukarıdaki üç seçenekten birini eşleştirdikten sonra, eşleme işaretçisinin 0, parantez içindeki ifadeyi tekrar eşleştirmeye hazır olan sonraki sütunda göstermesi gerekir .


2

CJam , 35 34 bayt

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

Çevrimiçi deneyin! Giriş, dikdörtgen bir karakter dizisi dizisidir. Girişin yalnızca ve içerdiğini varsayar 0.

Açıklama:

{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

05AB1E , 18 bayt

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

Çevrimiçi deneyin!

açıklama

ζ                    # 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

Kabuğu , 12 bayt

Kural açıklamalarına bağlı olarak, 11 bayt veya 13 bayt olabilir .

±Λ=;1Ẋ×≈mηfT

Çevrimiçi deneyin!

Giriş, yalnızca boşluk ve 0 içeren satırların bir listesidir; Tek bir dizge gerekliyse, programa satırlara bölünecek şekilde hazırlanın. TIO bağlantısı bunu netlik için zaten yapıyor. Çıktı 0 veya 1; Herhangi bir sahte ve truthy değeri iyi ise, ±kaldırılabilir.

açıklama

±Λ=;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.

Buradaki fikir, ×≈(a) tüm sütunların tam olarak bir 0 içerdiğini ve (b) konumlarının en fazla bir farklılık gösterdiğini garanti etmek için kullanmaktır . Örnek olarak, 8 sütunluk girişi göz önünde bulundurun

0  0  0 
 000 0  
  00   0

İlk önce mηfTonu indeks listeleri listesine dönüştürür.

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

Sonra Ẋ×≈verir

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

Her biri 1en fazla 1 farklılık gösteren bir çift endekse 0karşılık gelir ve her biri olmayan bir çifte karşılık gelir. Her [1]iki listenin de bir dizini olduğunda ve endeksler en fazla 1 farklı olduğunda, her sonuç tam olarak eşittir .


2

Python 2 , 71 bayt

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

Çevrimiçi deneyin!

Girdiyi çok satırlı bir dize olarak alır. Bubbler'dan gelen olayı test eder .

İlk sütun olarak s[::31]ve ikinci sütun olarak ayıklanır ve s[1::31]geçerliliği denetlenir. sİlk karakteri kaldırır ve tekrarlayan sütun çiftlerinin kontrol edilmesine neden oluruz .

İki sütunun kontrolü, Python'un inçoklu kontrolleri birleştirmek için karşılaştırma zincirini kullanır :

  • '0'in s[::31] ilk sütunun en az bir tane olduğunu kontrol eder 0
  • s[::31]in' %s '%s[1::31]İlk sütun konumunu sağlayan iki yer arasında ikinci sütun sandviç bir alt olduğunu kontrol eder 0en fazla bir boşlukta kaymıştır
  • ' %s '%s[1::31]in'%6s'%0*2ikinci sütunun en fazla içerdiğini kontrol eder 0.

Son *f(s[1:])ayrıca özyinelemeli davayı doğru olmaya zorlar.


Şimdi düşünüyorum da, Python bu "yılan" zorlukları için harika bir dil. : P
MoustacheMeses

2

C (gcc) ,246 245 232 215 212 bayt

#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}

Çevrimiçi deneyin!

En sevdiğim dili buna götüreceğimi düşündüm (diğer birçok küçük girişimden görebildiğim halde, muhtemelen bu tür bir meydan okuma için ideal olmaktan uzak) ve yönetebildiğim C. Programın soruna yaklaşımı, sadece bir sürü bayt kuruş sıkıntısı çekerken nispeten basit; yılanı stdin'e götürür ve sonucunu main'in geri dönüş değeri olarak verir (böylece çıkış kodu;Problem 0'da istendiği gibi, garip bir çıkış kodu olsa bile geçersiz bir yılan ve 1 geçerli olduğunu gösterir.Çıkış kodları 0 için tipik olarak geçerli bir yılan ve 1 geçersiz bir yılandır). Makrolar genişletilmiş ve bazı güzel boşluklarla aşağıdakine benzer

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.
}

Girdi çizgileri ara belleğin ilk satırına okunur, sonraki beş satırda her geçerli satırdan sonra satırda hangi yerlerin (okunması gerekir?) Sıfıra sahip olması beklenir ve sonuncusu sıfırın zaten Herhangi bir sırada belirli bir sütunda okundu. Program sırayla her satırı işler.

Hiç de sağlam değil ( gets()yalnızca başlangıç) ve girdi tüm ilgili boşlukları (örneğin, bırakılan iz bırakmayan boşluk yok) içermelidir ve gcc dolaylı olarak bildirilmiş ve böylece bırakılan stdlib işlevselliği hakkında uyarılar ve notlar yaymaktadır, ancak C la vie.

Ayrıca, yılan kafasının orta sırada olması gerekmediğini ve geçerli bir yılanın her sırada en az bir sıfıra sahip olması gerektiğini varsayar (yani 5 giriş satırında tüm boşlukların sırası yoktur). İkinci en değil biraz daha kısa yapılabilir bir gereklilik ise - her şey ile ilgisi kve lprogramda dışarı kırpılmış veya bu durumda kodun daha az bayt ile değiştirilebilir.

User202729 için yaklaşık teşekkürler. 26 bayt kaydedildi.



Sen arasındaki boşluğu dışında kalan edebilir #define Fve )için -1 byte.
user202729

Ayrıca, giriş yalnızca \n(10), <space>(32) ve 0(48) değerlerine ==48sahip olduğundan >47(-1 bayt) kontrol edebilirsiniz . / Değişken global ise, ={0}başlatmayı ne zaman kaldırabilirsiniz b. Benzer şekilde kglobal ve (yerine) olan ibir (yazılmamış -> int) parametresi haline getirin . mainargc1
user202729

Teşekkür ederim! Son önerileri görmeden önce düzenlenmiş; Ben (onlara yolumu kene edeceğiz iolarak argcdahidir). Bunun ilk taslakları 400 bayttan fazladı; beni sadece 300 kişisel hedeflerime sürüklemek için yeterince uzun sürdü ve sonra 256'yı kaçırdım, bu yüzden onu kaçırmamın daha iyi yolları olabilir.
SevenStarConstellation 23:18

Yapmaya karar k, jve ltüm globaller ayrı olan tasarruf etmek intbeyanlarını zaman bana uzak tamamen türü kapalı bırakarak gitmesine izin istiyorum varsayılan gerçekleşmiştir. Tekrar teşekkürler!
SevenStarConstellation 23:18

1

MATL , 18 17 bayt

32>&fun30=wd|2<vA

Giriş 2B karakter dizisidir. Boşluksuz herhangi bir karakter yılan için kullanılabilir.

Çevrimiçi deneyin!

açıklama

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
Spesifikasyon, çizgi uzunluğunun 30 olması garanti edildiğini gösterir, bu yüzden birkaç tane tasarruf edebileceğinizi düşünüyorum.
Jonathan Allan,

@JonathanAllan Teşekkürler! un30=Tüm sütun endekslerinin farklı olduğunu ve 30 sütunun hiçbirinin boş olmadığını kontrol etmek için kullanıyorum . Belki bunu daha doğrudan test edebilirim, ama nasıl olduğunu göremiyorum
Luis Mendo


1

Jöle , 19 bayt

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

Çevrimiçi deneyin!

Bay Xcoder sayesinde -2 bayt

açıklama

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?

Giriş, dizelerin bir listesi gibidir


@ Mr. Xcoder Huh başarısız olur, Jelly string gösterimi lol. 1 bayt ungolfing tarafından düzeltildi
HyperNeutrino,

1

Jöle , ( 14x *) 13 bayt

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

Her biri 30 boşluk ve diğer karakterlerden oluşan (örneğin 0s) beş dizginin * listesini alan ve bir tamsayı döndüren (aksi takdirde 0 ise bir yılansa 1) bir monadik bağlantı

* Girdi, tek bir dize (karakter listesi) olmalıysa, o zaman satır beslemelerinde dizeyi bölmek için a hazırlayın .

Çevrimiçi deneyin!

Nasıl?

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}

Ah, tüm davaları denediğimi düşündüm, yardım için teşekkürler; daha sonra ele almak zorunda kalacak.
Jonathan Allan,

@ LouisMendo heh ve ben üç tasarruf kurtardı, bu yüzden tekrar teşekkürler!
Jonathan Allan,

... ama başka bir tane daha tanıttım. Başka bir 3 için düzeltildi :(
Jonathan Allan

Kötü bir byte-count değil :-)
Luis Mendo

1

Stax , 20 bayt CP437

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

Paketten çıkarıldığında 24 byte,

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

Çevrimiçi çalıştırın ve hata ayıklayın!

En iyi golf oyunu olmayabilir, ancak yöntemin yeni ve ilginç olduğunu düşünüyorum.

açıklama

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

J , 38, 37 30 bayt

FrownyFrog sayesinde -8 bayt

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

Çevrimiçi deneyin!


1
Peki [:(-:*)2-/\bütün farklılıklar -1, 0 veya 1. olup olmadığını kontrol
FrownyFrog

@ FrownyFrog Evet, çok daha iyi! Teşekkür ederim!
Galen Ivanov

@ FrownyFrog Hmm, bunun farkında değildim. Tamir etmeye çalışacağım. Bunu gösterdiğin için teşekkürler.
Galen Ivanov

1
[:(#@{.=[:(-:*)2-/\])@:I.'0'=|:
FrownyFrog

1
Oh, bu da işe yarıyor[:($e.~[:(-:*)2-/\])@:I.'0'=|:
FrownyFrog

1

Jöle , 16 bayt

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

Çevrimiçi deneyin!

Giriş dizesinin her zaman yalnızca boşluk ve sıfır içereceğini varsayar. Dizelerin bir listesi olarak girdi alır (her biri bir çizgiyi temsil eder) ve aksi takdirde 0 ise truthy, 1 olarak çıkar .

açıklama

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

Python 2,141 bayt

lambda g:(lambda a:all(map(len,a)+[-2<x-y<2 for b in[sum(a,[])]for x,y in zip(b,b[1:])]))([[i for i in range(5)if"0"==r[i]]for r in zip(*g)])

Çevrimiçi deneyin!

Giriş bir karakter ızgarasıdır.


0

Python 2 ve Python 3 , 122 120 119 bayt

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]

Çevrimiçi deneyin!

Giriş biçimi, bir uzunluk 154 dizesidir (5 x 30 karakter, 4 yeni satır):

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

Baş orta sıra olmak zorunda değilse

Orta sıradaki gereksinim orijinal zorluktu, ancak burada durum olmadığını gördüm (en azından açıkça bahsedilmedi).

Python 2 ve Python 3 , 124 123 bayt

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]

Çevrimiçi deneyin!


Düzenle:

  • Eşitleri değiştirerek 2 bayt azaltıldı (==Her kod için ) e eşitsizliğe .
  • Daha az kısıtlayıcı sürümde hatalar bulundu ve düzeltildi. (Neyse ki çok korkunç değil, bu yüzden tüm sürümleri aynı uzunlukta tutabiliyorum.) Son iki TIO bağlantısında ek test durumları görebilirsiniz.
  • Py2 çözümlerinde sarkan bir bayt bulundu, peki Py3'te all()anlamsız hale geldi, bu yüzden her iki sürümde de birleşti.

0

Excel (VBA), 68 bayt

Anlık pencereyi Cell[A6]çıktı olarak kullanmak .

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





0

Python 3 , 197 185 bayt

Komut isteminde yap verify.py<snake.txtveya bash yap cat snake.txt | python verify.py. Neredesnake.txtDoğrulamak için bir yılan içeren bir dosya .

Yılan doğruysa hiçbir şey çıkmaz. Doğru değilse, Python bir indeks hatası oluşturacaktır.

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

Oh, çıktımın doğru ya da yanlış olması gerektiğini fark etmedi. Döndürülen hata kodu sayılıyor mu?
MoustacheMeses

Golf 12 bayt.
MoustacheMeses
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.