Reto:
Tome un vector / lista de enteros como entrada y genere el número más grande adyacente a un cero.
Presupuesto:
- Como siempre, formato opcional de entrada y salida
- Puede suponer que habrá al menos un cero y al menos un elemento distinto de cero.
Casos de prueba:
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
¡Buena suerte y feliz golf!

Respuestas:
Jalea , 8 bytes
Pruébalo en línea!
fuente
MATL , 10 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Tomemos la entrada
[-4 -6 -2 0 -9]como un ejemplo.fuente
x(~~(dec2bin(5)-48)). ¿Quién fue la idea de implementar eso? ¡Muy inteligente y útil para arreglos lógicos! :) ¡Buena respuesta!dec2bin()-'0'cientos de veces en MATLAB, así que sabía que había que estar en MATL :-)05AB1E , 9 bytes
Explicación
No funciona en el intérprete en línea, pero funciona sin conexión.
fuente
üfue agregado ayer mismo :)0si la respuesta real fuera negativa? Tienes que tirar los ceros, creo.˜conO(suma).Haskell,
6343 bytes¡Gracias a @MartinEnder por 4 bytes!
fuente
a*b==0lugar de||.Pyth,
121110 bytesForma pares, filtra por miembro cero, ordena por suma, devuelve el más grande.
fuente
,Vt(implícitoQQ) devuelve los mismos pares que.:Q2, pero con los pares invertidos. Sin embargo, debería funcionar.f}0Tes/#0JavaScript (ES6),
595756 bytesEdición: guardado 2 bytes gracias a Huntro
Edición: guardado 1 byte gracias a ETHproductions
fuente
==lugar de===l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|mJavaScript (ES6), 53 bytes
Porque me gusta usar
reduce. Solución alternativa, también 53 bytes:fuente
Python, 49 bytes
Las pruebas están en ideone
Comprime los pares, suma los que contienen cero y devuelve el máximo.
fuente
Ruby, 51 bytes
uso
fuente
a+b.-3 -2 0Retornos0Creo que la sustitución....?0:...Con...?-1.0/0:...deberían solucionarlo, la adición de 5 bytes.PHP,
776871 bytes-3 bytes de anónimo,-4 y -2 de MartinEndercorre con
php -r '<code>' '<space separated values>'fuente
\Kpara descartar el partido hasta el momento es más corto que usar un mirar hacia atrás.\S+para hacer coincidir un entero con signo. Probablemente tendrá que usar\b0,para no tener que anteponer el,.4 0 0 5?\KNo funciona con alternativas? Por una razón desconocida, la segunda alternativa regresa0 0, por lo que no hay más0que igualar antes de5. Fijo, gracias.Java 7,
118105106 bytes13 bytes guardados gracias a @cliffroot mediante el uso de un enfoque aritmético en su lugar. 1 byte adicional gracias a @mrco después de descubrir un error (el caso de prueba agregado
2, 1, 0volvería en2lugar de1).Ungolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
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 bytes
Pruébalo en línea!(Como un conjunto de pruebas).
Explicación
fuente
MATLAB con Image Processing Toolbox, 32 bytes
Esta es una función anónima. Ejemplo de uso para los casos de prueba:
fuente
Dyalog APL , 14 bytes
⌈/el más grande de∊el aplanado (" e nlisted"2(... en)/parejas+suma (cero más algo es algo)↑⍨tomado si0cero∊es miembro de,el par (literalmente, la concatenación del número de la izquierda y el número de la derecha)TryAPL en línea!
fuente
R,
4847 bytesEDITAR: se corrigió un error gracias a @Vlo y se modificó para leer la entrada de stdins, se guardó un byte al asignar
wy omitir paréntesis.Explicación no probada
vtoma los valores 0:w <- which(v == 0)+-1:w-1yw+1w-1yw+1Tenga en cuenta que si el último o primer elemento de
ves un cero,w+-1buscará efectivamente un índice fuera de la longitud del vector, lo que implica quev[length(v)+1]retornaNA. Esto generalmente no es un problema, pero lasmax()funciones devuelven inconvenientementeNAsi hay alguna ocurrencia en el vector a menos que se especifique la opciónna.rm=T. Por lo tanto, es 2 bytes más corto para ordenar y extraer el primer elemento que para usarmax(), por ejemplo:fuente
c(1, 4, 3, 6, 0, 10, 7, 0)c((w<-which(v==0))-1,w+1)También un poco más corto con el escaneosort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]()embargo, en su solución sugerida también olvidó la ;). Actualicé el código y asignévla manipulación previa ahora.Mathematica,
4643 bytesGuardado 3 bytes debido a @MartinEnder .
Función anónima. Toma una lista de enteros como entrada y devuelve un entero como salida. Basado en la solución Ruby.
fuente
Perl, 42 bytes
Incluye +1 para
-pDé los números en línea en STDIN
largest0.pl:fuente
Julia,
5655 bytesCree tuplas para valores vecinos, tome esas tuplas que contienen 0, sume valores de tuplas y encuentre el máximo
fuente
Python 2, 74 bytes
Ciclo a través de cada elemento, si hay uno
0en la posición de la izquierda o la derecha del elemento actual, inclúyalo en el generador y luego ejecútelomax. Necesitamos rellenar la lista con algunos no0números. Nunca se incluirá porque el segmento[-1:2:2]no incluirá nada.fuente
T-SQL, 182 bytes
Golfizado:
Sin golf:
Violín
fuente
PowerShell v3 +, 62 bytes
Un poco más largo que las otras respuestas, pero un enfoque ingenioso.
Toma entrada
$n. Luego recorre los índices0..$n.count, usaWhere-Object(|?{...}) para extraer esos índices donde se encuentra el elemento anterior o siguiente en la matriz0, y los vuelve a introducir en la división de la matriz$n[...]. Entonces|sortesos elementos, y tomamos el más grande[-1].Ejemplos
fuente
q, 38 bytes
fuente
{}para que funcione.J, 18 bytes
Explicación
fuente
Perl 6 , 53 bytes
Expandido:
fuente
PHP, 66 bytes
Muy claro. Itera sobre la entrada, y cuando un número es
0, se establece$men el número más alto de los 2 números adyacentes y cualquier valor anterior de$m.Ejecutar así (
-dagregado solo por estética):fuente
C #
7674 bytesExplicación:
Use zip para unir la matriz consigo mismo, pero omita el primer valor en la segunda referencia para que el elemento cero se una al elemento uno. Multiplique a por b, si el resultado es cero, uno de ellos debe ser cero y generar a + b. De lo contrario, genere el mínimo entero posible en el idioma. Dado el supuesto de que siempre tendremos un cero y un no cero, este valor mínimo nunca saldrá como máximo.
Uso:
fuente
int[]i) {. Además, cuento 75 bytes en su código actual (74 si elimina el espacio).a?b?i.Min()).Max():a:busing System.Linq;, no?System.Linq;es parte de la nueva plantilla de clase predeterminada.usingdeclaración en su recuento de bytesR
4854 bytesLee el vector desde la entrada de la consola, luego toma el máximo sobre todos los valores adyacentes a 0.
Editar: Captura NAs producidas en el límite, ¡gracias rturnbull!
fuente
20 0, porques[w(s==0)+1]devuelveNA, ymaxel tratamiento predeterminado deNAes devolverlo. Puede solucionarlo agregando el argumentona.rm=To volver a trabajar el código para usarsort(consulte la otra respuesta R publicada anteriormente).Raqueta 183 bytes
Versión detallada:
Pruebas:
Salida:
fuente
C 132 bytes
Salidas utilizando el código de retorno de main:
Siento que debería poder guardar algunos bytes al guardar una de las llamadas atoi, pero no pude encontrar una manera eficiente. (
,tmást=más,mástdos veces es demasiado largo). También esto técnicamente utiliza un comportamiento indefinido (estableciendo _ [a] en "1"), pero todos los compiladores que conozco lo permiten por defecto.Estrategia: rellena el inicio y el final de la matriz con 1, luego recorre la sección interna y comprueba cada vecino.
fuente
PHP
6964 bytesAlgunos bytes de Jörg Hülsermann y Titus. =
(-5)Requiere register_globals habilitado. Uso:
http://localhost/notnull.php?i[]=9&i[]=-5i[]=...Golfizado:
fuente
-d register_globals=1(o especifique una versión en la que register_globals esté habilitado de forma predeterminada)json_decodees una buena idea.?id[]=1&id[]=2&id[]=3y luego$_GET["id"]devuelve una matriz. Por esta razón, json_decode no tiene sentido para mí