... mais bon, pas besoin d'être strict.
Étant donné un tableau d'entiers strictement positifs non vide, déterminez s'il s'agit:
- Monotone strictement décroissant . Cela signifie que chaque entrée est strictement inférieure à la précédente.
- Monotone non croissant, mais pas strictement décroissant . Cela signifie que chaque entrée est inférieure ou égale à la précédente et que le tableau ne relève pas de la catégorie ci-dessus.
- Aucune de ces réponses .
Notez les cas de coin suivants:
- Un tableau avec un seul numéro est monotone décroissant strictement (de manière vide).
- Un tableau avec le même nombre répété est monotone, non croissant, mais non strictement décroissant.
Règles
Vous pouvez fournir un programme ou une fonction
Les entrées peuvent être prises dans n'importe quel format raisonnable: tableau, liste, chaîne avec des nombres séparés par des espaces, ...
Vous pouvez choisir trois sorties cohérentes pour les trois catégories respectivement. Par exemple, les sorties peuvent être des nombres 0
, 1
, 2
; ou des chaînes 1 1
, 1 0
chaîne vide.
Le code le plus court en octets gagne
Cas de test
Monotone strictement décroissant:
7 5 4 3 1
42 41
5
Monotone non croissant, mais pas strictement décroissant:
27 19 19 10 3
6 4 2 2 2
9 9 9 9
Aucune de ces réponses:
1 2 3 2
10 9 8 7 12
4 6 4 4 2
Réponses:
Gelée ,
10 95 octets-Méthode trouvée par DrMcMoylex, allez donner du crédit!
TryItOnline! ou exécuter tous les tests
Retours:
-1
= monotone strictement décroissant;0
= monotone non croissant;1
= autre.Comment?
la source
M
fait partie d’une carte de caractère 8 bits? Vous ne pouvez pas dire que c'est 5 octets parce que ce n'est pas. Le CP1252 ne l’a pas par exemple.byte
dans l'en-tête de ce message.Perl 6 , 17 octets
2
1
0
Étendu:
la source
>
été commuté avecafter
et>=
avec!before
.say {[after](@_)+[!before] @_}(<d c b a>) #=> 2
MATL ,
10, 7 octetsEssayez-le en ligne! ou vérifier tous les cas de test!
3 octets sauvés, grâce à @LuisMendo!
Les sorties sont
Strictement décroissant: -1
Non croissant: 0
Autre: 1
Explication:
la source
0
au lieu de précéder le dernier plus1
? Quelque chose comme0hdX>ZS
0hdX>0/
obscurcissement comme suit : - Question pour vous et @LuisMendo: Est-il possible de tirer parti du fait que le type n’est que de 1 caractère (opposé àX>
), en utilisant implicitement la dernière valeur?S
, mais je n'ai pas trouvé le moyen de le raccourcir ...Mathematica, 22 octets
Fonction sans nom prenant une liste de nombres en entrée. Retourne
-1
si la liste est strictement décroissante,0
si elle ne diminue pas mais ne diminue pas strictement, et1
si ce n'est ni l'un ni l'autre.Algorithme assez simple: prendre les différences de paires consécutives, prendre le plus grand, et prendre le signe de ce plus grand.
(Je pense qu'il doit exister une langue dans laquelle cet algorithme est de 3 octets ....)
En ce qui concerne un tableau avec une seule entrée:
Differences
donne une liste vide;Max
d'une liste vide donne-∞
(!); etSign[-∞]
évalue à-1
(!!). Donc, cela fonctionne réellement sur ce cas de coin. Je dois aimer Mathematica parfois. (En effet, la fonction attribue également une liste strictement décroissante à une liste vide.)la source
Haskell,
403837 octetsRésultats
GT
pour monotone strictement décroissantEQ
pour monotone non croissantLT
autrecompare
compare deux nombres et renvoieGT
(EQ
,LT
) si le premier nombre est supérieur au deuxième nombre (égal à, inférieur à).zipWith compare<*>tail
compare les éléments voisins.foldl min GT
réduit la liste des résultats de la comparaison avec la fonction min en commençant par GT (note:LT
<EQ
<GT
).Edit: @xnor trouvé
2 à3 octets. Merci!la source
GT
, car nous avons besoin du minimum de la liste (j'avais le maximum, ce qui était faux et un relict d'une version antérieure où je l'utilisais à la=<<
place<*>
).foldl min GT
?Common Lisp,
43 à40 octetsCeci prend l'entrée comme une liste Lisp, et retourne
(T T)
,(NIL T)
et(NIL NIL)
distingue les 3 catégories. Ici, il tourne sur les cas de test fournis:la source
(defun f(x)(mapcar'apply'(> >=)`(,x,x)))
. Notez que vous pouvez simplement écrire(lambda(x)...)
pour être plus court.Python 2, 30 octets
-1
strictement décroissant,0
faiblement décroissant,+1
non décroissantUtiliser
cmp
pour comparer des éléments consécutifs, et prend le maximum. Pour ce faire, supprimez le premier élément d'une copie de la liste, puis mappezcmp
. Par exemple,l=[2,2,1]
donnequi a
max
0 car une égalité existe.La liste plus courte est automatiquement étendue avec
None
, ce qui est inférieur à tous les nombres et donc inoffensif. Cet élément fantôme empêche également de prendremin
une liste vide lorsque l'entrée a une longueur égale à 1.la source
Brachylog , 7 octets
Essayez-le en ligne!
Ceci imprime
1
pour décroissant strictement,0
pour non croissant etfalse.
autrement.Explication
Autres solutions 7 octets
la source
R, 44 octets
Lit l’entrée de stdin et imprime ce qui suit en fonction de l’entrée:
Sortie:
[1] FALSE TRUE
: Monotone non croissant[1] TRUE FALSE
: Monotone strictement décroissant[1] FALSE FALSE
: Aucune de ces réponsesla source
d=diff(scan());ifelse(all(d<=0),!prod(d),2)
est 1 octet plus court. Il retourne 0 si strictement monotone, 1 si monotone non croissant et 2 si rien de ce qui précède. Vous ne savez pas s'il est permis de ne rien renvoyer si rien de ce qui précède, mais vous pourriez alors simplifier davantaged=diff(scan());if(all(d<=0))!prod(d)
.d=diff(scan());if(all(d<=0))any(!d)
c'est un octet de mieux.JavaScript (ES6), 51 octets
Retourne 0 pour une diminution stricte, 1 pour une non-augmentation, 2 sinon.
la source
05AB1E ,
58 octetsBug corrigé par Emigna, merci! Il utilise la même méthode que DrMcMoylex .
Essayez-le en ligne!
La sortie est:
la source
®¸ì¥Z0.S
permettrait de résoudre le problème de l'élément unique.Ruby, 37 octets
Sortie:
[true,true]
,[true,false]
ou[false,false]
la source
Mathematica,
15 à11 octetsC'est une fonction variadique, prenant tous les entiers en entrée comme arguments séparés.
True | True
False | True
False | False
Notez que
|
n'est pasOr
maisAlternatives
qui fait partie de la syntaxe de correspondance de motif, ce qui explique pourquoi ces expressions ne sont pas évalués àTrue
,True
,False
respectivement.Le code lui-même est principalement une application de cette astuce . Par exemple,
##>0
est,Greater[##, 0]
mais##
étend ensuite à toutes les valeurs en entrée afin que nous obtenions quelque chose commeGreater[5, 3, 2, 0]
, ce qui signifie en soi5>3>2>0
.la source
Raquette , 44 octets
Invoqué:
Résultat:
la source
>
comme étant vraie. Common Lisp obtient ce droit, mais ne définit pas le cas arity 0 (ce qui devrait également être vrai).C ++ 14, 85 octets
Retourne 3 (0b11) pour une diminution stricte, 1 (0b01) pour une non-augmentation et 0 sinon.
Ungolfed:
Je pensais que c'était un problème parfait pour les expressions de pliage de C ++ 17:
Malheureusement, il n’enchaîne pas les opérateurs relationnels mais
ce qui n'était pas recherché.
la source
Python 2,
6174 octets+13 octets pour l'entrée à numéro unique
Nécessite une entrée sous forme de liste de crochets, comme
[3,2,1]
. Retourne 2 pour décroissant strict, 1 pour non croissant et 0 sinon.Ancienne solution:
la source
Python 3,
8152 octets (Merci à FryAmTheEggMan )Essayez-le en ligne!
la source
sorted(s)[::-1]
est plus court pour inverser une liste triée. En Python 3, vous pouvez{*a}
obtenir un ensemble d’éléments dea
.sorted
retourne une liste pour que vous n'ayez pas à convertir l'ensemble en liste. Ajouter des booléens est également parfaitement casher! Enfin, vous pouvez soumettre un lambda anonyme, vous n’avez donc pas besoin de le fairef=
. Je reçois 52 octets à la fin. repl.it/E7eG/2Befunge, 50 octets
Essayez-le en ligne!
Accepte l'entrée comme une séquence d'int séparées par des espaces et renvoie 0 s'il décroît strictement, 1 s'il décroît de manière non stricte, 2 sinon.
Puisque lire befunge est un peu impossible si vous ne connaissez pas la langue, voici l'algorithme en pseudocode:
* dans la mémoire befunge est une pile qui commence avec une quantité infinie de 0 dessus. pop (), push (x), input () et output (x) s'expliquent d'elles-mêmes, les autres pseudofonctions que j'ai utilisées fonctionnent de la manière suivante:
Funge!
Version précédente, seulement 41 octets mais invalide car il faut un 0 pour terminer la séquence d'entrée (ou utiliser un interpréteur comme celui-ci )
Essayez-le en ligne!
la source
0
ne compte pas comme un format d'entrée valide. Je pense que cela tombe dans la catégorie des "entrées prétraitées". En fait, certaines réponses ajoutent un0
dans le code (ce qui inclut donc celle dans le nombre d'octets). Je serais acceptable si vous pouviez Pouvez-vous remplacer le0
par un caractère non numérique? Ce serait acceptable0
inséré par le code pour traiter le cas où l'entrée n'a qu'une entrée. C'est une des raisons pour lesquelles je considère que l'inclusion de cela0
dans l'entrée n'est pas valide. Quoi qu’il en soit, si un interprète n’en a pas besoin, vous pouvez l’utiliser pour prouver que votre réponse est valable sans le0
. Si l'interprète Try-it-online a besoin de cela0
, vous pouvez l'inclure à des fins de démonstration, avec une note d'explication appropriéeJ, 14 octets
Verbe monadique prenant la liste à droite, revenant
1
pour décroissant strictement,0
pour décroissant faiblement,_1
etc.Prend le signe
*
du minimum<./
de différences consécutives2-/\
de la liste. J n’échange pas l’ordre des différences lorsqu’on les prend, par exemple, la séquence décroît strictement si elles sont toutes positives. En particulier,<./
renvoie l'infini positif sur les listes d'éléments zéro.En usage sur le REPL:
la source
C,
6867 octetsUne fonction à
f
laquelle est transmis un tableau de ints (l
) précédé de sa longueur (n
, également un int). Retourne 3 si monotone diminue strictement, 1 si monotone n'augmente pas, mais ne diminue pas strictement, 0 sinon.Légèrement non golfé pour plus de lisibilité:
Réorganisé et commenté pour montrer la logique:
Cas de test (courtoisie IDEOne ):
la source
Retina , 41 octets
Essayez-le en ligne! (La première ligne active une suite de tests séparée par saut de ligne.)
2
3
1
Explication
Convertit l'entrée unaire.
La regex ici correspond à une paire croissante de nombres consécutifs. Si tel est le cas, l'entrée ne peut manifestement pas augmenter. Le le
A
désigne comme une étape "anti-grep", ce qui signifie que la ligne d'entrée est ignorée et remplacée par la chaîne vide si l'expression régulière correspond.Il s'agit d'une étape fractionnée utilisée pour ajouter un saut de ligne à l'entrée uniquement si l'entrée n'a pas été ignorée. Nous avons donc jusqu'à présent deux résultats possibles: les entrées non croissantes reçoivent un saut de ligne à la fin et les autres sont toujours vides.
Enfin, nous comptons le nombre de correspondances de cette regex. La regex correspond soit à des nombres identiques (puis à la fin de la chaîne pour éviter plusieurs correspondances de ce type pour des entrées telles que
1 1 1 1
), soit à la "fin de l'entrée". Passons en revue les trois types d’entrées:$
correspondances. Maintenant, ce$
n'est pas exactement "la fin de la chaîne". Il peut également correspondre à un saut de ligne de fuite. Nous allons donc obtenir deux correspondances: une à la fin de l’entrée et une après le saut de ligne que nous avons inséré.$
correspond donc plus qu'une fois.la source
Axiome, 114 octets
Ungolfed
Résultats
la source
APL, 16 octets
Remarque: entrez un tableau d'éléments comme par exemple
a←1⍴3
:a←4 3 2 1
Interprétation de la sortie:
Idée: testez la monotonie en comparant le tableau d'origine au tableau trié, recherchez la non-augmentation en comparant le tableau avec les duplications supprimées.
(Et je pense que ça peut être amélioré ...)
la source
Haskell, 36 octets
(+x)
C'est parce que haskell interprète mal(-x)
comme une valeur plutôt que comme une section. Je me demande si toute cette expression peut être utilement rendue inutile.la source
LabVIEW, 12 nœuds, 18 fils ==> 48 octets par convention
Aucune fonction cachée dans les autres cas, un seul fil de travers.
la source
Ceylan, 86 octets
La fonction prend l'entrée comme ses paramètres et retourne un tuple de zéro ou une booléens -
[false]
pour Monotone strictement décroissante ,[true]
pour Monotone non croissante, mais pas strictement décroissante , et[]
pour aucune de ce qui précède .Il peut être utilisé comme ceci:
Sortie:
Une version non golfée et commentée:
la source
Clojure, 34 octets
Très simple, retourne
1
si strictement décroissant,2
sinon non croissantnil
.Aussi essayé d'éviter
apply
avec les macros,~@
mais il est juste plus long à 43 caractères (cela se traduit par[1 2 nil]
):la source
Pip , 8 octets
Programme complet. Prend la liste d'entrée en tant qu'arguments de ligne de commande. Sorties
11
strictement décroissantes,01
non croissantes,00
pour aucun.Essayez-le en ligne!
Explication
Cette approche fonctionne parce que les opérateurs de comparaison de Pip, comme Python, enchaînent:
4>3>2
true, plutôt que d'être(4>3)>2
(false) comme en C. Et le même comportement se produit lorsque les opérateurs de comparaison sont modifiés avec le$
méta-opérateur fold.la source
Japt ,
987 octetsLes sorties
-1
pour "monotone strictement décroissant",0
pour "monotone non croissant" et1
autres.L'essayer
1 octet sauvé merci à Oliver .
la source
än mg rw
renvoie les mauvais résultats sans leJ
mais ce n'est pas le cas avecän rw g
. Bizarre.R , 34 octets
Essayez-le en ligne!
La réponse MATL de Ports DJ .
R , 43 octets
Essayez-le en ligne!
Retours
2
strictement décroissants,1
non croissants et0
autres.all(x==cummin(x))
isTRUE
(convertit en1
utilisé en arithmétique) si et seulement sif
est non croissant, y compris le cas strict.all(diff(x)<0)
estTRUE
seulement quandf
est strictement décroissant.la source