介绍
您正与您的同事坐在一起,共进午餐,并向他/她吹嘘您正在从事的最新和据说最大的项目。他/她厌倦了不断展现的自我主义情绪,给您一个挑战,以至于您闭嘴。身为一个利己,乐于运气的人,您当然会接受(因为您必须接受每一个挑战)。的挑战,因为他/她解释是,给定一个输入含有1个或多个的每个字符的文本块的!@#$^&*
,输出在任何合理的格式的开关(ES)是/的坐标是“开”。
根据您的同事,开关是$
,并且仅当满足以下条件中的至少一个时,开关才被分类为“打开”:
它被所有人包围
^
。所以...^^^ ^$^ ^^^
导致“打开”开关。
它被所有人包围
&
。所以...&&& &$& &&&
导致“打开”开关。
它至少在两侧完全被覆盖
*
。例如,*** &$& ***
导致“打开”开关,但是
&*& &$& &*&
不会,因为开关没有完全用
*
s 覆盖任何两侧。周围的任何角落至少有1个
!
和/或1个@
。如果这两个都不在角落,则不算在内。所以...!&& ^$@ @&!
由于至少有1个
!
和/或@
至少有一个拐角(在上述情况下,有2个有效!
s和1个有效@
的3个拐角),因此会导致“接通”开关。和...&!& ^$@ ^!&
确实不,虽然有2
!
秒和1@
中,由于没有一个是在任何角部。1个或多个
#
是不上任何周围的开关侧,除非至少1&
包围开关。换句话说,如果#
一个边上至少存在1 个,则除非存在一个,否则它会覆盖所有其他规则&
。因此:#&* *$* !**
会导致“ on”开关(尽管
#
存在),因为&
该开关周围有a ,并且遵循上述规则中的至少一项。但是,如果没有这样的感叹号:#&* *$* ***
开关将关闭,因为它不遵循以上规则中的至少一项。因此,即使开关可能被a
#
和a 包围,&
除非遵循这些规则中的一个或多个规则,否则它仍将处于关闭状态。同样,要使开关有效,s与s 之间必须始终有> = 1:1的比率。例如,&
#
#&! *$* **#
尽管遵循这些规则中的1
#
条,但仍将是无效的开关,因为存在2 s,但只有1&
,因此&
s与#
s 之间的比率不> = 1:1 。要使其有效,必须&
在任意边上添加1个或多个其他s,以平衡#
s和&
s out 的数量,可能是这样的:#&! *$& &*# 3:2 ratio between &s and #s
最后...
#^^ ^$* @^!
会导致“关闭”开关,尽管它遵循上述规则中的1个或多个,因为它周围至少包含1个
#
,并且没有&
s使它失去平衡。有效开关将仅是内部的输入,并且因此,每个有效
$
必须包围完全通过的有效字符的任何8。例如,如果整个输入为:*$* !$! !!!
顶部
$
绝对不是有效的开关,因为该开关位于边缘,因此该开关没有被8个有效字符完全包围。在这种情况下,甚至不应考虑使用该开关。但是,中间的开关完全有效,并且实际上是“接通”的,因为它至少满足上述要求之一。
为了演示,请考虑以下字符块:
!@#^^$#!@
!@#$$*$&@
@$^!$!@&&
我们可以像这样标记坐标,称为垂直轴y
和水平轴x
:
y
3 !@#^^$#!@
2 !@#$$*$&@
1 @$^!$!@&&
123456789 x
必须始终以(x,y)
类似于二维坐标网格的格式返回坐标。现在,哪些开关打开?好吧,让我们首先找到它们。我们已经可以看到在最上面一行有1个,在最下面一行有一个。但是,由于它们没有完全被8个字符包围,因此它们自动变为无操作。
接下来是第2行。具体来说,这一个是:
#^^
#$$
^!$
我们可以看到其中有3个$
符号,但是我们只想关注中间的一个,就像您可能看到的那样,它已经无效,因为它#
周围有2 s,没有&
s可以平衡它们。出来。此外,这甚至不遵循任何规则,因此即使它是有效的开关,也还是会“关闭”。
接下来是第二行:
^^$
$$*
!$!
同样,仅关注中间的开关。该开关处于“开”,由于其具有至少 1 !
中至少 1角。这一个的坐标是(5,2)
。
继续前进,我们终于进入最后一个开关。这也位于第二行,如下所示:
$#!
*$&
!@&
并且,您可能会看到,尽管#
周围有一个,但它也是一个有效的开关,因为还有2个&
使平衡#
。除此之外,它还在至少!
一个角中至少有一个,因此开关不仅有效,而且也处于“接通”状态。此开关的坐标为(7,2)
。
我们终于到了尽头,并且在整个文本块中找到了2个“ on”开关。它们的坐标是(5,2)
和(7,2)
,这是我们的最终答案,输出应该是什么。但是,此输入非常简单。输入可以得到很多更大,因为没有对文本块有多大可以得到限制。例如,输入甚至可以是200x200
文本的随机块。
制约因素
禁止使用标准漏洞。
不能有可能是一个内置的这一点,但万一有(看你数学),使用直接解决这个内建的是禁止的。
测试用例:
格式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]]
^!!#&#&&&#*^#!^!^@!$
&$$^*$^$!#*&$&$#^^&$
更多即将推出
补充说明
- 您可以假设输入将始终是完整块的形式(即矩形或正方形)
- 输入中将没有任何其他字符
!@#$^&*
。
请记住,这是一个代码高尔夫球,所以最短的代码胜出!