Défi
Étant donné un tableau d'entiers, reçus de stdin, des arguments de fonction, des arguments de programme ou une autre méthode:
Afficher uniquement les nombres minimum et maximum dans le tableau, via une valeur de retour, stdout ou d'autres méthodes d'ajustement.
Exemple de session
> minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} )
-14 18
Implémentation de référence
// 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;
}
Règles
- Vous ne pouvez pas utiliser une fonction intégrée pour calculer les valeurs.
- Failles standard interdites.
- Implémentations créatives encouragées.
- Il s'agit du code-golf , la réponse la plus courte gagne mais ne sera pas sélectionnée.
Clarifications
- Si le tableau contient 1 élément, vous devez le sortir deux fois.
- Si les valeurs minimale et maximale sont identiques, vous devez les sortir toutes les deux.
code-golf
number
array-manipulation
dkudriavtsev
la source
la source
code golf
Réponses:
Gelée , 3 octets
Essayez-le en ligne!
Triez le tableau, puis prenez l'élément 0,5-ème.
Jelly utilise l'indexation 1, et l'indexation en virgule flottante signifie prendre son plancher et son plafond.
Ainsi, le 0,5-ème élément vous donnerait le 0ème élément et le 1er élément.
Le 0ème élément est le dernier élément.
la source
Python,
614937363431 octets-12 octets grâce à RootTwo
Encore -12 octets grâce à chepner
-2 octets grâce à johnLate
-3 octets grâce à johnLate
la source
[::(len(s)-1)or 1]
pour le premier indice. Et le deuxième mandat peut être raccourcis[: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]
) ne fonctionne pas pour les tableaux avec un élément (ValueError: slice step cannot be zero
). Un correctif possible seraitlambda s:sorted(s*2)[::len(s*2)-1]
(34 octets).Brain-Flak
220218 octetsEssayez-le en ligne!
Explication
D'abord, il double la valeur maximale (dans le casting, la liste n'est qu'une seule longue)
Ensuite, il utilise mon algorithme de tri à bulles:
Ensuite, il récupère la valeur maximale de la pile (c'est-à-dire le min)
Ensuite, il apparaît jusqu'à ce que la hauteur de la pile soit de un:
la source
JavaScript (ES6), 34 octets
sort
trie sur place, donc je peux simplement me référer à l'index [0] pour la valeur la plus basse etpop
la valeur la plus élevée du tableau, mais il fait un tri de chaîne par défaut, donc je dois passer un comparateur.la source
(x,y)=>x-y
pièce, à moins que l'utilisationsort()
avec l'algorithme par défaut ne compte comme une fonction intégrée.sort()
tout était traité en interne comme des chaînes - désolé!Mathematica, 18 octets
Trie le tableau et extrait les première et dernière valeurs.
la source
R, 31 octets
Pas si original, mais bon!
la source
Code machine ARM, 26 octets
Vidage hexadécimal (petit endian):
Il s'agit d'une fonction, sans appel système ni dépendance de bibliothèque. Le codage est Thumb-2, un codage variable (2 ou 4 octets) pour ARM 32 bits. Comme on pourrait l'imaginer, il n'y a pas de moyen facile de simplement trier et sélectionner les premier et dernier éléments ici. Dans l'ensemble, il n'y a rien de vraiment fantastique ici, c'est plus ou moins la même chose que l'implémentation de référence.
Assemblage non golfé (syntaxe GNU):
Testé sur le Raspberry Pi 3; voici le script de test (C99, entrée via argv):
la source
Haskell, 27 octets
Dans Haskell,
min
etmax
donnez au minimum et au maximum deux arguments, pas d'une liste. Je ne pourrais pas dire si cela est interdit (il semble qu'au lieu de cela seulementminimum
etmaximum
serait refusé), veuillez donc me le faire savoir et je supprimerai rapidement cette réponse.la source
Octave, 20 octets
Cela trie le vecteur d'entrée et sort la première et la dernière valeur.
la source
En fait, 5 octets
Essayez-le en ligne!
Explication:
la source
05AB1E ,
64 octetsExplication
Essayez-le en ligne
la source
MATL , 4 octets
Essayez-le en ligne!
Explication
la source
Python, 29 octets
Testez-le sur Ideone .
la source
C,
838179 octetsla source
...f(a,s)int*a{...
par cem,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
vous pouvez remplacer*a>M?M=*a:0
par*a<M?:M=*a
Brachylog , 9 octets
Essayez-le en ligne!
la source
V , 12 octets
Essayez-le en ligne!
Nous remercions DJMcMayhem pour cela.
la source
\o/
Ouais, je ne suis plus la seule personne à avoir utilisé cette langue!CJam,
109 octetsEssayez-le en ligne.
Je ne suis vraiment pas bon à CJam.
la source
0=
(mais cela ne permet malheureusement pas d'économiser d'octets). Deux autres solutions à 9 octets:0W]q~$f=p
ou le bloc sans nom{$2*_,(%}
.q~$(p)p;
. Vous pouvez utiliser)
pour obtenir le dernier élément comme vous utilisez(
pour obtenir le premier.Python 2, 34 octets
la source
PHP, 44 octets
la source
Traitement,
5952 octetsLe traitement ne me permet pas réellement de lire depuis stdin que j'ai pu trouver, et je ne sais pas si son compilateur Java interne prend en charge les lambdas (et cela fait si longtemps que je n'ai pas dû écrire de Java sérieux ne me souviens pas comment).
la source
int[]
Perl 6 13 octets
Tester:
la source
C #, 60 octets
Une méthode naïve à 93 octets:
la source
POSIX Awk, 44 octets
la source
Octave , 35 octets
Il s'agit d'une fonction anoynymous. Essayez-le chez ideone .
Le code évite d'utiliser le tri. A savoir, il effectue toutes les comparaisons par paires "inférieures ou égales" entre les éléments de l'entrée. Le minimum est l'élément pour lequel toutes les comparaisons sont vraies. Le maximum est celui pour lequel une seule comparaison est vraie.
la source
Python,
3534 octetsVersion alternative:
Ancienne version, 35 octets.
Assez simple: prenez la liste d'entrée, ajoutez le premier élément, triez-le, puis prenez le premier et (longueur) e élément de la liste résultante. La longueur de l'entrée après ajout d'un élément étant de longueur + 1, cela finit par prendre le premier et le dernier élément de ladite liste, qui sont les éléments minimum et maximum.
la source
zsh, 22 octets
définit une fonction lambda qui imprime son premier arg (
$1
) et le dernier argument à la commande précédente ($_
), et la passe$@
après l'avoir triée pour que la commande précédente devienne l'invocation de ce lambdazsh, 21 octets
cela ne fonctionne que s'il y a plus d'un argument :(
trie
$@
, en fait une chaîne et remplace tout du premier espace au dernier par un seul espace, puis le passe en entrée à cat avec<<<
usage:
la source
Scala, 55 octets
Éxécuter:
$ scala minmax.scala 1 2 3 4 5 6 7 8 9
la source
Bash + coreutils, 30 octets
Le script sed affiche, une fois l'entrée triée, le premier et le dernier entier.
la source
cc, 110 octets
Aidez-moi,
dc
ers! Vous êtes mon seul espoir!Merci à @seshoumara d'avoir trouvé ce bug!
J'ajouterai une explication plus tard. Ici, c'est un peu brisé:
la source
M
etm
. Mais si dans la liste d'entrée aucun nombre n'est inférieur àm=0
, ou aucun nombre n'est supérieur àM=0
, alors vous obtenez un résultat incorrect, car vous avez artificiellement ajouté 0 aux numéros d'échantillon. La solution consiste à remplacer le premier 0 par?d
, qui lit les nombres et initialiseM
etm
par le dernier nombre, ce qui en fait une partie de l'échantillon. Exécutez ensuite le code comme ceci: echo "8 _2 5" | dc -e "? DdsMsm ....".Java, 115 octets
Non golfé:
Ma toute première solution de code "golf".
la source