Niech będzie listą liczb całkowitych dodatnich bez szczególnego uporządkowania, które mogą zawierać duplikaty. Napisz program lub funkcję, która wypisze listę liczb całkowitych dodatnich M (których kolejność jest nieistotna), tak że scalenie L i M daje najmniejszą listę, która może całkowicie podzielić się na identyczne zakresy liczb całkowitych [ 1 .. i ] , gdzie i jest największy element w L
Przykład
Let L = [5,3,3,2,7]
. Maksymalnym elementem L
jest 7
. Najczęściej występuje określona liczba całkowita 2
( 3
pojawia się 2 razy). Dlatego musimy wypisać listę M
, która pozwoli na uzupełnienie L
, abyśmy mogli konstruować 2
zakresy liczb całkowitych od 1
do 7
.
Dlatego musimy wyprowadzać M = [1,1,2,4,4,5,6,6,7]
, aby każda liczba całkowita od 1
do pojawiała 7
się 2
razy.
Wejścia i wyjścia
- Używaj czegokolwiek w swoim języku, który jest podobny do list. Struktura danych używana dla danych wejściowych i wyjściowych musi być taka sama.
- Lista wejściowa będzie zawierać tylko dodatnie liczby całkowite.
- Lista wejściowa nie będzie pusta.
- Nie można założyć, że lista wejściowa jest posortowana.
- Kolejność na liście wyników jest nieistotna.
Przypadki testowe
Input Output
[1] []
[7] [1, 2, 3, 4, 5, 6]
[1, 1, 1] []
[1, 8] [2, 3, 4, 5, 6, 7]
[3, 3, 3, 3] [1, 1, 1, 1, 2, 2, 2, 2]
[5, 2, 4, 5, 2] [1, 1, 3, 3, 4]
[5, 2, 4, 5, 5] [1, 1, 1, 2, 2, 3, 3, 3, 4, 4]
[5, 3, 3, 2, 7] [1, 1, 2, 4, 4, 5, 6, 6, 7]
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
źródło
i
największym elementemL
lubM
?i
jest największym elementemL
, to była literówka w specyfikacji.M=[1,1,2,2,3]
doL=[3]
while „scalanie L i M wyniki na liście, które mogą całkowicie podzielona na identycznych zakresów liczb całkowitych [1..i]”?[1,2]
. Wyjaśnię to, aby było jasne, że powinno to skutkować minimalną liczbą zakresów.Odpowiedzi:
Galaretka , 9 bajtów
Oszczędność 1 bajtu dzięki Jonathanowi Allanowi . Stopka wywołuje główny link, sortuje wynik w celu dopasowania do przypadków testowych i formatuje dane wyjściowe jako siatkę.
Wypróbuj online! lub Sprawdź zestaw testowy!
Alternatywy
Wypróbuj jeden z nich online!
Wyjaśnienie
źródło
Perl 6 ,
3733 bajtów-4 bajty dzięki nwellnhof!
Wypróbuj online!
Anonimowy blok kodu, który bierze worek i zwraca worek wartości.
Wyjaśnienie:
źródło
{^.max+1 xx.Bag.values.max∖.Bag}
{^.keys.max+1 xx.values.max∖$_}
zapisuje kolejny bajt.R ,
594948 bajtówWypróbuj online!
źródło
rep
inaczej, ale poza tym jest taki sam jak twój. Mógłbym sam to opublikować, ale nie sądzę, że bym o tym pomyślał, gdyby nie pierwszy raz. Rzucam ci wyzwanie!split
aletabulate
jest znacznie lepszy!x=max(L<-scan());rep(1:x,1:x-lengths(split(L,c(L,1:x))))
które po dalszych testach nie działa dla przypadków testowych takich jak7
...Python 2 ,
86838072 bajtyWypróbuj online!
źródło
05AB1E ,
171617 bajtów-1 bajt dzięki @ Mr.Xcoder .
+1 bajt po naprawieniu obejścia.
Może całkowicie patrzę za siebie, ale czy 05AB1E ma nawet usunięcie wszystkich elementów listy b z listy a .. (EDYCJA: Naprawdę nie ..) Wiem, jak usunąć wiele razy, ale nie raz ... (różnica wielosetowa)
Zdecydowanie można grać w golfa. Nie bardzo z tego zadowolony, tbh .. Zanim dodam wyjaśnienie,
zobaczę, czy mogę jeszczezagrać wgolfa.EDYCJA: Dodano wyjaśnienie ..Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
K a,b Push a without b's
? Och, czekaj, „raz”… hmm[1,2,3,4,5,6,7,1,2,3,4,5,6,7]
i[5,3,3,2,7]
zK
wynikami[1,4,6,1,4,6]
niestety. Usuwa wszystkie elementy zamiast robić wielosetową różnicę.¢ZIZLŠŠи
powinien oszczędzić 1 bajtR ,
5955 bajtówKorzystając z
vecsets
pakietu, możemy upuścić trochę długości odpowiedzi. Dziękigl
możemy uzyskać zamówioną moc wyjściową. To nie działa w TIO. Zgodnie ze stylem (raczej sprytnym) rozwiązania @ digEmAll bez definicji funkcji, można to uznać za rozwiązanie 55-bajtowe.źródło
f(c(5,3,3,2,7))
JavaScript (ES6), 98 bajtów
Okazało się, że gra w golfa poniżej 100 bajtów jest dość trudna. Może być lepsze podejście.
Wypróbuj online!
W jaki sposób?
Najpierw przechodzimy przez tablicę wejściową,
a[]
aby zebrać następujące dane:M
= najwyższy element znaleziony w tablicy wejściowejm
= najwyższa liczba wystąpień tego samego elementuo[n]
= liczba wystąpieńn
Należy zauważyć, że
o
jest przede wszystkim zdefiniowany jako funkcja, ale podstawowy obiekt służy również do przechowywania liczby wystąpień.Następnie używamy funkcji rekurencyjnej
g()
do zbudowania wyniku.źródło
Haskell, 72 bajty
Wypróbuj online!
źródło
Brachylog ,
1817 bajtówWypróbuj online!
Zapisano 1 bajt dzięki @Kroppeb.
Wyjaśnienie
źródło
⌉
zamiastot
Java 10, 186 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
Łuska , 12 bajtów
Zaoszczędzono 1 bajt dzięki BWO .
Wypróbuj online!
źródło
MATL ,
2421 bajtówWypróbuj online!
źródło
MATL , 14 bajtów
Dane wejściowe to wektor kolumny z
;
separatorem.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe (wyświetla się
--
po każdym wyjściu, aby można było zidentyfikować puste wyjście).Wyjaśnienie
Rozważ dane wejściowe
[5; 2; 4; 5; 5]
jako przykład.źródło
Pyth , 13 bajtów
Wypróbuj tutaj! lub Sprawdź zestaw testowy!
źródło
Węgiel drzewny , 19 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Byłoby 16 bajtów, gdyby liczby całkowite były nieujemne zamiast dodatnich. Wyjaśnienie:
źródło
APL (Dyalog Classic) ,
1817 bajtówWypróbuj online!
wykorzystuje
⎕io←1
źródło
Prolog (SWI) , 211 bajtów
Minęło trochę czasu, odkąd programowałem w Prologu. Zdecydowanie można dalej grać w golfa, ale muszę zdać egzamin na hahaha.
Kod
Wypróbuj online!
Wersja bez golfa
źródło
Clojure, 94 bajty
źródło
C ++, 234 bajty
(Nowe wiersze w treści funkcji służą do czytelności).
Funkcja pobiera i zwraca wektor liczb całkowitych. Wykorzystuje
std::map
do znajdowania maksymalnego elementu listy wejściowej, a także do zliczania wystąpień każdego odrębnego elementu.Wyjaśnienie:
źródło
Gaia , 12 bajtów
Wypróbuj online!
źródło
C (gcc) , 177 bajtów
Wejście i wyjście odbywa się poprzez standardowe wejście i standardowe wyjście. Obie tablice są ograniczone do 2 ^ 15 elementów, ale mogą mieć nawet 2 ^ 99 elementów.
Z pewnym formatowaniem:
Wypróbuj online!
źródło