สวิตช์ใดเปิดอยู่


12

บทนำ

คุณกำลังนั่งอยู่กับเพื่อนร่วมงานของคุณทานอาหารกลางวันและคุยโม้กับเขาเกี่ยวกับโปรเจ็กต์ล่าสุดและที่ยิ่งใหญ่ที่สุดที่คุณคาดไม่ถึง เจ็บป่วยและเบื่อกับการแสดงความเห็นแก่ตัวอย่างต่อเนื่องเขา / เธอจะให้ความท้าทายแก่คุณดังนั้นคุณจะต้องปิดตัวลง แน่นอนว่าคุณเป็นคนที่เห็นแก่ตัวและมีความสุขไปด้วยโชคคุณยอมรับ (เพราะคุณต้องยอมรับความท้าทายแต่ละอย่างและทุกครั้ง) ความท้าทายในขณะที่เขา / เธออธิบายมันคือได้รับการป้อนข้อมูลของบล็อกของข้อความที่มี 1 หรือมากกว่าของตัวละครแต่ละตัวใน!@#$^&*, การส่งออกในรูปแบบที่เหมาะสมใด ๆ พิกัดของสวิทช์ (e) ที่มี / มี "กับ"

ตามที่เพื่อนร่วมงานของคุณสวิตช์เป็น$และสวิตช์ถูกจัดประเภทเป็น "เปิด" ถ้าและถ้าตรงตามเกณฑ์อย่างน้อย 1 ในเกณฑ์ต่อไปนี้:

  1. ^ล้อมรอบด้วยทั้งหมด ดังนั้น...

    ^^^
    ^$^
    ^^^
    

    ผลลัพธ์ในสวิตช์ "เปิด"

  2. &ล้อมรอบด้วยทั้งหมด ดังนั้น...

    &&&
    &$&
    &&&
    

    ผลลัพธ์ในสวิตช์ "เปิด"

  3. มันมีการครอบคลุมอย่างน้อย*สองด้านด้วย ตัวอย่างเช่น

    ***
    &$&
    ***
    

    ส่งผลให้สวิตช์ "เปิด" แต่

    &*&
    &$&
    &*&
    

    ไม่ได้เนื่องจากสวิตช์ไม่ได้ครอบคลุมทั้งสองด้านโดย*s

  4. มีอย่างน้อย 1 !และ / หรือ 1 @ในมุมใด ๆ รอบ ๆ สิ่งนี้จะไม่นับหากสิ่งเหล่านี้ไม่ได้อยู่ในมุมหนึ่ง ดังนั้น...

    !&&
    ^$@
    @&!
    

    ส่งผลให้สวิตช์ "เปิด" เนื่องจากมีอย่างน้อย 1 !และ / หรือ@อย่างน้อย 1 ในมุม (ในกรณีข้างต้นมี 2 ใช้ได้!และ 1 ถูกต้อง@ใน 3 มุม) และ...

    &!&
    ^$@
    ^!&
    

    ไม่ได้แม้ว่าจะมี 2 !และ 1 @เนื่องจากไม่มีของพวกเขาอยู่ในใด ๆของมุม

  5. 1 หรือมากกว่า#นั้นไม่ได้อยู่ข้างใด ๆรอบสวิตช์ยกเว้นอย่างน้อย 1 &ล้อมรอบสวิตช์ กล่าวอีกนัยหนึ่งถ้ามีอย่างน้อย 1 #ของขวัญอยู่ด้านข้างมันแทนที่กฎอื่น ๆ ทั้งหมดเว้นแต่จะมี&ของขวัญ ดังนั้น:

    #&*
    *$*
    !**
    

    ส่งผลให้สวิตช์ "เปิด" แม้ว่ามี#อยู่เนื่องจากมี&สวิตช์อยู่รอบ ๆ และจะปฏิบัติตามกฎอย่างน้อย 1 ข้อด้านบน อย่างไรก็ตามหากเครื่องหมายอัศเจรีย์ไม่ปรากฏเช่นนั้น:

    #&*
    *$*
    ***
    

    สวิตช์จะปิดเนื่องจากไม่ปฏิบัติตามกฎข้างต้นอย่างน้อยหนึ่งข้อ ดังนั้นแม้ว่าสวิตช์อาจถูกล้อมรอบด้วย a #และ a &ก็จะยังคงปิดอยู่เว้นแต่จะปฏิบัติตามกฎเหล่านี้อย่างน้อยหนึ่งกฎ นอกจากนี้ยังมีต้องเสมอเป็น> = 1: 1 อัตราส่วนระหว่าง&และ#สำหรับสวิทช์ที่ถูกต้อง ตัวอย่างเช่น

    #&!
    *$*
    **#
    

    จะยังคงเป็นสวิตช์ที่ไม่ถูกต้องแม้ว่าจะเป็นไปตาม 1 ของกฎเหล่านี้เนื่องจากมี 2 #วินาที แต่มีเพียง 1 เท่านั้น&และไม่ใช่อัตราส่วน> = 1: 1 ระหว่าง&s และ#s ในการทำให้ข้อมูลนี้ถูกต้องคุณจะต้องเพิ่ม 1 ตัวหรือมากกว่านั้น&ไปยังขอบใด ๆ เพื่อที่จะรักษาสมดุลของจำนวน#s และ&s

    #&!
    *$&
    &*#
    
    3:2 ratio between &s and #s
    

    สุดท้าย ...

    #^^
    ^$*
    @^!
    

    ให้ผลลัพธ์เป็นสวิตช์ "ปิด" แม้ว่าจะเป็นไปตามกฎด้านบนอย่างน้อย 1 ข้อเนื่องจากมีอย่างน้อย 1 #รอบและไม่มีความ&สมดุลใด ๆ

  6. สวิทช์ที่ถูกต้องจะเพียง แต่จะอยู่ภายในการป้อนข้อมูลและดังนั้นแต่ละที่ถูกต้อง$จะต้องถูกล้อมรอบสมบูรณ์โดยใด ๆ 8 ตัวละครที่ถูกต้อง ตัวอย่างเช่นหากอินพุตทั้งหมดเป็น:

    *$*
    !$!
    !!!
    

    ด้านบน$เป็นมั่นเหมาะไม่สวิทช์ที่ถูกต้องตั้งแต่สวิทช์ที่อยู่บนขอบและดังนั้นจึงสวิทช์ไม่ได้ล้อมรอบไปด้วย 8 ตัวอักษรที่ถูกต้อง ในกรณีนี้ไม่ควรพิจารณาถึงการสลับ อย่างไรก็ตามสวิตช์ที่อยู่ตรงกลางนั้นใช้ได้อย่างสมบูรณ์และตามความเป็นจริงก็คือ "เปิด" เนื่องจากตรงตามข้อกำหนดข้างต้นอย่างน้อยหนึ่งข้อ

ในการสาธิตให้พิจารณาบล็อกอักขระนี้:

!@#^^$#!@
!@#$$*$&@
@$^!$!@&&

ซึ่งเราสามารถทำเครื่องหมายพิกัดเช่นนั้นเรียกแกนแนวตั้งyและแกนนอนx:

y

3 !@#^^$#!@
2 !@#$$*$&@
1 @$^!$!@&&

  123456789 x

พิกัดต้องเสมอจะกลับมาใน(x,y)รูปแบบคล้ายกับสองมิติตารางพิกัด ตอนนี้สวิทช์ใดเปิดอยู่? ก่อนอื่นมาเจอกันก่อน เราเห็นแล้วว่ามี 1 ในแถวบนสุดและอีกอันอยู่ด้านล่างสุด อย่างไรก็ตามตัวเลือกเหล่านี้จะไม่มีตัวเลือกโดยอัตโนมัติเนื่องจากตัวอักษรเหล่านี้ไม่ถูกล้อมด้วยตัวอักษรทั้งหมด 8 ตัว

ถัดไปมาในแถวที่ 2 โดยเฉพาะอันนี้:

#^^
#$$
^!$

เราสามารถเห็นได้ว่ามี 3 $สัญญาณในสิ่งนี้ แต่เราแค่ต้องการมุ่งเน้นไปที่ตรงกลางและอย่างที่คุณอาจเห็นว่ามันไม่ถูกต้องอยู่แล้วเนื่องจากมันมี 2 #s รอบโดยไม่มี&s เพื่อปรับสมดุล ออก. นอกจากนี้สิ่งนี้ไม่ได้ปฏิบัติตามกฎใด ๆ ดังนั้นแม้ว่าจะเป็นสวิตช์ที่ถูกต้องก็ตามก็จะเป็น "ปิด" อย่างไรก็ตาม

ถัดไปมาอีกอันหนึ่งในแถว 2:

^^$
$$*
!$!

อีกครั้งเพียงมุ่งเน้นไปที่สวิตช์ที่อยู่ตรงกลาง สวิตช์นี้เป็น "เปิด" เนื่องจากมีอย่างน้อย 1 !ในอย่างน้อย 1 มุม (5,2)พิกัดของหนึ่งนี้

ในที่สุดเราก็เข้าสู่สวิตช์สุดท้าย อันนี้อยู่ในแถวที่สองและดูเหมือนว่า:

$#!
*$&
!@&

และในขณะที่คุณอาจจะเห็นคนนี้ยังเป็นสวิทช์ที่ถูกต้องแม้ว่าจะมี#รอบเนื่องจากมี 2 อื่น ๆ&เพื่อ outbalance #นอกจากนั้นมันยังมีอย่างน้อย 1 !ในอย่างน้อย 1 ของมุมและดังนั้นไม่เพียง แต่เป็นสวิตช์ที่ถูกต้อง แต่ยังเป็น "เปิด" (7,2)พิกัดของสวิทช์นี้

ในที่สุดเราก็มาถึงจุดสิ้นสุดและพบสวิตช์ 2 "บน" ในบล็อกทั้งหมดในข้อความ พิกัดของพวกเขาคือ(5,2)และ(7,2)ซึ่งเป็นคำตอบสุดท้ายของเราและผลลัพธ์ที่ควรจะเป็น อย่างไรก็ตามข้อมูลนี้ง่ายมาก อินพุตสามารถมีขนาดใหญ่ขึ้นได้มากเนื่องจากไม่มีการ จำกัด จำนวนบล็อกข้อความ ตัวอย่างเช่นการป้อนข้อมูลอาจเป็น200x200บล็อกข้อความแบบสุ่ม

contraints

  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม

  • มีไม่สามารถเป็นไปได้ที่จะมีในตัวนี้ แต่เพียงในกรณีที่มี (มองหาที่คุณมาติกา) ที่ใช้ในการสร้างอินที่โดยตรงแก้ปัญหานี้ไม่ได้รับอนุญาต

กรณีทดสอบ:

ให้ในรูปแบบstring input -> [array output]:

@#$$&^!&!# 
@*&!!^$&^@
$!#*$@#@$!   ->  [[7,3],[9,2]]
*@^#*$@&*#

#^&!$!&$@@#&^^&*&*&&
!^#*#@&^#^*$&!$!*^$$
#^#*#$@$@*&^*#^!^@&* -> [[19,3],[15,3],[8,2]]
#$@$!#@$$^!#!@^@^^*#

@!@!^&*@*@
*$*^$!*&#$
@$^*@!&&&#
**$#@$@@#!  -> [[2,8],[5,8],[6,6],[9,3]]
##*&*#!^&^
$&^!#$&^&@
^^!#*#@#$*
$@@&#@^!!&
#@&#!$$^@$


!!@##!$^#!&!@$##$*$#
$^*^^&^!$&^!^^@^&!#!
@*#&@#&*$!&^&*!@*&** -> [[9,4],[9,3]]
^!!#&#&&&#*^#!^!^@!$
&$$^*$^$!#*&$&$#^^&$

กำลังจะมาเร็ว ๆ นี้

หมายเหตุเพิ่มเติม

  • คุณสามารถสันนิษฐานได้ว่าอินพุตจะอยู่ในรูปแบบของบล็อกที่สมบูรณ์เสมอ (เช่นสี่เหลี่ยมหรือสี่เหลี่ยม)
  • จะมีไม่เคยเป็นตัวละครอื่น ๆ !@#$^&*ในการป้อนข้อมูลกว่าผู้ที่อยู่ใน

โปรดจำไว้ว่านี่คือเพื่อให้ได้รหัสที่สั้นที่สุดชนะ!


12
ดูเหมือนจะยาวไปหน่อย
orlp

@ orlp นั่นคือสิ่งที่ฉันจะทำ มันคือความท้าทายต่อไป ทำไมคุณถึงพูดว่ามันเป็นกฎเกณฑ์?
R. Kap

6
@ R.Kap ไม่มีเหตุผลใด ๆ สำหรับกฎ; ดูเหมือนว่าพวกเขาจะเพิ่มความซับซ้อนโดยไม่มีเหตุผล
คดีกองทุนของโมนิกา

6
@QPaysTaxes สิ่งนี้จำเป็นต้องมีเหตุผลอะไร? สิ่งเหล่านี้ถูกสร้างขึ้นเพื่อความท้าทาย มันเป็นความท้าทายและเป็นความท้าทายที่แท้จริงได้อะไร สิ่งที่ต้องการจริงๆคือชุดของกฎอินพุตและสิ่งที่เอาต์พุตควรเป็นไปตามกฎเหล่านั้น
R. Kap

1
ฉันไม่ได้บอกว่าฉันเห็นด้วยฉันกำลังอธิบายว่าทำไมมันจึงดูไร้เหตุผล ใช้ความท้าทายที่ได้รับความนิยมมากที่สุดของฉันเป็นตัวอย่าง: หากคุณปล้นไปทุกบริบทและเพียงแค่กล่าวว่า "คุณจะได้รับชุดของสตริงจากการเยื้องกลุ่มพวกเขาสับกลุ่มแล้วสับกลุ่มภายใน แต่ให้สมาชิกของ. กลุ่มการตกแต่งภายในที่ด้านล่างหากพวกเขามีอยู่ "ที่จะไม่สมเหตุสมผลมาก อย่างไรก็ตามเนื่องจากมีบริบทกฎและข้อ จำกัด แปลก ๆ เหล่านั้นอย่างน้อยก็แกล้งทำเป็นเข้าใจ
คดีกองทุนของโมนิกา

คำตอบ:


2

Haskell, 304 ไบต์

import Data.List
s!c=sum[1|a<-s,a==c]
f t|Just w<-elemIndex '\n't,h<-t!'\n'=[c|c<-mapM(\a->[2..a-1])[w,h],s<-[(\[x,y]->t!!((h-y-1)*(w+1)+x))<$>mapM(\a->[a-2..a])c],s!!4=='$',foldr1(-)((s!)<$>"#&")<1,or$("@!"/="@!"\\map(s!!)[0,2..8]):zipWith(\c i->all(==c)$(s!!)<$>[0..8]\\(4:i))"^&**"[[],[],[1,7],[3,5]]]

สิ่งนี้จะกำหนดฟังก์ชั่นfที่ทำหน้าที่ที่ได้รับ


2

JavaScript (ES6), 363 339 312 309 298 ไบต์

นี่คือฟังก์ชั่นที่รับอินพุตเป็นสตริงและส่งคืนรายการพิกัด มันแบ่งออกเป็น 2 ส่วนหลัก: การเปลี่ยนของสวิตช์เป็นคู่ของพิกัดและตัวละครที่อยู่รอบ ๆ และตรวจสอบ 'อยู่ใน' ตามกฎของความท้าทายของตัวละครโดยรอบ

a=>[...a].map((z,p,m)=>(y-=z==B,z)=='$'&&(r=m[p-n-2]+m[p-n]+m[p+n]+m[p+n+2]+m[p-n-1]+m[p-1]+m[p+1]+m[p+n+1],r=r[L]<9?r:'')[T]`&`[L]>=r[T]`#`[L]&&(/(\^|&){8}|\*{4}(.\*\*.|\*..\*)/.exec(r)||/!|@/.exec(r.substr(0,4)))&&[1+(p-(w-y))%n,y],y=w=a[T='split'](B='\n')[L='length'],n=a.search(B)).filter(e=>e)

2

Python 2 , 299 297 279 275 261 259 ไบต์

m=input()
R=range
h=len(m)
for y in R(h-2):
 for x in R(len(m[0])-2):
	a=''.join(m[y+o][x:x+3]for o in R(3))
	if(a.count('&')>=a.count('#'))*(a[:4]+a[5:]in('^'*8,'&'*8)or'*'*6in(a[:3]+a[6:],a[::3]+a[2::3])or'!'in a[::2]or'@'in a[::2])*a[4]=='$':print x+2,h+~y

ลองออนไลน์!

รับอินพุตเป็นรายการของสตริง

พิมพ์เอาต์พุตเป็นพิกัด x, y ในแต่ละบรรทัด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.