Twoim zadaniem jest zbudowanie programu identyfikującego kształt danych wejściowych. Kształty, które można zidentyfikować, mogą być dowolnymi z poniższych:
Plac
Aby zostać zidentyfikowanym jako kwadrat, źródło musi mieć wiersze o tej samej długości i taką samą liczbę wierszy, co znaki w wierszu (z wyłączeniem znaków nowej linii). Opcjonalny znak nowej linii jest dopuszczalny.
$_='
$_="
$_"'
;say
Prostokąt
Aby zostać zidentyfikowanym jako prostokąt, źródło musi mieć linie o jednakowej długości, ale liczba linii nie odpowiada liczbie znaków w linii (z wyłączeniem znaków nowej linii). Opcjonalny znak nowej linii jest dopuszczalny. Może to być pozioma lub pionowa.
$_=
"no
t a
squ
are
";#
$_="but it
is still a
consistent
shape!";##
Trójkąt
Aby zostać zidentyfikowanym jako trójkąt, źródło musi zaczynać się od jednego znaku, a każda kolejna linia musi mieć jeden dodatkowy znak (w tym ostatni) lub po pierwszej linii każda kolejna linia powinna mieć jeden znak mniej do ostatniej, która ma tylko jeden.
$
_=
"So
this
"."".
shape;
$_="or
even,
this
way
!!
"
Bałagan
Wszystko, co nie ma spójnego formatu zgodnie z powyższym, musi zostać zidentyfikowane jako bałagan.
Zasady
- Możesz zwrócić dowolne cztery spójne wartości do wydrukowania, aby zidentyfikować każdy kształt.
- Twój kod źródłowy musi również przestrzegać jednego z powyższych kształtów (nie, nie bałagan).
- Pojedynczy znak nowej linii w twoim źródle jest dopuszczalny.
- Możesz założyć, że dane wejściowe nie zawierają żadnych pustych linii (w tym nowych linii), nie są puste i nie składają się tylko z nowych linii.
- Wszystkie kształty muszą mieć wysokość i szerokość> = 2, w przeciwnym razie określa się to jako bałagan.
- Standardowe luki są zabronione.
- Najkrótsze rozwiązanie w bajtach w każdym języku wygrywa.
źródło
All shapes must have a height and width of >= 2.
['abc','cfd','fgh']
?Odpowiedzi:
Galaretka , 35 bajtów
Wypróbuj online!
0
= Bałagan1
= Prostokąt2
= Kwadrat3
= Trójkątźródło
Brachylog , 45 bajtów
Wypróbuj online!
Kod jest prostokątem (pomimo sposobu, w jaki wyświetla się na moim ekranie). Wyjścia: 1 dla kwadratu, 2 dla prostokąta, 3 dla trójkąta i nic dla bałaganu
Wyjaśnienie:
źródło
Java 10,
231221219217213211207 bajtówFunkcja sama w sobie jest prostokątem.
1
= Kwadraty;2
= Prostokąty;3
= Trójkąty;0
= Bałagan-14 bajtów dzięki @ OlivierGrégoire .
Wyjaśnienie:
Wypróbuj online.
źródło
s->{var a=s.split("\n");int S=a.length,l=a[0].length(),L,D,b=0,i=1;if(S<2)return 0;for(L=a[1].length(),D=L-l; b<1&++i<S;)if((L=a[i].length())-a[i-1].length()!=D)b=1;return b<1?D==0?S==l?1:2:D==-1|D==1?l==1|L==1?3:0:0:0;}
(podwójne spacja povar
, podział linii poD=L-l;
.D==-1|D==1
naD>-2|D<2
. Ten i tenl==1|L==1
może być bardziej golfowy przy niektórych operacjach bitowych, ale tak naprawdę to nie moja wiedza.s->{var a=s.split("\n");int r=a.length,l=a[0].length(),L,D,b=0,i=1;if(r>1){for(L=a[1].length(),D=L-l;++ i<r;b=L-a[i-1].length()!=D?1:b)L=a[i].length();b=b<1?D==0?r==l?1:2:D>-2&D<2&(l<2|L<2)?3:0:0;}return b;}
(przerwa poD=L-l;++
). Nadal można grać w golfa, łącząc pętlę i oświadczenie w jednym, ale nie wiem, jak teraz.Python 2 ,
129114109107113 bajtówWypróbuj online!
Wydruki
0
=Mess
1
=Triangle
2
=Square
3
=Rectangle
źródło
Galaretka ,
3227 bajtówWypróbuj online!
Teraz pobiera dane wejściowe na liście wierszy i przełącza
>1×
za’a
pomocą i używaSƲ
poL€
zamiastFLƲƊ
. To pozwoliło mi skondensować się w dwóch liniach i w sumie zaoszczędziłem 5 bajtów. Poniższe wartości są takie same jak poprzednio.[0.0, 0.0]
= Bałagan[0.0, 1.5707963267948966]
= Prostokąt[0.0, 0.7853981633974483]
= Kwadrat[1.5707963267948966, 0.0]
= TrójkątZL«L
pobiera minimalną wysokość i szerokość i’
odejmuje 1.Ç
wywołuje drugi link, a na końcu, jeśli wejście jest pojedynczą linią, wynikÇ
logicznie ANDuje się z poprzednim numerem, jeśli jest tylko jedna linia, wyjście będzie[0.0, 0.0]
.W drugim linku:
,U
daje listę długości linii w połączeniu z jego odwrotnością.J
jestrange(number of lines)
i⁼€
sprawdza, czy każdy z nich jest równy wynikowiJ
.Ẹ
(Dowolny) daje 1, jeśli wejście jest trójkątem.E
sprawdza, czy wszystkie długości linii są równe (prostokąt / kwadrat).SƲ
za pomocą,$
aby zgrupować je w pojedynczą monadę, sprawdza, czy całkowita liczba znaków jest liczbą kwadratową.Tak więc na końcu drugiego łącza mamy miejsce, w
[[a,b],c]
którym znajduje się każda liczba,0
lub1
wskazujemy, czy wejście jest odpowiednio trójkątem, prostokątem i liczbą kwadratową znaków.Jednak kwadratowa liczba elementów nie oznacza, że dane wejściowe są kwadratem, ponieważ takie dane są nieuporządkowane
ma kwadratową liczbę elementów, ale nie jest kwadratem.
W tym miejscu
æA
pojawia się (arctan2).0æA0
==0æA1
==0
. Innymi słowy, jeśli wejście ma kwadratową liczbę elementów, ale nie jest prostokątem, to nie jest kwadratem. Istnieją z pewnością bardziej wyraźne sposoby na zrobienie tego, ale co to ma znaczenie, gdy mamy bajty do przemyślenia i jesteśmy uprawnieni do spójnego, arbitralnego wyniku.Zauważ, że poprzednio używałem
æA/
zamiastæAƝ
(i,
zamiast;
w drugim łączu), ale poprzednia metoda rozróżnia trójkąty, które mają kwadratową liczbę elementów, i te, które tego nie robią, ale oczywiście powinny być liczone jako to samo.źródło
arctan2
było dokładnie tym, czego potrzebowałem.Java 10,
274323298229 bajtówPierwsze przesłanie trójkąta.
0
Bałagan1
Prostokąt3
Plac4
TrójkątWypróbuj online tutaj .
Wielokrotnie edytowany, by jeszcze bardziej golf.
Oczywiście mógłbym zaoszczędzić wiele bajtów, zmieniając to również w prostokąt (
281267259200 bajtów, patrz tutaj ).Wynik identyfikacji jest manipulowany przy użyciu bitowego AND, co daje maskę bitów w następujący sposób:
Wersja bez golfa:
źródło
JavaScript 125 bajtów
źródło
Perl 5
-p
, 83 bajtówWypróbuj online!
źródło
PHP,
195205 bajtówTrójkąt do góry nogami dodaje do tego drogie 56 bajtów!
Wyjścia to S, R, T, M
Zaoszczędził kilka bajtów dzięki Domowi Hastingsowi.
Wypróbuj online!
Naprawiono teraz kilka problemów ... Wytwarzają to testy.
źródło
?>
powinien być po prostu w porządkuT
docccc\na\naa\ncccc
Wypróbuj online!Perl 6 , 81 bajtów
Wypróbuj online!
Zwraca
True
kwadrat,False
prostokąt,3
trójkąt,Nil
bałagan.źródło
$_ Z- .skip
?Stax , 39 bajtów
Uruchom i debuguj online!
Najkrótsza jak dotąd odpowiedź tylko ASCII.
Wyjaśnienie
W rozwiązaniu wykorzystano następujący fakt: Jeśli coś jest wyraźnie drukowane podczas wykonywania programu, nie są generowane żadne dane wyjściowe. W przeciwnym razie górna część stosu na końcu wykonania jest domyślnie wyprowadzana.
źródło
Haskell ,
113107103101 bajtówWypróbuj online!
Zwraca 0, 1, 2 i 3 odpowiednio dla bałaganu, prostokąta, kwadratu i trójkąta.
Edycja: -2 bajty dzięki Lynn !
źródło
05AB1E ,
352927 bajtówZaoszczędzono 8 bajtów dzięki Magic Octopus Urn
Wypróbuj online!
0
= Bałagan4
= Trójkąt1
= Prostokąt3
= Kwadratźródło
gs€g©QP®¥ ÄP®1å&®ËJC
można jednak dodać znak spacji i znakC
za 21.R , 101 bajtów
Kod nie może poradzić sobie z „NEGATIVE ACKNOWLEDGE” (U + 0015) lub kwadratem w powyższym kodzie. Ten bajt można przełączyć na coś innego, jeśli dane wejściowe zawierają ten bajt.
Wypróbuj online!
źródło
readLines()
zamiastscan()
?file("stdin")
, aby odczytać go z konsoli (zamiast kolejnych wierszy kodu). Oznacza to, że prawdopodobnie będzie mniej golfa. ach tak.Ślimaki, 29 bajtów
Klucz wyjściowy:
Będzie to 23 bajty bez układu źródłowego:
źródło
Wolfram Language (Mathematica) , 119 bajtów
Za pomocą
Replace
/.
i dopasowywanie wzorców w liczbie znaków według linii.Replace
wykopie pierwszy RHS dopasowanej reguły, więc kolejność polega na sprawdzeniu wprowadzenia 1 znaku, następnie kwadratach, prostokątach, trójkątach i przewróceniu mes.kwadrat = 0, prostokąt = 1, trójkąt = 2, bałagan = 3
Wypróbuj online!
źródło
Czerwony , 209 bajtów
Wypróbuj online!
0
Bałagan1
Plac2
Prostokąt3
Trójkątźródło
AWK , 119 bajtów
Wypróbuj online!
Wydajność:
0
= Kwadrat1
= Prostokąt2
= Trójkąt3
= Bałaganźródło
Rubin ,
115111 bajtówWypróbuj online!
Anonimowa lambda. Wyjścia:
źródło
C (gcc) ,
125123 bajtówDzięki pułapowi cat za -2 bajty.
Wypróbuj online!
źródło