นี่เป็นเหมืองของฉันหรือเปล่า?


12

เมื่อวานฉันออกจากแซนด์วิชบนโต๊ะ เมื่อฉันตื่นขึ้นมาวันนี้มันกัดอยู่ ... มันเป็นของฉันเหรอ? ฉันจำไม่ได้ ...

ปัญหา:

เป็นตัวแทนของแซนด์วิชและรูปแบบการกัดของฉันและบอกฉันว่ามันเป็นของฉันกัดหรือไม่

ตัวอย่าง:

ตัวอย่างที่ 1:

รูปแบบการกัดของฉัน:

..
.

แซนวิช:

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

เอาท์พุท:

truthy

ตัวอย่างที่ 2:

รูปแบบการกัดของฉัน:

..
..

แซนวิช:

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

เอาท์พุท:

falsy

ตัวอย่างที่ 3:

หากมีการหมุนอย่างน้อย 1 ครั้งที่นับว่าเป็นความจริงเอาต์พุตจะเป็นความจริง

รูปแบบการกัดของฉัน:

.
 .
  .

แซนวิช:

##.
#.#
.##

เอาท์พุท:

การหมุนที่เป็นไปได้สองแบบ (กัดที่มุมตะวันออกเฉียงเหนือหรือตะวันตกเฉียงใต้)

truthy

การกัดที่ถูกต้องบางอย่าง:

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

กัดที่ไม่ถูกต้องบางอย่าง:

..

...
.

..
.
 .

กฎ:

  • การจัดวางรูปแบบการกัดของฉันจะเป็นการกัดมุมทิศตะวันตกเฉียงเหนือเสมอ และจะต้องหมุนเพื่อกัดมุมอื่น ๆ

  • จะมีเพียง 1 และเพียง 1 กัดในแซนวิช;

  • การกัดในแซนวิชสามารถทำได้ใน 4 cornes (หมุนตาม)

  • รูปแบบกัดจะมีความสมมาตรตลอดแนวเส้นทแยงมุมหลัก

  • รูปแบบกัดจะต้องมีอย่างน้อย 1 กว้างและไม่ว่างเปล่า

  • แซนวิชจะเป็นรูปสี่เหลี่ยมผืนผ้าที่มีความกว้างและความสูงเท่ากับหรือมากกว่าความกว้างของรูปแบบการกัดของฉันเสมอ

  • ในอินพุตของคุณคุณสามารถเลือกอักขระที่ไม่ใช่ช่องว่าง 2 ตัวเพื่อแสดงถึงแซนด์วิชและการกัด

  • ช่องว่างในรูปแบบการกัดหมายความว่าการกัดของฉันไม่ได้สัมผัสส่วนหนึ่งของแซนวิช


รูปแบบการกัดสามารถใหญ่กว่าแซนวิชได้หรือไม่? รูปแบบการกัดจะว่างเปล่าได้ไหม รูปแบบการกัดสามารถเหมือนกับแซนวิชได้หรือไม่? เช่น.., ..?
TheLethalCoder

@TheLethalCoder กฎบอกว่ารูปแบบการกัดจะพอดีกับแซนด์วิช ฉันจะเพิ่มกฎใหม่เพื่อระบุขนาดขั้นต่ำ (1 ความกว้าง)
Felipe Nardi Batista

@TheLethalCoder และใช่รูปแบบการกัดสามารถเหมือนกับแซนด์วิช
Felipe Nardi Batista

คำตอบ:


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

ลองออนไลน์!

บันทึก 2 ไบต์โดยย้ายการกำหนดไปยังการใช้งานครั้งแรกของ เห็นได้ชัดว่าทับทิมฉลาดพอที่จะไม่สับสนกับเครื่องหมายจุลภาคในการกำหนดอาเรย์และเครื่องหมายจุลภาคที่จะเกิดขึ้นจากการกำหนดตัวแปรพร้อมกัน (อย่างน้อยในกรณีนี้: 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

แลมบ์ดา R ใช้สำหรับทำรายการของรายการในแนวนอน

ในตัวอย่างแซนด์วิชที่เชื่อมโยงคือ:

##.
#.#
###

และกัดคือ:

.
 .

1
ทำไมR=Lambda:map...และไม่ใช่R=map...
เฟลิเป้นาร์ดีบาติสตา

@FelipeNardiBatista เพราะฉันพลาด: D ขอบคุณ!
Dead Possum

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.