この咬傷は私のものでしたか?


12

昨日、サンドイッチをテーブルに置いた。私が今日起きたとき、それはかみ傷がありました...それは私のものでしたか?思い出せない...

問題:

サンドイッチと私のかみ傷のパターンを見て、それが私のかみ傷だったかどうか教えてください。

例:

例1:

私の噛みつきパターン:

..
.

サンドイッチ:

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

出力:

truthy

例2:

私の噛みつきパターン:

..
..

サンドイッチ:

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

出力:

falsy

例3:

真実と見なされる回転が少なくとも1つある場合、出力は真実です。

私の噛みつきパターン:

.
 .
  .

サンドイッチ:

##.
#.#
.##

出力:

2つの可能な回転(北東または南西の角を噛む)。

truthy

有効なバイト:

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

いくつかの無効な咬傷:

..

...
.

..
.
 .

ルール:

  • 私のバイトパターンの向きは、常に北西の角を噛むためのものです。そして、他のコーナーを噛むために回転する必要があります。

  • サンドイッチには常に1つだけの噛み込みがあります。

  • サンドイッチのかみ傷は、4つのコーンのいずれかに入れることができます(それに応じて回転)。

  • バイトパターンは、主対角線に沿って常に対称になります。

  • かみ傷パターンは常に少なくとも1つの幅で空ではありません。

  • サンドイッチは常に、幅と高さが私のバイトパターンの幅以上の長方形になります。

  • 入力では、サンドイッチとバイトを表す2つの異なる空白以外の文字を選択できます。

  • バイトパターンのスペースは、私のバイトがサンドイッチのその部分に触れないことを意味します。


バイトパターンはサンドイッチより大きくできますか?バイトパターンを空にすることはできますか?バイトパターンはサンドイッチと同じにすることができますか?すなわち....
TheLethalCoder

@TheLethalCoderのルールでは、噛むパターンは常にサンドイッチに合うと言われています。最小サイズ(1幅)を指定する新しいルールを追加します
フェリペナルディバティスタ

@TheLethalCoderとはい、噛むパターンはサンドイッチと同じにすることができます
フェリペナルディバティスタ

回答:


2

ルビー103バイト 101バイト

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

オンラインでお試しください!

aの最初の使用に割り当てを移動することにより、2バイトを節約しました。どうやらRubyは配列定義のコンマと同時変数代入から生じるコンマを混同しないように十分賢いようです(少なくともこの場合:D)


2

Python 2、134バイト

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

入力を文字列の2つのリスト(各行に1つ)として受け取ります。行の末尾に空白がないと仮定します。

オンラインでお試しください!

例:

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

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

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

1

Python 2、173バイト

オンラインで試す

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

入力を文字のリストの2つのリストとして受け取ります。
最初-サンドイッチ
2-噛む

まず、バイト配列をサンドイッチ配列のサイズに拡張します。

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))、欠落している要素の数を計算します

次に、この「拡張」バイトの4つの回転すべてをサンドイッチと比較します。

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

ラムダRはリストのリストを水平にミラーリングするために使用されます

リンクされた例のサンドイッチは次のとおりです。

##.
#.#
###

そして噛み付きは:

.
 .

1
なぜかR=Lambda:map...ではないR=map...
フェリペナルディバティスタ

@FelipeNardiBatista私はそれを逃したので:Dありがとう!
デッドポッサム

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

そしてR=[x[::-1]for x in B]用-4としても。一般的には、ラムダ関数にマップを使用していない
OVS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.