Définition et règles
Un tableau golfy est un tableau d'entiers, où chaque élément est supérieur ou égal à la moyenne arithmétique de tous les éléments précédents. Votre tâche consiste à déterminer si un tableau d'entiers positifs donnés en entrée est golfique ou non.
Vous n'avez pas besoin de gérer la liste vide.
Vous pouvez choisir deux valeurs non vides distinctes. Ils doivent être cohérents et conformes à toutes les autres règles de décision . C'est le code-golf , le code le plus court dans chaque langue gagne!
Cas de test et exemple
Par exemple, le tableau suivant:
[1, 4, 3, 8, 6]
Est un tableau de golf, car chaque terme est supérieur à la moyenne arithmétique de ceux qui le précèdent. Étudions-le étape par étape:
Nombre -> Éléments précédents -> Moyenne -> Suit la règle? 1 -> [] -> 0,0 -> 1 ≥ 0,0 (vrai) 4 -> [1] -> 1.0 -> 4 ≥ 1.0 (Vrai) 3 -> [1, 4] -> 2,5 -> 3 ≥ 2,5 (Vrai) 8 -> [1, 4, 3] -> 2. (6) -> 8 ≥ 2. (6) (Vrai) 6 -> [1, 4, 3, 8] -> 4.0 -> 6 ≥ 4.0 (Vrai)
Tous les éléments respectent la condition, il s'agit donc d'un tableau de golf. Notez qu'aux fins de ce défi, nous supposerons que la moyenne d'une liste vide ( []
) est 0
.
Plus de cas de test:
Entrée -> Sortie [3] -> Vrai [2, 12] -> Vrai [1, 4, 3, 8, 6] -> Vrai [1, 2, 3, 4, 5] -> Vrai [6, 6, 6, 6, 6] -> Vrai [3, 2] -> Faux [4, 5, 6, 4] -> Faux [4, 2, 1, 5, 7] -> Faux [45, 45, 46, 43] -> Faux [32, 9, 15, 19, 10] -> Faux
Notez que ce Puzzle 1 de CodeGolf-Hackathon et est également affiché sur Anarchy Golf (que l' on est cassé) - Quote par histocrat , mais je suis l'auteur original sur les deux sites, et donc permis de les rediffuser ici.
Réponses:
Python 2 , 37 octets
Essayez-le en ligne!
Sorties via le code de sortie: se bloque (code de sortie 1) pour les tableaux golfy, quitte simplement avec le code de sortie 0 pour les tableaux non golfy. ovs et Jonathan Frech ont économisé 3 octets.
Python 2 , 44 octets
Essayez-le en ligne!
Une variante plus traditionnelle, qui revient
True
pour les tableaux de golf, sinonFalse
. Jonathan Frech a enregistré 2 octets.la source
a==[]or
possiblea and
.sum(a)<=len(a)*a.pop()*[]
pour le cas de base, ce qui est toujours vraiint < list
!Gelée ,
65 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
ÆmƤµ⁼Ṣ
JavaScript (ES6),
3332 octetsLe code fonctionne également sur les valeurs négatives telles que
[-3, -2]
. Renvoiefalse
pour un tableau golfy,true
pour d'autres tableaux. Edit: enregistré 1 octet grâce à @JustinMariner.la source
!
puisque la spécification ne demande que deux valeurs différentes, donc retournerfalse
quand c'est un tableau golfy est très bien.Wolfram Language (Mathematica) , 35 octets
Essayez-le en ligne!
Sorties
False
pour les tableaux de golf etTrue
autres.la source
MATL ,
98 octetsSorties
0
pour les tableaux de golf,1
sinon.Essayez-le en ligne!
Explication
Tenez compte des commentaires
[1, 4, 3, 8, 6]
.la source
Haskell ,
535048 octetsEssayez-le en ligne!
Edit: -3 octets grâce à Zgarb!
Explication
La version sans point ci-dessus est équivalente au programme suivant:
Compte tenu d' une entrée
s=[1,4,3,8,6]
,scanl1(+)s
calcule les sommes préfixe[1,5,8,16,22]
etzipWith(*)[1..](tail s)
laisse tomber le premier élément et se multiplie tous les autres éléments avec leur indice:[4,6,24,24]
. La liste est désormais golfique si par paire les sommes de préfixe sont plus petites ou égales à l'index des éléments, ce qui peut être vérifié en zippant les deux listes avec(<=)
et en vérifiant que tous les résultats sontTrue
avecand
.la source
C # (Visual C # Compiler) , 71 + 18 = 89 octets
18 octets supplémentaires pour
using System.Linq;
Essayez-le en ligne!
la source
using System.Linq;
ce serait en fait 89 octets, parfois exprimés en "71 + 18 = 89" pour montrer que 18 octets sont requis mais ne font pas partie de la solution tout en ayant toujours le décompte final comme dernier chiffre de la ligne de titre ( ce qui est utile pour certains analyseurs automatiques).APL (Dyalog) , 10 octets
Il s'agit d'une fonction de préfixe tacite anonyme (appelée train monadique en termes APL).
Essayez tous les cas de test sur TIO!
Est-ce
∧/
tout à fait vrai que⊢
les éléments≥
sont supérieurs ou égaux à+\
les sommes cumulées÷
divisé par⍳
les nombres entiers de 1 à∘
le≢
nombre d'éléments?
la source
∘
lie les choses de la même manière que "le" se lie entre "compter les chats". Cela s'appelle vraiment Compose .C (gcc) ,
626062 octetsb=
).Essayez-le en ligne!
la source
05AB1E , 5 octets
Essayez-le en ligne!
Une aide considérable de Dennis et Adnan est parvenue à cette version réduite. Un bug a également été corrigé pour rendre cela possible, merci encore à vous tous. Je prends peu de crédit pour cette réponse.
05AB1E , 10 octets
Essayez-le en ligne!
Long carDgsO/
est l'équivalent de "moyenne" dans 05AB1E.Apparemment,
ÅA
c'est la moyenne arithmétique.la source
+\÷J
(diviser la somme cumulée par des indices) dans Jelly. N'est-ce pas si facile dans 05AB1E? Edit: Nevermind.ü+
qu'il n'y a vraiment pas de divie par des indices autres queg
pour obtenir la longueur du tableau,L
pour pousser1,2,...,n
et diviser pour obtenir la moyenne, qui est toujours essentiellement de 5 octets..S_
est un LONG chemin à parcourir<=
, si quelqu'un a des idées lmk.÷W
au lieu deü.S_P
?ÅA
,ηÅA÷W
fonctionne donc maintenant.APL (Dyalog) , 15 octets
Essayez-le en ligne!
Comment?
la source
PowerShell , 60 octets
Essayez-le en ligne!
Prend l'entrée comme un tableau littéral (par exemple,
@(1, 4, 3, 8, 6)
) dans$a
. Définit notre$o
variable de sortie sur1
. Boucle ensuite à travers$a
. À chaque itération, nous utilisons (ab) la conversion implicite de PowerShell pour*=
le résultat d'une comparaison booléenne par rapport à notre$o
résultat. Le booléen est de savoir si la valeur actuelle$_
est plus-g
élevée quee
qual ou les termes précédents$a[0..$i++]
additionnés ensemble (-join'+'|iex
) divisé par le nombre de termes que nous avons déjà vus$i
. Donc, si une étape sur le chemin est fausse, elle$o
sera multipliée par0
. Sinon, il restera1
tout au long.Nous plaçons ensuite simplement
$o
sur le pipeline et la sortie est implicite.1
pour véridique et0
pour falsey.la source
Perl 5, 27 +2 (-ap) octets
Essayez-le en ligne
la source
C # (.NET Core) , 74 octets
Essayez-le en ligne!
Renvoie 0 pour faux et 1 pour vrai.
Réponse de 3 octets de plus que le noyau des chryslovelaces . Mais au total plusieurs octets plus courts car ma variante n'a besoin d'aucune instruction.
using
la source
Cubix , 35 octets
Essayez-le en ligne!
Pas l'utilisation la plus efficace de l'espace (6 no-ops dans le code) Ne produit aucune sortie pour un tableau golfy,
1
pour un tableau non golfy.Se développe dans le cube suivant:
Explication à venir, mais elle contient essentiellement quelque chose comme la réponse MATL de Luis Mendo ou la réponse Julia de Dennis .
Regardez-le courir!
la source
Matlab et Octave,
4136 octets5 octets enregistrés thx à Luis Mendo
Essayez-le en ligne!
la source
a
est nul. Mais c'est une astuce néanmoins utile dans des situations similaires, gardez cela à l'esprit.SQL (MySQL), 68 octets
Essayez-le en ligne!
Renvoie 1 pour les tableaux golfy et 0 sinon. Prend entrée d'une table nommée ,
t
. Pour créert
, exécutez:et pour charger les valeurs:
la source
Rubis , 30 octets
Essayez-le en ligne!
Inspiré par la réponse de Lynn . Lancers francs
NoMethodError
pour Golfy, retournenil
autrement.la source
Python 2 , 52 octets
Essayez-le en ligne!
Python 2 ,
50484442 octetsand
.S=k=0
.or
et la valeur booléenne de la comparaison commek
incrémentation.NameError
en utilisant une variable non définie au lieu d'unZeroDivisionError
.Essayez-le en ligne!
la source
q / kdb + , 14 octets
Solution:
Exemples:
Explication:
Assez simple avec le
avgs
intégré:la source
Julia 0,6 , 29 octets
Renvoie faux ou vrai .
Essayez-le en ligne!
la source
R ,
3834 octetsEssayez-le en ligne!
la source
y
dans les arguments de la fonction, utilisercumsum(x)
directement est de 4 octets plus court. C'est dommagecummean
n'existe pas en base R.Ajouter ++ , 54 octets
Essayez-le en ligne!
Version non originale, 30 octets
Essayez-le en ligne!
Les deux sorties 1 pour les tableaux de golf et 0 sinon
Comment ils travaillent
La première version a été créée par mes soins, sans vérifier aucune autre solution. Le second a été inspiré par le commentaire de Dennis , donc je suis moins content.
La première version
Ici, nous définissons notre fonction principaleF qui calcule le golfe de notre tableau d'entrée,UNE . Tout d'abord, nous devons fournir les suffixes deUNE , ce qui se fait en générant d'abord la plage B : = [ 1 , . . . | A | ] , où | A | dénote la longueur de UNE . Cela se fait avec le code [ B , A ] comme la pile. On itère ensuite la fonction dyadiqueg sur ces deux listes. Étant dyadique, la fonction lie son argument de gauche commeUNE pour chaque élément itéré. Il itère ensuite sur la plageB , dont chaque élément de B étant le bon argument fourni à g . g est défini comme
dbLR$
, qui laissequi est une fonction dyadique (ie prend2 arguments), et pousse ses arguments dans la pile dans l'ordre inverse ( UNE et e ∈ x . This leaves the stack as [...A,e] , where ... represents an array splat. Finally, e elements of A and returns a list containing those elements.
#
) avant l'exécution.BF
aplatit ensuite les deux arguments. Nous supposerons que les arguments sontB
takes the firstNote : The function namesg and k aren't chosen randomly. If the commands given to an operator (such as 2 bytes, as normally the function would have to wrapped in
€
) doesn't currently have a function (whichg
andk
don't), then the named functions are searched for a matching function. This saves{...}
to be recognised as a user-defined function. At the time of writing, the currently unused single byte commands areI
,K
,U
,Y
,Z
,g
,k
,l
,u
andw
.Wheng is applied over the elements of a range x , this returns a list of prefixes for A . We then map our second helper function k over each of these prefixes. k is defined as
which is the standard implementation of the arithmetic mean.C .
¦+
calculates the sum of the argument,AbL
calculates its length, then/
divides the sum by the length. This calculates the arithmetic mean of each prefix, yielding a new array,Unfortunately,C contains the mean of A as its final element, and does not include the mean of the empty list, 0 . Therefore, we would have to remove the final element, and prepend a 0 , but popping can be skipped, saving two bytes, for reasons explained in a second. Instead, we push [0] underneath C with C+ .
0b]$
, then concatenate the two arrays forming a new array,Now, we need to check each element as being less than its corresponding element inA . We push A once again and zip the two arrays together with C+ when creating the pairs.
ABcB]
. This is the reason we don't need to pop the final element:Bc
is implemented with Python'szip
function, which truncates the longer arrays to fit the length of the shortest array. Here, this removes the final element ofFinally, we starmapp∈A,q∈C+;p<q≡¬(p≥q) over each pair p,q to obtain an array of all 0 s if the array is golfy, and array containing at least a single 1 if otherwise. We then check that all elements are falsey i.e. are equal to 0 with
ª!
and return that value.The second version
This takes advantage of Dennis' approach to remove24 bytes, by eliminating the helper functions. Given our input array of A , we first compute the cumulative sums with [A0,A0+A1,A0+A1+A2,...,A0+...+Ai] . We then generate Jelly's equivalent of B:=[1...|A|] where |A| once again means the length of the array.
¬+
, i.e the array created fromJ
(indicies), by calculating the rangeNext, we divide each element inA by the corresponding index in B with 0 with C+ , defined as
BcB/
and prepend@0@B]
. This results in a new array,The final part is identical to the first version: we push and zipA with C+ , then starmap inequality over each pair before asserting that all elements in the resulting array were falsy.
la source
Pyth,
1110 bytes-1 byte thanks to Mr. Xcoder
Try it online!
la source
SI.OM._
(port of cairdcoinheringaahing's solution from Jelly, by Erik the Outgolfer), or 10 bytes using your approach:.A.egb.O<Q
Java (OpenJDK 8), 96 bytes
I know it's not a good golfing language, but I still gave it a go!
Input array as first argument of comma separated ints to test.
Returns 1 for true, 0 for false.
Try it online!
la source
Java 7, 100 bytes
Golfed:
Ungolfed:
Try it online
Returns 0 for ungolfy and 1 for golfy arrays. Slightly longer than java 8 answer.
la source
PHP, 44 bytes
takes input from command line arguments, exits with
0
(ok) for a golfy array, with1
else.Run with
-nr
or try it online.la source
J, 19 bytes
+/\ % #\
averages of the prefixes:#\
produces 1..n}:0,
add 0 to the beginning and remove the last[>:
is the original list element by element >= to the shifted list of averages?*/
are all the elements greater, ie, the previous list is all1
s?Try it online!
la source
AWK, 39 bytes
Try it online!
Note that the TIO link has 5 extra bytes
i=s=0
to allow for multi-line input.la source
Japt, 10 bytes
Came up with two 10 byte solutions, can't seem to improve on that.
Try it
Explanation
Alternative
Try it
la source