Encuentra el número más grande que está adyacente a un cero

38

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!

Stewie Griffin
fuente
Debe agregar un caso de prueba como el 4to, pero donde el resultado es negativo (hay números positivos en la lista).
mbomb007
Iba a intentar esto en Retina, pero luego noté que hay aspectos negativos. La retina odia los negativos.
mbomb007
2
No dejes que la retina dicte lo que puedes y no puedes hacer. ¡Hazte cargo, tú eres el jefe!
Stewie Griffin

Respuestas:

3

Jalea , 8 bytes

ṡ2ẠÐḟS€Ṁ

Pruébalo en línea!

ṡ2            Overlapping pairs
  ẠÐḟ         Remove pairs without zeroes
     S€       Sum of each pair
       Ṁ      Maximum
Lynn
fuente
19

MATL , 10 bytes

t~5BZ+g)X>

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.

t     % Input array. Duplicate
      %   STACK: [-4 -6 -2 0 -9],  [-4 -6 -2 0 -9]
~     % Logical negate. Replaces zeros by logical 1, and nonzeros by logical 0
      %   STACK: [-4 -6 -2 0 -9],  [0 0 0 1 0]
5B    % Push logical array [1 0 1] (5 in binary)
      %   STACK: [-4 -6 -2 0 -9], [0 0 0 1 0], [1 0 1]
Z+    % Convolution, maintaining size. Gives nonzero (1 or 2) for neighbours of
      % zeros in the original array, and zero for the rest
      %   STACK: [-4 -6 -2 0 -9], [0 0 1 0 1]
g     % Convert to logical
      %   STACK: [-4 -6 -2 0 -9], [0 0 1 0 1]
)     % Use as index into original array
      %   STACK: [-2 -9]
X>    % Maximum of array.
      %   STACK: -2
      % Implicitly display
Luis Mendo
fuente
x(~~(dec2bin(5)-48)). ¿Quién fue la idea de implementar eso? ¡Muy inteligente y útil para arreglos lógicos! :) ¡Buena respuesta!
Stewie Griffin
1
@WeeingIfFirst ¡Gracias! Lo había usado dec2bin()-'0'cientos de veces en MATLAB, así que sabía que había que estar en MATL :-)
Luis Mendo
55
Por cierto, el hecho de que haya incluido el contenido de la pila después de cada operación vale solo un voto positivo. Hace que sea mucho más fácil de entender (y posiblemente aprender) MATL =)
Stewie Griffin
2
Rocas de convolución. +1
Suever
10

05AB1E , 9 bytes

ü‚D€P_ÏOZ

Explicación

ü‚         # pair up elements
  D        # duplicate
   €P      # product of each pair (0 if the pair contains a 0)
     _     # logical negate, turns 0 into 1 and everything else to 0
      Ï    # keep only the pairs containing at least 1 zero
       O   # sum the pairs
        Z  # take max

No funciona en el intérprete en línea, pero funciona sin conexión.

Emigna
fuente
Esto es asombroso jaja! Justo a tiempo: p.
Adnan
1
Acabo de implementar uno de estos operadores o? :)
Stewie Griffin
1
@WeeingIfFirst: üfue agregado ayer mismo :)
Emigna
2
¿No volverá esto 0si la respuesta real fuera negativa? Tienes que tirar los ceros, creo.
Lynn
1
@ Lynn ¡Buena captura! Esto se puede solucionar fácilmente reemplazando ˜con O(suma).
Adnan
9

Haskell, 63 43 bytes

f x=maximum[a+b|(a,b)<-tail>>=zip$x,a*b==0]

¡Gracias a @MartinEnder por 4 bytes!

Alondra
fuente
Creo que puedes usar en a*b==0lugar de ||.
Martin Ender
Tienes que volver a la versión anterior con zip. Aquí a y be ya no son adyacentes
Damien
No necesitas lambdabot aquí. Esto es "regular" Haskell
Damien
8

Pyth, 12 11 10 bytes

eSsM/#0,Vt

Forma pares, filtra por miembro cero, ordena por suma, devuelve el más grande.

orlp
fuente
,Vt(implícito QQ) devuelve los mismos pares que .:Q2, pero con los pares invertidos. Sin embargo, debería funcionar.
PurkkaKoodari
f}0Tes/#0
isaacg
7

JavaScript (ES6), 59 57 56 bytes

let f =
    
l=>l.map((n,i)=>m=l[i-1]==0|l[i+1]==0&&n>m?n:m,m=-1/0)|m

console.log(f([1, 4, 3, 6, 0, 3, 7, 0]));       // 7
console.log(f([9, 4, 9, 0, 9, 0, 9, 15, -2]));  // 9
console.log(f([-4, -6, -2, 0, -9]));            // -2
console.log(f([-11, 0, 0, 0, 0, 0, -12, 10]));  // 0
console.log(f([3, 0, 5]));                      // 5
console.log(f([28, 0, 14, 0]));                 // 28

Edición: guardado 2 bytes gracias a Huntro
Edición: guardado 1 byte gracias a ETHproductions

Arnauld
fuente
1
Puede guardar dos bytes utilizando en ==lugar de===
Huntro
1
I puede guardar algunos bytes en varios lugares:l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
ETHproductions
Error: {"mensaje": "Error de sintaxis", "nombre de archivo": " stacksnippets.net/js ", "lineno": 15, "colno": 3}
RosLuP
@RosLuP: esto requiere ES6 con soporte de función de flecha y no funcionará en todos los navegadores (incluidos, entre otros: todas las versiones de IE anteriores a Edge, todas las versiones de Safari por debajo de v10, etc.)
Arnauld
6

JavaScript (ES6), 53 bytes

a=>(m=-1/0,a.reduce((l,r)=>(m=l*r||l+r<m?m:l+r,r)),m)

Porque me gusta usar reduce. Solución alternativa, también 53 bytes:

a=>Math.max(...a.map((e,i)=>e*a[++i]==0?e+a[i]:-1/0))
Neil
fuente
5

Python, 49 bytes

lambda a:max(sum(x)for x in zip(a,a[1:])if 0in x)

Las pruebas están en ideone

Comprime los pares, suma los que contienen cero y devuelve el máximo.

Jonathan Allan
fuente
4

Ruby, 51 bytes

->a{a.each_cons(2).map{|a,b|a*b!=0?-1.0/0:a+b}.max}

uso

f=->a{a.each_cons(2).map{|a,b|a*b!=0?-1.0/0:a+b}.max}
p f[gets.split.map(&:to_i)]
cia_rana
fuente
No creo que necesites los paréntesis a+b.
Martin Ender
Se produce un error de sintaxis de @Martin Ender ... ideone.com/F6Ed4B
cia_rana
Funciona en Ruby 2.3. (disponible aquí, por ejemplo: repl.it/languages/ruby )
Martin Ender
@ Martin Ender Cuando uso "! =" En lugar de "==", funciona. ¡Gracias por su consejo! ideone.com/F6Ed4B
cia_rana
Hay un insecto allí :(. -3 -2 0Retornos 0Creo que la sustitución. ...?0:...Con ...?-1.0/0:...deberían solucionarlo, la adición de 5 bytes.
m-Chrzan
4

PHP, 77 68 71 bytes

-3 bytes de anónimo, -4 y -2 de MartinEnder

preg_match_all("#(?<=\b0 )\S+|\S+(?= 0)#",$argv[1],$m);echo max($m[0]);

corre con php -r '<code>' '<space separated values>'

Titus
fuente
2
usar \Kpara descartar el partido hasta el momento es más corto que usar un mirar hacia atrás.
user59178
2
También puede usar la separación de espacios para la entrada y luego usar \S+para hacer coincidir un entero con signo. Probablemente tendrá que usar \b0,para no tener que anteponer el ,.
Martin Ender
1
¿Funciona esto como entrada 4 0 0 5?
Ton Hospel
@TonHospel No. ¿ \KNo funciona con alternativas? Por una razón desconocida, la segunda alternativa regresa 0 0, por lo que no hay más 0que igualar antes de 5. Fijo, gracias.
Tito
Eche un vistazo a la otra solución PHP con register_globals
Jörg Hülsermann
4

Java 7, 118 105 106 bytes

int d(int[]a){int i=0,m=1<<31,c;for(;++i<a.length;m=a[i]*a[i-1]==0&(c=a[i]+a[i-‌​1])>m?c:m);return m;}

13 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 en 2lugar de1 ).

Ungolfed y código de prueba:

Pruébalo aquí

class M{
  static int c(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;
  }

  public static void main(String[] a){
    System.out.println(c(new int[]{ 1, 4, 3, 6, 0, 3, 7, 0 }));
    System.out.println(c(new int[]{ 9, 4, 9, 0, 9, 0, 9, 15, -2 }));
    System.out.println(c(new int[]{ -4, -6, -2, 0, -9 }));
    System.out.println(c(new int[]{ -11, 0, 0, 0, 0, 0, -12, 10 }));
    System.out.println(c(new int[]{ 0, 20 }));
    System.out.println(c(new int[]{ 2, 1, 0 }));
  }
}

Salida:

7
9
-2
0
20
1
Kevin Cruijssen
fuente
1
ligeramente diferentes de aproximación utilizando la aritmética, parece estar funcionandoint 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;}
cliffroot
3
La salida es incorrecta cuando el primer número no es adyacente a 0, pero es mayor que cualquier número adyacente a 0. Reproducible por el caso de prueba {2, 1, 0}. Puede solucionar esto inicializando i con 0 directamente ym con 1 << 31 (+1 en general).
mrco
3

CJam , 16 bytes

q~2ew{0&},::+:e>

Pruébalo en línea!(Como un conjunto de pruebas).

Explicación

q~    e# Read and eval input.
2ew   e# Get all (overlapping) pairs of adjacent values.
{0&}, e# Keep only those that contain a 0.
::+   e# Sum each pair to get the other (usually non-zero) value.
:e>   e# Find the maximum.
Martin Ender
fuente
3

MATLAB con Image Processing Toolbox, 32 bytes

@(x)max(x(imdilate(~x,[1 0 1])))

Esta es una función anónima. Ejemplo de uso para los casos de prueba:

>> f = @(x)max(x(imdilate(~x,[1 0 1])))
f =
  function_handle with value:
    @(x)max(x(imdilate(~x,[1,0,1])))

>> f([1 4 3 6 0 3 7 0])
ans =
     7

>> f([9 4 9 0 9 0 9 15 -2])
ans =
     9

>> f([-4 -6 -2 0 -9])
ans =
    -2

>> f([-11 0 0 0 0 0 -12 10])
ans =
     0

>> f([0 20])
ans =
    20
Luis Mendo
fuente
3

Dyalog APL , 14 bytes

⌈/∊2(+↑⍨0∊,)/⎕

⌈/ el más grande de

el aplanado (" e nlisted"

2(... en )/parejas

+ suma (cero más algo es algo)

↑⍨ tomado si

0 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!

Adán
fuente
3

R, 48 47 bytes

EDITAR: 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.

function(v)sort(v[c(w<-which(v==0)-1,w+1)],T)[1]

v=scan();w=which(v==0);sort(v[c(w-1,w+1)],T)[1]

Explicación no probada

  1. Encuentre índices para los cuales el vector vtoma los valores 0:w <- which(v == 0)
  2. Cree un nuevo vector que contenga los índices +-1: w-1yw+1
  3. Extraer elementos que coincidan con los índices w-1yw+1
  4. Ordenar en orden descendente y extraer el elemento puño

Tenga 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 que v[length(v)+1]retorna NA. Esto generalmente no es un problema, pero las max()funciones devuelven inconvenientemente NAsi hay alguna ocurrencia en el vector a menos que se especifique la opción na.rm=T. Por lo tanto, es 2 bytes más corto para ordenar y extraer el primer elemento que para usar max(), por ejemplo:

max(x,na.rm=T)
sort(x,T)[1]
Billywob
fuente
1
Necesita un paréntesis adicional; de lo contrario, fallará en todos los casos de prueba en los que el máximo esté a la derecha de 0, como 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]
Vlo
@Vlo Gracias por señalar ese error obvio, +1. Sin ()embargo, en su solución sugerida también olvidó la ;). Actualicé el código y asigné vla manipulación previa ahora.
Billywob
3

Mathematica, 46 43 bytes

Guardado 3 bytes debido a @MartinEnder .

Max[Tr/@Partition[#,2,1]~Select~MemberQ@0]&

Función anónima. Toma una lista de enteros como entrada y devuelve un entero como salida. Basado en la solución Ruby.

LegionMammal978
fuente
2

Perl, 42 bytes

Incluye +1 para -p

Dé los números en línea en STDIN

largest0.pl <<< "8 4 0 0 5 1 2 6 9 0 6"

largest0.pl:

#!/usr/bin/perl -p
($_)=sort{$b-$a}/(?<=\b0 )\S+|\S+(?= 0)/g
Ton Hospel
fuente
2

Julia, 56 55 bytes

f(l)=max(map(sum,filter(t->0 in t,zip(l,l[2:end])))...)

Cree tuplas para valores vecinos, tome esas tuplas que contienen 0, sume valores de tuplas y encuentre el máximo

nyro_0
fuente
1

Python 2, 74 bytes

def f(x):x=[9]+x;print max(x[i]for i in range(len(x)) if 0in x[i-1:i+2:2])

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útelo max. Necesitamos rellenar la lista con algunos no 0números. Nunca se incluirá porque el segmento [-1:2:2]no incluirá nada.

SCB
fuente
1

T-SQL, 182 bytes

Golfizado:

DECLARE @x varchar(max)='1 5 4 3 6 1 3 17 1 -8 0 -7'

DECLARE @a INT, @b INT, @ INT WHILE @x>''SELECT @a=@b,@b=LEFT(@x,z),@x=STUFF(@x,1,z,''),@=IIF(@a=0,IIF(@b<@,@,@b),IIF(@b<>0 or @>@a,@,@a))FROM(SELECT charindex(' ',@x+' ')z)z PRINT @

Sin golf:

DECLARE @x varchar(max)='1 5 4 3 6 1 3 17 1 -8 0 -7'

DECLARE @a INT, @b INT, @ INT
WHILE @x>''
  SELECT 
   @a=@b,
   @b=LEFT(@x,z),
   @x=STUFF(@x,1,z,''),
   @=IIF(@a=0,IIF(@b<@,@,@b),IIF(@b<>0 or @>@a,@,@a))
  FROM(SELECT charindex(' ',@x+' ')z)z 
PRINT @

Violín

t-clausen.dk
fuente
1

PowerShell v3 +, 62 bytes

param($n)($n[(0..$n.count|?{0-in$n[$_-1],$n[$_+1]})]|sort)[-1]

Un poco más largo que las otras respuestas, pero un enfoque ingenioso.

Toma entrada $n. Luego recorre los índices 0..$n.count, usa Where-Object( |?{...}) para extraer esos índices donde se encuentra el elemento anterior o siguiente en la matriz 0, y los vuelve a introducir en la división de la matriz $n[...]. Entonces |sortesos elementos, y tomamos el más grande[-1] .

Ejemplos

PS C:\Tools\Scripts\golfing> @(1,4,3,6,0,3,7,0),@(9,4,9,0,9,0,9,15,-2),@(-4,-6,-2,0,-9),@(-11,0,0,0,0,0,-12,10)|%{""+$_+" --> "+(.\largest-number-beside-a-zero.ps1 $_)}
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

PS C:\Tools\Scripts\golfing> @(0,20),@(20,0),@(0,7,20),@(7,0,20),@(7,0,6,20),@(20,0,6)|%{""+$_+" --> "+(.\largest-number-beside-a-zero.ps1 $_)}
0 20 --> 20
20 0 --> 20
0 7 20 --> 7
7 0 20 --> 20
7 0 6 20 --> 7
20 0 6 --> 20
AdmBorkBork
fuente
1

q, 38 bytes

{max x where 0 in'x,'(next x),'prev x}
Liam Baron
fuente
Esto no parece funcionar cuando el máximo viene después de un 0 . Además, no soy un experto en q, pero creo que tendría que rodear su código con{} para que funcione.
Dennis
1

J, 18 bytes

[:>./2(0&e.\#+/\)]

Explicación

[:>./2(0&e.\#+/\)]  Input: array A
                 ]  Identity. Get A
     2              The constant 2
      (         )   Operate on 2 (LHS) and A (RHS)
               \    Get each subarray of size 2 from A and
             +/       Reduce it using addition
           \        Get each subarray of size 2 from A and
       0&e.           Test if 0 is a member of it
            #       Filter for the sums where 0 is contained
[:>./               Reduce using max and return
millas
fuente
1

Perl 6 , 53 bytes

{max map ->$/ {$1 if !$0|!$2},(1,|@_,1).rotor(3=>-2)}

Expandido:

# bare block lambda with implicit signature of (*@_)
{
  max

    map

      -> $/ {           # pointy lambda with parameter 「$/」
                        # ( 「$0」 is the same as 「$/[0]」 )
        $1 if !$0 | !$2 # return the middle value if either of the others is false
      },

      ( 1, |@_, 1 )     # list of inputs, with added non-zero terminals
      .rotor( 3 => -2 ) # grab 3, back-up 2, repeat until less than 3 remain
}
Brad Gilbert b2gills
fuente
1

PHP, 66 bytes

foreach($a=$argv as$k=>$v)$v||$m=max($m,$a[$k-1],$a[$k+1]);echo$m;

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):

php -d error_reporting=30709 -r 'foreach($a=$argv as$k=>$v)$v||$m=max($m,$a[$k-1],$a[$k+1]);echo$m;' -- -4 -6 -2 0 -9;echo
aross
fuente
1

C # 76 74 bytes

using System.Linq;i=>i.Zip(i.Skip(1),(a,b)=>a*b==0?1<<31:a+b).Max(‌​);

Explicació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:

[TestMethod]
public void LargestFriend()
{
    Assert.AreEqual(7, F(new int[] { 1, 4, 3, 6, 0, 3, 7, 0 }));
    Assert.AreEqual(9, F(new int[] { 9, 4, 9, 0, 9, 0, 9, 15, -2 }));
    Assert.AreEqual(-2, F(new int[] { -4, -6, -2, 0, -9 }));
    Assert.AreEqual(0, F(new int[] { -11, 0, 0, 0, 0, 0, -12, 10 }));
    Assert.AreEqual(20, F(new int[] { 0, 20 }));
}
Grax32
fuente
Hola. puedes quitar el espacio en int[]i) {. Además, cuento 75 bytes en su código actual (74 si elimina el espacio).
Kevin Cruijssen
Creo que puedes ahorrar 4 bytes invirtiendo los ternaries: a?b?i.Min()).Max():a:b
Tito
Además using System.Linq;, no?
pinkfloydx33
Es cierto, pero esta pregunta solo solicitó un método, no un programa completo y el uso System.Linq;es parte de la nueva plantilla de clase predeterminada.
Grax32
@Grax De cualquier manera, debe incluir la usingdeclaración en su recuento de bytes
TheLethalCoder el
1

R 48 54 bytes

s=scan()

w=which;max(s[c(w(s==0)+1,w(s==0)-1)],na.rm=T)

Lee 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!

Choque de cabeza
fuente
¿Lo estoy haciendo mal? pastebin.com/0AA11xcw
manatwork
Esto falla para casos como 20 0, porque s[w(s==0)+1]devuelve NA, y maxel tratamiento predeterminado de NAes devolverlo. Puede solucionarlo agregando el argumento na.rm=To volver a trabajar el código para usar sort(consulte la otra respuesta R publicada anteriormente).
rturnbull
¿Puedes condensar todo en una línea? No sé cómo codificar en R, pero supongo que sí.
clismique
@ Qwerp-Derp: No que yo sepa. scan () espera a que la entrada de la consola se lea en el vector, el flujo de entrada se cierra al ingresar una línea vacía. Si tuviera que ejecutar las dos líneas como una, la segunda parte se reconocería al menos parcialmente como entrada para el vector s.
Headcrash
0

Raqueta 183 bytes

(λ(k)(let*((lr(λ(l i)(list-ref l i)))(l(append(list 1)k(list 1)))(m(for/list((i(range 1(sub1(length l))))
#:when(or(= 0(lr l(sub1 i)))(= 0(lr l(add1 i)))))(lr l i))))(apply max m)))

Versión detallada:

(define f
 (λ(k)
    (let* ((lr (λ(l i)(list-ref l i)))
           (l (append (list 1) k (list 1)))
           (m (for/list ((i (range 1 (sub1(length l))))
                         #:when (or (= 0 (lr l (sub1 i)))
                                    (= 0 (lr l (add1 i))) ))
                (lr l i) )))
      (apply max m) )))

Pruebas:

(f (list 1 4 3 6 0 3 7 0))
(f (list 9 4 9 0 9 0 9 15 -2))
(f (list -4 -6 -2 0 -9))
(f (list -11 0 0 0 0 0 -12 10))
(f (list 0 20 ))

Salida:

7
9
-2
0
20
rnso
fuente
0

C 132 bytes

Salidas utilizando el código de retorno de main:

int main(int a,char**_){int i,m=0;_[0]=_[a]="1";for(i=1;i<a;++i){m=(*_[i-1]-48||*_[i+1]-48?m>atoi(_[i])?m:atoi(_[i]):m);}return m;}

Siento que debería poder guardar algunos bytes al guardar una de las llamadas atoi, pero no pude encontrar una manera eficiente. ( ,tmás t=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.

LambdaBeta
fuente
0

PHP 69 64 bytes

Algunos bytes de Jörg Hülsermann y Titus. =(-5)

Requiere register_globals habilitado. Uso:http://localhost/notnull.php?i[]=9&i[]=-5i[]=...

$x=$_GET['i'];
$y=0;
foreach($x as $j){
if($y<abs($j)){
$y=$j;
}
}
echo $y;

Golfizado:

$x=$_GET['i'];$y=0;foreach($x as $j)if($y<abs($j))$y=$j;echo $y;
Roman Gräf
fuente
¿Por qué no utilizar directamente la entrada como matriz? No pude ver el motivo de json_encode.
Jörg Hülsermann
Para configuraciones no predeterminadas, debe agregar la longitud total del cambio de configuración a su recuento de bytes. (consulte meta.codegolf.stackexchange.com/q/4778#4778 ) En este caso +21 bytes para -d register_globals=1(o especifique una versión en la que register_globals esté habilitado de forma predeterminada)
Titus
Pero json_decodees una buena idea.
Tito
@Titus Lo que quiero decir es ?id[]=1&id[]=2&id[]=3 y luego $_GET["id"]devuelve una matriz. Por esta razón, json_decode no tiene sentido para mí
Jörg Hülsermann
@ JörgHülsermann Cuesta bytes, pero sigue siendo una buena idea.
Tito