Wprowadzenie
Z definicji unikalne identyfikatory powinny być unikalne. Posiadanie wielu identycznych identyfikatorów powoduje pobieranie nieoczekiwanych danych. Jednak przy równoczesnym napływaniu danych z wielu źródeł zapewnienie jednoznaczności może być trudne. Napisz funkcję, która ujednolica listę identyfikatorów.
To chyba najgorszy puch puzzli, jaki napisałem, ale masz pomysł.
Wymagania
Biorąc pod uwagę listę zerowych lub więcej dodatnich liczb całkowitych, zastosuj następujące reguły do każdej liczby od pierwszej do ostatniej:
- Jeśli numer jest pierwszym w swoim rodzaju, zachowaj go.
- Jeśli liczba została wcześniej napotkana, zamień ją na najniższą dodatnią liczbę całkowitą, której nie znaleziono nigdzie na całej liście danych wejściowych ani na żadnym istniejącym wyjściu.
Dla rozwiązania:
- Rozwiązaniem może być program lub funkcja.
- Dane wejściowe mogą być łańcuchem, tablicą przekazywaną jako argumenty lub dane wejściowe z klawiatury.
- Wynik może być łańcuchem, tablicą lub wydrukowany na ekranie.
- Wszystkie liczby na liście wyników są różne.
Założenia
- Lista wejściowa jest czysta. Zawiera tylko dodatnie liczby całkowite.
- Dodatnia liczba całkowita ma zakres od 1 do 2 31 -1.
- Mniej niż 256 MB pamięci jest dostępne na zmienne programu. (Zasadniczo niedozwolone są 2 147 483 648 elementów).
Przypadki testowe
Input: empty
Output: empty
Input: 5
Output: 5
Input: 1, 4, 2, 5, 3, 6
Output: 1, 4, 2, 5, 3, 6
Input: 3, 3, 3, 3, 3, 3
Output: 3, 1, 2, 4, 5, 6
Input: 6, 6, 4, 4, 2, 2
Output: 6, 1, 4, 3, 2, 5
Input: 2147483647, 2, 2147483647, 2
Output: 2147483647, 2, 1, 3
Punktacja
Po prostu prosty golf. Najniższa liczba bajtów do tego czasu wygrywa w przyszłym tygodniu.
code-golf
set-theory
Hand-E-Food
źródło
źródło
6, 6, 1, 2, 3, 4, 5
→6, 7, 1, 2, 3, 4, 5
6, 6, ...
dawać6, 1, ...
?6, 6, 4, 4, 2, 2
Przypadek testowy potwierdza interpretację Adáma : oczekiwany wynik to6, 1, 4, 3, 2, 5
, a nie6, 1, 4, 2, 3, 5
.Odpowiedzi:
Brachylog , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Java 8,
158144 bajtów.contains(m+c);m++)
aby.contains(++m+c);)
zapisać 1 bajt i jednocześnie przekonwertować na Javę 8, aby zapisać 13 kolejnych bajtów.Objaśnienia:
Wypróbuj tutaj.
źródło
JavaScript (ES6), 49 bajtów
źródło
Ruby , 63 bajty
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E ,
171618 bajtówWypróbuj online!
Wyjaśnienie
źródło
6, 6, 1, 2, 3, 4, 5
.[6, '1', '2', '3', '4', '5', '7']
. Powinien dać[6, '7', '1', '2', '3', '4', '5']
.PHP, 121 bajtów
Wersja online
Rozszerzony
źródło
Python 2,
7779 bajtówPobiera dane z klawiatury, jak
[3, 3, 3, 3, 3, 3]
.Śledź tylko najmniejszą dodatnią liczbę całkowitą, która dotychczas
j
nie była używana. Dla każdego elementux
wejścia wyprowadza dane wyjściowe,x
jeślix
jeszcze nie zostały użyte, w przeciwnym razie dane wyjściowej
. Na koniec aktualizuj zaj
każdym razem, gdy coś wypisujesz.ZMIENIONO: aby naprawić błąd obsługi błędu
[6, 6, 4, 4, 2, 2]
. Dzięki @Rod za wskazanie błędu i poprawki. Błąd polegał na tym, że w przypadku zduplikowanego wpisu wyświetlałby najmniejszą liczbę nieużywaną do tego punktu na liście, nawet jeśli dane wyjściowe pojawiły się później na wejściu. (Było to błędne, jak wyjaśniono w poście i komentarzach, ale jakoś to pomieszałem). W każdym razie poprawką było po prostu dodanie listy danych wejściowycha
do zestawu wartości, których nie można było w takim przypadku wygenerować.źródło
[6,6,4,4,2,2]
, możesz (prawdopodobnie) to naprawić, dodając+a
dowhile j in u:
->while j in u+a:
Haskell ,
7976 bajtówEDYTOWAĆ:
head
można zastąpić dopasowaniem wzorca.([]#)
to anonimowa funkcja przyjmująca i zwracająca listę. Użyj jak([]#)[2147483647, 2, 2147483647, 2]
.Wypróbuj online!
Jak to działa
?
jest skróconym operatorem do sprawdzania, czy element jest nieobecny na liście.s#l
obsługuje listę liczb całkowitychl
, biorąc pod uwagę listęs
już użytych liczb całkowitych.x
jest następną liczbą całkowitą, na którą należy spojrzeć,y
pozostałe.z
jest liczbą całkowitą wybraną dla następnego miejsca. To jest,x
jeślix
nie jest elementems
, i pierwszą dodatnią liczbą całkowitą, ani w,s
ani wy
inny sposób.(z:s)#y
następnie powtarza się zz
dodaną do listy używanych liczb całkowitych.n
jest pustą listą, ponieważ niepuste listy były obsługiwane w poprzednim wierszu.([]#)
pobiera listę i wywołuje#
ją jako drugi argument oraz pustą listę dla pierwszego argumentu.źródło
|z:_<-[x|...]...
APL (Dyalog 16.0), 34 bajty
źródło
Pyth ,
2120 bajtówZestaw testowy
Dodam wyjaśnienie, kiedy będę miał czas.
źródło
C # , 135 bajtów
Grał w golfa
Bez golfa
Nieczytelny czytelny
Pełny kod
Wydawnictwa
135 bytes
- Wstępne rozwiązanie.Notatki
źródło
Python 2 , 101 bajtów
Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe
źródło
R , 39
46bajtówTworzy wektor z danych wejściowych, a następnie zastępuje zduplikowane wartości zakresem od 1 do miliona, z których usunięto wartości wejściowe. Zwraca wektor numeryczny. Żadne wejście nie zwróci pustego wektora liczbowego (0).
Wypróbuj online!
Spowoduje to wyświetlenie ostrzeżenia o długości wektora zastępczego
źródło
C,
169 bajtów133 bajtyinput = tablica a, output = zmodyfikowana tablica a
sformatowany
Zbyt wiele bajtów zmarnowanych dla tych pętli. Czy ktoś myśli o skróceniu kodu poprzez wynalezienie nowego algorytmu (który wykorzystuje mniejszą liczbę pętli)? Myślałem, ale nie znalazłem.
źródło
C # 7, 116 bajtów
Zębaty
Wyjaśnił
[1, 2, 3, ...]
, pomijając wartości obecne na wejściu.Wersja online
źródło
Clojure, 72 bajty
Podstawowa redukcja. Jeśli
i
do tej pory znajdował się na liście wyników, bierzemy drugi element (1, gdy indeksowany jest 0) z nieskończonej listy liczb całkowitych,(range)
z których usunęliśmy te liczby, które zostały już użyte. Zakres zaczyna się od zera, więc nie możemy wziąć pierwszego elementu, ale drugi.źródło
R, 74 bajty
czyta listę ze standardowego wejścia; zwraca NULL dla pustego wejścia.
wyjaśnienie:
1:length(n)
mogą być używane, ponieważ gwarantujemy, że nigdy nie będziemy potrzebować wymiany spoza tego zakresu.Wypróbuj online!
źródło
Aksjomat, 169 bajtów
golf i wynik
źródło