Wszyscy wiemy, że wiele ćwiczeń wpływa tylko na połowę twojego ciała, więc musisz wykonać je dwa razy, raz dla każdej strony. Takie ćwiczenia mają dwa odpowiedniki, jeden dla lewej strony i jeden dla prawej. Jednak nie ma potrzeby wykonywania dwóch odpowiedników kolejno, o ile ćwiczenia dla obu stron są w tej samej kolejności. Równie dobrze możesz przełączać się między stronami w swoim programie ćwiczeń, ale nie ma sensu rozpoczynać niektórych ćwiczeń jedną stroną, a drugą drugą.
Wyzwanie
Część ćwiczeniowa to lista niezerowych liczb całkowitych, gdzie jej druga połowa składa się z liczb całkowitych pierwszej połowy zanegowanych i w tej samej kolejności, a znaki liczb całkowitych na każdej połowie są równe. Znak pierwszej połowy części ćwiczeń jest jej wiodącą stroną .
Zestaw do ćwiczeń to zero lub więcej części ćwiczeń połączonych razem z tą samą stroną prowadzącą.
Biorąc pod uwagę listę niezerowych liczb całkowitych jako danych wejściowych, określ, czy jest to zestaw ćwiczeń. Liczby całkowite niekoniecznie są unikalne. Długość listy niekoniecznie jest równa.
Twoje rozwiązanie nie może wykorzystywać żadnych standardowych luk . Możesz użyć dowolnych dwóch różnych spójnych wartości dla danych wyjściowych. To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie.
Przykłady
[-5, -1, -7, -6, -5, 5, 1, 7, 6, 5]
jest przykładem części ćwiczeniowej. Pierwsza połowa to [-5, -1, -7, -6, -5]
, a ostatnia połowa to [5, 1, 7, 6, 5]
, która jest liczbą całkowitą w pierwszej połowie zanegowaną. Dodatkowo, liczby całkowite pierwszej połowy są tego samego znaku. Wiodącą częścią tego ćwiczenia jest -1
.
[3, 6, 5, -3, -6, -5, 1, 6, 4, 3, -1, -6, -4, -3]
jest przykładem zestawu ćwiczeń. Poszczególne części ćwiczeń są [3, 6, 5, -3, -6, -5]
i [1, 6, 4, 3, -1, -6, -4, -3]
, i obie mają wiodącą stronę1
.
[4, -4, -5, 5]
, mimo że składa się tylko z prawidłowych części ćwiczeń, nie jest zestawem ćwiczeń, ponieważ pierwsza część [4, -4]
ma stronę prowadzącą 1
, podczas gdy druga część [-5, 5]
ma stronę prowadzącą -1
.
Przypadki testowe
Prawidłowe przypadki testowe:
[]
[1, -1]
[1, -1, 1, -1]
[-6, 6, -5, -4, -3, 5, 4, 3]
[-1, -5, -8, 1, 5, 8, -7, -6, -5, -3, 7, 6, 5, 3]
[-1, -5, -8, 1, 5, 8, -1, 1]
Nieprawidłowe przypadki testowe:
[1]
[1, -2]
[1, 2, -3, -1, -2, 3]
[1, 2, 3, -3, -1, -2]
[-1, -5, -8, 1, 5, 8, 7, 6, 5, 3, -7, -6, -5, -3]
[1, 2, 3, 5, 1, 2, 3, 5]
[1, 2, -5, 4, -6, 5, 5, -6]
[1, 2, -1, 3, -2, -3]
[1, -2, 1]
[-1, -1, 1]
[1, -1, 1]
źródło
Odpowiedzi:
Python 2 ,
6967 bajtówWypróbuj online!
źródło
Galaretka , 10 bajtów
Wypróbuj online!
źródło
Java 8,
186183185 bajtów+2 bajty z powodu poprawki błędu dla przypadków testowych wielkości 3 (prawie wszystkie permutacje
1
i-1
na końcu mojego łącza TIO).Z pewnością można grać w golfa. Wyzwanie wygląda na to, że jest trudne, ale bardzo trudne do zrealizowania. Szczególnie przypadek
[4,-4,-5,5]
do naprawy był denerwujący. Ale teraz działa. Odtąd zagrasz w golfa.Wypróbuj online.
Wyjaśnienie:
źródło
R , 91 bajtów
Wprowadza wektor liczb oddzielony spacjami. Dane wyjściowe
FALSE
dla prawidłowego iTRUE
nieprawidłowego.rle
podaje kodowanie długości przebiegu, w tym przypadku sekwencji wartości dodatnich i ujemnych.The Całkowicie i całkowicie nieuczciwy przypadek kant pusty;) dodaje Aż 15 bajtów.
Wiele bajtów wygolił @Giuseppe.
Oto 92-bajtowa wersja wyrażona jako funkcja lepsza do testowania:
Wypróbuj online!
źródło
JavaScript (ES6), 54 bajty
Wersja zoptymalizowana, zainspirowana odpowiedzią Dennisa na Python .
Zwraca 0 lub 1 .
Wypróbuj online!
Wersja oryginalna, 74 bajty
Wypróbuj online!
W jaki sposób?
Przechowujemy pierwsze połówki wszystkich częściach Ćwiczenia w b [0] i drugich połówek w B [1] , przełączanie pomiędzy b [0] i B [1] za każdym razem zmienia znak. Wpisy są kwadratowe, aby pozbyć się znaku. Każdą pozycję poprzedzamy przecinkiem, a każdą część sufiksem 0 .
Istnieje pewna dodatkowa logika, aby obsłużyć przypadek zbocza „pustego wejścia” w zasadzie bez żadnych kosztów (patrz komentarz na końcu kodu źródłowego).
źródło
Python 2 ,
147130113112106 bajtówWypróbuj online!
Zapisano:
źródło
lambda n:cmp(n,0)
może zostać0 .__cmp__
.all(a==b for a,b in zip(l[::2],l[1::2]))
może zostaćl[:-1:2]==l[1::2]
.Retina 0.8.2 , 57 bajtów
Wypróbuj online! Pobiera dane oddzielone przecinkami, ale link zawiera nagłówek przetwarzający przypadki testowe. Wyjaśnienie:
Wstaw znacznik przed każdą dodatnią liczbą całkowitą.
Zmień przecinki między liczbami całkowitymi tego samego znaku na podkreślenia.
Usuń pozostałe znaki.
Dodaj przecinek, jeśli dane wejściowe nie są puste.
Sprawdź, czy ciąg składa się z par przebiegów tych samych liczb całkowitych.
źródło
Python 2 , 111 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 155 bajtów
Wypróbuj online!
Inspiracją była odpowiedź @ KevinCruijssen
Również dzięki niemu za naprawienie 2 moich przypadków testowych
źródło
r=0<i
sięr=i%2
, gdyż przypadków testowych[1,-1,1]
i[-1,1,-1]
zawodzą w tej chwili. Jednak liczba bajtów pozostaje taka sama dla JS.Stax , 13 bajtów
Uruchom i debuguj
źródło
Brachylog ,
1814 bajtówWypróbuj online!
Zaoszczędź 4 bajty dzięki @ErikTheOutgolfer.
Wyjaśnienie
źródło
APL (Dyalog Classic) , 48 bajtów
Wypróbuj online!
źródło