소개
동료와 함께 앉아 점심을 먹으며 작업중인 최신 프로젝트 중 가장 큰 프로젝트에 대해 자랑합니다. 끊임없는 이기주의 쇼케이스에 아프고 지치면, 당신은 당신에게 도전을 주므로 닥칠 것입니다. (당신이 있기 때문에 당연히 받아, 당신을 당신이있는 이기주의와 낙천적 인 사람이되는 있어야합니다 각각의 모든 도전을 받아). 챌린지 , 그 / 그녀가 설명한대로이다 주어진 입력 에 하나 또는 각각의 특성을 더 포함하는 텍스트 블록의 !@#$^&*, 출력 스위치이다 (ES) /의 좌표는 "녹색"이다 합리적인 형식.
동료에 따르면 스위치는 a $이고 스위치는 다음 기준 중 하나 이상을 충족하는 경우에만 "켜짐"으로 분류됩니다.
그것은 모두에 둘러싸여
^있습니다. 그래서...^^^ ^$^ ^^^"켜짐"스위치가됩니다.
그것은 모두에 둘러싸여
&있습니다. 그래서...&&& &$& &&&"켜짐"스위치가됩니다.
이 두 개 이상으로 완전히 덮여
*있습니다. 예를 들어*** &$& ***"켜짐"스위치가 발생하지만
&*& &$& &*&스위치가 양쪽으로 완전히 덮 이지 않았기 때문에
*s 는 없습니다 .주변 모서리 에는 최소한 1 개
!및 / 또는 1@개가 있습니다. 이것은 않습니다 하지 둘 중 하나 인 경우 계산 하지 구석에. 그래서...!&& ^$@ @&!코너 중 적어도 하나
!및 / 또는 적어도 하나가 있기 때문에 "온"스위치가된다@(위의 경우, 2 개의 유효한!s 및 1 개의 유효한@3 개의 코너에 있음). 과...&!& ^$@ ^!&수행 하지 2가 있지만,
!s와 1@그들 중 누구도에 없기 때문에, 어떤 코너의.1 이상이
#되어 있지 에 있는 적어도 1 않는 스위치 주위 측면&스위치를 둘러싼 다. 다시 말해서, 한쪽에 최소한 1 개가 존재한다면#, 존재하지 않는 한 다른 모든 규칙을 무시합니다&. 따라서:#&* *$* !**스위치
#가&주변에 있기 때문에 "on"스위치가 발생하지만 스위치는 위의 규칙 중 하나 이상을 따릅니다. 그러나 느낌표가없는 경우 :#&* *$* ***위의 규칙 중 하나 이상을 따르지 않으므로 스위치가 꺼져 있습니다. 따라서 스위치가 a
#및 a 로 둘러싸여 있어도&이러한 규칙 중 하나 이상을 따르지 않으면 여전히 꺼져 있습니다. 또한 스위치가 유효하려면 s와 s 사이에 항상 > = 1 : 1 비율 이 있어야합니다. 예를 들어&##&! *$* **#이 규칙 중 1 개를 따르지만 2 개가
#있지만 1 개만&있으므로&s와#s 사이 의 > = 1 : 1 비율이 아니기 때문에 여전히 유효하지 않은 스위치 입니다. 이것을 유효하게하려면, 다음 과 같이 s와 s&의 수의 균형을 맞추기 위해 가장자리에 하나 이상의을 추가해야합니다 .#&#&! *$& &*# 3:2 ratio between &s and #s드디어...
#^^ ^$* @^!스위치를 "OFF"에서 결과는 포함하지 않기 때문에 그것보다 위의 규칙 1을 따르지만 적어도 하나
#주위를 더가&그것을 ...보다 더 무겁다 s 내지.유효한 스위치 할 만 할 안에 입력하고, 따라서, 각각이 유효한
$묶어야 완전히 유효한 문자 중 8. 예를 들어 전체 입력이 다음과 같은 경우*$* !$! !!!상단은
$확실히 하지 스위치가 가장자리에, 따라서 스위치가 완전히 8 개 유효한 문자로 둘러싸여되지 않기 때문에 유효한 스위치. 이 경우 스위치도 고려해서는 안됩니다. 그러나 중간에있는 스위치는 위의 요구 사항 중 하나 이상을 충족하므로 실제로 유효합니다.
시연하려면이 문자 블록을 고려하십시오.
!@#^^$#!@
!@#$$*$&@
@$^!$!@&&
수직 축 y과 수평 축을 호출하여 좌표에 레이블을 지정할 수 있습니다 x.
y
3 !@#^^$#!@
2 !@#$$*$&@
1 @$^!$!@&&
123456789 x
좌표는 항상(x,y) 2 차원 좌표 그리드와 유사한 형식 으로 반환 되어야합니다 . 이제 어떤 스위치가 켜져 있습니까? 먼저 모두 찾아 봅시다. 우리는 이미 맨 위 줄에 1이 있고 맨 아래 줄에 1이 있음을 이미 알 수 있습니다. 그러나 8 자로 완전히 둘러싸여 있지 않기 때문에 자동으로 no-ops입니다.
다음은 2 행에있는 것입니다. 구체적으로,이 것 :
#^^
#$$
^!$
우리는 $이것에 3 개의 표시 가 있음을 알 수 있지만 중간에 하나의 표시에만 집중하고 싶을 것입니다. 아마도 보시다시피, 2 개의 부호가 있고 균형을 잡을 수 #없기 때문에 이미 유효하지 않습니다. &밖. 또한 이는 규칙을 따르지 않으므로 유효한 스위치 인 경우에도 "끄기"상태가됩니다.
다음은 2 행에 또 하나 있습니다.
^^$
$$*
!$!
다시, 중간에있는 스위치에만 초점을 맞 춥니 다. 그것을 가지고 있기 때문에이 스위치는, "에"입니다 적어도 1 !년 이상 1 코너. 이것의 좌표는 (5,2)입니다.
계속해서 마지막 스위치로 넘어갑니다. 이것은 두 번째 행에도 있으며 다음과 같이 나타납니다.
$#!
*$&
!@&
보시다시피 #, 이 스위치는 주변 스위치가 있지만이 스위치도 유효한 스위치 입니다. 또한 코너 중 적어도 하나에 1 이상이 있으므로 스위치가 유효 할뿐만 아니라 "켜짐"상태입니다. 이 스위치의 좌표는 입니다.&#!(7,2)
우리는 마침내 끝에 도달했고, 텍스트의 전체 블록에서 2 개의 "on"스위치를 발견했습니다. 그들의 좌표는 (5,2)and이며 (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]]
^!!#&#&&&#*^#!^!^@!$
&$$^*$^$!#*&$&$#^^&$
더 빨리 온다
추가 사항
- 입력이 항상 완전한 블록 (예 : 사각형 또는 사각형)의 형태라고 가정 할 수 있습니다.
- 입력에 입력 된 문자 이외의 다른 문자 는 없습니다
!@#$^&*.
이것은 코드 골프 이므로 가장 짧은 코드가 승리 한다는 것을 기억하십시오 !