Desafío
Dada una matriz de enteros, recibidos de stdin, argumentos de función, argumentos de programa o algún otro método:
Imprima solo los números mínimo y máximo en la matriz, a través de un valor de retorno, stdout u otros métodos de ajuste.
Sesión de ejemplo
> minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} )
-14 18
Implementación de referencia
// C++14
void minmax(std::vector<int> v) {
int min = v[0]; int max = v[0];
for(auto it : v) {
if (*it < min)
min = *it;
if (*it > max)
max = *it;
}
std::cout << min << ' ' << max << std::endl;
}
Reglas
- No puede usar una función incorporada para calcular los valores.
- Lagunas estándar no permitidas.
- Implementaciones creativas alentadas.
- Este es el código de golf , la respuesta más corta gana pero no se seleccionará.
Aclaraciones
- Si el conjunto contiene 1 elemento, debe generarlo dos veces.
- Si los valores mínimos y máximos son los mismos, debe enviarlos a ambos.
code-golf
number
array-manipulation
dkudriavtsev
fuente
fuente
code golf
Respuestas:
Jalea , 3 bytes
Pruébalo en línea!
Ordene la matriz y luego toma el elemento 0.5-th.
Jelly utiliza la indexación 1, y la indexación de puntos flotantes significa tomar su piso y su techo.
Entonces, el elemento 0.5 le daría el elemento 0 y el primer elemento.
El elemento 0 es el último elemento.
fuente
Python,
614937363431 bytes-12 bytes gracias a RootTwo
Otros -12 bytes gracias a chepner
-2 bytes gracias a johnLate
-3 bytes gracias a johnLate
fuente
[::(len(s)-1)or 1]
para el primer subíndice. Y el segundo término puede acortarses[:len(s)<2]
.lambda s:sorted(s)[:1]+sorted(s)[-1:]
.lambda s:sorted(s)[::len(s)-1]
lambda s:sorted(s)[::len(s)-1]
) no funciona para matrices con un elemento (ValueError: slice step cannot be zero
). Una posible solución seríalambda s:sorted(s*2)[::len(s*2)-1]
(34 bytes).Brain-Flak
220218 bytes¡Pruébelo en línea!
Explicación
Primero duplica el valor superior (en el reparto, la lista es solo una larga)
Luego usa mi algoritmo de clasificación de burbujas:
Luego recoge el valor superior de la pila (es decir, el mínimo)
Luego aparece hasta que la altura de la pila es una:
fuente
JavaScript (ES6), 34 bytes
sort
ordena en el lugar, por lo que puedo referirme al índice [0] para el valor más bajo ypop
el valor más alto de la matriz, sin embargo, hace una clasificación de cadena por defecto, así que tengo que pasar un comparador.fuente
(x,y)=>x-y
parte, a menos que usarsort()
con el algoritmo predeterminado cuente como una función incorporada.sort()
internamente trata todo como cadenas, ¡lo siento!Mathematica, 18 bytes
Ordena la matriz y extrae el primer y último valor.
fuente
R, 31 bytes
No es tan original, pero ¡oye!
fuente
Código de máquina ARM, 26 bytes
Hex dump (little endian):
Esta es una función, sin llamada al sistema ni dependencia de la biblioteca. La codificación es Thumb-2, una codificación variable (2 o 4 bytes) para ARM de 32 bits. Como uno podría imaginar, no hay una manera fácil de ordenar y elegir el primer y el último elemento aquí. En general, no hay nada realmente elegante aquí, es más o menos lo mismo que la implementación de referencia.
Ensamblaje no protegido (sintaxis GNU):
Probado en la Raspberry Pi 3; Aquí está el script de prueba (C99, entrada a través de argv):
fuente
Haskell, 27 bytes
En Haskell,
min
ymax
dar mínimo y máximo de dos argumentos, no de una lista. No podría decir si esto no está permitido (parece que solo en cambiominimum
ymaximum
no lo estaría), así que avíseme si lo están y eliminaré esta respuesta de inmediato.fuente
Octava, 20 bytes
Esto ordena el vector de entrada y genera el primer y el último valor.
fuente
En realidad, 5 bytes
Pruébalo en línea!
Explicación:
fuente
05AB1E ,
64 bytesExplicación
Pruébalo en línea
fuente
MATL , 4 bytes
Pruébalo en línea!
Explicación
fuente
Python, 29 bytes
Pruébelo en Ideone .
fuente
C,
838179 bytesfuente
...f(a,s)int*a{...
por estem,M;f(a,s)int*a;{for(m=M=*a;s--;++a)*a<m?m=*a:*a>M?M=*a:0;printf("%i %i",m,M);}
gcc
puede reemplazar*a>M?M=*a:0
con*a<M?:M=*a
Brachylog , 9 bytes
Pruébalo en línea!
fuente
V , 12 bytes
Pruébalo en línea!
Gracias a DJMcMayhem por esto.
fuente
\o/
¡Yay, ya no soy la única persona que ha usado este idioma!CJam,
109 bytesPruébalo en línea.
Realmente no soy bueno en CJam.
fuente
0=
(pero desafortunadamente eso no guarda ningún byte). Otras dos soluciones de 9 bytes:0W]q~$f=p
o el bloque sin nombre{$2*_,(%}
.q~$(p)p;
. Puedes usar)
para obtener el último elemento como usas(
para obtener el primero.Python 2, 34 bytes
fuente
PHP, 44 bytes
fuente
Procesamiento,
5952 bytesEl procesamiento en realidad no me permite leer de stdin que he podido encontrar, y no sé si su compilador interno de Java admite lambdas (y ha pasado tanto tiempo desde que tuve que escribir Java serio que no No recuerdo cómo).
fuente
int[]
Perl 6 13 bytes
Prueba:
fuente
C #, 60 bytes
Un método ingenuo a 93 bytes:
fuente
POSIX Awk, 44 bytes
fuente
Octava , 35 bytes
Esta es una función anónima. Pruébalo en ideone .
El código evita usar la clasificación. Es decir, realiza todas las comparaciones "menores o iguales" por pares entre los elementos de la entrada. El mínimo es el elemento para el cual todas las comparaciones son verdaderas. El máximo es aquel para el que solo una comparación es verdadera.
fuente
Python,
3534 bytesVersión alternativa:
Versión anterior, 35 bytes.
Bastante simple: tome la lista de entrada, agregue el primer elemento, ordénelo, luego tome el primer elemento (de longitud) de la lista resultante. Como la longitud de la entrada después de agregar un elemento es longitud + 1, esto termina tomando el primer y último elemento de dicha lista, que son los elementos mínimo y máximo.
fuente
zsh, 22 bytes
define una función lambda que imprime su primer
$1
argumento ( ) y el último argumento del comando anterior ($_
), y lo pasa$@
después de ordenarlo para que el comando anterior se convierta en la invocación de ese lambdazsh, 21 bytes
esto solo funciona bien si hay más de 1 argumento :(
ordena
$@
, lo convierte en una cadena y reemplaza todo, desde el primer espacio hasta el último con un solo espacio, luego lo pasa como entrada a cat con<<<
uso:
fuente
Scala, 55 bytes
Ejecutar:
$ scala minmax.scala 1 2 3 4 5 6 7 8 9
fuente
Bash + coreutils, 30 bytes
El script sed imprime, después de que se ordena la entrada, los enteros primero y último.
fuente
cc, 110 bytes
Ayuadame,
dc
Ayúdenme ers! ¡Eres mi única esperanza!¡Gracias a @seshoumara por encontrar ese error!
Agregaré una explicación más tarde. Aquí se divide un poco:
fuente
M
ym
. Pero si en la lista de entrada ningún número es menorm=0
o ningún número es mayor queM=0
, entonces obtiene un resultado incorrecto, porque agregó artificialmente 0 a los números de muestra. La solución es reemplazar ese primer 0 con?d
, que lee los números e inicializaM
ym
con el último número, convirtiéndolo en parte de la muestra. Luego ejecute el código de esta manera: echo "8 _2 5" | dc -e "? DdsMsm ....".Java, 115 bytes
Sin golf:
Mi primera solución de código "golf".
fuente