どのスイッチがオンになっていますか?


12

前書き

あなたは同僚と一緒に座って、昼食をとり、あなたが取り組んでいると思われる最新の、おそらく最高のプロジェクトについて同僚に自慢しています。エゴイズムの絶え間ないショーケースにうんざりして疲れて、彼/彼女はあなたが黙ってしまうようにあなたに挑戦を与えます。あなたがエゴイスティックで幸せな幸運な人であることはもちろん受け入れます(あなたそれぞれの挑戦をすべて受け入れなければならないからです)。挑戦、彼/彼女はそれが説明しているように、与えられた入力に各文字の1以上を含むテキストのブロックのを!@#$^&*出力される任意の合理的な形式でのスイッチの座標(ES)/「オン」です。

同僚による$と、スイッチはであり、次の基準の少なくとも1つを満たす場合にのみ、スイッチは「オン」として分類されます。

  1. すべてに囲まれています^。そう...

    ^^^
    ^$^
    ^^^
    

    「オン」スイッチになります。

  2. すべてに囲まれています&。そう...

    &&&
    &$&
    &&&
    

    「オン」スイッチになります。

  3. 少なくとも 2つの側面がで完全に覆われてい*ます。例えば、

    ***
    &$&
    ***
    

    「オン」スイッチになりますが、

    &*&
    &$&
    &*&
    

    スイッチはs によって両側が完全に覆われていないため、そうではありません*

  4. 周囲のどのコーナーにも少なくとも1 !つまたは1つ@、あるいはその両方があります。これらのいずれかがコーナーにない場合、これはカウントされませ。そう...

    !&&
    ^$@
    @&!
    

    少なくとも1 !つまたは@少なくとも1つのコーナーがあるため、「オン」スイッチになります(上記の場合、2つの有効な!sと@3つのコーナーで有効な1つがあります)。そして...

    &!&
    ^$@
    ^!&
    

    2 sと1 がありますが、どのコーナーにもありませんのでそうではありませ!@

  5. 1以上が#あるない任意の少なくとも1がない限り、スイッチの周囲側面&スイッチを取り囲んでいます。つまり、#側面に少なくとも1つ存在する場合、存在する場合を除き、他のすべてのルールをオーバーライドします&。したがって:

    #&*
    *$*
    !**
    

    スイッチは「オン」になりますが、aは#存在しますが、&aroundスイッチがあるため、上記のルールの少なくとも1つに従います。ただし、感嘆符が次のように存在しない場合:

    #&*
    *$*
    ***
    

    上記のルールの少なくとも1つに従わないため、スイッチはオフになります。したがって、スイッチがa #およびa &で囲まれている場合でも、これらの規則の1つ以上に従わない限り、スイッチはオフのままです。また、スイッチを有効にするには、sとsの比率が常に 1:1以上でなければなりません。例えば、&#

    #&!
    *$*
    **#
    

    無効なスイッチになりますが、これらのルールの1つに従いますが、これは2 #があり、1のみ&であり、したがって&sと#sの比率が1:1を超えないためです。これを有効にするには&#sと&sの数のバランスを取るために、任意のエッジに1つ以上の追加のsを追加する必要があります。

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

    最後に...

    #^^
    ^$*
    @^!
    

    これは「オフ」スイッチになりますが、少なくとも 1 つ以上が含ま#ており、&バランスを取るためのsがないため、上記のルールの1つ以上に従います。

  6. 有効なスイッチは入力のみにあるため、有効な各スイッチは8つの有効な文字で完全に囲まれている必要があります。たとえば、入力全体が次のようになる場合:$

    *$*
    !$!
    !!!
    

    スイッチはエッジにあるため、トップ$は間違いなく有効なスイッチではありません。したがって、スイッチは8つの有効な文字で完全に囲まれていません。この場合、スイッチは考慮されるべきではありません。ただし、中央のスイッチは完全に有効であり、実際には上記の要件の少なくとも1つを満たしているため、「オン」です。

実証するために、次の文字ブロックを検討してください。

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

垂直軸yと水平軸を呼び出して、そのような座標にラベルを付けることができますx

y

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

  123456789 x

座標は常に(x,y)、2次元の座標グリッドに似た形式で返される必要があります。今、どのスイッチがオンになっていますか?さて、最初にそれらすべてを見つけましょう。すでに一番上の行に1つ、一番下の行にもう1つあることがわかります。ただし、これらは8文字で完全に囲まれていないため、自動的にノーオペレーションです。

次は行2にあります。具体的には、次のとおりです。

#^^
#$$
^!$

我々は3つのがあることがわかります$、それは2つのがあるので、それは、すでに無効である、あなたはおそらく見ることができるように、標識はこの中で、私たちはちょうど真ん中に1に集中したい、と#ノーとその周りの&それらのバランスをとるために複数可でる。さらに、これはどのルールにも従わないため、たとえ有効なスイッチであったとしても、とにかく「オフ」になります。

次に行2に別の行があります:

^^$
$$*
!$!

繰り返しますが、中央のスイッチにのみ焦点を当てます。それは持っているので、このスイッチは、「オン」である、少なくとも 1 !少なくとも 1コーナー。これの座標は(5,2)です。

次に、最後のスイッチに移動します。これも2行目にあり、次のように表示されます。

$#!
*$&
!@&

おそらくおわかりのように、これは有効なスイッチでもありますが、#それを取り巻くものがあります。それに加えて、少なくとも1 つのコーナーに少なくとも1つあるため、スイッチが有効であるだけでなく、「オン」でもあります。このスイッチの座標はです。&#!(7,2)

ついに終わりに達し、テキスト上のブロック全体に2つの「オン」スイッチが見つかりました。それらの座標は(5,2)andであり(7,2)、これが最終的な答えであり、出力はどうあるべきかです。ただし、この入力は非常に簡単でした。テキストブロックが取得できるサイズに制限はないため入力はさらに大きくなる可能性があります。たとえば、入力200x200はテキストのランダム化されたブロックでさえありえます。

制約

  • 標準の抜け穴は禁止されています。

  • おそらくこれを組み込むことはできませんが、念のため(Mathematicaを見ると)、これを直接解決する組み込みの使用は禁止されています。

テストケース:

形式で与えられます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それが私が目指していることです。とにかく挑戦です。なぜそれがit意的だと言うのですか?
R. Kap

6
@ R.Kapどのルールにも正当な理由はありません。理由もなく複雑さを増すように構成されているようです。
ファンドモニカの訴訟

6
@QPaysTaxesこれにはどんな正当化が必要ですか?これら課題のために作られています。それ挑戦であり、挑戦は文字通り何でもありえます。本当に必要なのは、一連のルール、入力、およびそれらのルールに基づいて出力を何にするかです。
R. Kap

1
私は同意すると言っているのではなく、なぜそれがarbitrary意的に見えるのかを説明しています。私の最も人気のある挑戦を例として考えてみましょう。すべてのコンテキストを取り除いて、「一連の文字列が与えられます。インデントに基づいて、グループ化し、グループをシャッフルし、内部グループをシャッフルしますが、存在する場合、下部の内部グループ」、それはあまり意味がありません。ただし、コンテキストがあるため、これらの奇妙なルールと制限はすべて、少なくとも理にかなっているふりをします。
ファンドモニカの訴訟

回答:


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の2299の 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.