Zadanie
Biorąc pod uwagę niepustą tablicę 0
i 1
, o połowę długości serii 0
.
Wejście
Tablica 0
i 1
. Dopuszczalny format:
- Prawdziwa tablica w twoim języku
- Ciąg znaków oddzielony od linii
0
i1
- Ciągły ciąg
0
i1
- Każdy inny rozsądny format
Na przykład następujące trzy dane wejściowe są dopuszczalne:
[1, 0, 0, 1]
"1\n0\n0\n1"
(gdzie\n
jest wysuw linii U + 000A)"1001"
Możesz założyć, że przebiegi 0
będą miały równą długość .
Wynik
Tablica 0
i 1
, w akceptowalnych formatach powyżej.
Przypadki testowe
input ↦ output
[1,0,0,1,0,0,1] ↦ [1,0,1,0,1]
[1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1]
[1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1]
[1,1,1] ↦ [1,1,1]
[0,0,1] ↦ [0,1]
[0,0] ↦ [0]
[1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0]
Punktacja
To jest golf golfowy . Najkrótsza odpowiedź w bajtach wygrywa.
code-golf
array-manipulation
Leaky Nun
źródło
źródło
true
ifalse
zamiast1
i0
?0
za prawdę.Odpowiedzi:
Siatkówka , 4 bajty
Wypróbuj online!
źródło
05AB1E , 5 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
00
to dziwne zachowanie ...11
jest jedenaście, a nie1,1
. Efektem ubocznym jest to, że00
staje się00
zamiast0,0
:)0
lub0 0
zamiast niej, ale cokolwiek.Haskell , 33 bajty
Wypróbuj online! Zastosowanie:
f[1,1,0,0,1,1,0,0,1]
. Iteruje po liście i zastępuje dwa kolejne zera jednym zerem.źródło
C (gcc) , 35 bajtów
48 to kod ascii „0”
lepsza wersja 43 bajtów, zgodnie z sugestią Neila
tym razem jeszcze 40 bajtów (znowu jak sugeruje Neil i VisualMelon) :)
a następnie 35 bajtów dzięki Khaled.K
Wypróbuj online!
źródło
s+=2-*s%2
zadziała?for(;*s;s+=2-*s%2)putchar(*s);
zapisuje kolejny bajt.s+=50-*s
? Nie zrobiono C od wieków i nie chcę się zawstydzać, powołując się na niezdefiniowane zachowanie (pochodzące z C # tam, gdzie ich nie ma)putchar
dokumenty, potrafiszf(char*s){for(;*s;s+=50-putchar(*s));}
?f(char*s){*s&&f(s+50-putchar(*s));}
sed , 8 bajtów
Wypróbuj online!
źródło
0
s0
.Oktawa, 22 bajty
Sprawdź tutaj wszystkie przypadki testowe.
Jest to anonimowa funkcja, która przyjmuje ciąg znaków w formacie
'1001000011'
jako dane wejściowe i zastępuje dwa kolejne zera pojedynczym zerem.źródło
Java, 50 bajtów
Wypróbuj online
źródło
s->s.replaceAll("00","0")
.replace
zamiastreplaceAll
oszczędzać 3 bajtyreplace
zastąpi tylko pierwsze wystąpienieHaskell , 28 bajtów
Wypróbuj online!
Rekurencyjnie bierze pierwszy element, upuszczając drugi, jeśli pierwszy wynosi zero, aż do listy pustych. Jeśli pierwszym wpisem jest
h
, to pierwsze1-h
są usuwane z reszty.źródło
Japt ,
7 65 bajtówWypróbuj online!
Po prostu zastępuje każdy przebieg dwóch zer na wejściu jednym zerem. Wykorzystuje ciąg znaków (tj
"1001001"
.).źródło
'
Myślę, że nawet nie potrzebujesz"00"
go'0²
:-)PHP, 26
po prostu zamień wszystko
00
na0
.źródło
Alice , 13 bajtów
Wypróbuj online!
Wyjaśnienie
Jest to prosty szablon dla programów liniowych, które działają całkowicie w trybie porządkowym. Inicjał
/
odzwierciedla adres IP ruchu na południowy wschód, a następnie odbija się po przekątnej w górę i w dół przez kod, aż na końcu lustra. Po prostu kompensują pozycję o jeden, tak że w drodze powrotnej IP przemierza pozostałe komórki. Czytanie kodu w ten zygzakowaty sposób staje się:To jest proste podstawienie łańcucha:
Istnieje kilka innych sposobów na przesuwanie tych dwóch łańcuchów, np.
'00'0
Lube000t
, ale nie znalazłem niczego, co przekroczyłoby 5 bajtów (musiałbym zgolić dwa bajty, aby móc skrócić program).źródło
Prolog (SWI) , 42 bajty
Wypróbuj online!
źródło
*
operatora.Java ,
131123 bajtówWypróbuj online!
źródło
JavaScript (ES6),
2621 bajtówPobiera dane wejściowe jako ciąg znaków i zwraca ciąg znaków.
Spróbuj
źródło
Lua, 33 bajty
Pobiera ciąg znaków przez wejście i kondensuje podwójne zera. Łatwo.
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Możliwe, że inne odpowiedzi w językach bez
.replace()
lub podobnych mogłyby skorzystać z tej sztuczki.Wyjaśnienie
źródło
Alice ,
1210 bajtów2 bajty zapisane dzięki Martinowi Enderowi
Wypróbuj online!
Wyjaśnienie
Jest to kod 1-D działający w trybie kardynalnym, więc łatwo jest śledzić jego przebieg:
źródło
i.h%...
Python (lista I / O), 36 bajtów
Wypróbuj online!
Rekurencyjnie bierze pierwszy element, a następnie usuwa pozostały, jeśli pierwszy miał zero.
38 bajtów:
Wypróbuj online To zajmuje listę Pythona i generuje listę Python, wykonując zamianę jej reprezentacji ciągu. Ciąg I / O pozwoliłby na bardziej bezpośrednie i krótsze rozwiązanie, takie jak
dla
'1001'
formatu.źródło
lambda s:s.replace('00','0')
powinno być dobrze.APL (Dyalog) , 9 bajtów
Wypróbuj online!
źródło
Perl 5, 7 + 1 (flaga -p) = 8 bajtów
Pobiera dane wejściowe jako liczby oddzielone znakiem nowej linii. Pomija następny wiersz, jeśli widzi zero.
źródło
V , 4 bajty
Wypróbuj online!
źródło
MATL , 5 bajtów
Wypróbuj online!
Wyjaśnienie
Jest to podobne do odpowiedzi Octave Stewiego Griffina :
8 bajtów
Pozwala to uniknąć wbudowanego zastępowania łańcucha / tablicy.
Wypróbuj online!
Wyjaśnienie
Rozważ dane wejściowe
[1,0,0,1,0,0,1]
jako przykład:źródło
Brachylog , 10 bajtów
Wypróbuj online!
Nie jestem pewien, czy jest to optymalne…
Wyjaśnienie
Wykorzystuje to błąd, który
c
zawodzi na liście liczb całkowitych z zerami wiodącymi.źródło
[0,0,4,2]
się42
. Zera wiodące powodują, że teraz zawodzi, ponieważ ma to zapobiegać nieskończonym zerom wiodącym, gdy Input jest zmienną, ale tutaj Input jest w pełni uziemiony, więc ograniczenie nie powinno istnieć.C #, 191 bajtów
Wypróbuj online!
Nie jest ani czysty, ani krótki, ale działa.
Pobiera dane wejściowe jako ciąg ciąg znaków, dane wyjściowe w tym samym formacie
Wyjaśnienie:
Uwaga
Tak, wiem, że można tego po prostu zrobić
s.Replace("00","0")
, moim celem było uniknięcie zastosowania oczywistego rozwiązania. W końcu sednem PPCG jest dobra zabawa, prawda? ;)źródło
Replace
Używam C #, więc nie mam złudzeń co do uzyskania możliwie najkrótszego kodu, szczególnie w przypadku języków takich jak Jelly, więc równie dobrze mogę się trochę zabawić w trakcie.string a(string s){var r="";for(int i=0;i<s.Length;i+=50-s[i])r+=s[i];return r;}
(wygląda na to, że jest to w zasadzie odpowiedź C)Pyth, 8 bajtów
Link do wypróbowania.
Wyjaśnienie:
źródło
Awk - 18 bajtów
Najpierw spróbuj zrobić cokolwiek z Awk, aby móc bardziej zagrać w golfa.
Stosowanie:
echo "1001001" | awk '{gsub(00,0);print}'
źródło
Partia, 24 bajty
Pobiera dane wejściowe na STDIN. Raz nieco konkurencyjny.
źródło
Common Lisp, SBCL,
4832 bajtów-16 bajtów dzięki Julianowi Wolfowi
Wejście:
wynik:
Wyjaśnienie
Czytamy listę wejść. Lista jest używana w
format
funkcji. Przechodzimy przez niego, wypisując,1
czy element jest,1
i wypisując0
i pomijając następny element listy dla0
.źródło
~[
zamiast~:[
pozwala bezpośrednio indeksować z 0 i 1, co powinno zaoszczędzić sporo bajtówMathematica, 24 bajty
Funkcja, która oczekuje ciągu
"0"
s i"1"
s i zwraca podobny ciąg. Wyjaśnienie składni. Mathematica ma wiele wbudowanych transformacji; kluczem jest użycie takiego, który przekształca każde istotne podwyrażenie (w przeciwieństwie do/.
), ale przechodzi przez wyrażenie tylko raz (w przeciwieństwie do//.
).źródło
Galaretka , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło