Wprowadzenie
Niedawno zaakceptowałeś ofertę pracy w Pretty Good Software Company. Jesteś całkiem zadowolony z wielkości swojego biura, ale czy masz największe biuro? Trudno to odróżnić od spojrzenia na biura współpracowników, kiedy wpadniesz. Jedynym sposobem na rozwiązanie tego problemu jest sprawdzenie planów budynku ...
Twoje zadanie
Napisz program, skrypt lub funkcję, która bierze plan piętra dla twojego budynku i wskazuje, czy twoje biuro jest największe. Plan piętra jest łatwy do odczytania, ponieważ budynek ma kwadrat n na n .
Dane wejściowe będą składały się z n + 1 \n
-niepełnionych linii. Pierwszy wiersz będzie miał na sobie liczbę n . Kolejne n wierszy będzie planem budynku. Prosty przykładowy wpis:
6
......
. . .
.X . .
. . .
. . .
......
Zasady dotyczące planu piętra są następujące:
.
(ASCII 46) Będzie używany do reprezentowania ścian.(Spacja [ASCII 32]) zostanie użyta do przedstawienia otwartej przestrzeni.
- Jesteś reprezentowany przez
X
(ASCII 88). Jesteś w swoim biurze - Plansem będzie n linii, każda z n znakami.
- Budynek jest całkowicie otoczony ścianami ze wszystkich stron. Oznacza to, że drugi wiersz danych wejściowych (pierwszy wiersz planu piętra) i ostatni wiersz danych wejściowych będą
.
s. Oznacza to również, że pierwszymi i ostatnimi znakami każdej linii planu piętra będą litery.
s. - Wielkość biura jest definiowana jako suma sąsiadujących ze sobą przestrzeni (sąsiadujących, przesuwając się w 4 kierunkach, N, S, E, W, bez przechodzenia przez ścianę).
- Dla celów wielkości biura X reprezentujący cię liczy się jako
(otwarta przestrzeń)
- 4 <= n <= 80
Powinieneś wypisać, czy twoje biuro jest ściśle większe niż wszystkie inne biura. Wynikiem może być wszystko, co jednoznacznie oznacza Prawdę lub Fałsz w wybranym języku programowania i jest zgodne ze standardowymi konwencjami zero, zero i puste, oznaczające fałsz. Prawda oznacza, że twoje biuro jest ściśle największe.
Przykładowe dane wyjściowe dla powyższego wejścia:
1
Ponieważ twoje biuro ma 8 stóp kwadratowych, a jedyne inne biuro ma 4 stopy kwadratowe.
Wytyczne I / O
- Dane wejściowe można odczytać ze standardowego wejścia, a odpowiedź na standardowe wyjście.
Lub
- Dane wejściowe mogą być argumentem pojedynczego ciągu funkcji, a odpowiedzią może być wartość zwracana przez tę funkcję.
FAQ
- Cały budynek składa się ze ścian i biur.
- Budynek ma tylko jedno piętro
- Na wejściu jest gwarantowane X, ale nie ma żadnych spacji. Możesz mieć biuro 1x1, a reszta budynku to ściany (masz największe biuro! Hura!).
Inny przykład
10
..........
. . . .
. . . .
. . . .
. .. . .
.. .
..........
. X .
. .
..........
Tutaj są 3 biura, twoje biuro południowe jest prostokątne, biuro północno-zachodnie to trójkąt (ish), a biuro północno-wschodnie jest dziwnie zniekształcone, ale większe niż twoje. Wynik powinien być fałszywy.
Wyzwanie polega na napisaniu najkrótszego kodu, udanej gry w golfa !
źródło
X
dozwolonych danych wejściowych. :)Odpowiedzi:
Ruby 2.0, 133 znaki
Współpraca z @Ventero. Zawsze dobry znak, gdy zaczyna łamać zakreślacz składni!
Jest to rekurencyjne rozwiązanie wypełniania powodzi. Odczytuje ze STDIN i wysyła do STDOUT:
Zobacz, jak działa na Ideone .
źródło
f
kawałku:f=->l{a=[*l];a.product([~n,-1,1,n+1]){|p,d|a|=[p+d]if$_[p+d]<?.};a!=l ?f[a]:l.size}
. I popraw mnie, jeśli się mylę, ale wygląda na to, że tak naprawdę nie ma znaczenia, czy pozostanie pierwszy wiersz zawierający długość$_
, co pozwoliłoby ci skrócić parsowanie danych wejściowych dogets$e;n=$_.to_i
gets(p)
ponieważp
nic nie robi i zwraca,nil
jeśli zostanie wywołane bez argumentu.product
zwraca on odbiornik, abyl
całkowicie wyeliminować :f=->*a{a.product([~n,-1,1,n+1]){|p,d|a|=[p+d]if$_[p+d]<?.}!=a ?f[*a]:a.size}
- niestety nie możemy zmienić lhs i rhs,!=
aby usunąć przestrzeń, ponieważ w przeciwnym razie obie strony wskazują na niezmodyfikowaną tablicę.String#scan
iARGV
znajdując największy pokój można nieco skrócić:$_.scan(/ /){$*<<f[$
.size]}; p $ *. Max <f [~ / X /] `n
wf
coś w rodzaju[~n=$_.to_i,...]
, możesz następnie połączyć pierwszą i trzecią linię wgets(p).scan(...
sumie w 134 znakach.GolfScript (85 bajtów)
Demo online
Zawiera trzy sekcje:
Początkowa transformacja wejściowa, która tworzy tablicę 2D przy użyciu
0
do reprezentowania ścianyN
(całkowitej liczby komórek) do reprezentowania mojej pozycji początkowej i wyraźnej liczby między nimi dla każdej otwartej przestrzeni.Wypełnienie powodziowe.
Ostateczne liczenie. Wykorzystuje wariant na końcówce dla najbardziej powszechnego elementu w tablicy , dodając przerywacz remisu, który jest tendencyjny
N
.źródło
qN/(~_*:T:U;{[{i5%[0_U(:UT]
=}/]}%{{[{_2$*!!{[\]$W=_}*}*]}%z}T*:+0-:A{_T=A@-,2*+}$0=T=
.JavaScript (E6) 155
292Wersja podstawowa bez golfisty
Test
Konsola JavaScript w Firefoksie
F('6\n......\n. . .\n.X . .\n. . .\n. . .\n......')
F('10\n..........\n. . . .\n. . . .\n. . . .\n. .. . .\n.. .\n..........\n. X .\n. .\n..........\n')
źródło
1
dla mnie daje (w przeglądarce Firefox 30.0)C #,
444372 / (342 dzięki HackerCow) bajtówRaczej kiepski wynik i spóźniony na imprezę, ale wydaje się, że działa. Wyjście 1, gdy masz jedno największe biuro, 0, gdy nie. Nie byłem jeszcze zbyt skomplikowany w golfa. Działa poprzez budowanie rozłącznych zestawów z wejścia (pierwsza pętla), obliczanie wielkości każdego zestawu (druga pętla), a następnie sprawdzanie, czy mój zestaw jest największy (trzecia pętla).
Dostępne są dwie wersje, jedna to program, który można skompilować, tat przyjmuje dane z wiersza poleceń, druga to tylko funkcja, która oczekuje ciągu jako danych wejściowych i zwraca wartość int jako wynik (i jest tylko przerobioną kopią pierwszej) - nie potrzebuje żadnych klauzul używających itp., powinien być w stanie umieścić go w dowolnym miejscu i będzie działać.
Program 372 bajtów :
Funkcja 342 bajtów :
Mniej golfa:
źródło
Main
funkcją i zamienisz funkcję na, powiedz, żeint f(string s)
możesz użyćs.Split('\n')[0]
zamiastConsole.ReadLine()
i zwróć1
lub0
. To powinno zaoszczędzić sporo koduCJam, 106 bajtów
Inne podejście do wypełniania powodziowego. Chociaż sprawia, że dłużej ...
Wypróbuj tutaj
źródło
Python 2 - 258 bajtów
używa wejściowego stdin
Uwaga: pierwsze
if
jest wcięte pojedynczą spacją, inne wcięte linie albo używają pojedynczego znaku tabulacji, albo tabulacji i spacji.źródło
J:
150121 bajtówEdycja :
id
icomp
były absurdalnie skomplikowane i powolne. Teraz przesuwa mapę 4 razy, zamiast skanować ją za pomocą okna 3x3 za pomocącut
(;.
).Bierze jako argument plan jako ciąg znaków. Wyjaśniono poniżej:
źródło
Python 2 - 378 bajtów
Łał. Jestem poza treningiem.
To jest odpowiedź funkcji, ale zanieczyszcza globalną przestrzeń nazw. Jeśli jest to nie do przyjęcia, można to naprawić kosztem 1 bajtu:
Napisałem całe długie wyjaśnienie, ale najwyraźniej nie zapisało się to właściwie i nie robię tego ponownie, Lmao
źródło