Jednym z interesujących aspektów grawitacji jest to, że o ile mi wiadomo, nie można po prostu unosić rzeczy w powietrzu.
Wydaje się jednak, że nie wszyscy w Association of Random Castle Builders są tego świadomi, co prowadzi do takich zamków jak ten:
#
#
# # # # ###
#### #### # #
#### # # #### ###
############## ###
###### ###### ###
##### ##### ###
###
``````````````````````````````
i ten:
# # # # # #
##############
### #### ###
# # # # # # # # ### #### ### # # # # # # # #
#### #### #### #### ############## #### #### #### ####
#### # # #### # # #### # # #### ## ######## ## #### # # #### # # #### # # ####
####################################################################################
###### ######## ######## ######## ######## ######## ######## ######## ######
################################### ###### ###################################
################################### ###### ###################################
##
##
##
##
##
````````````````````````````````````````````````````````````````````````````````````````````
a nawet ten:
##########
#### # ###
#######################
#
#
#
#
# # # #
# # ###
# # ###
# # # # ##
# # ## ###
# # #####
# #####
# # #####
#####
## ##
#####
#####
## ##
## ##
````````````````````````````````````````````
Wyzwanie
W przypadku ważnego zamku wszystkie bloki zostaną połączone z ziemią bezpośrednio lub pośrednio. Twój program lub funkcja otrzyma zamek taki jak te powyżej jako dane wejściowe, a twój program musi zwrócić wartość prawdy lub fałszu odzwierciedlającą, czy zamek jest ważny, czy nie.
Zasady
- Dane wejściowe są podawane jako ciąg.
- Wszystkie ważne zamki spoczywać na powierzchni
````````
. (Jeśli łańcuch wejściowy nie zawiera powierzchni, zamek jest nieprawidłowy.) - Możesz założyć, że wszystkie dane wejściowe spełnią następujące kryteria:
- Powierzchnia zawsze będzie płaska.
- Powierzchnia zawsze będzie co najmniej tak szeroka jak zamek, więc po lewej lub prawej stronie ziemi nie będzie żadnych bloków.
- Wejście nigdy nie będzie
#
pod powierzchnią. - Dane wejściowe będą zawierać tylko znaki podane w tym wyzwaniu. (
#
,`
spacja lub nowa linia). - Możesz założyć, że dane wejściowe zawsze będą zawierać co najmniej jeden znak.
- Bloki są połączone, jeśli sąsiadują poziomo lub pionowo. Przekątna się nie liczy!
- Połączony:
# or ##
# - Nie połączony:
# or # # or #
#
#
- Połączony:
- Zamki muszą istnieć, aby były ważne. (Innymi słowy, dane wejściowe bez żadnej
#
muszą dawać wartość fałszowania.) - Dane wejściowe będą zawierać tylko znaki podane w tym wyzwaniu. (
#
,`
spacja lub nowa linia). - Możesz założyć, że dane wejściowe zawsze będą zawierać co najmniej jeden znak.
- Obowiązują standardowe zasady we / wy i luki .
Przypadki testowe
Falsy
- Wszystkie przykłady podane powyżej.
# # # #
(Bez ziemi.)
#### ####
#### # ####
##############
###### ###### ######
## ### ######
(Górny blok nie jest połączony ani poziomo, ani pionowo).
### ####
#### # # ####
##############
###### ###### ######
##### # ####
`` `` `` `` `` `` `
``
(Centralna wieża nie jest połączona z resztą zamku, ponieważ nie ma łączących go bloków poziomo lub pionowo).
# # # # # #
##############
##### ## #####
# # # # # # # ##### # #### # # # # # # # #
#### #### #### #### ## #### ## #### #### #### ####
## ## # # #### # #### # # #### # # #### # #### # # #### # # #### # ####
######################################################################## ########################################
###### ######## ## ###### ######## ######## ######## ######## ######## #### ##
########################################## ###### ###### ####### ############################
################################################ ######### ##########################
`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `
(Bez zamku, tylko jeden znak nowej linii.)# #
(Blok najbardziej po prawej stronie nie jest podłączony poziomo ani pionowo).
#
`` `` ``
``
Prawda
#
`# # # #
#### ####
#### # ####
##############
###### ###### ######
## ### #####
`` `` `` `` `` ``#
#
# # # # ###
#### #### #
#### # #######
############## ###
# ##### ###### ###
##### ##### ###
##### ##### ###
`` `` `` ` `` `` `` `` `` `` `` `` ``# # # # # #
##############
### #### ###
# # # # # # # ### #### ### # # # # # # # #
#### #### #### #### ############## #### #### #### ## ##
#### # # #### # # #### # # #### ## ######## ## #### # # #### # ### ## # # ####
################################################################ ########################################################
###### ## ###### ######## ######## ######## ######## ######## #### #### ######
############################################################## # ###################################
################################################ ######### ##########################
`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ``#### ###
# #### ###
# ###
# ##
#
###
#####
####### #######
#########
### ## #####
##### #####
###### ######
###################
### ########## #
#############
#############
############# #############
###### ######
###### ######
#############
#############
#############
#############
###### ###### ##### #
###### ######
#############
#############
########### ##
#############
###### ######
###### ######
########### ##
#############
#############
#############
######### ####
##### #####
##### #####
##### #####
`` `` `` `` `` `` ` `` ``
####
#####
######
####
####
#####
########
##########
#### ######
###########
############
#####################
##### ## ##############
########### #################
###########################################
####### #################################
############################### ####################
#################################################### ####
############################
######################### #
`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ` `
Powodzenia!
code-golf
ascii-art
decision-problem
użytkownik2428118
źródło
źródło
Odpowiedzi:
Ślimaki ,
2118 bajtów-3 bajty z powodu dodatkowych ograniczeń wejściowych edytowanych jako wyzwanie.
Niestety złożoność czasu jest silna, więc większości danych wejściowych nie można uruchomić.
Wyprowadza 0 dla przypadków fałszowania i liczbę
#
dla przypadków prawdziwych.źródło
#
jest podłączony do ziemi.+
jest błąd - w rzeczywistości jest 1 lub więcej razy, a nie 0. I tak będzie wyglądać inaczej po zezwoleniu na rozłączenie zamków.Oktawa,
5351 bajtówWypróbuj online!
* Ponieważ op usunął wymóg sprawdzania pustej odpowiedzi wejściowej przywrócono do mojej pierwszej edycji.
Wyjaśnienie:
źródło
Brud , 29 bajtów
Wypróbuj online! Większość przypadków testowych kończy się w TIO. Wymień
<0C>
się<0CoF>
zrobić to trochę szybciej.Wyjaśnienie
Sprawdzam, czy z każdego
#
istnieje ścieżka do`
i czy istnieje przynajmniej jedna#
. Niedawno dodałem polecenia obrotu do Grime, które znacznie ułatwiają to wyzwanie.źródło
JavaScript (ES6),
197196 bajtówGdzie
\n
reprezentuje dosłowny znak nowej linii. Próbuje usunąć wszystkie z#
nich pojedynczo, znajdując sąsiadujący z a`
i zmieniając go na a`
. Zwraca,true
jeśli#
pierwotnie był co najmniej jeden, ale wszystkie zostały usunięte. Wersja wymagająca wypełnienia dla118117 bajtów:źródło
Perl 6 , 180 bajtów
Sprawdza, czy dane wejściowe zawierają co najmniej jeden
#
i czy każdy#
może znaleźć ścieżkę do`
.Raczej nieefektywny, ponieważ szukanie ścieżki jest brutalnie wymuszone przy użyciu funkcji rekurencyjnej, która zawsze odwiedza wszystkie inne
#
z tego samego połączonego regionu (tj. Nie zwiera).Używa jakiejś bezbożnej interakcji między operatorami Junction i poślizgnięcia , aby upewnić się, że test ścieżki jest pomijany dla znaków spacji bez konieczności osobnego sprawdzania tego poza funkcją wyszukiwania ścieżki.
źródło
Python 3 ,
214206 bajtówWypróbuj online!
Pierwsza linia tutaj jest poświęcona dopełnianiu wszystkich linii do tej samej długości: dzielimy ciąg (
s.split('\n')
jest o jeden znak krótszy niżs.splitlines()
), znajdujemy maksymalną długość linii i przypisujemy do C spłaszczoną listę wszystkich znaków po wypełnieniu każdego linia. (Nowe linie zniknęły.)Potem zrób listę, gdzie każda postać nie-przestrzeni w sąsiedztwie co najmniej jednej lewy apostrof jest zastąpiony przez lewy apostrof, i dalej, aż żadna zmiana się (gdy stara lista
o
jest równaC
. Możemy porównaćC>o
zamiastC!=o
ponieważ zastępując # (ASCII 35 ) za pomocą `(ASCII 96) może jedynie zwiększyć porządek leksykograficzny listy.)Jeśli nie ma #, a przynajmniej jeden był obecny na początku, zamek jest ważny.
'#'in s and'#'not in C
źródło