Biorąc pod uwagę listę zadań, które należy wykonać w kolejności, z których każda zajmuje miejsce, ile czasu zajmie wykonanie ich wszystkich, jeśli po wykonaniu zadania nie będzie można wykonać tego samego zadania dla kolejnych dwóch miejsc (ochłodzenie miejsc )? Jednak w tych gniazdach chłodzących można przypisać inne zadanie.
Na przykład,
[9,10,9,8] => output: 5
Ponieważ zadania zostaną przydzielone jako [9 10 _ 9 8]
.
1. Po pierwsze, 9 potrzebuje dwóch punktów ochłodzenia _ _. Więc zaczynamy od 9 _ _
.
2. Następne zadanie 10 różni się od poprzedniego zadania 9, więc możemy przydzielić jedno z _ _. Wtedy będziemy mieli 9 10 _
.
3. Po trzecie, nie można teraz przydzielić 9, ponieważ pierwsze zadanie 9 jest tym samym zadaniem i wymaga czasu na ostygnięcie. 9 10 _ 9
.
4. Na koniec 8 nie jest tym samym, co inne poprzednie dwa zadania, więc można je przydzielić zaraz po 9, a ponieważ jest to ostatnie zadanie, nie wymaga czasu na ostygnięcie. Ostateczna lista to 9 10 _ 9 8
i oczekiwany wynik to 5, czyli liczba miejsc (lub liczba miejsc)
Przypadki testowe:
[1,2,3,4,5,6,7,8,9,10] => output : 10 ([1 2 3 4 5 6 7 8 9 10])
[1,1,1] => output: 7 ([1 _ _ 1 _ _ 1])
[3,4,4,3] => output: 6 ([3 4 _ _ 4 3])
[3,4,5,3] => output: 4 ([3 4 5 3])
[3,4,3,4] => output : 5 ([3 4 _ 3 4])
[3,3,4,4] => output : 8 ([3 _ _ 3 4 _ _ 4])
[3,3,4,3] => output : 7 ([3 _ _ 3 4 _ 3])
[3,2,1,3,-4] => output : 5 ([3 2 1 3 -4])
[] => output : 0 ([])
[-1,-1] => output : 4 ([-1 _ _ -1])
Wartością wejściową może być dowolna liczba całkowita (ujemna, 0, dodatnia). Długość listy zadań wynosi 0 <= długość <= 1 000 000.
Wyjście będzie liczbą całkowitą, łączną liczbą gniazd, która jest wskazana w przypadku testowym jako wyjście. Lista w nawiasie określa sposób generowania danych wyjściowych.
Kryterium wygranej
kod-golf
źródło
[]
?Odpowiedzi:
Galaretka , 14 bajtów
Wypróbuj online!
źródło
05AB1E , 22 bajty
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Brachylog , 10 bajtów
Zawsze miło jest widzieć problem, w którym Brachylog działa najlepiej
Wyjaśnienie
Wypróbuj online!
źródło
R , 123 bajty
Wypróbuj online - pojedynczy program!
Wypróbuj online - wiele przykładów!
Pełny program, który jako dane wejściowe odczytuje listę liczb całkowitych oddzieloną przecinkami i wysyła potrzebne miejsca. Jestem pewien, że można by to jeszcze trochę pograć w golfa, a wdrożenie tego rozwiązania opartego na wyrażeniach regularnych w innych językach byłoby bardziej wydajne w bajtach.
Uwaga na temat drugiego TIO umieściłem w funkcji, aby umożliwić pokazanie wielu przykładów. Ta funkcja pokazuje także końcową listę, ale nie jest ona wyświetlana w moim głównym programie, jeśli jest uruchamiany w izolacji.
źródło
Zapytanie TSQL, 158 bajtów
Wprowadź dane jako tabelę.
Zapytanie jest więc rekurencyjne
jest konieczne, ponieważ lista liczb może przekroczyć 100, chociaż może obsłużyć tylko 32 767 rekurencji - czy ograniczenie jest naprawdę potrzebne w tym zadaniu?
Wypróbuj online
źródło
R ,
8170 bajtówWypróbuj online!
Po kilku nieudanych próbach kod stał się raczej brzydki i nie tak krótki, ale przynajmniej działa teraz ...
Najpierw oceniamy długości kolejnych serii tego samego zadania. Np. Do
3, 3, 4, 3
tego daje:Każdy z tych przebiegów generuje
(len - 1) * 3 + 1
kroki (+ 1
obsługiwane osobno).Następnie przetwarzamy wystąpienia tego samego zadania w 2 miejscach od siebie, np .:
x, y, x
za pomocądiff(s, lag=2)
. Powstały wektor jest również dzielony na kolejne przebiegi (r
) wedługrle
funkcji. Teraz, z powodu różnych przeplatanych alternatyw, musimy dodaćceiling(r$len/2)
kroki dla wszystkich przebiegów zer. Na przykład:x y x
(długość 1) ix y x y
(długość 2) wymagają 1 dodatkowego kroku:x y _ x (y)
x y x y x
(długość 3) ix y x y x y
(długość 4) wymagają 2 dodatkowych kroków:x y _ x y _ x (y)
Wreszcie, musimy zrekompensować występowanie tych zmian w środku długiej serii tego samego zadania:
x, x, x, x...
stąd1-l%/%6
zamiast po prostu1
.źródło
diff(s,lag=2)
wykrywania bliskości! Teraz jesteś o bajt krótszy od mojego rozwiązania ...Python 2 , 67 bajtów
Wypróbuj online!
Realizuje wyzwanie dosłownie. Używa kopii samej listy jako „pustych miejsc”, ponieważ nie mogą one równać się żadnej liczbie.
źródło
Węgiel drzewny ,
2723 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pętla nad zadaniami.
Dodaj punkty ochładzania, gdy zadanie będzie jednym z dwóch ostatnich.
Dodaj bieżącą pracę do wyniku.
Wydrukuj liczbę miejsc.
źródło
R ,
7468 bajtówWypróbuj online!
Konstruuje tablicę roboczą (odwrotnie), a następnie przyjmuje długość. Trochę
krócejniż odpowiedź Kirilla L. , więc czasami naiwne podejście jest całkiem dobre. EDYCJA: znowu krótsza! Pożyczałem też szablon testowy Kirilla.-6 bajtów wymianie
max(0,which(y==x[2:1]))
zmatch(y,x,0)
.źródło
c
funkcja?c
oznaczacombine
, choćconcatenate
może być lepiej; to łączy swoje argumenty w jednym liście.Perl 6 , 98 bajtów
Wypróbuj online!
Blergh, musi być na to lepszy sposób. Nie jestem w 100% pewien, że jest to w pełni poprawne, choć spełnia wszystkie przypadki, o których mogłem myśleć.
Zasadniczo zaczyna się od zgrupowania wszystkich trojaczków listy danych wejściowych, z dopełnianiem po obu stronach. Na przykład
[1,2,1,2]
staje się(Any,1,2), (1,2,1), (2,1,2), (1,2,Nil)
. Stajemy sięrepeated
elementami w każdej trójce(), (1), (2), ()
.Następnie są to
squish
kolejne elementy, które nie są tą samą listą, ale mają ten sam rozmiar (aby nie zgnieść czegoś podobnego[1,1,1]
), a pierwszy element nie jest równy pierwszemu elementowi (ponieważ nie możemy scalić godzin[1,1,2,2]
), i wreszcie element wcześniej również nie został ściśnięty ([1,2,1,2,1,2]
). Tak więc(1), (2)
w powyższym przykładzie byłoby ściśnięte razem.Na koniec otrzymujemy
sum
wszystkie długości tej listy, które reprezentują nasze wstawione godziny, i dodajemy długość oryginalnej listy.Na przykład:
źródło
JavaScript (ES6), 57 bajtów
Wypróbuj online!
Skomentował
źródło
C (gcc) , 69 bajtów
Wypróbuj online!
Prosta rekurencja.
źródło
Perl 6 , 48 bajtów
Wypróbuj online!
45 bajtów, jeśli lista zawiera co najmniej dwa elementy:
Wypróbuj online!
źródło
Smalltalk, 125 bajtów
Wyjaśnienie
źródło
Perl 5
-pl
,4240 bajtówWypróbuj online!
źródło
-p
i przerabiając podstawienie: Wypróbuj online!Partia, 184 bajty
Dane wejściowe są przekazywane za pomocą argumentów wiersza polecenia, a dane wyjściowe - za pomocą kodu wyjścia. Wyjaśnienie:
Śledź dwa ostatnie zadania.
Zainicjuj liczenie.
Przetwarzaj każde zadanie.
Podaj ostateczną liczbę.
Do każdej pracy:
Jeśli ostatnio przetworzyliśmy zlecenie, dodaj odpowiednią liczbę miejsc do odstąpienia od umowy. Ponadto wyczyść ostatnie zadanie, aby następne zadanie wyzwoliło chłodzenie tylko wtedy, gdy jest takie samo jak to zadanie.
Zaktualizuj dwa ostatnie zadania i przydziel miejsce dla tego zadania.
źródło
Szybki, 114 bajtów
Wypróbuj online!
źródło
3,4,3,4
, należy postawić 5, a nie 6.s = a
może byćs=a
, i można zrobićs+=
zamiast wielus=s+...
i usuń spacje po?
:for i in 1...a.count-1{s+=a[i-1]==a[i] ?3:i>1&&a[i-2]==a[i] ?2:1}
uratować 9 bajtów.Python 3 ,
7975 bajtów-3 bajty dzięki mypetlion
-1 bajt dzięki Sara J.
Wypróbuj online!
źródło
a[0]in b[:2]and f(a,['']+b)or f(a[1:],[a[0]]+b)
możnaf(*[a[1:],a,[a[0]]+b,['']+b][a[0]in b[:2]::2])
zapisać 2 bajty.[a[0]]+b
możnaa[:1]+b
zapisać 1 bajt.['']+b
z[b]+b
Zapisuje bajt -b
jest listą, więc nigdy nie będzie równa dowolnej wartości wa
Java (JDK) , 110 bajtów
Wypróbuj online!
Nieskomentowany kod:
źródło
3,4,3,4,3,4
, zwraca 7 zamiast 8Galaretka , 20 bajtów
Wypróbuj online!
Chociaż jest to raczej podobne do krótszej odpowiedzi @ EriktheOutgolfer , napisałem ją, nie widząc jego. W każdym razie jego jest lepszy!
Wyjaśnienie
Pomocniczy link dynastyczny, przyjmuje aktualną listę jako lewy element, a następny element jako prawy
Główny link monadyczny, przyjmuje listę liczb całkowitych jako dane wejściowe
źródło
Python 2 , 75 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 52 bajty
Wypróbuj online!
źródło
APL (Dyalog Classic) , 22 bajty
Wypróbuj online!
źródło
JavaScript (V8), 101 bajtów
Wypróbuj online!
Rozpakowany kod wygląda następująco:
Moja pierwsza w historii próba gry w golfa kodowego może być prawdopodobnie znacznie zoptymalizowana poprzez zmniejszenie tablicy i przekazywanie jej rekurencyjnie.
źródło
Zsh ,
6660 bajtów-6 bajtów od niejawnych
"$@"
Wypróbuj online! Gorąco polecam dodanie
set -x
na początek, abyś mógł śledzić dalej.a
zawsze zawiera ostatnie dwa zadania, więc jeśli wyszukiwanie znajdzie pasujące zadaniea[2]
, zwiększamy o trzy (ponieważ przedziały zadań będą[... 3 _ _ 3 ...]
).Gdyby
a
ta opcja nie jest ustawiona, wyszukiwanie zakończy się niepowodzeniem, a interpretacja arytmetyczna zwróci błąd, ale dzieje się tak tylko przy pierwszym zadaniu i nie jest krytyczna.Możemy
$[x+=i+1]
zamiast tego zaoszczędzić jeszcze jeden bajt , a system użytkowników nie zawiera poleceń składających się wyłącznie z cyfr.źródło
K (ngn / k) , 27 bajtów
Wypróbuj online!
źródło