Naprzemienne tablice
Tablica przemiennego jest listą o dowolnej długości, w których dwa (nie koniecznie) inne wartości są przemienne. Oznacza to, że wszystkie pozycje o indeksie nieparzystym są równe, a wszystkie elementy o indeksie nieparzystym są równe.
Twoim zadaniem jest napisanie programu lub funkcji, która, gdy otrzyma listę dodatnich liczb całkowitych, wyprowadza / zwraca, truthy
jeśli jest na przemian i falsy
inaczej.
To jest golf golfowy , więc wygrywa najkrótszy kod (w bajtach)!
Edge Cases:
[] -> True
[1] -> True
[1,1] -> True
[1,2,1] -> True
Inne przypadki testowe:
[1,2,1,2] -> True
[3,4,3] -> True
[10,5,10,5,10] -> True
[10,11] -> True
[9,9,9,9,9] -> True
[5,4,3,5,4,3] -> False
[3,2,1,2,1,2] -> False
[1,2,1,2,1,1,2] -> False
[2,2,3,3] -> False
[2,3,3,2] -> False
Przykład
Oto przykład, na którym możesz przetestować swoje rozwiązanie, napisany w Pythonie 3 (bez gry w golfa):
def is_alternating(array):
for i in range(len(array)):
if array[i] != array[i%2]:
return False
return True
Odpowiedzi:
Galaretka , 4 bajty
Wypróbuj online!
Jak to działa
źródło
2
inne liczby natychmiast uogólnia wyzwanie!Ɲ
nie istniały, gdy opublikowano wyzwanie.pieprzenie mózgu, 34 bajty
Pobiera tablicę jako wartości bajtów w łańcuchu i zwraca wartości
\x00
false i\x01
true.Wypróbuj online.
Utrzymuje to strukturę
a b 1 c
na taśmie, gdzie
c
jest bieżący znak,b
poprzedni znak ia
poprzedni poprzedni znak, o ile tablica jest na przemian. Jeśli zostanie znalezione niedopasowanie, wskaźnik zostanie przesunięty w lewo tak, żea
,b
a1
flaga stanie się zero, i ta sytuacja będzie trwać, dopóki wszystkie dane wejściowe nie zostaną wykorzystane.źródło
R
2424 bajtyWczytuje wektor do STDIN, bierze pierwsze dwa elementy tego wektora i sprawdza równość. Jeśli długości
a[1:2]
i a nie pasują, R zapętli się,a[1:2]
aby dopasować długość a. Ostrzeże o tym, ale zadziała.Zaskakujące, że to działa nawet dla pustych danych wejściowych, nie jestem pewien, dlaczego, ale będę z tym korzystać.
Zapisano 1 bajt dzięki @MickyT
źródło
all((a=scan())==a[1:2])
MATL ,
76 bajtówW przypadku tablic naprzemiennych generuje niepustą macierz jednych, co jest prawdą. W przypadku tablic nieprzemiennych matryca zawiera co najmniej jedno zero, a zatem jest fałszem (patrz tutaj ).
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Weźmy
[1 2 1 2]
jako przykładowe dane wejściowe.źródło
JavaScript (ES6), 27 bajtów
Przypadki testowe
Pokaż fragment kodu
źródło
Siatkówka , 25 bajtów
Wypróbuj online!
Zamiast dopasowywać dane wejściowe naprzemiennymi wartościami (co prowadzi do denerwujących efektów krawędziowych w wyrażeniu regularnym), dopasowuję dane wejściowe, które nie są prawidłowe, a następnie neguję wynik.
Zaletą dopasowania niepoprawnego wejścia jest to, że jest to właściwość, którą można sprawdzić lokalnie, i nie trzeba specjalnie traktować pustych lub krótkich danych wejściowych: każde wejście jest nieprawidłowe, jeśli zawiera dwie różne wartości, które są od siebie oddzielone.
Tak więc pierwszy etap liczy liczbę dopasowań,
\b(\d+),\d+,(?!\1\b)
które pasują i przechwytuje jedną wartość, a następnie dopasowuje następną wartość, a następnie stwierdza, że trzecia wartość w sekwencji jest inna. To daje zero dla prawidłowych danych wejściowych i coś pozytywnego dla nieprawidłowych wartości.Drugi etap po prostu zlicza liczbę meczów z
^0
co1
jeśli pierwszy etap wrócił0
i1
inaczej.źródło
Mathematica, 29 bajtów
Port algorytmu MATL Luisa Mendo. Nienazwana funkcja pobierająca listę liczb (lub nawet bardziej ogólnych obiektów) i zwracająca
True
lubFalse
. Sprawdza, czy sumy kolejnych elementów są równe. NiestetyMost
iRest
dusić się na pustej liście, więc trzeba to przetestować osobno.Mathematica, 33 bajty
Nienazwana funkcja pobierająca listę liczb (lub nawet bardziej ogólnych obiektów) i zwracająca
True
lubFalse
. FunkcjaDifferences[#,1,2]
przyjmuje różnice, a nie kolejne pary liczb całkowitych, ale pary liczb całkowitych w odległości dwóch od siebie. Następnie sprawdzamy, czy na wynikowej liście nie ma nic poza zerami.Jako bonus, dla jeszcze jednego bajta (zmienić
2
na#2
), otrzymujemy funkcję wejścia listę liczb całkowitych i innej liczby całkowitej dodatniej#2
i sprawdza, czy lista wejściowa jest wynikiem przeplatania#2
stałe sekwencje okresowo ze sobą. Na przykład,ocenia na
True
.źródło
Haskell,
2726 bajtówTo prowadzi do anonimowej funkcji, która rozwiązuje wyzwanie. Pomysł polega na usunięciu pierwszych dwóch liczb z listy, skompresowaniu do oryginalnej listy przy użyciu równości i sprawdzeniu, czy wynik zawiera tylko
True
s. Wypróbuj online!Dzięki nim za 1 bajt!
źródło
and.(zipWith(==)=<<drop 2)
zapisuje bajt.Siatkówka ,
393228 bajtówWypróbuj online!
Zaoszczędź 7 bajtów dzięki Martinowi ! Oszczędź kolejne 3 dzięki Kobi ! I Kritixi za pomysł na kolejny 1.
Opcjonalnie dopasowujemy liczbę, która zajmuje całe wejście, dowolną parę liczb lub dowolną parę liczb, po której następuje ta sama para dowolna liczba razy i opcjonalnie nie włączając drugiej liczby na samym końcu. Można zapisać 2 bajty, jeśli dane wejściowe były jednoargumentowe.
źródło
^(\d+)?(.\d+)?(.\1\2)*(.\1)?$
29-bajtowa alternatywa. To nie pasuje,1,,1
.Pyth, 9 bajtów
Wyjaśnienie
źródło
Q
s do kodu. Dodałem je w objaśnieniu, aby wyjaśnić, co się dzieje, ale tak naprawdę nie ma ich w kodzie.Brachylog , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
APL, 7 bajtów
Wyjaśnienie:
2⍴⊢
: przekształć tablicę wejściową o 2⍴⍴
: przekształć wynik według pierwotnego rozmiaru danych wejściowych, powtarzając elementy⊢≡
: sprawdź, czy wynik tego jest równy pierwotnemu wejściuPrzypadki testowe:
źródło
Java 8, 63 bajty
To jest wyrażenie lambda dla
Predicate< int[ ] >
Objaśnienie: Zainicjuj wynik na 0. Dla każdego elementu Biteise LUB wynik z różnicą między bieżącym elementem a elementem 2 wskazuje wcześniej. zwróć,
true
jeśli wynik jest równy 0. W przeciwnym razie zwróćfalse
źródło
Perl 6 ,
49 4342 bajtówSpróbuj
Spróbuj
Spróbuj
Rozszerzony:
źródło
$_[1]
może być o jeden bajt krótszy jako.[1]
. Ciało wewnętrznej lambda może być o jeden bajt krótsze jako{.[0]!=a||.[1]!=b}
..[1]
.!=
Wydaje się również, że nie działa, jeśli nie następuje po nim spacja. Myślę, że coś takiego$_!=3
jest analizowane tak, jakby to było napisane jako!( $_ = 3 )
Python 2 , 35 bajtów
Wypróbuj online!
źródło
J, 8 bajtów
Wyjaśnienie
Przypadki testowe
źródło
{.
Take with$
Shape.Haskell ,
3332 bajtyWypróbuj online! lub Zweryfikuj przypadki testowe. -1 bajt dzięki Zgarb.
źródło
[]
, ale z jakiegoś powodu ghc nie może wnioskować o poprawnym typie dla[]
. Działa, jeśli został przetestowany razem z drugim przypadkiem testowym, zobacz Weryfikacjaf(a:x@(_:b:_))=a==b&&f x
bash,
565438 bajtówZapisz to jako skrypt i przekaż listę liczb jako argumenty (dla listy n-elementowej przekażesz n argumentów). Dane wyjściowe to kod wyjścia: 0 (dla wartości true), jeśli lista jest na przemian, i 1 (dla wartości false) w przeciwnym razie.
(Zwracanie danych wyjściowych w kodzie wyjścia jest dozwolone w standardowych metodach We / Wy PPCG.)
Działa to rekurencyjnie:
źródło
Python 2.7, 38 bajtów
Przypadki testowe:
źródło
Pyke, 6 bajtów, niekonkurujące
Wypróbuj tutaj!
Zezwól węzłu przekształcania na pobranie zarówno listy, jak i łańcucha
źródło
Shenzen IO (asembler),
8376 bajtów, niekonkurująceShenzen io to gra logiczna, w której możesz zakodować swój kod specjalnym językiem asemblera.
Niestety, możesz używać liczb całkowitych od -999 do 999 jako danych wejściowych lub wyjściowych i nie ma sposobu, aby stwierdzić, czy tablica się zakończyła. Więc założyłem, że tablica została zapisana na ROM-ie, który zawija się po odczytaniu ostatniej komórki. Oznacza to, że można stosować tylko tablice, co jest przyczyną braku konkurencji.
Kod:
Wyjaśnienie:
Przepraszam, jeśli którekolwiek z nich jest mylące, to moja pierwsza odpowiedź na golfa.
EDYCJA: usunięto 7 bajtów, zastępując pętle kodem jednokrotnego uruchomienia
źródło
Rubinowy, 23 bajty
źródło
Rubin,
131119 bajtówLambda
a
oczekuje tablicyx
i zwraca true, jeśli w tablicy znajduje się 0 lub 1 unikalnych wartości dla nieparzystych elementów indeksowanych i 0 lub 1 unikalnych wartości dla parzystych elementów indeksowanych w tablicy.Znaczące zabezpieczenia bajtów
def
!arr[1]
vs.arr.length < 2
&
vs&&
Przypadki testowe
źródło
Dart, 46 bajtów
Biegnij z:
źródło
C #, 54 bajty
Filtruj tablicę, aby pokazać wartości, które nie pasują do pierwszej wartości dla wyrównania i drugiej wartości dla szans. Jeśli nie ma żadnych wyników, zwróć wartość true.
źródło
Japt,
76 bajtówWypróbuj lub uruchom wszystkie przypadki testowe
źródło
C #, 66 bajtów
Anonimowa funkcja, która odbiera tablicę liczb całkowitych i zwraca 1, jeśli tablica jest na przemian, a 0 w przeciwnym razie.
Pełny program z funkcją niepolowania i przypadków testowych:
źródło
Oktawa, 51 bajtów
Dane wejściowe to tablica komórek dodatnich liczb całkowitych.
Wypróbuj online!
źródło
Clojure, 70 bajtów
Sprawdza, czy odrębna liczba co 2 pozycji wynosi 1, i traktuje puste kolekcje jako specjalny przypadek. Próbowałem też wiele rozwiązań opartych na
reduce
agroup-by
, ale nie dużo szczęścia tam.źródło
Inna opcja z R: 36 bajtów.
I myślę, że znalazłem znacznie krótszą wersję: 15 bajtów
źródło