Wprowadzenie
Siedzisz ze współpracownikiem, jesz lunch i chwalisz się nim / jej o najnowszym i podobno największym projekcie, nad którym pracujesz. Mając dość zmęczenia ciągłym pokazaniem egoizmu, daje ci wyzwanie, abyś się zamknął. Będąc egoistyczną i szczęśliwą osobą, którą jesteś, oczywiście akceptujesz (ponieważ musisz zaakceptować każde wyzwanie). Wyzwaniem , jak on / ona wyjaśnia to, podać wejście bloku tekstu zawierający 1 lub więcej w każdym znaku !@#$^&*
, wyjścia w każdym rozsądnym formacie współrzędne przełącznika (ES), które jest / są „on”.
Według współpracownika przełącznik jest przełącznikiem $
, a przełącznik jest klasyfikowany jako „włączony” tylko wtedy, gdy spełnia przynajmniej 1 z następujących kryteriów:
Jest otoczony przez wszystkich
^
. Więc...^^^ ^$^ ^^^
skutkuje przełączeniem „on”.
Jest otoczony przez wszystkich
&
. Więc...&&& &$& &&&
skutkuje przełączeniem „on”.
Jest całkowicie pokryte co najmniej z dwóch stron
*
. Na przykład,*** &$& ***
skutkuje przełączeniem „on”, ale
&*& &$& &*&
nie robi, ponieważ przełącznik nie jest całkowicie zakryty z dwóch stron przez
*
s.W każdym z rogów jest co najmniej 1
!
i / lub 1@
. Nie ma to znaczenia, jeśli któryś z nich nie znajduje się w kącie. Więc...!&& ^$@ @&!
skutkuje przełączeniem „on”, ponieważ jest co najmniej 1
!
i / lub@
co najmniej 1 z rogów (w powyższym przypadku są 2 ważne!
s i 1 ważne@
w 3 rogach). I...&!& ^$@ ^!&
czy nie , chociaż istnieją 2
!
s oraz 1@
, ponieważ żaden z nich nie są w każdy z rogów.1 lub więcej nie
#
znajduje się po żadnej stronie wokół przełącznika, chyba że co najmniej 1 otacza przełącznik. Innymi słowy, jeśli na boku znajduje się co najmniej 1 , zastępuje on wszystkie inne reguły, chyba że istnieje również prezent. W związku z tym:&
#
&
#&* *$* !**
skutkuje przełączeniem „włączonym”, chociaż
#
istnieje, ponieważ&
wokół przełącznika znajduje się obwódka i jest on zgodny z co najmniej 1 z powyższych zasad. Jeśli jednak wykrzyknik nie byłby obecny w ten sposób:#&* *$* ***
Przełącznik byłby wyłączony, ponieważ nie spełnia co najmniej jednej z powyższych zasad. Dlatego nawet jeśli przełącznik może być otoczony przez a
#
i a&
, nadal byłby wyłączony, chyba że będzie przestrzegał jednej lub więcej z tych zasad. Ponadto, aby przełącznik mógł być prawidłowy , zawsze musi istnieć stosunek> = 1: 1 między&
si#
is. Na przykład,#&! *$* **#
nadal byłby nieprawidłowym przełącznikiem, chociaż jest zgodny z 1 z tych reguł, ponieważ istnieją 2
#
s, ale tylko 1&
, a zatem nie stosunek> = 1: 1 między&
s i#
s. Aby to było ważne, musisz dodać 1 lub więcej dodatkowych&
s do dowolnej krawędzi, aby zrównoważyć liczbę#
s i&
s, prawdopodobnie tak:#&! *$& &*# 3:2 ratio between &s and #s
Wreszcie...
#^^ ^$* @^!
skutkuje przełączeniem „wyłączony”, chociaż jest zgodny z co najmniej 1 z powyższych zasad, ponieważ zawiera co najmniej 1
#
wokół niego, i nie ma&
możliwości zrównoważenia go.Prawidłowe przełączniki będą znajdować się tylko w danych wejściowych, dlatego też każdy prawidłowy
$
musi być całkowicie otoczony dowolnymi 8 poprawnymi znakami. Na przykład, jeśli całe dane wejściowe miałyby być:*$* !$! !!!
góra
$
zdecydowanie nie jest prawidłowym przełącznikiem, ponieważ przełącznik znajduje się na krawędzi, a zatem przełącznik nie jest całkowicie otoczony 8 poprawnymi znakami. W takim przypadku przełącznik nie powinien nawet być brany pod uwagę. Jednak przełącznik pośrodku jest całkowicie prawidłowy i faktycznie jest „włączony”, ponieważ spełnia co najmniej jeden z powyższych wymagań.
Aby zademonstrować, rozważ ten blok znaków:
!@#^^$#!@
!@#$$*$&@
@$^!$!@&&
które możemy oznaczyć dla takich współrzędnych, nazywając oś pionową y
i oś poziomą x
:
y
3 !@#^^$#!@
2 !@#$$*$&@
1 @$^!$!@&&
123456789 x
Współrzędne muszą zawsze być zwracane w (x,y)
formacie podobnym do dwuwymiarowej siatki współrzędnych. Które przełączniki są włączone? Cóż, najpierw znajdźmy je wszystkie. Widzimy już, że jeden jest w najwyższym górnym rzędzie, a drugi w samym dolnym rzędzie. Są to jednak automatycznie brak operacji, ponieważ nie są całkowicie otoczone przez 8 znaków.
Dalej jest ten w rzędzie 2. W szczególności ten:
#^^
#$$
^!$
Widzimy, że są $
w tym 3 znaki, ale chcemy po prostu skupić się na środku w środku i, jak zapewne widać, jest już nieprawidłowy, ponieważ ma #
wokół siebie 2 s, bez &
s, aby je zrównoważyć na zewnątrz. Ponadto nie jest to nawet zgodne z żadną z zasad, więc nawet jeśli byłby to prawidłowy przełącznik, i tak byłby „wyłączony”.
Następnie pojawia się kolejny wiersz 2:
^^$
$$*
!$!
Ponownie skup się tylko na środkowym przełączniku. Ten przełącznik jest „włączony”, ponieważ ma co najmniej 1 !
w co najmniej 1 rogu. Współrzędne tego są (5,2)
.
Idąc dalej, w końcu przechodzimy na ostatni przełącznik. Ten jest również w drugim rzędzie i wygląda tak:
$#!
*$&
!@&
i, jak zapewne widać, ten jest również prawidłowym przełącznikiem, chociaż istnieje jego #
otoczenie, ponieważ istnieją 2 inne &
s do zrównoważenia #
. Oprócz tego ma również co najmniej 1 !
w co najmniej 1 narożniku, a zatem przełącznik jest nie tylko prawidłowy, ale także „włączony”. Współrzędne tego przełącznika to (7,2)
.
W końcu doszliśmy do końca i znaleźliśmy 2 przełączniki „on” w całym bloku tekstu. Ich współrzędne są (5,2)
i (7,2)
, co jest naszą ostateczną odpowiedzią, i jaki powinien być wynik. Jednak ten wkład był bardzo prosty. Dane wejściowe mogą być znacznie większe, ponieważ nie ma ograniczeń co do wielkości bloku tekstu. Na przykład wejściem może być nawet losowy 200x200
blok tekstu.
Przeciwwskazania
Standardowe luki są zabronione.
Nie może być może być wbudowany do tego, ale na wszelki wypadek nie jest (patrząc na ciebie Mathematica), korzystanie z wbudowanych wtyczek, które bezpośrednio rozwiązać ten jest zabronione.
Przypadki testowe:
Podany w formacie 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]]
^!!#&#&&&#*^#!^!^@!$
&$$^*$^$!#*&$&$#^^&$
Więcej wkrótce
Dodatkowe uwagi
- Możesz założyć, że dane wejściowe będą zawsze w postaci pełnego bloku (tzn. Prostokąta lub kwadratu)
- Na wejściu nigdy nie będzie żadnych innych znaków niż te w
!@#$^&*
.
Pamiętaj, to jest golf golfowy, więc wygrywa najkrótszy kod!
Odpowiedzi:
Haskell, 304 bajty
Określa funkcję,
f
która wykonuje dane zadanie.źródło
JavaScript (ES6),
363339312309298 bajtówTa funkcja przyjmuje dane wejściowe jako ciąg znaków i zwraca listę współrzędnych. Jest on podzielony na 2 główne części: transformację przełączników na parę współrzędnych i otaczające je postacie oraz kontrolę „czy to włączone” w oparciu o reguły wyzwania dla otaczających bohaterów.
źródło
Python 2 ,
299297279275261259 bajtówWypróbuj online!
Pobiera dane wejściowe jako listę ciągów
Drukuje dane wyjściowe jako parę współrzędnych x, y w każdej linii
źródło