Wyzwanie
Biorąc pod uwagę kształt artystyczny ASCII, musisz dowiedzieć się, czy jest to zwykły sześciokąt, czy nie.
Sześciokąty
Zwykły sześciokąt jest definiowany przy użyciu dwóch reguł:
- Ma sześć stron
- Każda strona ma taką samą liczbę znaków
Na przykład poniższy kształt jest regularny, ale nie ma sześciu boków, a zatem nie jest zwykłym sześciokątem :
B a a h
s a i d
y o u r
g a o t
Podobnie poniższy kształt ma sześć boków, ale ma boki o różnych długościach, a zatem nie jest regularnym sześciokątem:
* *
* * *
* * * *
* * *
* *
Jednak następujący kształt ma sześć boków, a wszystkie boki mają tę samą liczbę znaków, więc jest to zwykły sześciokąt:
T h e
h e x a
g o n s a
r e c o
m i n
Zasady
Dane wyjściowe powinny mieć wartość true lub falsey (prawda, jeśli kształt jest regularnym sześciokątem, falsey, jeśli nie).
Kształty zawsze będą zawierały tylko znaki ASCII do wydruku.
Granica kształtu nigdy nie będzie zawierać spacji. Jeśli tak, możesz zwrócić falsey.
Mogą występować dowolne ilości białych znaków przed i / lub po kształcie.
Wszystkie kąty w kształcie mogą nie być równe, na przykład poprawny jest następujący kształt:
. . .
. . .
. . . . .
. . . .
. . .
Zwróci wartość falsey.
Wszystkie dane wejściowe kształtu będą na siatce oddzielonej spacjami. Sześciokątne dane wejściowe będą rozmieszczone naprzemiennie (każda linia jest odsunięta od następnej).
Przykłady
Prawda
Następujące kształty powinny zwracać prawdziwe wartości:
# _
+ + +
9 :
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
t h i s
i s
a h
e x
a g
o n
! ! ! !
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Falsey
Poniższe powinny zwrócić wartości falsey
r e c t a
n g l e s
h e l l o
w o r l d s
t h i s i s b
e t a d e c
a y n o w
*
* *
* * *
.....
.......
.........
.......
.....
Ten kształt nie znajduje się na siatce oddzielonej przestrzenią i nie jest przesunięty.
* * * *
---------
* * * * * *
-------------
* * * * * *
---------
* * * *
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
W przypadku wprowadzania pojedynczych znaków twój program może wypisywać prawdę lub falsey:
&
Zwycięski
Najkrótszy program w bajtach wygrywa.
źródło
5 6 7\n8 9 0 1\n2 3 4 5 6\n7 8 9 0\n1 2 3
jeden z dodatkową spacją prowadzącą do jednego z wierszy:ss5 6 7\nss8 9 0 1\n2 3 4 5 6\ns7 8 9 0\nss1 2 3
(spacje wiodące są zastępowane,s
aby było to bardziej jasne w tej niesformatowanej formie) . Wszystkie 10 twoich przypadków testowych obecnie sprawdza poprawność z moim kodem, ale te dwa przypadki zakończyłyby się niepowodzeniem z zastosowanym podejściem.Odpowiedzi:
R 184 bajty
Grał w golfa, prawdopodobnie mógłby być golfowany o kilka bajtów
Bez golfa, bardzo niechlujny, bardziej jak golf w połowie drogi
Ponieważ format wejściowy jest nieokreślony, dane wejściowe należy określić w formacie tablicy R, wyglądając mniej więcej tak.
Oto funkcja generatora, która generuje dane wejściowe. Generator nie generuje obiektu, który jest wprowadzany do funkcji sprawdzania sześciokąta, ale kod określający tablicę (właściwie to samo). Dlatego nie powinno to być liczone jako parsowanie tekstu. Pamiętaj, że nie wprowadzam tekstu, a raczej strukturę tablic.
Na przykład wygenerowany kod to:
structure(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), .Dim = c(5L, 9L ))
identyczny zarray(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9))
Mam nadzieję, że ta metoda wprowadzania danych jest zgodna z zasadami.
Oto przypadki testowe
Generuj tablice wejściowe
Test na sześciokąt
źródło
f(array(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9)))
JavaScript (ES6), 214 bajtów
Gdzie
\n
reprezentuje dosłowny znak nowej linii. Nie golfowany:źródło
" x\n g g\ng g g\n g g"
powinny dawać false, ale dają true.x
?SnakeEx , 200 bajtów
Właściwy język do pracy ... w pewnym sensie.
SnakeEx to język z wyzwania 2-D Pattern Matching . Powinno być naprawdę dobre w tym zadaniu, ale niestety wszystkie narożne przypadki naprawdę nadęły kod. Odkryłem też kilka błędów tłumacza. To było jednak zabawne wyzwanie.
m
jest głównym wężem, który wzywa wszystkich pozostałych do wykonania rzeczywistej pracy. Dopasowuje się, zaczynając od prawego górnego rogu sześciokąta i idąc zgodnie z ruchem wskazówek zegara. Grupy numerowane służą do sprawdzenia, czy wszystkie długości boków po przekątnej są równe i czy długość boku poziomego odpowiada wysokości całej figury. Mógłbym napisać bardziej szczegółowe wyjaśnienie, ale ostatnie dwa dni spędziłem na zajmowaniu się przypadkami narożnymi, więc po prostu wypróbuj je tutaj . : ^)źródło
Perl,
127125124121 bajtówObejmuje +4 za
-0p
Podaj dane na STDIN
źródło