Bu ısırık benim miydi?


12

Dün, sandviçimi masanın üzerine bıraktım. Bugün kalktığımda bir ısırık vardı ... Benim mi? Hatırlayamıyorum ...

Sorun:

Sandviçin ve ısırık desenimin bir temsilini alın ve bana ısırığım olup olmadığını söyle.

Örnekler:

Örnek 1:

Benim ısırık desenim:

..
.

Sandviç:

#####
.####
..###

Çıktı:

truthy

Örnek 2:

Benim ısırık desenim:

..
..

Sandviç:

...##
..###
.####

Çıktı:

falsy

Örnek 3:

Doğru olarak sayılan en az 1 dönüş varsa, çıktı doğrudur.

Benim ısırık desenim:

.
 .
  .

Sandviç:

##.
#.#
.##

Çıktı:

İki olası rotasyon (kuzeydoğu veya güneybatı köşesinde ısırma).

truthy

Bazı geçerli ısırıklar:

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

Bazı geçersiz ısırıklar:

..

...
.

..
.
 .

Kurallar:

  • Isırık desen yönüm her zaman kuzeybatı köşesini ısırmak için olacak. Ve diğer köşeleri ısırmak için döndürülmelidir;

  • Sandviçte her zaman 1 ve sadece 1 lokma olacak;

  • Sandviçteki ısırık 4 köşeden herhangi birinde olabilir (buna göre döndürülür);

  • Isırık kalıpları her zaman ana diyagonal boyunca simetrik olacaktır;

  • Isırık desenleri her zaman en az 1 geniş ve boş olmayacaktır;

  • Sandviç her zaman ısırık desenimin genişliğine eşit veya daha büyük genişliğe ve yüksekliğe sahip bir dikdörtgen olacaktır;

  • Girişinizde, sandviçi ve ısırığı temsil etmek için 2 ayrı boşluk olmayan karakter seçebilirsiniz;

  • Isırık desenindeki boşluklar, ısırığımın sandviçin o kısmına dokunmadığı anlamına gelir.


Isırık şekli sandviçten daha büyük olabilir mi? Isırık şekli boş olabilir mi? Isırık şekli sandviçle aynı olabilir mi? yani .., ..?
TheLethalCoder

@TheLethalCoder kuralları ısırık deseninin her zaman sandviçe uyacağını söylüyor. minimum boyutu (1 genişlik) belirtmek için yeni bir kural ekleyeceğim
Felipe Nardi Batista

@TheLethalCoder ve evet, ısırık desen sandviç ile aynı olabilir
Felipe Nardi Batista

Yanıtlar:


2

Ruby , 103 bayt 101 bayt

->b,s{[a=s.map(&:reverse),s,s.reverse,a.reverse].any?{|t|b.zip(t).all?{|y,x|y==x.tr(?#,' ').rstrip}}}

Çevrimiçi deneyin!

Atamanın ilk kullanımına taşınarak 2 bayt kaydedildi. Görünüşe göre Ruby, dizi tanımındaki virgülleri ve eşzamanlı değişken atamasından ortaya çıkabilecek virgülleri karıştırmayacak kadar akıllıdır (en azından bu durumda: D)


2

Python 2 , 134 bayt

b,s=input()
a=[''.join(l[::-1])for l in s]
print any(b==[l.replace('#',' ').rstrip()for l in x][:len(b)]for x in(a,a[::-1],s[::-1],s))

Girdiyi iki dize listesi olarak alır (her satır için bir tane). Satırlarda sondaki boşluk olmadığını varsayar.

Çevrimiçi deneyin!

Örnekler:

Input: ['..','.'],['#####','.####','..###'] (example 1)
>True

Input: ['..','..'],['...##','..###','.####'] (example 2)
>False

Input: ['',' .'],['#####','#.###','#####'] (no bite in top row)
>True

1

Python 2,173 bayt

Çevrimiçi deneyin

S,b=input()
L=len
B=map(lambda x:[y<'.'and'#'or y for y in x]+['#']*(L(S[0])-L(x)),b+[[]]*(L(S)-L(b)))
R=map(lambda x:x[::-1],B)
print S==B or S==B[::-1]or S==R[::-1]or S==R

Girişi iki karakter listesi olarak alır.
Birinci - sandviç
İkinci - ısırık

İlk olarak ısırık dizisini sandviç dizisinin boyutuna genişletir:

B=map(lambda x:[y<'.'and'#'or y for y in x]+['#']*(L(S[0])-L(x)),b+[[]]*(L(S)-L(b)))

[y<'.'and'#'or y for y in x]#
(L(S[0])-L(x)),b+[[]]*(L(S)-L(b))eksik eleman sayısını hesaplamak için tüm boşlukları değiştirir

Sonra bu "genişletilmiş" ısırık 4 rotasyon sandviç ile karşılaştırır:

R=lambda:map(lambda x:x[::-1],B)
print S==B or S==B[::-1]or S==R()or S==R()[::-1]
print any(map(S.__eq__,[B,B[::-1],R(),R()[::-1]])) #longer but pretty

lambda R liste listesini yatay olarak yansıtmak için kullanılır

Bağlantılı örnekte sandviç:

##.
#.#
###

Ve ısırık:

.
 .

1
neden R=Lambda:map...ve değilR=map...
Felipe Nardi Batista

@FelipeNardiBatista Çünkü kaçırdım: D Teşekkürler!
Ölü Possum

B=[[y<'.'and'#'or y for y in x]+['#']*(L(S[0])-L(x))for x in b+[[]]*(L(S)-L(b))]için -4
ovs

Ve R=[x[::-1]for x in B]-4 için de. Genel olarak lambda fonksiyonlu harita kullanmayın
Ovs
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.