这是我的咬人吗?


12

昨天,我把三明治放在桌子上了。今天我起床的时候,里面有一口……是我的吗?我不记得了

问题:

代表三明治和我的咬咬图案,并告诉我是否咬咬。

例子:

范例1:

我的咬模式:

..
.

三明治:

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

输出:

truthy

范例2:

我的咬模式:

..
..

三明治:

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

输出:

falsy

范例3:

如果至少有1个旋转视为真实,则输出为真实。

我的咬模式:

.
 .
  .

三明治:

##.
#.#
.##

输出:

两次可能的旋转(在东北或西南角咬)。

truthy

一些有效的叮咬:

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

一些无效的叮咬:

..

...
.

..
.
 .

规则:

  • 我的咬合方向始终是咬西北角。并且必须旋转以咬住其他角落;

  • 三明治永远只有1口,只有1口。

  • 三明治中的食物可以是4个角中的任何一个(相应旋转)。

  • 咬合图案始终沿主对角线对称。

  • 咬合模式将始终至少为1且不为空;

  • 三明治将始终是一个矩形,其宽度和高度等于或大于我的咬合图案的宽度。

  • 在您的输入中,您可以选择任意2个不同的非空白字符来表示三明治和叮咬。

  • 咬合图案中的空格表示我的咬合没有碰到三明治的那部分。


咬的图案可以比三明治大吗?咬伤模式可以为空吗?咬的图案可以和三明治一样吗?即....
TheLethalCoder

@TheLethalCoder规则说,咬合模式将始终适合三明治。我将添加一条新规则以指定最小尺寸(1个宽度)
Felipe Nardi Batista

@TheLethalCoder,是的,咬合图案可以与三明治相同
Felipe Nardi Batista

Answers:


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

将输入作为两个字符串列表(每行一个)。假定行上没有尾随空格。

在线尝试!

例子:

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

将输入作为字符列表的两个列表。
第一-三明治
第二-咬

首先,它将叮咬阵列扩展到三明治阵列的大小:

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

lambda 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 '17

R=[x[::-1]for x in B]为-4为好。通常,不要将地图与lambda函数一起使用
ovs
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.