Pomysł ten pochodzi głównie z BIO 2017 q1 . Pomysł na opublikowanie tego wyzwania powstał z mojego wyzwania Sekwencje binarne , ponieważ wielu osobom podobało się.
Jest to także pierwsze wyzwanie, które opublikowałem bez publikowania w piaskownicy. Usunę go, jeśli nikomu się nie spodoba.
Zasady
Weź sekwencję cyfr w trójce (podstawa 3); może to być ciąg, tablica lub wartość liczbowa wraz z liczbą poprzedzających zer.
Dla każdego wiersza w trójkącie generowany jest wiersz poniżej, aż w ostatnim rzędzie będzie tylko jedna cyfra. Aby znaleźć cyfrę poniżej dwóch innych cyfr, cyfra będzie taka sama jak dwie nad nią, jeśli te dwie pozostałe cyfry powyżej są równe. W przeciwnym razie będzie to cyfra, która nie będzie równa żadnej z nich. Oto przykład:
0 0 1 2 0 1 2 2
0 2 0 1 2 0 2
1 1 2 0 1 1
1 0 1 2 1
2 2 0 0
2 1 0
0 2
1
Oczekuje się, że zwrócisz tylko ostatni wiersz.
Skróć swój kod.
Przypadki testowe
0 -> 0
11 -> 1
10 -> 2
000 -> 0
012 -> 1
21102 -> 2
201021 -> 1
111111 -> 1
1020202020 -> 2
0212121210 -> 0
3&(|2+/\-)~<:@#
3|((2<.#)-@+/\])^:_
- twój jest naprawdę fajny.Partia, 122 bajty
Wykorzystuje ekspansję dwumianową. Jak wskazuje @MartinEnder, suma musi być zanegowana (moduł 3), jeśli liczba wartości (które są liczone w pierwszej pętli) jest parzysta, więc
n
jest ustawiona na jedną1
lub2
odpowiednio. Druga pętla oblicza następnie sumę za pomocą współczynników dwumianowych.źródło
APL (Dyalog) , 17 bajtów
Wypróbuj online!
W jaki sposób?
2+/⍵
- zsumuj każde dwa sąsiednie elementy3-
- wektoryzowane odejmij od trzech3|
- wektoryzowane modulo o trzy⍣
- powtarzaj, aż...1=≢⍺
- został tylko jeden przedmiotźródło
APL + WIN,
3028 bajtów2 bajty zapisane dzięki uprzejmości Uriela.
Wyjaśnienie:
Jest to jeden ze sposobów pisania kodu pętli w APL w jednym wierszu.
źródło
3|
JavaScript (ES6), 58 bajtów
źródło