Zadanie jest proste: skonsoliduj tablicę ints. Konsolidacja tej tablicy składa się z następujących elementów:
- Wszystkie wystąpienia 0 muszą zostać przeniesione na koniec tablicy.
- Pomiędzy niezerowymi liczbami całkowitymi nie powinno być zer.
- Wszystkie niezerowe indeksy powinny zachować swoją kolejność.
Wyzwanie
Skonsoliduj tablicę w najmniejszej ilości bajtów.
Konsolidujesz tablicę o losowej długości z rozmiarem do maksimum twojego języka z losowymi liczbami całkowitymi. Wprowadzanie może być naturalnym sposobem dla twojego języka.
Przykłady
Wkład
0 5 8 8 3 5 1 6 8 4 0 3 7 5 6 4 4 7 5 6 7 4 4 9 1 0 5 7 9 3 0 2 2 4 3 0 4 8 7 3 1 4 7 5 1 2 1 8 7 8 7 7 2 6 3 1 2 8 5 1 4 2 0 5 0 6 0 3
Wydajność
5 8 8 3 5 1 6 8 4 3 7 5 6 4 4 7 5 6 7 4 4 9 1 5 7 9 3 2 2 4 3 4 8 7 3 1 4 7 5 1 2 1 8 7 8 7 7 2 6 3 1 2 8 5 1 4 2 5 6 3 0 0 0 0 0 0 0 0
Wkład
-1 -7 -6 5 1 -5 -2 7 -3 -8 0 8 9 1 -8 -1 6 -4 1 -2 1 -7 5 4 -6 7 -3 9 8 3 -1 0 -5 -7 3 8 1 1 3 -3 -2 -2 0 -7 0 -4 8 6 -3 6 0 5 3 2 2 2 -2 -7 -3 9 -1 6 0 6 -7 9 4 -2 8 -8 -4 1 -8 4 3 7 3 5 1 0 3 3 7 -1 -5 1 -3 4 -7 0 3 2 -2 7 -3 0 0 2 -5 8 -3 -2 -7 -5 7 -3 -9 -7 5 8 -3 9 6 7 -2 4 7
Wydajność
-1 -7 -6 5 1 -5 -2 7 -3 -8 8 9 1 -8 -1 6 -4 1 -2 1 -7 5 4 -6 7 -3 9 8 3 -1 -5 -7 3 8 1 1 3 -3 -2 -2 -7 -4 8 6 -3 6 5 3 2 2 2 -2 -7 -3 9 -1 6 6 -7 9 4 -2 8 -8 -4 1 -8 4 3 7 3 5 1 3 3 7 -1 -5 1 -3 4 -7 3 2 -2 7 -3 2 -5 8 -3 -2 -7 -5 7 -3 -9 -7 5 8 -3 9 6 7 -2 4 7 0 0 0 0 0 0 0 0 0 0
Przykładowy kod (Java)
public class Consolidate {
public static void main(String[] args) throws Exception {
int[] toConsolidate = new int[args.length];
for (int i=0; i<args.length; i++){
toConsolidate[i]=Integer.parseInt(args[i]);
}
for (int i=0; i<toConsolidate.length; i++) {
for (int k=0; k<toConsolidate.length-1; k++) {
if (toConsolidate[k] == 0){
toConsolidate[k] = toConsolidate[k+1];
toConsolidate[k+1] = 0;
}
}
}
for (int i:toConsolidate)
System.out.print(i+" ");
}
}
code-golf
array-manipulation
Addison Crump
źródło
źródło
Odpowiedzi:
Pyth, 3 bajty
Wyjaśnienie:
Wypróbuj tutaj .
źródło
Q
może być niejawne na końcu dowolnego skryptu Pyth (zakładając, że jest on poza lambda, co oznacza, że), co daje 2 bajty.Galaretka, 3 bajty
Sortuje listę według logicznego NOT jej wartości. Wypróbuj online!
Jak to działa
źródło
¬Þ
!Oktawa, 18 bajtów
sort()
zajmuje zbyt wiele bajtów. Użyję tylko indeksowania logicznego.Przykłady dotyczące ideonu .
źródło
R,
292321 bajtówJak zauważył MarcoBreitig, możemy skrócić go do 21 bajtów, jeśli nie musimy go podawać jako funkcji:
Poprzednie wersje:
Funkcja przyjmuje wektor jako dane wejściowe i porządkuje według wektora logicznego, który wynika z zanegowania danych wejściowych.
Oryginalna odpowiedź:
Funkcja przyjmuje wektor jako dane wejściowe i konkatenuje (
c()
) wartości niezerowe, a następnie wartości zerowe.źródło
Retina , 15
Proste powtarzanie podstawienia wyrażenia regularnego:
Wypróbuj online.
źródło
ES6, 23 bajty
Kiedyś sytuacja
sort
była niestabilna, w którym to przypadku potrzebujesz 41 bajtów:źródło
Kod bajtowy w Pythonie (2.7.9), 252 bajty, 33 kody, 0,0228 sekundy
To był build kiedy konkurs był wciąż najszybciej kod konkurs
Otwiera plik w bieżącym katalogu,
'SourceArray'
do którego należy użyćco_code
(Rzeczywista nieco codey)Lub wersja pliku .pyc
03F3
Możesz spróbować samodzielnie skompilować mój kod źródłowy za pomocą mojej biblioteki na github. Właśnie opublikowałem zatwierdzenie, które pozwoliło na komentarze, więc mam nadzieję, że nadal konkuruje, jeśli chodzi o najszybszy kod ;)
Z grubsza odpowiada
źródło
Python, 32 bajty
Pobiera argument jak każda iterowalna (lista, krotka itp.). Dzięki @xnor za nauczenie mnie nowej sztuczki!
źródło
key=0..__eq__
(tak, dwie kropki)."abc".__eq__("abc")==True
. Tak się nazywa, kiedy to robisz"abc"==
. Z powodów liczby całkowite w języku Python nie mają go, ale zmienne mają, a ponieważ0. == 0
możemy zastąpić jego operator równości0..__eq__
..__eq__
metodzie, ale podwójne kropki mnie dezorientowały. Nie zrozumiałem, że pierwszy był przecinkiem literału zmiennoprzecinkowego.Matlab: 21 bajtów
Drukuje najpierw elementy niezerowe, a następnie konkatenuje z elementami zerowymi
@(a)____
utwórz anonimową funkcję z jednym argumentem wejściowyma
[___,___]
łączy wektory poziome w nawiasach kwadratowych, oddzielając je przecinkamia(a~=0)
zwraca wektor ze wszystkimi niezerowymi elementami wektoraa
a(a==0)
zwraca wektor ze wszystkimi zerowymi elementami wektoraa
źródło
Haskell, 26 bajtów
Weź wszystkie niezerowe liczby, a następnie wszystkie zera. Filtrowanie stałych (tutaj
0
) jest dość krótki przy użyciu wyrażeń listowych:[0|0<-x]
.źródło
Zsh, 22 bajty
(dane wejściowe przekazywane jako argumenty do skryptu / funkcji (
$@
inaczej$argv
tablica), dane wyjściowe na standardowym wyjściu jako lista oddzielona spacjami, zakończenie nowej linii)<<< string
: ciąg tutaj jest przekazywany jako$NULLCMD
komenda jako standardowe (cat
domyślnie).${@:#0}
$@
z wyjątkiem elementów będących 0.${(M)@:#0}
odwrotność powyższegoZakłada to (podobnie jak kilka innych odpowiedzi tutaj), że zera na wejściu są wyrażone jako
0
(nie,00
ani0x0
nie36#0
).źródło
JavaScript,
525451 bajtówźródło
Mathematica, 14 bajtów
źródło
Sort[#!=0&]
powinno wystarczyć.APL: 8 bajtów
a ~ 0 usuwa zera z (czytaj „a bez 0”)
(⍴a) oryginalnej długości (czytaj „kształt a”)
↑ pad a bez zer do oryginalnej długości
Wypróbuj w http://ngn.github.com/apl/web/index.html
Dane testowe: a ← 1 0 1 2 3 4 0 1 0 0 0 0 1 2 3 4 5
źródło
⍴↑{⍵~0}
a to jeszcze krótsze.Java 7, 78 bajtów
Nie jestem pewien, dlaczego inne wpisy Java używają ciągów. Jeśli chcesz filtrować tablicę liczb całkowitych, najlepiej użyć tablicy liczb całkowitych. To modyfikuje dane wejściowe na miejscu, utrzymując dwa wskaźniki, a następnie wypełniając pozostałe szczeliny zerami.
źródło
o
zint c=0,o;for(o:a)...
. Możesz także przekonwertować na składnię lambda Java 8:a->{int c=0;for(int o:a)a[o==0?c:c++]=o;for(;c<a.length;a[c++]=0);}
i stwierdzić, że oczekuje ona danych wejściowych jako tablicy int.Common Lisp, 46 bajtów
Posortuj tablicę tak, aby dla każdej pary (a, b) otrzymaliśmy wartość <b, jeśli b wynosi zero. Gdy ani a <b lub b <a , sortowanie jest stabilne: zachowana jest pierwotna kolejność między elementami.
Próbowałem też z dopasowaniem-tablicą i usunięciem , ale to było za długie:
źródło
PHP,
73717052494846 bajtów - DUŻY dzięki Ismaelowi Miguelowiźródło
$v==0
można zastąpić!$v
, oszczędzając 2 bajty.foreach($argv as$v)$v?$f.=" $v":$b.=" $v";echo$f.$b;
. To .... niektóre bajty, nie wiem ...foreach($a as$v)$v?print("$v "):$b.="$v ";echo$b;
dla bardziej schludnego sposobu, który wygląda dokładnie tak samoNarzędzia Bash + GNU, 23
Zakłada, że dane wejściowe to pozycje oddzielone znakiem nowej linii w pliku o nazwie
a
. Wynik obejmuje +1 dla tej nazwy pliku.źródło
Perl 5, 26 bajtów
23 plus trzy za
-an
(-E
jest bezpłatny)Dziękuję Dennisowi za przypomnienie mi
-a
, że zaoszczędziłem dwa bajty.źródło
CJam, 6 bajtów
Anonimowa funkcja. Sortuj używając „czy element jest zerowy” jako klucza.
źródło
MATL , 7 bajtów
Wypróbuj online!
źródło
Poważnie, 12 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Szybki , 13 bajtów
źródło
Perl6, 11 bajtów
Tworzy blok - który można wywołać w tablicy:
Chociaż pisanie byłoby bardziej naturalne (i krótsze):
Jak to działa: jeśli procedura sortowania perl6 jest wywoływana z blokiem, który akceptuje tylko jeden argument, elementy listy są sortowane według
by($a) cmp by($b)
. W tym przypadku blok jest!*
, tzn. Negacją dowolnego operatora .Zauważam to:
źródło
TeX (format zwykły), 160 bajtów
Uaktywnij
0
znak (to znaczy, aby interpreter przetworzył go jako polecenie), a następnie zdefiniuj to polecenie, aby pominąć znak i zwiększyć licznik. Na końcu łańcucha wypisz tyle zer, ile zostało policzonych.Zapisz to jako
zero.tex
i podaj dane za pomocą wiersza polecenia za pomocą tego polecenia:(Dodano nowe linie dla zachowania przejrzystości)
źródło
J, 4 bajty
Wyjaśnienie:
Dzięki specyfikacji funkcja sortowania w J jest stabilna.
Alternatywne rozwiązanie, 6 bajtów:
źródło
Słoma ,
3029 bajtówUżyj kodowania CP437
Wyjaśnienie
Wypróbuj online! (Dodany kod służy do testowania wszystkich przypadków testowych)
źródło
JavaScript ES6, 16 bajtów
Działa na Firefox
źródło
Ruby , 25 bajtów
Wypróbuj online!
źródło
05AB1E ,
1514 bajtówKod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252. Przyjmuje tablicę taką jak ta:
źródło