Stycznie zainspirowany otwarciem książki What-If.
Dane wejściowe to prostokąt spacji jako ciąg znaków, lista ciągów znaków itp., W których znajdują się obiekty #
:
########
# #
########
### ####
### ####
###
Obiekty zawsze będą się nie przecinały, nie dotykały prostokątów. Miękki obiekt jest zdefiniowany jako obiekt, który nie jest wypełniony #
s na środku i jest tylko ramką, twardy obiekt to taki, który jest wypełniony. Obiekt o szerokości lub wysokości <=2
jest uważany za twardy. Wszystkie przedmioty są twarde lub miękkie.
Jeśli na wejściu znajduje się więcej twardych obiektów, wyjście "Hard"
, jeśli jest bardziej miękkie, wyjście "Soft"
, jeśli są równe, wyjście "Equal"
.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach !
Przypadki testowe
Te przypadki nie są pełnymi danymi wejściowymi, ale raczej tym, jak każdy obiekt powinien być scharakteryzowany. Rzeczywisty wkład będzie jak ascii-art na górze pytania.
Ciężko
#
####
##
##
##########
##########
##########
Miękki
###
# #
###
###################
# #
# #
# #
###################
####
# #
# #
# #
# #
# #
# #
# #
####
Rzeczywiste przypadki testowe
########
# #
########
### ####
### ####
###
Hard
###
###
###
###################
# #
# #
# #
###################
Equal
######
# #
######
###
## # # #
###
########
# #
########
Soft
źródło
Odpowiedzi:
MATL ,
105104585049 bajtówDzięki @Neil za sugestię, która pozwoliła mi usunąć 46 bajtów!
Dane wejściowe to tablica znaków 2D z wierszami oddzielonymi
;
. Przykładem wyzwania jestOto inny przykład:
To odpowiada
i dlatego powinien dać
'Equal'
.W trzecim przykładzie, odpowiadające
'Soft'
,to jest,
Wypróbuj online!
Wyjaśnienie
Wykorzystuje splot 2D do wykrywania kształtów. Dane wejściowe są konwertowane na tablicę 2D ze
1
wskazaniem#
i-1
dla przestrzeni; i jest wypełniony ramką-1
wartości. Zapewnia to wykrycie kształtów na krawędzi pierwotnego pola.Miękki przedmiot jest wykryty przez maskę
co odpowiada lewemu górnemu narożnikowi obiektu z jednym pustym punktem wewnętrznym. Zauważ, że splot odwraca maskę, więc jest zdefiniowany jak
[-1 1; 1 1]
w kodzie. Liczba S pozycji, w których splot4
jest równy, jest całkowitą liczbą miękkich obiektów.Obiekt (miękkie lub twarde) zostanie wykryty przez maskę
który odpowiada lewy górny róg obiektu wraz z pewnymi pustymi punktami zewnętrznymi. Ta maska jest zaprzeczoną wersją poprzedniej, więc poprzedni wynik splotu można ponownie wykorzystać. W szczególności liczba T pozycji, w których wynik ten
-4
jest równy, to całkowita liczba obiektów.Liczba H twardych przedmiotów jest T - S . Ciąg wyjściowy określa znak S - H = 2 * S - T .
źródło
JavaScript (ES6),
123121118 bajtówZaoszczędzono 2 bajty dzięki @ edc65!
Pobiera dane wejściowe jako ciąg wielowierszowy wypełniony spacjami, aby utworzyć siatkę.
Wyjaśnienie / test
Bardzo blisko długości MATL!Zasadniczo szuka górnej linii#
s każdego obiektu, a jeśli długość górnej linii jest mniejsza niż 2 lub pierwsze 2 znaki poniżej górnej linii są takie same, jest to trudne, w przeciwnym razie miękkie.źródło
###
zwracaEqual
.~g.search(/$/m)
jest nieco bardziej czytelny niż~g.search`\n`||-1
.||-1
postanowiłem go naprawić, ale twoja sugestia uświadomiła mi, że dodanie|$
wyrażenia regularnego pozwoli zaoszczędzić 2 bajty. Dzięki!n=l=...
n>l?...:n<l?...:...
Galaretka,
5049464338343332 bajtyWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
tło
Istnieje 16 różnych wzorów bloków i spacji 2 × 2 :
Spośród nich, ponieważ dwa przedmioty nigdy się nie dotykają,
nigdy nie pojawi się na wejściu, pozostawiając nam 14 możliwych wzorców.
Przypisanie
wartości 0 , a
#
wartość 1 , można kodować 2 x 2 wzórjako 2 (2a + c) + (2b + d) = 4a + 2b + 2c + d , pozostawiając następujące wartości dla 14 wzorów.
Częściowych 2 x 1 , 1 x 2 i 1 x 1 wzorców na dolnej i / lub prawej krawędzi, to je traktować tak, jakby były spacjami kodujących je jako 4a + 2b , 4a + 2c i 4a , odpowiednio .
W ten sposób każdy obiekt (miękki lub twardy) będzie miał dokładnie jeden wzór 4 (jego prawy dolny róg); każdy miękki obiekt będzie miał dokładnie dwa 7 wzorów (jego lewy dolny i prawy górny róg).
Zatem odjęcie liczby 4 wzorów od liczby 7 wzorów napotkanych na wejściu da (s + h) - 2s = h - s: = d , gdzie h i s to ilość twardych i miękkich obiektów, które tworzą.
Drukujemy Hard, jeśli d> 0 , Soft jeśli d <0 i Equal, jeśli d = 0 .
Jak to działa
źródło
Julia,
999593 bajtów!
oczekuje dwuwymiarowej tablicy Char jako argumentu. Wypróbuj online!Jak to działa
To używa prawie dokładnie tego samego pomysłu, co moja odpowiedź Jelly , z jedną poprawką:
Zamiast zliczać liczby 4 i 7 , usuwamy wszystkie inne liczby, a następnie odejmujemy 5,5, aby mapować (4, 7) na (-1,5, 1,5) . W ten sposób znak sumy różnic wynikowych określa prawidłowy wynik.
źródło
TSQL,
328249 bajtówDeklarowanie zmiennych i danych testowych:
Kod:
Deflowany kod:
Wyjaśnienie:
Skrypt skanuje tekst w poszukiwaniu wzorca:
Każdy z nich jest początkiem pudełka
W przypadku tych pozycji skrypt sprawdza następnie wzorzec, nie trzeba sprawdzać pierwszego x:
Gdy istnieje, jest to obiekt miękki, w przeciwnym razie jest to obiekt twardy.
źródło