Wyzwanie:
Weź wektor / listę liczb całkowitych jako dane wejściowe i wyślij największą liczbę, która sąsiaduje z zerem.
Dane techniczne:
- Jak zawsze opcjonalny format wejściowy i wyjściowy
- Możesz założyć, że będzie co najmniej jedno zero i co najmniej jeden element niezerowy.
Przypadki testowe:
1 4 3 6 0 3 7 0
7
9 4 9 0 9 0 9 15 -2
9
-4 -6 -2 0 -9
-2
-11 0 0 0 0 0 -12 10
0
0 20
20
Powodzenia i udanej gry w golfa!
Odpowiedzi:
Galaretka , 8 bajtów
Wypróbuj online!
źródło
MATL , 10 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Weźmy
[-4 -6 -2 0 -9]
za przykład przykład.źródło
x(~~(dec2bin(5)-48))
. Kto wpadł na pomysł, żeby go wdrożyć? Bardzo sprytny i przydatny do tablic logicznych! :) Niezła odpowiedź!dec2bin()-'0'
setki razy w MATLAB, więc wiedziałem, że jeden musi być w MATL :-)05AB1E , 9 bajtów
Wyjaśnienie
Nie działa w tłumaczu online, ale działa offline.
źródło
ü
dodano wczoraj :)0
jeśli rzeczywista odpowiedź będzie negatywna? Myślę, że musisz wyrzucić zera.˜
zO
(suma).Haskell,
6343 bajtyDzięki @MartinEnder za 4 bajty!
źródło
a*b==0
zamiast||
.Pyth,
121110 bajtówTworzy pary, filtry według zerowego elementu, sortuje według sumy, zwraca największy.
źródło
,Vt
(niejawneQQ
) zwraca te same pary co.:Q2
, ale z odwróconymi parami. Powinien jednak działać.f}0T
is/#0
JavaScript (ES6),
595756 bajtówEdycja: zapisano 2 bajty dzięki Huntro
Edycja: zapisano 1 bajt dzięki ETHproductions
źródło
==
zamiast===
l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
JavaScript (ES6), 53 bajty
Ponieważ lubię używać
reduce
. Alternatywne rozwiązanie, również 53 bajty:źródło
Python, 49 bajtów
Testy są w idealnym stanie
Przeskakuje przez pary, sumuje te zawierające dowolne zero, zwraca maksimum.
źródło
Rubinowy, 51 bajtów
stosowanie
źródło
a+b
.-3 -2 0
Zwraca0
. Myślę, że zastąpienie...?0:...
go...?-1.0/0:...
powinno go naprawić, dodając 5 bajtów.PHP,
776871 bajtów-3 bajty z anonimowego,-4 i -2 z MartinEnderBiegnij z
php -r '<code>' '<space separated values>'
źródło
\K
do tej pory odrzucenia meczu jest krótsze niż obejrzenie się za siebie.\S+
do dopasowania liczby całkowitej ze znakiem. Prawdopodobnie będziesz musiał użyć,\b0,
więc nie musisz dodawać,
.4 0 0 5
?\K
działa z alternatywami? Z nieznanego powodu druga alternatywa powraca0 0
, aby nie było już nic0
do dopasowania przed5
. Naprawiono, dziękuję.Java 7,
118105106 bajtów13 bajtów zapisanych dzięki @cliffroot dzięki zastosowaniu metody arytmetycznej. 1 dodatkowy bajt dzięki @mrco po tym, jak odkrył błąd (dodany przypadek testowy
2, 1, 0
wróciłby2
zamiast1
).Kod niepoznany i testowy:
Wypróbuj tutaj.
Wydajność:
źródło
int d(int[]a){int i,m=a[i=0],c;for(;++i<a.length;m=a[i]*a[i-1]==0&(c=a[i]+a[i-1])>m?c:m);return m;}
CJam , 16 bajtów
Wypróbuj online! (Jako zestaw testowy.)
Wyjaśnienie
źródło
MATLAB z Przybornikiem przetwarzania obrazu, 32 bajty
To anonimowa funkcja. Przykładowe zastosowanie dla przypadków testowych:
źródło
Dyalog APL , 14 bajtów
⌈/
największy z∊
spłaszczony („ e nlisted”2(
...)/
parami+
suma (zero plus coś jest czymś)↑⍨
podjęte jeśli0
zero∊
jest członkiem,
para (lit. konkatenacja numeru po lewej stronie i numeru po prawej stronie)Wypróbuj APL online!
źródło
R,
4847 bajtówEDYCJA: Naprawiono błąd dzięki @Vlo i zmieniono go na odczyt danych wejściowych ze standardowych, zapisano jeden bajt poprzez przypisywanie
w
i pomijanie nawiasów.Nie wyjaśnione wyjaśnienie
v
przyjmuje wartości 0:w <- which(v == 0)
+-1
:w-1
iw+1
w-1
iw+1
Zauważ, że jeśli ostatnim lub pierwszym elementem
v
jest zero,w+-1
to efektywnie pobierze indeks poza długość wektora, co oznacza, żev[length(v)+1]
zwracaNA
. Zasadniczo nie stanowi to problemu, alemax()
funkcje niewygodnie zwracają się,NA
jeśli w wektorze występują jakieś wystąpienia, chyba że określono opcjęna.rm=T
. Zatem sortowanie i wyodrębnianie pierwszego elementu jest o 2 bajty krótsze niż użyciemax()
, np .:źródło
c(1, 4, 3, 6, 0, 10, 7, 0)
c((w<-which(v==0))-1,w+1)
sort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]
()
;). Zaktualizowałem kod i przypisałemv
wcześniejszą manipulację teraz.Mathematica,
4643 bajtyZapisano 3 bajty dzięki @MartinEnder .
Funkcja anonimowa. Pobiera listę liczb całkowitych jako dane wejściowe i zwraca liczbę całkowitą jako dane wyjściowe. Oparty na rozwiązaniu Ruby.
źródło
Perl, 42 bajty
Obejmuje +1 dla
-p
Podaj liczby na linii na STDIN
largest0.pl
:źródło
Julia,
5655 bajtówUtwórz krotki dla sąsiednich wartości, weź krotki zawierające 0, zsumuj wartości krotek i znajdź maksimum
źródło
Python 2, 74 bajty
Przełączaj kolejno każdy element, jeśli znajduje się on
0
w pozycji po lewej lub po prawej stronie bieżącego elementu, włącz go do generatora, a następnie przepuśćmax
. Musimy uzupełnić listę niektórymi0
liczbami. Nigdy nie zostanie uwzględniony, ponieważ plasterek[-1:2:2]
niczego nie będzie zawierał.źródło
T-SQL, 182 bajty
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
PowerShell v3 +, 62 bajty
Trochę dłużej niż inne odpowiedzi, ale fajne podejście.
Pobiera dane wejściowe
$n
. Następnie pętle przez indeksy0..$n.count
, używaWhere-Object
(|?{...}
), aby wyciągnąć indeksy, w których znajduje się poprzedni lub następny element w tablicy0
, i przekazuje je z powrotem do wycinka tablicy$n[...]
. Mamy wtedy|sort
te elementy i bierzemy największy[-1]
.Przykłady
źródło
q, 38 bajtów
źródło
{}
aby uczynić go funkcją.J, 18 bajtów
Wyjaśnienie
źródło
Perl 6 , 53 bajtów
Rozszerzony:
źródło
PHP, 66 bajtów
Całkiem proste. Iteruje wejściu, a gdy liczba jest
0
, że wyznacza$m
się w największej ilości w 2 sąsiednich liczb i poprzednich wartości$m
.Działaj w ten sposób (
-d
dodano tylko dla estetyki):źródło
C #
7674 bajtyWyjaśnienie:
Użyj zip, aby połączyć tablicę z samym sobą, ale pomiń pierwszą wartość w drugim odwołaniu, aby pozycja zero łączyła się z pozycją pierwszą. Pomnóż a razy b, jeśli wynikiem jest zero, jeden z nich musi wynosić zero i wyprowadzić a + b. W przeciwnym razie wypisz minimalną możliwą liczbę całkowitą w języku. Biorąc pod uwagę założenie, że zawsze będziemy mieć zero i niezerowe wartości, ta minimalna wartość nigdy nie zostanie wyprowadzona jako wartość maksymalna.
Stosowanie:
źródło
int[]i) {
. Ponadto liczę 75 bajtów w bieżącym kodzie (74, jeśli usuniesz spację).a?b?i.Min()).Max():a:b
using System.Linq;
nie?System.Linq;
jest częścią domyślnego nowego szablonu klasy.using
instrukcję do swojej liczby bajtówR,
4854 bajtówOdczytuje wektor z danych wejściowych konsoli, a następnie przyjmuje maksimum nad wszystkimi wartościami sąsiadującymi z 0.
Edycja: Łapie NA wyprodukowane na granicy, dzięki rturnbull!
źródło
20 0
, ponieważs[w(s==0)+1]
zwracaNA
, amax
domyślnym sposobem postępowaniaNA
jest zwrócenie go. Możesz to naprawić, dodając argumentna.rm=T
lub przerób kod, którego chcesz użyćsort
(zobacz drugą odpowiedź R opublikowaną powyżej).Rakieta 183 bajtów
Wersja szczegółowa:
Testowanie:
Wydajność:
źródło
C 132 bajty
Dane wyjściowe przy użyciu kodu powrotu main:
Czuję, że powinienem być w stanie zaoszczędzić kilka bajtów, zapisując jedno z wywołań atoi, ale nie mogłem znaleźć skutecznego sposobu. (
,t
plust=
plus,
plust
dwa razy jest za długi). Również to technicznie wykorzystuje niezdefiniowane zachowanie (ustawienie _ [a] na „1”), ale każdy kompilator, o którym wiem, zezwala na to domyślnie.Strategia: wstaw początek i koniec tablicy za pomocą 1, a następnie zapętlić wewnętrzną sekcję, sprawdzając każdego sąsiada.
źródło
PHP
6964 bajtyNiektóre bajty włączane i wyłączane przez Jörga Hülsermanna i Tytusa. =
(-5)
Wymaga włączenia register_globals. Stosowanie:
http://localhost/notnull.php?i[]=9&i[]=-5i[]=...
Gra w golfa:
źródło
-d register_globals=1
(lub podaj wersję, w której register_globals jest domyślnie włączony)json_decode
to fajny pomysł.?id[]=1&id[]=2&id[]=3
a następnie$_GET["id"]
zwraca tablicę. Z tego powodu json_decode nie ma dla mnie sensu