Inspiré par cette question de nos amis rivaux à Code Review.
Définitions
Un super tableau est un tableau dans lequel chaque nouvel élément du tableau est plus grand que la somme de tous les éléments précédents. {2, 3, 6, 13}
est un super tableau parce que
3 > 2
6 > 3 + 2 (5)
13 > 6 + 3 + 2 (11)
{2, 3, 5, 11}
n'est pas un super tableau, car
3 > 2
5 == 3 + 2
11 > 5 + 3 + 2
Un tableau duper est un tableau dans lequel chaque nouvel élément du tableau est plus grand que le produit de tous les éléments précédents. {2, 3, 7, 43, 1856}
est un super tableau, mais c’est aussi un tableau duper puisque
3 > 2
7 > 3 * 2 (6)
43 > 7 * 3 * 2 (42)
1856 > 43 * 7 * 3 * 2 (1806)
Le défi
Ecrivez une fonction ou un programme qui prend un tableau en entrée dans le format de liste natif de votre langue et qui détermine l’extension du tableau. Vous pouvez également éventuellement prendre une entrée de longueur de tableau (pour des langages tels que C / C ++). En outre, vous pouvez supposer que tous les nombres de la liste seront des entiers supérieurs à 0. Si c'est un super tableau, vous devez imprimer It's a super array!
S'il s'agit d'un tableau super duper , vous devez imprimer It's a super duper array!
Il est également possible qu'un tableau soit duper- non-super. Par exemple, {1, 2, 3}
dans ce cas, vous devez imprimer It's a duper array!
Si le tableau n'est ni super ni duper, vous pouvez imprimer une valeur falsy.
Comme d'habitude, c'est du code golf, donc les échappatoires standard s'appliquent, et la réponse la plus courte en octets l'emporte.
la source
{1, 2, 3}
tableau?2 * 1
à égaler3
ma tête.super[space][space]array
c'est permis.Réponses:
Gelée ,
47454̷4̷ 42 octetsCeci affiche une chaîne vide (falsy) pour les tableaux qui ne sont ni super, ni duper. Essayez-le en ligne!
Comment ça marche
la source
JavaScript (ES6),
111110 octetsSauvegardé d'un octet grâce à @ETHproductions !
Explication
Prend un tableau de nombres, retourne une chaîne ou le nombre
0
pour faux.Tester
Afficher l'extrait de code
la source
s+=s&&n>s&&n,d*=d&&n>d&&n
s
doit être fait de cette façon car il doit être réglé surfalse
ifn>s
, maisd*false
a le même effet pour que l'on fonctionne. Merci!Java,
183182 octetsJ'ai fait les hypothèses suivantes:
""
est une valeur de fausseté.Si certains d'entre eux sont faux, s'il vous plaît dites-le moi.
Quoi qu'il en soit, je ne peux pas m'empêcher de penser que j'aurais trop abusé de la quantité de variables.
Edit: a réussi à sauvegarder un octet, grâce à @UndefinedFunction
la source
boolean s=true
pourboolean s=1<2
?MATL , 66 octets
Utilise la version actuelle (10.0.3) , qui est antérieure à ce défi.
L'entrée est de stdin. Si ce n'est pas super ou duper, la sortie est vide (ce qui est falsey).
EDIT (7 Avril, 2016) : en raison de changements dans la version 16.0.0 de la langue,
5L
et6L
doivent être remplacés par3L
et4L
cotininurie. Le lien vers le compilateur en ligne inclut ces modifications.Essayez-le en ligne !
Explication
la source
C ++ 14,
178, ..., 161157 octetsJe ne peux pas penser à un moyen de le rendre plus court.On dirait qu'il y a toujours de la place pour de l'amélioration!Mise à jour 1 : je suis tout pour le code sécurisé, mais prendre un tableau brut et sa taille en tant qu'arguments de fonction a 9 octets de moins que de prendre un vecteur :(
Mise à jour 2: renvoie maintenant une chaîne vide sous forme de valeur fausse, au coût de 8 octets.
Mise à jour 3: Retour à 165 octets, grâce au commentaire de CompuChip.
Mise à jour 4: Un autre commentaire de CompuChip, encore 4 octets désactivés.
Mise à jour 5: utiliser
auto
au lieu destring
avec une autre suggestion de CompuChip supprime 4 octets supplémentaires du code.Programme complet non testé avec cas de test:
Sortie:
la source
It's a array!
est une vérité ( preuve ) selon notre définition sur Meta .if ... >=
comparaisons de longueur : je pense que celae=r>s?e:0
équivaut àif(r<=s)e=0
.for(s=p=*a;--n;s+=r,p*=r)r=*++a
travail? Vous permettrait de laisser tomberi
toutC, 150 octets
Chaque entrée est terminée par un
0
. Test principal:Bonus si on nous autorise un format de sortie plus compact, nous pouvons le réduire à 107 octets :
Dans ce cas,
Z
retournez3
pour superduper,2
pour super,1
pour duper et0
pour aucun.la source
Pyth -
5452 octetsLa partie de formatage de chaîne peut probablement être jouée au golf, mais j'aime bien l'approche de test super-duper.
Suite de test .
la source
c2"superduper"
peut être golfé à+R"uper""sd"
lang-pyth
n'existe pas.Python 3, 127
5 octets sauvés grâce à FryAmTheEggman.
Solution assez basique pour le moment, rien de trop sophistiqué. Il suffit d'exécuter un total cumulé de la somme et du produit et de vérifier chaque élément.
Voici les cas de test au cas où quelqu'un d'autre voudrait essayer de battre mon score.
la source
AWK - 140 octets
Pour ceux qui ne connaissent pas AWK, les enregistrements sont automatiquement analysés en lignes basées sur des variables
RS
et les lignes sont automatiquement analysés en champs basés sur des variablesFS
. Les variables non affectées sont également des "" qui, une fois ajoutés à #, agissent comme un 0. LaBEGIN
section est appelée une seule fois, avant que tous les enregistrements / champs soient analysés. Le reste de la langue est assez semblable à C, chaque bloc de code correspondant étant appliqué à chaque enregistrement. Voir http://www.gnu.org/software/gawk/manual/gawk.html#Getting-Started pour plus de détails.Exemple d'exécution où
'code'
est comme ci-dessus:echo 1 2 6 | 'code'
Peut également placer un tableau dans un fichier nommé Nom de fichier et s'exécuter en tant que:
'code' Filename
Si le code doit être exécuté souvent, il peut être placé dans un fichier de script exécutable. Ceci enlèverait la clôture
' '
et laawk
commande serait placée en haut du fichier en tant que:#!/bin/awk -f
la source
It's a array!
pour les tableaux qui ne sont ni super, ni duper, ce qui est une chaîne de vérité selon notre définition sur Meta .echo 1 2 6 | <the above code>
PHP,
144...113112 OctetsExplication:
Sans registre globals ce serait ceci (118 octets):
$a
(rendements de conversion de tableau en chaîneArray
)$p
à 1, augmentant ainsi le coût de revient du produit.la source
$a
. Vous n'avez pas à vous soucier des avis et des choses - simplement les ignorer sur ce site.$argv[1]
est une bonne alternative. Cela dit, le défi est très vague en ce qui concerne les formats d'entrée et de sortie. Mais vous pourriez être pénalisé pour d’autres défis avec cette approche. Et coder en dur l’entrée n’est en fait pas acceptable - bien que quelques exceptions le permettent. Je sais que lire des textes coûte très cher en PHP, c'est pourquoi j'ai posé une question similaire sur Meta à ce sujet .register_globals
, mais je vais écrire à la place les futurs golfs. Pourquoi oh pourquoi short_closures a-t-il été rejeté?R , 115 octets
Essayez-le en ligne!
Valeur faussée:
It's a array!
Rien d’extraordinaire à part utiliser peut-êtresapply
une liste de fonctions.la source
Scala, 172 octets
Ungolfed (bien qu'il n'y ait pas beaucoup de travail à faire):
la source
Haskell, 136 octets
f
est la fonction requise. Notez que la somme vide est 0 et le produit vide est 1, raison pour laquelle[0]
n'est ni super ni duper.s
capture la structure commune de test super ou duper en prenant un opérateur arbitraireo
et un élément neutre arbitrairet
. Lafoldr
trace des nuplets(s,b)
oùs
est le résultat du chaînage de tous les éléments vus avec l'opérateuro
etb
indique si, pour chaque élément examiné jusqu'à présent, cet élément était plus grand que la somme / le produit précédemment calculé.La sortie ne joue pas beaucoup au golf et je vous en serais reconnaissant si quelqu'un donnait une meilleure idée!
Version légèrement plus lisible:
la source
05AB1E ,
5351 octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir ici pour une explication de la façon dont
.•dwā•
est "duper" et comment„¦È!
est "tableau!".la source
Gelée , 37 octets
Essayez-le en ligne!
Programme complet.
J'ai eu l'
Z…P
idée de la réponse (ancienne) de Dennis.la source