Desafio
Dada uma matriz de números inteiros, recebidos de stdin, argumentos de função, argumentos de programa ou algum outro método:
Saída apenas os números mínimo e máximo na matriz, através de um valor de retorno, stdout ou outros métodos de ajuste.
Sessão de exemplo
> minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} )
-14 18
Implementação de referência
// 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;
}
Regras
- Você não pode usar uma função interna para calcular os valores.
- Lacunas padrão não permitidas.
- Implementações criativas incentivadas.
- Este é o código-golfe , a resposta mais curta vence, mas não será selecionado.
Esclarecimentos
- Se a matriz contiver 1 elemento, você precisará produzi-la duas vezes.
- Se os valores mínimo e máximo forem os mesmos, você precisará produzir os dois.
code-golf
number
array-manipulation
dkudriavtsev
fonte
fonte
code golf
Respostas:
Geléia , 3 bytes
Experimente online!
Classifique a matriz e, em seguida, use o elemento 0,5-th.
A geléia usa a indexação 1 e a indexação de pontos flutuantes significa tomar seu piso e seu teto.
Portanto, o elemento 0,5-th forneceria o 0º elemento e o 1º elemento.
O 0º elemento é o último elemento.
fonte
Python,
614937363431 bytes-12 bytes graças ao RootTwo
Mais -12 bytes graças a chepner
-2 bytes graças a johnLate
-3 bytes graças a johnLate
fonte
[::(len(s)-1)or 1]
para o primeiro índice. E o segundo termo pode ser reduzido paras[: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]
) não funciona para matrizes com um elemento (ValueError: slice step cannot be zero
). Uma possível correção serialambda s:sorted(s*2)[::len(s*2)-1]
(34 bytes).Brain-Flak
220218 bytesExperimente Online!
Explicação
Primeiro, ele dobra o valor máximo (no elenco, a lista tem apenas um comprimento)
Em seguida, ele usa meu algoritmo de classificação de bolhas:
Em seguida, ele pega o valor superior da pilha (ou seja, o mínimo)
Então ele aparece até a altura da pilha ser uma:
fonte
JavaScript (ES6), 34 bytes
sort
classifica no local, para que eu possa apenas me referir ao índice [0] para o valor mais baixo epop
o valor mais alto da matriz, no entanto, ele faz uma sequência de caracteres por padrão, então preciso passar por um comparador.fonte
(x,y)=>x-y
peça, a menos que o usosort()
com o algoritmo padrão conte como interno.sort()
internamente trata tudo como strings - desculpe!Mathematica, 18 bytes
Classifica a matriz e extrai o primeiro e o último valor.
fonte
R, 31 bytes
Não é tão original, mas ei!
fonte
Código da máquina ARM, 26 bytes
Despejo hexadecimal (little endian):
Esta é uma função, sem chamada de sistema ou dependência de biblioteca. A codificação é Thumb-2, uma codificação variável (2 ou 4 bytes) para ARM de 32 bits. Como se pode imaginar, não há uma maneira fácil de classificar e escolher o primeiro e o último elementos aqui. No geral, não há nada realmente tão sofisticado acontecendo aqui, é mais ou menos o mesmo que a implementação de referência.
Montagem não destruída (sintaxe GNU):
Testado no Raspberry Pi 3; aqui está o script de teste (C99, entrada por argv):
fonte
Haskell, 27 bytes
Em Haskell,
min
emax
forneça o mínimo e o máximo de dois argumentos, não de uma lista. Eu não poderia dizer se isso é permitido (parece que em vez únicaminimum
emaximum
seria anulado) então por favor deixe-me saber se eles são e eu vou apagar imediatamente esta resposta.fonte
Oitava, 20 bytes
Isso classifica o vetor de entrada e gera o primeiro e o último valor.
fonte
Na verdade, 5 bytes
Experimente online!
Explicação:
fonte
05AB1E ,
64 bytesExplicação
Experimente online
fonte
MATL , 4 bytes
Experimente online!
Explicação
fonte
Python, 29 bytes
Teste em Ideone .
fonte
C,
838179 bytesfonte
...f(a,s)int*a{...
acordo com istom,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
você pode substituir*a>M?M=*a:0
por*a<M?:M=*a
Braquilog , 9 bytes
Experimente online!
fonte
V , 12 bytes
Experimente online!
Os nossos agradecimentos a DJMcMayhem por isso.
fonte
\o/
Não sou mais a única pessoa que já usou esse idioma!CJam,
109 bytesExperimente online.
Eu realmente não sou bom em CJam.
fonte
0=
(mas infelizmente isso não salva bytes). Duas outras soluções de 9 bytes:0W]q~$f=p
ou o bloco sem nome{$2*_,(%}
.q~$(p)p;
. Você pode usar)
para obter o último elemento como você usa(
para obter o primeiro.Python 2, 34 bytes
fonte
PHP, 44 bytes
fonte
Processando,
5952 bytesNa verdade, o processamento não me permite ler do stdin que consegui encontrar e não sei se o compilador Java interno suporta lambdas (e faz tanto tempo desde que tive que escrever Java sério que não uso lembro como).
fonte
int[]
Perl 6 13 bytes
Teste:
fonte
C #, 60 bytes
Um método ingênuo de 93 bytes:
fonte
Awak POSIX, 44 bytes
fonte
Oitava , 35 bytes
Esta é uma função anoynymous. Experimente em ideone .
O código evita o uso da classificação. Ou seja, todas as comparações "pares iguais ou inferiores" entre os elementos da entrada. O mínimo é o elemento para o qual todas as comparações são verdadeiras. O máximo é aquele para o qual apenas uma comparação é verdadeira.
fonte
Python,
3534 bytesVersão alternativa:
Versão antiga, 35 bytes.
Bastante simples: pegue a lista de entrada, adicione o primeiro elemento, classifique-o e depois pegue o primeiro e o comprimento da lista resultante. Como o comprimento da entrada após o acréscimo de um elemento é comprimento + 1, isso acaba levando o primeiro e o último elemento da lista, que são os elementos mínimo e máximo.
fonte
zsh, 22 bytes
define uma função lambda que imprime seu primeiro arg (
$1
) e o último argumento para o comando anterior ($_
) e o passa$@
após a classificação para que o comando anterior se torne a invocação desse lambdazsh, 21 bytes
isso só funciona bem se houver mais de um argumento :(
classifica
$@
, transforma uma string e substitui tudo, desde o primeiro espaço até o último por um único espaço, depois passa como entrada para o gato com<<<
uso:
fonte
Scala, 55 bytes
Executar:
$ scala minmax.scala 1 2 3 4 5 6 7 8 9
fonte
Bash + coreutils, 30 bytes
O script sed imprime, depois que a entrada é classificada, o primeiro e o último número inteiro.
fonte
dc, 110 bytes
Ajude-me,
dc
ers! Você é minha única esperança!Obrigado a @seshoumara por encontrar esse bug!
Vou adicionar uma explicação mais tarde. Aqui está um pouco dividido:
fonte
M
em
. Mas se na lista de entrada nenhum número for menor quem=0
, ou nenhum número for maior queM=0
, então você obterá um resultado incorreto, porque adicionou artificialmente 0 aos números da amostra. A solução é substituir o primeiro 0 por?d
, que lê os números e inicializaM
em
com o último número, tornando-o parte da amostra. Em seguida, execute o código assim: echo "8 _2 5" | dc -e "? DdsMsm ....".Java, 115 bytes
Ungolfed:
Minha primeira solução de código "golfe".
fonte