La tarea
La tarea es muy simple. Dada una matriz que contiene solo enteros y cadenas , genera el número más grande y el número más pequeño.
Casos de prueba
Input: [1, 2, 3, 4, 5, 6, 7, 8]
Output: 1, 8
Input: [5, 4, 2, 9, 1, 10, 5]
Output: 1, 10
Input: [7, 8, 10, "Hello", 5, 5]
Output: 5, 10
Los números en cadenas no se consideran enteros:
Input: [1, 2, 3, 4, "5"]
Output: 1, 4
Si solo hay un entero, es el entero más grande y el más pequeño:
Input: [1]
Output: 1, 1
Input: ["1", "2", "3", "4", 5]
Output: 5, 5
Reglas
- Puede suponer que una matriz siempre contendrá al menos un número entero.
- Todos los enteros son positivos (mayor que 0)
- El orden de la salida no importa.
- Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
- Las cadenas pueden contener todos los caracteres ASCII imprimibles (
32 - 126
) y no están vacías.
[1, 2, 3]
1 2 3
y{1; 2; 3}
todos son formatos de entrada válidos, por lo que no veo por qué debería ser diferente para los literales de cadena recibidos de STDIN.Respuestas:
En serio,
96 bytesPruébalo en línea
Cómo funciona
fuente
JavaScript (ES6), 54
56Editar 2 bytes guardados gracias a @Neil
Nota:
x===+x
es verdadero si y solo six
es un númerofuente
()
s?Pyth,
141110 bytesPruébalo en línea. Banco de pruebas.
Explicación
Q
: entrada evaluada#
: filtra eso en:I
: el valor es el mismo después de:^…1
elevándolo al poder 1S
: ordenar eso_B
: crear matriz[previous, reversed(previous)]
hM
: toma el primer elemento de cada elemento de eseLa parte más difícil es jugar al golf la eliminación de cadenas, que actualmente ocupa 4 bytes. El enfoque actual funciona debido a
^<str>1
tomar el primer poder cartesiano de la secuencia (básicamente, la lista de los caracteres de la cadena), pero^<int>1
es solo la función de identidad.fuente
*#_1Q
para eliminar las cadenas, que serían más cortas si una variable se inicializara a una negativa ...Python 2, 42 bytes
En Python 2, los enteros son siempre menores que las cadenas durante las comparaciones, por lo que un simple
min(s)
encontrará el entero más pequeño. Sin embargo, al encontrar el máximo, primero debemos filtrar las cadenas. La función anónima acepta una secuencia y devuelve una tupla con el mínimo y el máximo.Ejemplo:
fuente
lambda a:
atasco antes de eso.if x>0
oif''>x
guardar un byte.lambda s:(min(s),-min(-1*_ for _ in s))
(39 bytes)Jalea, 8 bytes
Pruébalo en línea!
Fondo
En un mundo perfecto, sería suficiente intersectar la lista con una versión aplanada de sí misma. Las cadenas son simplemente listas de caracteres en Jelly, por lo tanto, si bien la lista original contendría enteros y cadenas, la versión aplanada contendría enteros y caracteres, dejando solo los enteros en la intersección.
En el mundo real, los analizadores sintácticos de los literales de entrada y de cadena producen caracteres en lugar de cadenas de longitud 1. La única forma de pasar una cadena singleton a una función sería codificarla "manualmente" como, por ejemplo
[”a]
, que es un personaje envuelto en una matriz.Esto ahorraría un byte, para un total de 7 bytes (¡ Pruébelo en línea! ).
Como probablemente eso no sea aceptable, también necesitamos una forma de diferenciar los caracteres de los enteros.
Los átomos bit a bit de Jelly intentan
desesperadamenteconvertir sus argumentos en enteros. Comienzan vectorizando hasta que encuentran tipos de profundidad 0 (números o caracteres), luego intentan convertirlos en enteros. Para un personaje que representa un número entero, esto tendrá éxito. Para otros, un átomo diádico, bit a bit simplemente se rendirá y devolverá 0 .Por ejemplo, OR bit a bit de la lista
[1, "2", "34", "-5", "a", "bc"]
consigo mismo daráAl intersecar el resultado con la lista original, nos deshacemos de las matrices y los enteros que no estaban presentes en la lista original.
Cómo funciona
fuente
Mathematica, 20 bytes
Casos de prueba
fuente
*
allí? Parece que puedes llegar a 19 simplemente cortándolo.MinMax@Select[#>0&]
No es una función pura válida.@*
es composición de funciones, mientras que@
es aplicación de funciones.MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]
produce una respuesta correctaMinMax@Select[# > 0 &]
a un símbolo, o simplemente evaluarlo.Ruby,
573629 bytesNovato aquí, así que no sé si hay algún lugar / forma estándar o universalmente aceptado para calcular los bytes utilizados, ¡cualquier ayuda sería muy apreciada!
Editado según manatwork y el comentario de Doorknob!
Prueba
fuente
->n{[(x=n.map(&:to_i)&n).min,x.max]}
->a{(a.map(&:to_i)&a).minmax}
CJam,
1513 bytesUn bloque (función) sin nombre que espera la matriz de entrada en la pila y deja la matriz de salida en su lugar.
Ejecute todos los casos de prueba.
Explicación
fuente
q~_e(ae)a+
e(
ee)
ignoraría cadenas o algo así, lo que parece inconsistente. Y si implicara la comparación con cadenas, probablemente fallaría de la misma manera$
ye>
no podría comparar enteros con cadenas.Haskell,
4139 bytesEn Haskell, todos los elementos de una lista deben ser del mismo tipo, por lo que no puedo mezclar
Integer
yString
. Sin embargo, existe elEither
tipo para combinar dos tipos en uno solo. La lista de entrada es, por lo tanto, de tipoEither Integer String
1 .f
filtra los enteros, elimina elEither
contenedor, coloca la lista como el elemento único en una nueva lista (por ejemplo[[1,2,3]]
), para que<*>
pueda aplicarle las funciones dadas en el primer argumento.Ejemplo de uso:
f [Left 1, Left 3, Right "Hello", Left 2]
->[1,3]
.Editar: @xnor puso
<*>
en juego y guardó 2 bytes. ¡Gracias!1 en realidad es completamente polimórfico en el segundo tipo ya que la
String
propiedad nunca se usa.fuente
f x=[minimum,maximum]<*>[[i|Left i<-x]]
jq, 21 caracteres
Ejecución de muestra:
Prueba en línea:
fuente
Mathematica, 28 bytes
fuente
Nothing
... No significa nada especial ... Además, para 23 bytes:MinMax@*Select[NumberQ]
Nothing
tiene un significado especial. Desde Mathematica 10.2, se elimina automáticamente de las listas.Nothing
es una función documentada en las últimas versiones.PHP,
5048 bytesfuente
'
alrededoris_int
.Retina , 71
Gracias (como siempre) a @ MartinBüttner por la ayuda en el golf.
No es competitivo en cuanto al golf, pero es interesante implementar la clasificación de burbujas enteras en Retina.
Asume que todas las cadenas en la entrada tienen
"
comillas dobles y no contienen comillas dobles escapadas\"
.La entrada está separada por nueva línea.
Pruébalo en línea.
fuente
<space>.*<space>
en la penúltima etapa debido a la codicia.Mathematica , 14
Ejemplo:
Explicación:
Cuando
MinMax
obtiene una entrada no numérica, reduce el problema tanto como puede, luego deja los términos envueltosMin
yMax
:Debido al ordenamiento automático que tiene lugar, las cadenas siguen enteros.
Apply
en levelpec {1}, abreviatura@@@
, se usa para extraer el primer argumento de elementos no atómicos. Tenga en cuenta que5
no se ha tocado aquí:fuente
Oracle SQL 11.2, 189 bytes
Sin golf
La subconsulta analiza la matriz y la divide para completar una vista con un elemento por fila. Luego, los elementos no numéricos se filtran.
Desearía haber encontrado una manera de hacerlo con MENOS y MAYOR, pero no tuve suerte con cómo manejar la matriz como parámetro.
fuente
[]
en la matriz, por lo que no estás seleccionando el máximo o mínimo si son el primer o el último elemento de la matriz. Tampoco necesita su cláusula WHERE, ya está seleccionando agregados, por lo que no necesita filtrar. Busque caracteres numéricos en sus expresiones regulares y empuje la conversión de números a la subconsulta (muy poco peligro de predicados empujados) y se convierte en 126 bytes:select min(i),max(i)from(select to_number(regexp_substr(&1,'\d+',1,level))i from dual connect by level<=regexp_count(&1,'\d'))
+
en la segunda expresión regular aquí, ya que no importa si genera algunas filas adicionales (guarda un byte). Sin embargo, también vale la pena señalar que si tiene una cadena compuesta únicamente de números, no la ignorará aquí; que necesita funciones sobrecargadas en el mismo paquete, por lo que no es nada bonito.vimscript, 25 bytes
Sí, así es, vimscript.
Espera entrada en el formulario
Y salidas en forma
Explicación:
La primera línea debe duplicarse dos veces para manejar el caso límite de una entrada de un solo número. Esto se debe a que el último comando se quejará si solo hay dos líneas cuando se alcanza, ya que termina siendo
2,1d
un rango hacia atrás.fuente
Perl
4439 + 3 = 41 bytesRequiere
-pa
banderas:Gracias a @manatwork por reducir algunos bytes
fuente
sort{$a-$b}grep...
$_="@a[0,-1]"
.grep!/"/
.!/\D/
es necesario en lugar de!/"/
, para un byte más.Julia, 35 bytes
Esta es una función lambda que acepta una matriz y devuelve una tupla de enteros. Para llamarlo, asígnelo a una variable.
Julia tiene una función
extrema
incorporada para obtener los elementos mínimos y máximos de una matriz como una tupla. Sin embargo, dado que la matriz también puede tener cadenas, primero tenemos que filtrarlas. Podemos hacerlo probando si cada elemento es un entero usandoisa
.fuente
Japt, 23 bytes
¡Pruébelo en línea!
Cómo funciona
fuente
Bash,
403130 bytesRequiere una lista separada por líneas:
Gracias a @manatwork por reducir algunos bytes
fuente
sed '1p;$p;d'
Guarda un byte.PowerShell,
5336 bytesGuardado 17 bytes gracias a @goric
OOOF ... PowerShell generalmente juega bastante rápido y flojo con el lanzamiento, que normalmente es algo bueno para jugar al golf, pero aquí lo duele.
Toma nuestra entrada
$args[0]
y la canaliza en unaWhere-Object
declaración (the?
) que solo seleccionará números enteros y los pasará a lo largo de la tubería, descartando cualquier otra cosa. Dado que el reenvío dinámico se realiza sobre la marcha en segundo plano para usted (por ejemplo, el1+"5"
retorno6
es un PowerShell perfectamente válido), debemos utilizar el-is
operador para diferenciar entre los tipos de datos.A partir de ahí, canalizamos esa colección
Sort-Object
, que clasificará los enteros de menor a mayor. El exterior()
es necesario para que podamos hacer referencia al primer y último elemento con[0,-1]
(es decir, el más pequeño y el más grande), pero tenga en cuenta que también necesitamos el exterior@
para forzar el lanzamiento de la salidasort
como una matriz si solo hay un objeto (como resultado de el?
, o solo un objeto fue ingresado).fuente
-is
operador de tipo aquí . Creo que se podría reemplazar.GetType().Name-eq"Int32"
con-is[int]
al ahorro 17 bytesMATL , 23 bytes
Pruébalo en línea!
fuente
JavaScript (ES5), 105 bytes
Uso:
a([1,2,3,'4'])
Probando :)
"Sin golf":
fuente
Pyth, 11 bytes
Explicación:
Pruébalo aquí!
fuente
Perl 6 , 25 bytes
La respuesta obvia sería este Lambda WhateverCode
Si tiene que ser un programa completo
La entrada a este programa completo es una lista de valores separados por espacios
Uso
fuente
𝔼𝕊𝕄𝕚𝕟, 16 caracteres / 20 bytes
Try it here (Firefox only).
No esta mal, no está mal...
Explicación
Esto genera una matriz que contiene tanto el máximo como el mínimo.
(ï⇔⒡≔=+$⸩,
básicamente filtra todas las cadenas en la entrada,МƲ
obtiene el máximo en la entrada yМƵ
obtiene el mínimo.Solo una nota: este es el primer desafío donde puedo usar
⇔
, que básicamente se convierteï⇔
enï=ï
.fuente
Python 3, 56 bytes
Pruébelo en línea en Ideone .
fuente
APL (Dyalog) , 13 bytes
Pruébalo en línea!
∊
enlist (aplanar - esto convierte todas las cadenas en caracteres en la lista grande)⎕AV~⍨
eliminar todos los caracteres de la A Tomic V ector (el conjunto de caracteres - números hojas)(
...)
aplique la siguiente función tácita:⌊/
el mínimo a través,
anexado a⌈/
el maximus a travésfuente
Java (OpenJDK 8) , 124 bytes
Pruébalo en línea!
Función lambda de Java 8, toma la matriz como entrada y entrega la matriz
{min, max}
. No compite, porque la entrada tiene que ser una matriz entera.Corregido y -1 byte gracias a Kevin Cruijssen
fuente
<i
ahora da un error sin conversión de enteros. Además, el código inicial (y éste a su vez) no funciona paramin
, ya que siempre será la salida0
paramin
. Aquí hay una posible solución. EDITAR: Try-catch parece ser 1 byte más corto que elif(i instanceof Integer)
.Jolf, 20 bytes
Probablemente pueda jugar golf ... Necesito implementar soluciones más cortas de verificación de tipo.
fuente