Znajdź Świętego Mikołaja i jego renifery w zatłoczonej scenie.
Wejście
Dane wejściowe będą na STDIN i będą zmienną liczbą wierszy znaków o jednakowej, ale zmiennej długości. Jeśli Święty Mikołaj (reprezentowany przez postać S
) jest na scenie, jego worek prezentów (reprezentowany przez postać P
) będzie na jednej z sąsiadujących z nim pozycji (poziomo, pionowo lub po przekątnej). Jego renifery (każdy reprezentowany przez postać R
) będą znajdować się wokół otaczającego go kwadratu 5x5. Jeśli S
na scenie pojawi się coś , co nie ma worka prezentów lub nie towarzyszy mu co najmniej 4 reniferów, to nie jest to Święty Mikołaj.
Wynik
Scena została oczyszczona z wszelkich zaciemnień (wszystkie postacie inne niż Święty Mikołaj, nie-prezenty, nierenifery zastąpione spacją), przedstawiające Świętego Mikołaja, jego worek prezentów i jego renifery - wszystkie inne postacie należy zastąpić spacjami. Jeśli Świętego Mikołaja i jego renifera nie ma na scenie, wyjmij go bez zmian. Gwarantujemy, że będzie tylko jedno rozwiązanie, więc nigdy nie będzie więcej niż jednego ważnego Świętego Mikołaja i nigdy nie będzie nosił więcej niż jednego worka prezentów.
Przykłady
W tych przykładach Ja tylko używając *
charakter sprawiają, że łatwo zobaczyć S
, P
i R
znaki, ale program powinien być w stanie obsłużyć każdy znak ASCII od !
do `
(33 do 96). Pominąłem małe litery i powyżej, aby uniknąć nieporozumień.
Wejście:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Dane wyjściowe: (ignoruj kropki, aby zmusić stronę do wyświetlania pustych linii)
.
.
.
R
P
S
R
R R
.
.
.
.
Wkład: (za mało reniferów)
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Wynik:
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Wejście: (bez worka prezentów)
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Wynik:
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Dane wejściowe: (prezenty nie są wystarczająco blisko)
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Wynik:
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Wejście: (jeden z reniferów poza polem 5x5 wokół Świętego Mikołaja)
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Wynik:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Skrypty testowe
Podobnie jak w niektórych moich poprzednich pytaniach, po raz kolejny opracowałem skrypty testowe pierwotnie stworzone przez Joeya i Ventero, aby zapewnić kilka przypadków testowych dla tego pytania:
Stosowanie: ./test [your program and its arguments]
Wersja testu z tekstem jawnym : tekst zwykły
Nagrody
Każdy wpis, który mogę zweryfikować, który spełnia specyfikację, przechodzi testy i oczywiście miał pewne próby gry w golfa, otrzyma ode mnie opinię (więc proszę o podanie instrukcji użytkowania wraz z odpowiedzią). Najkrótsze rozwiązanie do końca 31.12.2013 zostanie zaakceptowane jako zwycięzca.
Odpowiedzi:
MATLAB: 110
, 95znakówNie jestem pewien, w jaki sposób dane wejściowe powinny być przetwarzane, ale reszta jest dość prosta.
Wersja normalnie sformatowana:
Przykładowe dane wejściowe:
źródło
*
znaków jak tłum, aby łatwiej było zobaczyćS
,P
aR
znaki - Zważywszy, że badania w zakresie wykorzystania skryptu testu wszystkie znaki ASCII od 33 (!
) w górę do (włącznie) 96 (`` `). Wyjaśnię to w pytaniu. Zrobiłem tekstową wersję testów, które musisz zaliczyć, którą również dodam do pytania.Q
uilt, uratowałby mi co najmniej 2 postacie.SQL_2
Python 2 (
353381)Pierwsza próba napisania kodu tak kompaktowego, jak to możliwe. Python nie jest tak naprawdę językiem do tego, ponieważ wcięcia i znaki nowej linii są po prostu wymagane przez projekt. Głównie wybieram używanie tego języka, ze względu na sposób, w jaki możesz grać z listami i ciągami jako listami. Język z łatwą obsługą macierzy byłby idealny do tego zadania, ale niestety nie znam żadnego z nich.
Aby przetestować, coś należy przypisać npGłówną interesującą rzeczą w tym kodzie jest prawdopodobnie:
co jest fantazyjnym sposobem pisania: „b staje się listą reprezentacji (ciąg 25 znaków) każdego kwadratu 5x5 w oryginalnej reprezentacji”.
źródło
W pliku powinien znajdować się tylko jeden Święty Mikołaj (jeśli więcej niż 2 „S”, potrzebuję zaktualizować kod).
Korzystanie z awk
Uruchom komendę awk jak poniżej
Wynik
źródło
S
są dozwolone, o ile tylko jeden jest „ważnym” Mikołajem. Testy (podane w pytaniu) mają kilka przypadków, które z tego powodu zakończyłyby się niepowodzeniem.