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 :)0
si 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==0
lugar 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}0T
es/#0
JavaScript (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)|m
JavaScript (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 0
Retornos0
Creo 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
\K
para 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
?\K
No funciona con alternativas? Por una razón desconocida, la segunda alternativa regresa0 0
, por lo que no hay más0
que 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, 0
volvería en2
lugar 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 si0
cero∊
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
w
y omitir paréntesis.Explicación no probada
v
toma los valores 0:w <- which(v == 0)
+-1
:w-1
yw+1
w-1
yw+1
Tenga en cuenta que si el último o primer elemento de
v
es un cero,w+-1
buscará 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 inconvenientementeNA
si 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év
la 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
-p
Dé 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
0
en 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 no0
nú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|sort
esos 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$m
en el número más alto de los 2 números adyacentes y cualquier valor anterior de$m
.Ejecutar así (
-d
agregado 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:b
using System.Linq;
, no?System.Linq;
es parte de la nueva plantilla de clase predeterminada.using
declaració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
, ymax
el tratamiento predeterminado deNA
es devolverlo. Puede solucionarlo agregando el argumentona.rm=T
o 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. (
,t
mást=
más,
mást
dos 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_decode
es una buena idea.?id[]=1&id[]=2&id[]=3
y luego$_GET["id"]
devuelve una matriz. Por esta razón, json_decode no tiene sentido para mí