La tâche
La tâche est très simple. Étant donné un tableau contenant uniquement des entiers et des chaînes , affichez le plus grand nombre et le plus petit nombre.
Cas de test
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
Les nombres dans les chaînes ne sont pas considérés comme des entiers:
Input: [1, 2, 3, 4, "5"]
Output: 1, 4
S'il n'y a qu'un seul entier, c'est à la fois le plus grand et le plus petit entier:
Input: [1]
Output: 1, 1
Input: ["1", "2", "3", "4", 5]
Output: 5, 5
Règles
- Vous pouvez supposer qu'un tableau contiendra toujours au moins un entier.
- Tous les entiers sont positifs (supérieurs à 0)
- L'ordre de sortie n'a pas d'importance.
- C'est du code-golf , donc la soumission avec le moins d'octets gagne!
- Les chaînes peuvent contenir tous les caractères ASCII imprimables (
32 - 126
) et ne sont pas vides.
[1, 2, 3]
1 2 3
et{1; 2; 3}
sont tous des formats d'entrée valides, donc je ne vois pas pourquoi cela devrait être différent pour les littéraux de chaîne reçus de STDIN.Réponses:
Sérieusement,
96 octetsEssayez-le en ligne
Comment ça marche
la source
JavaScript (ES6), 54
56Modifier 2 octets enregistrés thx @Neil
Remarque:
x===+x
est vrai si et seulement six
est un nombrela source
()
s extérieurs ?Pyth,
141110 octetsEssayez-le en ligne. Suite de tests.
Explication
Q
: entrée évaluée#
: filtrer cela sur:I
: la valeur étant la même après:^…1
l'élever au pouvoir 1S
: trier ça_B
: créer un tableau[previous, reversed(previous)]
hM
: prendre le premier élément de chaque élément de cetteLa partie la plus difficile est de jouer au golf avec la suppression des cordes, ce qui prend actuellement 4 octets. L'approche actuelle fonctionne en raison de la
^<str>1
prise de la première puissance cartésienne de la séquence (essentiellement, la liste des caractères de la chaîne), mais^<int>1
n'est que la fonction d'identité.la source
*#_1Q
pour supprimer les chaînes, qui seraient plus courtes si une variable était initialisée à une variable ...Python 2, 42 octets
En Python 2, les entiers sont toujours inférieurs aux chaînes lors des comparaisons, donc un simple
min(s)
trouvera le plus petit entier. Cependant, lors de la recherche du maximum, nous devons d'abord filtrer les chaînes. La fonction anonyme accepte une séquence et renvoie un tuple avec le minimum et le maximum.Exemple:
la source
lambda a:
bloqué avant cela.if x>0
ouif''>x
enregistrez un octet.lambda s:(min(s),-min(-1*_ for _ in s))
Gelée, 8 octets
Essayez-le en ligne!
Contexte
Dans un monde parfait, il suffirait de recouper la liste avec une version aplatie d'elle-même. Les chaînes sont simplement des listes de caractères dans Jelly, donc alors que la liste d'origine contiendrait des entiers et des chaînes, la version aplatie contiendrait des entiers et des caractères, ne laissant que les entiers dans l'intersection.
Dans le monde réel, les analyseurs des littéraux d'entrée et de chaîne produisent des caractères au lieu de chaînes de longueur 1. La seule façon de passer une chaîne singleton à une fonction serait de la coder "manuellement" comme, par exemple
[”a]
, qui est un caractère enveloppé dans un tableau.Cela permettrait d'économiser un octet, pour un total de 7 octets ( essayez-le en ligne! ).
Comme ce n'est probablement pas acceptable, nous avons également besoin d'un moyen de différencier les caractères des entiers.
Les atomes au niveau du bit de Jelly tentent
désespérémentde convertir leurs arguments en nombres entiers. Ils commencent par vectoriser jusqu'à rencontrer des types de profondeur 0 (nombres ou caractères), puis tentent de les convertir en entiers. Pour un caractère qui représente un entier, cela réussira. Pour d'autres, un atome dyadique au niveau du bit abandonnera simplement et retournera 0 .Par exemple, OR au niveau du bit de la liste
[1, "2", "34", "-5", "a", "bc"]
avec lui-même produiraEn coupant le résultat avec la liste d'origine, nous nous débarrassons des tableaux et des entiers qui n'étaient pas présents dans la liste d'origine.
Comment ça marche
la source
Mathematica, 20 octets
Cas de test
la source
*
bas? Il semble que vous pouvez arriver à 19 simplement en le coupant.MinMax@Select[#>0&]
n'est pas une fonction pure valide.@*
est la composition des fonctions, tandis que l'@
application des fonctions.MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]
donne une réponse correcteMinMax@Select[# > 0 &]
à un symbole ou évaluez-le simplement.Rubis,
573629 octetsDébutant ici, donc je ne sais pas s'il existe un endroit / moyen standard ou universellement accepté pour calculer les octets utilisés, toute aide serait très appréciée!
Modifié selon manatwork et commentaire de la poignée de porte!
Tester
la source
->n{[(x=n.map(&:to_i)&n).min,x.max]}
->a{(a.map(&:to_i)&a).minmax}
CJam,
1513 octetsUn bloc sans nom (fonction) qui attend le tableau d'entrée sur la pile et laisse le tableau de sortie à sa place.
Exécutez tous les cas de test.
Explication
la source
q~_e(ae)a+
e(
ete)
ignorerait les chaînes ou quelque chose, ce qui semble incohérent. Et si cela impliquait une comparaison avec des chaînes, cela échouerait probablement de la même manière$
ete>
ne pourrait pas comparer des entiers avec des chaînes.Haskell,
4139 octetsDans Haskell, tous les éléments d'une liste doivent être du même type, donc je ne peux pas mélanger
Integer
etString
. Cependant, il y a leEither
type pour combiner deux types en un seul. La liste d'entrée est donc de typeEither Integer String
1 .f
filtre les entiers, supprime leEither
wrapper, place la liste en tant qu'élément unique dans une nouvelle liste (par exemple[[1,2,3]]
), afin de<*>
pouvoir lui appliquer les fonctions données dans le premier argument.Exemple d'utilisation:
f [Left 1, Left 3, Right "Hello", Left 2]
->[1,3]
.Edit: @xnor mis
<*>
en jeu et enregistré 2 octets. Merci!1 en fait, il est entièrement polymorphe dans le second type car la
String
propriété n'est jamais utilisée.la source
f x=[minimum,maximum]<*>[[i|Left i<-x]]
jq, 21 caractères
Exemple d'exécution:
Test en ligne:
la source
Mathematica, 28 octets
la source
Nothing
... Cela ne veut rien dire de spécial ... Aussi, pour 23 octets:MinMax@*Select[NumberQ]
Nothing
a une signification particulière. Depuis Mathematica 10.2, il est automatiquement supprimé des listes.Nothing
est une fonction documentée dans les dernières versions.PHP,
5048 octetsla source
'
contouris_int
.Rétine , 71
Merci (comme toujours) à @ MartinBüttner pour son aide au golf.
Pas compétitif au niveau du golf, mais il est intéressant d'implémenter le tri des bulles entières dans la rétine.
Suppose que toutes les chaînes de l'entrée sont entre
"
guillemets doubles et ne contiennent pas de guillemets doubles échappés\"
.L'entrée est séparée par des sauts de ligne.
Essayez-le en ligne.
la source
<space>.*<space>
dans l'avant-dernière étape à cause de la cupidité.Mathematica , 14
Exemple:
Explication:
Lorsque
MinMax
reçoit une entrée non numérique, il réduit le problème autant que possible, puis laisse les termes enveloppésMin
etMax
:En raison de l'ordre automatique qui a lieu, les chaînes suivent des entiers.
Apply
à levelspec {1}, raccourci@@@
, est ensuite utilisé pour extraire le premier argument des éléments non atomiques. Notez que5
c'est intact ici:la source
Oracle SQL 11.2, 189 octets
Non golfé
La sous-requête analyse le tableau et le fractionne pour remplir une vue avec un élément par ligne. Ensuite, les éléments non numériques sont filtrés.
Je souhaite que j'aurais pu trouver un moyen de le faire avec LEAST et GREATEST, mais pas de chance avec la façon de gérer le tableau en tant que paramètre.
la source
[]
laissez le dans le tableau afin de ne pas sélectionner le max ou le min s'il s'agit du premier ou du dernier élément du tableau. Vous n'avez pas non plus besoin de votre clause WHERE, vous sélectionnez déjà des agrégats, vous n'avez donc pas besoin de filtrer. Recherchez des caractères numériques dans vos expressions régulières et poussez la conversion numérique vers la sous-requête (très peu de danger de prédicats poussés) et cela devient 126 octets: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'))
+
dans le deuxième regex ici car cela n'a pas d'importance si vous générez quelques lignes supplémentaires (enregistre un octet). Il convient également de noter que si vous avez une chaîne composée uniquement de chiffres, vous ne l'ignorerez pas ici; qui a besoin de fonctions surchargées dans le même paquet, donc ce n'est pas du tout joli.vimscript, 25 octets
Oui, c'est vrai, vimscript.
Attend la saisie dans le formulaire
Et les sorties sous la forme
Explication:
La première ligne doit être dupliquée deux fois pour gérer le cas de bord d'une entrée d'un seul numéro. C'est parce que la dernière commande se plaindra s'il n'y a que deux lignes lorsqu'elle est atteinte, car elle finit par être
2,1d
une plage arrière.la source
Perl
4439 + 3 = 41 octetsNécessite des
-pa
drapeaux:Merci à @manatwork d' avoir rasé quelques octets
la source
sort{$a-$b}grep...
$_="@a[0,-1]"
.grep!/"/
.!/\D/
c'est nécessaire au lieu de!/"/
, pour un octet de plus.Julia, 35 octets
Il s'agit d'une fonction lambda qui accepte un tableau et renvoie un tuple d'entiers. Pour l'appeler, affectez-le à une variable.
Julia a une fonction intégrée
extrema
pour obtenir les éléments minimum et maximum d'un tableau en tant que tuple. Cependant, comme le tableau peut également contenir des chaînes, nous devons d'abord les filtrer. Nous pouvons le faire en testant si chaque élément est un entier utilisantisa
.la source
Japt, 23 octets
Testez-le en ligne!
Comment ça marche
la source
Bash,
403130 octetsNécessite une liste séparée par ligne:
Merci à @manatwork de raser quelques octets
la source
sed '1p;$p;d'
enregistre un octet.PowerShell,
5336 octets17 octets enregistrés grâce à @goric
OOOF ... PowerShell joue généralement assez vite et en vrac avec le lancer, ce qui est normalement une bonne chose pour le golf, mais ça fait mal ici.
Prend notre entrée
$args[0]
et la canalise dans uneWhere-Object
instruction (la?
) qui ne sélectionne que des entiers et les transmet le long du pipeline, en rejetant toute autre chose. Étant donné que la refonte dynamique se produit à la volée en arrière-plan pour vous (par exemple, le1+"5"
retour6
est PowerShell parfaitement valide), nous devons utiliser l'-is
opérateur afin de différencier les types de données.De là, nous dirigeons cette collection vers
Sort-Object
, qui triera les entiers du plus petit au plus grand. L'extérieur()
est nécessaire pour que nous puissions référencer le premier et le dernier élément avec[0,-1]
(c'est-à-dire le plus petit et le plus grand), mais notez que nous avons également besoin de l'extérieur@
pour forcer le transtypage de la sortie d'sort
un tableau s'il n'y a qu'un seul objet (comme résultat de le?
, ou un seul objet a été saisie).la source
-is
opérateur de type ici . Je pense que vous pourriez remplacer.GetType().Name-eq"Int32"
par-is[int]
pour économiser 17 octetsMATL , 23 octets
Essayez-le en ligne!
la source
JavaScript (ES5), 105 octets
Usage:
a([1,2,3,'4'])
J'essaye juste :)
"Non golfé":
la source
Pyth, 11 octets
Explication:
Essayez-le ici!
la source
Perl 6 , 25 octets
La réponse évidente serait ce lambda WhatsCode
S'il doit s'agir d'un programme complet
L'entrée de ce programme complet est une liste de valeurs séparées par des espaces
Usage
la source
𝔼𝕊𝕄𝕚𝕟, 16 caractères / 20 octets
Try it here (Firefox only).
Pas mal pas mal...
Explication
Cela génère un tableau contenant à la fois le maximum et le minimum.
(ï⇔⒡≔=+$⸩,
filtre essentiellement toutes les chaînes en entrée,МƲ
obtient le maximum en entrée etМƵ
obtient le minimum.Juste une note: c'est le premier défi que j'utilise
⇔
, qui se transformeï⇔
en grosï=ï
.la source
Python 3, 56 octets
Essayez-le en ligne sur Ideone .
la source
APL (Dyalog) , 13 octets
Essayez-le en ligne!
∊
enlist (flatten - cela transforme toutes les chaînes en caractères dans la grande liste)⎕AV~⍨
supprimer tous les caractères du A tomic V ecteur (le jeu de caractères - nombres de feuilles)(
…)
Appliquez la fonction tacite suivante:⌊/
le minimum à travers,
annexé à⌈/
le maximus à traversla source
Java (OpenJDK 8) , 124 octets
Essayez-le en ligne!
Fonction lambda Java 8, prend le tableau en entrée et donne le tableau
{min, max}
. Pas de concurrence, car l'entrée doit être un tableau d'entiers.Fixe et -1 octet grâce à Kevin Cruijssen
la source
<i
donne maintenant une erreur sans conversion de nombres entiers. De plus, votre code initial (et celui-ci également) ne fonctionne pas pourmin
, car il sera toujours affiché0
pourmin
. Voici une solution possible. EDIT: Try-catch semble être 1 octet plus court que leif(i instanceof Integer)
.Jolf, 20 octets
Je peux probablement jouer au golf ... J'ai besoin de mettre en œuvre des solutions plus courtes de vérification de type.
la source