Zadanie
Biorąc pod uwagę reprezentację linii, wypisz liczbę kwadrantów , przez które przechodzi ta linia.
Prawidłowe reprezentacje linii
Możesz przedstawić linię jako
- Trzy podpisane liczby całkowite
A
,B
iC
które nie dzielić wspólny czynnik i gdzieA
iB
nie są oba zero, reprezentująca linięAx + By = C
, - Cztery podpisane liczb całkowitych , , , i , reprezentująca linię przechodzącą przez punkty a , lub
X1
Y1
X2
Y2
(X1, Y1)
(X2, Y2)
- Typ danych opisujący linię, jeśli Twój język ją ma (musi obsługiwać linie pionowe).
Być może nie wziąć wkład w dowolnym formacie, który nie pozwala na linii pionowej (np formularza nachylenie osią). Jeśli wybierzesz przyjmowanie liczb całkowitych jako danych wejściowych, możesz założyć, że leżą one w zakresie obejmującym [-127, 128]
.
Dane techniczne
- Wynik zawsze będzie wynosił 0, 2 lub 3 (linia nigdy nie może przejść przez wszystkie cztery ćwiartki, ani nie może przejść tylko przez jedną).
- Uważa się, że linia na osi nie przechodzi przez żadne ćwiartki. Uważa się, że linia przechodząca przez początek przechodzi tylko przez 2 ćwiartki.
- Nie musisz zwracać, które kwadraty są przekazywane (chociaż przypadki testowe zawierają je dla jasności).
- To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź (mierzona w bajtach).
Przypadki testowe
Będziesz musiał przekonwertować je na odpowiedni format przed ich użyciem.
1x + 1y = 1 -> 3 (quadrants I, II, and IV)
-2x + 3y = 1 -> 3 (quadrants I, II, and III)
2x + -3y = 0 -> 2 (quadrants III and I)
1x + 1y = 0 -> 2 (quadrants II and IV)
3x + 0y = 6 -> 2 (quadrants I and IV)
-3x + 0y = 5 -> 2 (quadrants II and III)
0x + -8y = 4 -> 2 (quadrants III and IV)
0x + 1y = 0 -> 0 (lies on the x-axis)
1x + 0y = 0 -> 0 (lies on the y-axis)
Odpowiedzi:
Python 3 , 24 bajty
Wypróbuj online!
źródło
'320'[a.count(0)]
i zwrócenie wartości w postaci ciągu byłoby dopuszczalne?Galaretka , 5 bajtów
Wypróbuj online!
Nie opiera się już na odpowiedzi Leaky'ego!
źródło
ċ0ị2,0,3
zapisuje bajtTL’ȧ$
. Nie znam Galaretki, więc to może być gra w golfaJavaScript (ES6),
302422 bajtówTo moja pierwsza gra w golfa w Javascript.
Musi być lepszy sposób na liczenie zer ...-6 bajtów dzięki Hermanowi Lauensteinowi, -2 bajty do zapamiętywania priorytetów operatorów.
Alternatywne 24-bajtowe rozwiązanie, aby zamiast tego zwrócić ciąg:
źródło
(a,b,c)=>3<<(!a+!b+!c)&3
05AB1E , 6 bajtów
Wypróbuj online!
Na podstawie odpowiedzi Dziurawej Zakonnicy.
źródło
SOGL V0.12 , 8 bajtów
Wypróbuj tutaj!
Opierając się nieszczelny zakonnicy odpowiedzi .
źródło
GolfScript ,
1614 bajtówWypróbuj online!
Ten program przyjmuje tablicę 3 liczb całkowitych reprezentujących współczynniki w równaniu
Ax + By = C
Przykład wejścia / wyjścia
Jak to działa
Na początku było to dla mnie trochę trudne, aby wymyślić matematyczny sposób obliczenia tego. Istnieje jednak tylko 8 możliwych konfiguracji, takich jak
a != 0 & b != 0 & c != 0
W końcu doszedłem do następującej funkcji.
a całość może zostać skondensowana do jednego problemu matematycznego
źródło
{!!}%
zamiast[{!!}/]
.{:!:!:+_1>*}
.:!
jest równoważny{!}%
), 2) skrót do redukowania (:+
jest równoważny{+}*
), 3).
zmieniony na_
(ponieważ CJam ma zmiennoprzecinkowe) i 4) że CJam nie ma danych wejściowych na stosie domyślnie, co oznacza, że kod jest zawijany,{}
aby stał się funkcją.Siatkówka , 13 bajtów
Wypróbuj online
Także na podstawie odpowiedzi Dziurawej Zakonnicy .
źródło
10
na przykład. Pierwszym wyrażeniem regularnym musiałoby być\b0
.JavaScript, 25 bajtów
Na podstawie odpowiedzi Dziurawej Zakonnicy.
źródło
Haskell , 22 bajty
Wypróbuj online!
Rozwiązanie punktowe, 27 bajtów
Wypróbuj online!
źródło
Perl 6, 18 bajtów
źródło
ABCR , 30 bajtów
Dane wejściowe mają postać
A,B,C
przecinków, które można zastąpić dowolnymi nienumerycznymi-
znakami.Nie ma jeszcze tłumacza online, ale oto wyjaśnienie:
źródło
APL (Dyalog Unicode) ,
1411 bajtówWypróbuj online!
⎕IO
jest0
. Dzięki @ Adám za -3 bajty!źródło
0⌈3-×⍨+/0=⎕
Najgorsze , 12 bajtów
Wypróbuj online!
Nieco oparte na odpowiedzi Leaky'ego ; używa tej samej przesłanki, ale innej metody mapowania.
Jak to działa
Najgorszy ma wbudowaną liczbę wystąpień, ale nie ma (z jakiegoś powodu) polecenia indeksowania, więc musiałem utworzyć następujące odwzorowanie, w którym lewy jest,
a.count(0)
a prawy pożądany wynikSam program działa w ten sposób (przykładowe wprowadzenie
[1,1,1]
)źródło
Dodaj ++ , 23 bajty
Wypróbuj online!
Na podstawie zarówno mojej najgorszej odpowiedzi, jak i odpowiedzi Leaky's Python
Jak to działa
Myślę jednak, że zbyt często korzystam z funkcji w Add ++, a nie w głównej części kodu. Próbowałem to zrobić, używając obu funkcji i treści kodu, i uzyskałem znacznie ładniejszy 50-bajtowy kawałek (tak, to najdłuższa odpowiedź tutaj):
Wypróbuj online!
źródło