Weź tablicę liczb całkowitych zawierających liczby ujemne, liczby dodatnie i zera. Zgrupuj go z jedną iteracją, tak aby wszystkie liczby ujemne były pierwsze, a następnie wszystkie zera, a następnie wszystkie liczby dodatnie.
Przykład:
Input: 5, 3, 0, -6, 2, 0, 5
Output: -6, 0, 0, 3, 2, 5, 5
Pamiętaj, że liczby nie muszą być w pełni posortowane: wystarczy posortować według znaku.
Tak więc końcowa tablica będzie wyglądać następująco: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, +
Zasady
- Możesz używać tylko tablicy wejściowej i stałej ilości dodatkowej pamięci (tzn. Nie możesz już tworzyć więcej tablic)
- Możesz użyć tylko jednej pętli, która może wykonać się tyle razy, ile wynosi długość tablicy. Nie możesz używać wbudowanych funkcji, które ukrywają jakąkolwiek pętlę. Obejmuje to wbudowane funkcje sortowania.
- Wynik powinien być w formacie, który opisałem
Zwycięzcą zostanie osoba, która prześle najkrótszy kod (liczony w bajtach), który zmienia początkową tablicę na poprawny format (jak opisano powyżej).
code-golf
number
sorting
array-manipulation
Ionică Bizău
źródło
źródło
sort(...)
nie są w porządku, ponieważ prawdopodobnie wykonują więcej niż jedną iterację.Odpowiedzi:
C 92
Prawdopodobnie można to zmniejszyć o co najmniej 10 bajtów; wiele wyrażeń marnuje się.
Pierwszy argument powinien wskazywać na początek tablicy; drugi powinien wskazywać za końcem tablicy.
Niegolfowany z generatorem losowych testów:
źródło
STATA 242
Śledzi dokładnie stronę wikipedii. Dzięki @PeterTaylor
Pobiera dane wejściowe jako oddzielony spacjami zestaw liczb od standardowego wejścia i wyjściowego jako takiego, a także do standardowego wyjścia.
źródło
Python 2: 116 bajtów
To jest golfowe tłumaczenie pseudo-kodu holenderskiej flagi narodowej w języku Python.
Możliwe 112 bajtów
Nie jestem pewien, czy jest to dozwolone. Tworzy drugą tablicę o rozmiarze 3 (stała ilość dodatkowej pamięci!).
źródło
C, 90
Prosta implementacja algorytmu w artykule na Wikipedii zgodnie z komentarzem Petera Taylora do pytania.
Oczekuje znalezienia danych w tablicy o nazwie
a
podobnej do drugiej odpowiedzi C.n
,p
iz
są wskaźnikami do wstawiania liczb ujemnych i dodatnich oraz zer.n
ip
są traktowane jako argumenty wskazujące na pierwszy i ostatni element danych.źródło
ECMAScript 157 bajtów
Pobiera liczby jako rozdzielone spacjami lub oddzielone przecinkami z okna dialogowego monitu i zwraca wynik w oknie dialogowym alertu.
źródło
PHP (146)
http://3v4l.org/ivRX5
Stosunkowo pełna składnia zmiennych PHP jest tutaj trochę bolesna ...
źródło
Rebol -
149142140Jest to bezpośredni port pseudokodu wikipedia holenderskiej flagi narodowej. Poniżej wygląda na to, że nie jest golfem:
Przykład użycia:
NB Tablice Rebol (bloki) nie używają przecinków -
[5 3 0 -6 2 0 5]
A jeśli będzie OK, zawiń to w funkcję, która pobiera tablicę i modyfikuje ją w miejscu, możemy sprowadzić ją do 128 znaków:
W rzeczywistości, jeśli nie trzeba było zwracać tablicy (tj. Po prostu modyfikować), możesz ogolić jeszcze 1 znak.
źródło
C ++
Rozwiązanie bez gry w golfa: n zlicza negatywy dodane z przodu tablicy. Dla każdego elementu w przypadku zamiany ujemnej z elementem w punkcie n, w przypadku zamiany zera z elementem w punkcie n + 1, w przeciwnym przypadku z ostatnim elementem.
źródło
CJam -
7267Wejście:
[5 3 4 0 -6 2 0 5]
Wyjście:
[-6 0 0 4 2 3 5 5]
Wypróbuj na http://cjam.aditsu.net/
Wyjaśnienie:
Jest to kolejna implementacja algorytmu z wikipedii, wykorzystująca
T
fori
iU
forj
(oba automatycznie inicjowane na 0).źródło