War das mein Biss?

12

Gestern habe ich mein Sandwich auf dem Tisch liegen lassen. Als ich heute aufgestanden bin, war da ein Happen drin ... War es meins? Ich kann mich nicht erinnern ...

Problem:

Nehmen Sie eine Darstellung des Sandwichs und meines Bissmusters und sagen Sie mir, ob es mein Biss war oder nicht.

Beispiele:

Beispiel 1:

Mein Bissmuster:

..
.

Sandwich:

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

Ausgabe:

truthy

Beispiel 2:

Mein Bissmuster:

..
..

Sandwich:

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

Ausgabe:

falsy

Beispiel 3:

Wenn mindestens 1 Umdrehung als wahr gilt, ist die Ausgabe wahr.

Mein Bissmuster:

.
 .
  .

Sandwich:

##.
#.#
.##

Ausgabe:

Zwei mögliche Rotationen (beißen in der nordöstlichen oder südwestlichen Ecke).

truthy

Einige gültige Bisse:

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

Einige ungültige Bisse:

..

...
.

..
.
 .

Regeln:

  • Meine Bissmusterorientierung ist immer für das Beißen der Nordwestecke. Und muss gedreht werden, um andere Ecken zu beißen;

  • Es gibt immer 1 und nur 1 Bissen im Sandwich;

  • Der Biss im Sandwich kann in jedem der 4 Cornes sein (entsprechend gedreht);

  • Bissmuster sind entlang der Hauptdiagonale immer symmetrisch.

  • Bissmuster werden immer mindestens 1 breit und nicht leer sein;

  • Das Sandwich ist immer ein Rechteck mit einer Breite und Höhe, die der Breite meines Bissmusters entsprechen oder größer sind.

  • In Ihrer Eingabe können Sie 2 verschiedene Zeichen ohne Leerzeichen auswählen, um das Sandwich und den Biss darzustellen.

  • Leerzeichen im Bissmuster bedeuten, dass mein Biss diesen Teil des Sandwichs nicht berührt.

Felipe Nardi Batista
quelle
Kann das Bissmuster größer sein als das Sandwich? Kann das Bissmuster leer sein? Kann das Bissmuster mit dem Sandwich identisch sein? dh .., ..?
TheLethalCoder
@TheLethalCoder Die Regeln besagen, dass das Bissmuster immer zum Sandwich passt. Ich werde eine neue Regel hinzufügen, um die Mindestgröße (1 Breite) anzugeben
Felipe Nardi Batista
@TheLethalCoder und ja, das Bissmuster kann das gleiche sein wie das Sandwich
Felipe Nardi Batista

Antworten:

2

Ruby , 103 Bytes 101 Bytes

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

Probieren Sie es online!

2 Bytes gespart, indem die Zuweisung zur ersten Verwendung von a verschoben wurde. Anscheinend ist Ruby klug genug, um die Kommas in der Array-Definition und die Kommas, die durch die gleichzeitige Zuweisung von Variablen entstehen würden, nicht zu verwechseln (zumindest in diesem Fall: D).

Jenkar
quelle
2

Python 2 , 134 Bytes

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))

Nimmt die Eingabe als zwei Listen von Zeichenfolgen (eine für jede Zeile). Setzt kein nachgestelltes Leerzeichen in den Zeilen voraus.

Probieren Sie es online!

Beispiele:

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

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

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

Python 2, 173 Bytes

Probieren Sie es online aus

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

Nimmt die Eingabe als zwei Listen mit Listen von Zeichen auf.
Zuerst - Sandwich
Second - Bite

Zuerst wird das Bite-Array auf die Größe eines Sandwich-Arrays erweitert:

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] ersetzt alle Leerzeichen bis #
(L(S[0])-L(x)),b+[[]]*(L(S)-L(b)) um die Anzahl der fehlenden Elemente berechnen

Dann vergleicht es alle 4 Umdrehungen dieses "verlängerten" Bisses mit dem Sandwich:

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 wird verwendet, um Listen horizontal zu spiegeln

Im verknüpften Beispiel ist sandwich:

##.
#.#
###

Und beißen ist:

.
 .
Totes Opossum
quelle
1
warum R=Lambda:map...und nichtR=map...
Felipe Nardi Batista
@FelipeNardiBatista Weil ich es verpasst habe: D Danke!
Dead Possum
B=[[y<'.'and'#'or y for y in x]+['#']*(L(S[0])-L(x))for x in b+[[]]*(L(S)-L(b))]für -4
OV
Und R=[x[::-1]for x in B]für -4 auch. Verwenden Sie im Allgemeinen keine Karte mit Lambda-Funktion
ovs