A tarefa
A tarefa é muito simples. Dada uma matriz que contém apenas números inteiros e seqüências de caracteres , produza o maior número e o menor número.
Casos de teste
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
Números em strings não são considerados números inteiros:
Input: [1, 2, 3, 4, "5"]
Output: 1, 4
Se houver apenas um número inteiro, ele será o número inteiro maior e menor:
Input: [1]
Output: 1, 1
Input: ["1", "2", "3", "4", 5]
Output: 5, 5
Regras
- Você pode assumir que uma matriz sempre contém pelo menos um número inteiro.
- Todos os números inteiros são positivos (maiores que 0)
- A ordem da saída não importa.
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
- As strings podem conter todos os caracteres ASCII imprimíveis (
32 - 126
) e não estão vazias.
code-golf
array-manipulation
Adnan
fonte
fonte
[1, 2, 3]
1 2 3
e{1; 2; 3}
todos os formatos de entrada são válidos, não vejo por que deve ser diferente para os literais de string recebidos do STDIN.Respostas:
Sério,
96 bytesExperimente Online
Como funciona
fonte
JavaScript (ES6), 54
56Editar 2 bytes salvos thx @Neil
Nota:
x===+x
é verdadeiro se e somente sex
for um númerofonte
()
?Pitão,
141110 bytesExperimente online. Suíte de teste.
Explicação
Q
: entrada avaliada#
: filtre isso em:I
: o valor é o mesmo depois de:^…1
elevando-o ao poder 1S
: classifique isso_B
: criar matriz[previous, reversed(previous)]
hM
: pegue o primeiro item de cada item daqueleA parte mais difícil é jogar golfe na remoção de strings, que atualmente leva 4 bytes. A abordagem atual funciona devido ao
^<str>1
uso do primeiro poder cartesiano da sequência (basicamente, a lista dos caracteres da string), mas^<int>1
é apenas a função de identidade.fonte
*#_1Q
para remover as cordas, o que seria mais curto se uma variável foi inicializada para um negativo ...Python 2, 42 bytes
No Python 2, números inteiros são sempre menores que strings durante as comparações; portanto, um simples
min(s)
encontrará o menor número inteiro. Ao encontrar o máximo, precisamos primeiro filtrar as strings. A função anônima aceita uma sequência e retorna uma tupla com o mínimo e o máximo.Exemplo:
fonte
lambda a:
preso antes disso.if x>0
ouif''>x
salve um byte.lambda s:(min(s),-min(-1*_ for _ in s))
(39 bytes)Gelatina, 8 bytes
Experimente online!
fundo
Em um mundo perfeito, seria suficiente cruzar a lista com uma versão achatada de si mesma. Strings são simplesmente listas de caracteres no Jelly, portanto, enquanto a lista original contenha números inteiros e strings, a versão achatada conteria números inteiros e caracteres, deixando apenas os inteiros na interseção.
No mundo real, ambos os analisadores de ambos os literais de entrada e de cadeia produzir caracteres em vez de cordas de comprimento 1. A única maneira de passar uma cadeia Singleton para uma função seria para codificar o "manualmente", como, por exemplo,
[”a]
que é um caractere envolvido em uma matriz.Isso salvaria um byte, com um total de 7 bytes ( Experimente online! ).
Como isso provavelmente não é aceitável, também precisamos de uma maneira de diferenciar caracteres de números inteiros.
Os átomos bit a bit de Jelly tentam
desesperadamenteconverter seus argumentos em números inteiros. Eles começam vetorizando até encontrar tipos de profundidade 0 (números ou caracteres) e tentam convertê-los em números inteiros. Para um caractere que representa um número inteiro, isso será bem-sucedido. Para outros, um átomo diádico bit a bit simplesmente desiste e retorna 0 .Por exemplo, OR bit a bit a lista
[1, "2", "34", "-5", "a", "bc"]
consigo produziráAo cruzar o resultado com a lista original, nos livramos das matrizes e dos números inteiros que não estavam presentes na lista original.
Como funciona
fonte
Mathematica, 20 bytes
Casos de teste
fonte
*
lá? Parece que você pode chegar aos 19 apenas cortando-o.MinMax@Select[#>0&]
não é uma função pura válida.@*
é composição da função, enquanto@
aplicação da função.MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]
produz uma resposta correctaMinMax@Select[# > 0 &]
a um símbolo ou apenas avaliá-lo.Ruby,
573629 bytesNovato aqui, então eu não sei se existe algum lugar / maneira padrão ou universalmente aceito para calcular os bytes usados, qualquer ajuda seria muito apreciada!
Editado de acordo com o manatwork e o comentário da maçaneta da porta!
Teste
fonte
->n{[(x=n.map(&:to_i)&n).min,x.max]}
->a{(a.map(&:to_i)&a).minmax}
CJam,
1513 bytesUm bloco sem nome (função) que espera a matriz de entrada na pilha e deixa a matriz de saída em seu lugar.
Execute todos os casos de teste.
Explicação
fonte
q~_e(ae)a+
e(
ee)
ignoraria as strings ou algo assim, o que parece inconsistente. E se envolvesse comparação com strings, provavelmente falharia da mesma maneira que$
ee>
não poderá comparar números inteiros com strings.Haskell,
4139 bytesNo Haskell, todos os elementos de uma lista devem ser do mesmo tipo, portanto não posso misturar
Integer
eString
. No entanto, existe oEither
tipo de combinação de dois tipos em um único. A lista de entrada é, portanto, do tipoEither Integer String
1 .f
filtra os números inteiros, remove oEither
wrapper, coloca a lista como elemento único em uma nova lista (por exemplo[[1,2,3]]
), para que<*>
possa aplicar as funções fornecidas no primeiro argumento a ele.Exemplo de uso:
f [Left 1, Left 3, Right "Hello", Left 2]
->[1,3]
.Edit: @xnor entrou
<*>
em jogo e salvou 2 bytes. Obrigado!1 na verdade, é totalmente polimórfico no segundo tipo que a
String
propriedade nunca é utilizado.fonte
f x=[minimum,maximum]<*>[[i|Left i<-x]]
jq, 21 caracteres
Exemplo de execução:
Teste on-line:
fonte
Mathematica, 28 bytes
fonte
Nothing
... Isso não significa nada de especial ... Além disso, por 23 bytes:MinMax@*Select[NumberQ]
Nothing
tem um significado especial. Desde o Mathematica 10.2, ele é removido automaticamente das Listas.Nothing
é uma função documentada nas últimas versões.PHP,
5048 bytesfonte
'
aroundis_int
.Retina , 71
Obrigado (como sempre) a @ MartinBüttner pela ajuda no golfe.
Não é competitivo em termos de golfe, mas é interessante implementar a classificação de bolhas inteiras na Retina.
Assume que todas as seqüências de caracteres na entrada são
"
aspas duplas e não contêm aspas duplas de escape\"
.A entrada é separada por nova linha.
Experimente online.
fonte
<space>.*<space>
no penúltimo estágio por causa da ganância.Mathematica , 14
Exemplo:
Explicação:
Quando
MinMax
recebe entrada não numérica, reduz o problema o máximo que pode e deixa os termos agrupadosMin
eMax
:Devido à ordem automática que ocorre, as seqüências seguem números inteiros.
Apply
at levelspec {1}, abreviação@@@
, é então usado para puxar o primeiro argumento de elementos não atômicos. Observe que não5
é tocado aqui:fonte
Oracle SQL 11.2, 189 bytes
Sem golfe
A subconsulta analisa a matriz e a divide para preencher uma visualização com um elemento por linha. Em seguida, os elementos não numéricos são filtrados.
Eu gostaria de ter encontrado uma maneira de fazê-lo com MENOS e MAIORES, mas sem sorte em como lidar com a matriz como um parâmetro.
fonte
[]
na matriz para não selecionar o máximo ou o mínimo se eles são o primeiro ou o último elemento da matriz. Você também não precisa da sua cláusula WHERE, já está selecionando agregados para não precisar filtrar. Procure por caracteres numéricos em suas regexes e empurre a conversão de número para baixo para a subconsulta (muito pouco perigo de predicados enviados) e ela se torna 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'))
+
no segundo regex aqui, pois não importa se você gera algumas linhas extras (salva um byte). Também é importante notar que, se você tiver uma string composta exclusivamente por números, não a ignorará aqui; que precisa de funções sobrecarregadas no mesmo pacote, então não é nada bonito.vimscript, 25 bytes
Sim, isso mesmo, vimscript.
Espera entrada no formulário
E saídas na forma
Explicação:
A primeira linha precisa ser duplicada duas vezes para lidar com o caso de extremidade de uma entrada de um único número. Isso ocorre porque o último comando irá reclamar se houver apenas duas linhas quando for atingido, uma vez que acaba sendo
2,1d
um intervalo para trás.fonte
Perl
4439 + 3 = 41 bytesRequer
-pa
sinalizadores:Graças a @manatwork por remover alguns bytes
fonte
sort{$a-$b}grep...
$_="@a[0,-1]"
.grep!/"/
.!/\D/
é necessário em vez de!/"/
, por mais um byte.Julia, 35 bytes
Esta é uma função lambda que aceita uma matriz e retorna uma tupla de números inteiros. Para chamá-lo, atribua-o a uma variável.
Julia possui uma função
extrema
interna para obter os elementos mínimo e máximo de uma matriz como uma tupla. No entanto, como o array também pode ter cadeias, primeiro precisamos filtrá-las. Podemos fazer isso testando se cada elemento é um número inteiro usandoisa
.fonte
Japonês, 23 bytes
Teste online!
Como funciona
fonte
Bash,
403130 bytesRequer uma lista separada por linhas:
Graças a @manatwork para eliminar alguns bytes
fonte
sed '1p;$p;d'
salva um byte.PowerShell,
5336 bytesGuardado 17 bytes graças a @goric
OOOF ... O PowerShell geralmente joga muito rápido e com folga na fundição, o que normalmente é uma coisa boa para o golfe, mas prejudica aqui.
Pega nossa entrada
$args[0]
e a coloca em umaWhere-Object
declaração (the?
) que seleciona apenas números inteiros e os passa pelo pipeline, descartando qualquer outra coisa. Como a re-conversão dinâmica ocorre em segundo plano para você (por exemplo,1+"5"
retornar o6
PowerShell perfeitamente válido), precisamos usar o-is
operador para diferenciar os tipos de dados.A partir daí, canalizamos essa coleção
Sort-Object
, que classificará os números inteiros do menor para o maior. O externo()
é necessário para que possamos referenciar o primeiro e o último elemento com[0,-1]
(ou seja, o menor e o maior), mas observe que também precisamos do exterior@
para forçar o lançamento da saídasort
como uma matriz se houver apenas um objeto (como resultado de o?
, ou apenas um objeto foi inserido).fonte
-is
operador de tipo aqui . Eu acho que você poderia substituir.GetType().Name-eq"Int32"
com-is[int]
a economia de 17 bytesMATL , 23 bytes
Experimente online!
fonte
JavaScript (ES5), 105 bytes
Uso:
a([1,2,3,'4'])
Apenas tentando :)
"Ungolfed":
fonte
Pitão, 11 bytes
Explicação:
Experimente aqui!
fonte
Perl 6 , 25 bytes
A resposta óbvia seria essa lambda WhateverCode
Se tiver que ser um programa completo
A entrada para este programa completo é uma lista de valores separados por espaço
Uso
fonte
, 16 caracteres / 20 bytes
Try it here (Firefox only).
Nada mal nada mal...
Explicação
Isso gera uma matriz contendo o máximo e o mínimo.
(ï⇔⒡≔=+$⸩,
basicamente filtra todas as strings da entrada,МƲ
obtém o máximo na entrada eМƵ
obtém o mínimo.Apenas uma observação: este é o primeiro desafio em que uso
⇔
, que basicamente seï⇔
transformaï=ï
.fonte
Python 3, 56 bytes
Experimente online no Ideone .
fonte
APL (Dyalog) , 13 bytes
Experimente online!
∊
alistar (achatar - isso transforma todas as seqüências de caracteres em caracteres na grande lista)⎕AV~⍨
remover todos os caracteres na Uma Tomic V ector (o conjunto de caracteres - números de folhas)(
…)
Aplique a seguinte função tácita:⌊/
o mínimo através,
anexado a⌈/
o máximo atravésfonte
Java (OpenJDK 8) , 124 bytes
Experimente online!
A função Java 8 lambda, recebe o array como entrada e fornece o array
{min, max}
. Não concorrente, porque a entrada deve ser uma matriz inteira.Fixo e -1 byte graças a Kevin Cruijssen
fonte
<i
agora fornece um erro sem conversão de número inteiro. Além disso, seu código inicial (e este também) não funcionamin
, pois sempre será gerado0
paramin
. Aqui está uma solução possível. Edição: Try-catch parece ser 1 byte menor que oif(i instanceof Integer)
.Jolf, 20 bytes
Provavelmente posso jogar isso ... Preciso implementar soluções mais curtas de verificação de tipo.
fonte