Avec un tableau d'entiers positifs non vide, "l'incrémente" une fois comme suit:
Si tous les éléments du tableau sont égaux, ajoutez a
1
à la fin du tableau. Par exemple:[1] -> [1, 1] [2] -> [2, 1] [1, 1] -> [1, 1, 1] [3, 3, 3, 3, 3] -> [3, 3, 3, 3, 3, 1]
Sinon, incrémente le premier élément du tableau qui correspond à la valeur minimale du tableau. Par exemple:
[1, 2] -> [2, 2] [2, 1] -> [2, 2] [3, 1, 1] -> [3, 2, 1] -> [3, 2, 2] -> [3, 3, 2] -> [3, 3, 3] [3, 4, 9, 3] -> [4, 4, 9, 3] -> [4, 4, 9, 4] -> [5, 4, 9, 4] -> [5, 5, 9, 4] -> ...
(Chacun ->
représente un incrément, ce que tout votre programme doit faire.)
Affiche le tableau incrémenté résultant.
Le code le plus court en octets gagne.
code-golf
number
arithmetic
array-manipulation
integer
Les passe-temps de Calvin
la source
la source
Réponses:
Gelée ,
87 octetsEssayez-le en ligne! ou vérifier tous les cas de test .
Comment ça marche
la source
Python 3,
62535150 octetsFonction qui modifie la liste qui lui est transmise ( autorisée par la méta ).
Essayez repl.it!
-9 octets, grâce à Lynn pour avoir remarqué que, comme le tableau sera composé d'entiers positifs, je peux ajouter «0» à la fin du tableau et l'incrémenter.
Un merci spécial à mbomb007 pour jouer au golf
len(set(a))
àlen({*a})
, et Dennis pour l'astuce! Floordivla source
len({*L})<2
rechercher si tous les éléments d’une liste sont égaux.a+=1//len({*a})*[0]
devrait sauver un octet.JavaScript (ES6), 61 octets
Sortie en modifiant son argument . Je ne trouve pas de moyen de déterminer si un tableau ne contient qu'un seul élément sur moins de 17 octets, mais les suggestions sont les bienvenues.
Extrait de test
Afficher l'extrait de code
Autres tentatives
Voici quelques manières alternatives de décider si le tableau a plusieurs entrées uniques:
Les deux
some
peuvent également être remplacésfind
..sort
serait plus court pour trouver le minimum, si le tri par défaut n'était pas lexicographique (pourquoi, JS, pourquoi?):J'ai essayé la récursivité pour trouver le minimum, mais cela s'est avéré bien plus long:
Et voici une solution basée sur les chaînes de caractères qui semblait être une bonne idée au début: (l'entrée est donnée sous forme de tableau dans une chaîne, par exemple
"[1,2,3]"
)la source
Mathematica,
705755 octetsLa quasi-totalité de l’amélioration est due à Martin Ender, qui m’attaque aux approches du filtrage! JHM a également proposé essentiellement la même solution à peu près au même moment. (le nombre d'octets utilise l'encodage ASCII)
Définit une fonction
±
prenant un argument de liste. Si cet argument de liste contient un certain nombre de copies du même élément (détecté parx_..
et nommép
), alors exportez la liste avec un1
ajout. Sinon, si cet argument de liste a un élément spécialy
(x
zéro ou plusieurs éléments avanty
, et aprèsz
zéroy
), qui est au plus le minimum des autres éléments, affichez la liste avec cet élémenty
incrémenté. Tout élément de l'élément minimum de la liste sera associéy
, mais heureusement, Mathematica choisit le premier sur lequel agir.la source
±
est un caractère de 2 octets, votre code est long de 59 octets. De plus, il doit y avoir un espace entrex_
et..
parce que Mathematica interprètex_..
commex_. .
(ce qui jette des erreurs). De plus, la forme infixe deMin
(x~Min~z
) rendrait ces 2 octets plus courts (ce qui rend cette solution identique à l'une des miennes: p ...). Welp, vous pouvez prendre le crédit car mon édition était postérieure à la vôtre ....±
dans UTF-8 ( Mathematica utilise UTF-8 par défaut; try$CharacterEncoding
) est un caractère à deux octets (U + 00B1).±
.$CharacterEncoding
mis à ceWindowsANSI
qui est CP1252 (qui est suffisamment compatible avec la norme ISO 8859-1 pour±
et·
d'être utilisable pour un seul octet).C ++ 14,
178 176 174 155 142135 octetssoumission
invocation
non-golfé
C'est la première fois que je joue au golf, l'aide est la bienvenue.
EDIT: oublié de mentionner que vous devez le compiler avec au moins
-std=c++11
-std=c++14
EDIT2: J'ai réalisé que je peux laisser de l'espace dans l'inclus
#include <list>
EDIT3: sauvegardé deux octets supplémentaires en les remplaçant
l.begin()
parbegin(l)
EDIT4: enregistré 19 (!) Octets supplémentaires grâce à @Quentin (voir son commentaire)
EDIT5: Quentin a supprimé 13 octets de plus, merci!
EDIT6: comme le fait remarquer TuukkaX, les fonctions / lambdas non nommés sont suffisants, je supprime donc le
auto i=
dans le bytecountla source
#include
lignes.auto i=[](auto&l){...};
) enregistre un octet (plus si nous comptons le type de retour que vous avez oublié;)), utiliser^
au lieu de==
et échanger les opérandes en enregistre un autre.std::list
Les itérateurs de sont desstd::
classes, vous pouvez donc vous échapperstd::
des deuxstd::count
etstd::min_element
grâce à ADL (-10).l.front()
est aussi*b
(-7). Je me retrouve avec un 120 octetsauto i=[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?void(++*find(b,e,*min_element(b,e))):l.push_back(1);};
:)std::min_element
états qui renvoie le premier élément le plus petit,find()
est donc superflue, c'est-à-dire 11 octets. Dans les conditions, l'utilisation d'une paire de parenthèses et de l'opérateur de virgule pour contraindre l'expression correcte àint
est plus courte que la conversion de l'extrême gauche survoid
2 octets. Cela mène àauto i=[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);};
, 142 octets :)05AB1E ,
212016 octetsSauvegardé 4 octets grâce à Adnan .
Essayez-le en ligne!
Explication
la source
DÙgi0¸«}ÐWksgÝQ+
marche aussi.ÝQ
aveck
. Merci!Scratch,
2534 blocs +76 octetsPrend l'entrée comme un tableau prédéfini d'entiers. Notez que les tableaux sont indexés 1 dans Scratch.
En Python, cela ressemblerait à: (Notez que contrairement à Scratch, Python est indexé sur 0)
la source
J,
2522 octetsÉvalue à un verbe anonyme. Essayez-le en ligne!
Explication
la source
MATL , 16 octets
Essayez-le en ligne! Ou vérifier tous les cas de test
Comment ça marche
la source
Mathematica, 56 octets
Utilise la fonction nommée
±
. Utilise le codage ISO8859-1Solutions alternatives (58 octets)
Usage
la source
Haskell,
71 7062 octets@Zgarb a enregistré 8 octets, merci!
Quand j'ai commencé, j'espérais une élégante ruse qui consiste à nouer les nœuds, mais le chemin de @ Zgarb est tout aussi incroyable.
la source
f(a:b)|(x,y:z)<-span=<<(<).minimum$a:b++[0|all(a==)b]=x++y+1:z
(->)r
, ce qui est appliqué à un type est(->)r a = r->a
. Ensuite, à partir des typesreturn:: a->r->a
et de(>>=)::(r->a)->(a->r->b)->(r->b)
leur mise en œuvre (est-ce que j'ose le dire?):return=const
Etm>>=f = \r->f(m r)r
. Ce dernier est exactement ce qui est nécessaire pour exprimer quelque chose commespan(predicate_depending_on l)l
enl
ne mentionnant qu’une fois. Maintenant, je dois seulement m'en souvenir quand j'en ai besoin.C #,
1231211207977 octetsModifie l'argument transmis à la fonction.
Merci à Cyoce d' avoir économisé 3 octets! ->
!Any
toAll
,+=1
to++
.Merci à TheLethalCoder d' avoir économisé 43 octets! -> Code de signature de méthode supprimé. Suppression des parenthèses autour de la liste de paramètres.
la source
!l.Any(o=>o!=l[0]))
parl.All(o=>o==l[0])
?Any
placeAll
et j'étais dans la pensée que ça ne marche pas: D Merci!++
?Action<List<int>>
using
s nécessaires avec C #, donc je ne crois pas qu'il soit légal de les déposerusing System.Linq
. À moins que je ne voie une déclaration explicite disant que cela n'est pas nécessaire, je vais rester sur ce sujet. Merci pour la suggestion cependant! :)Perl 6 , 46 octets
(modifie le tableau d'entrée et le renvoie)
Étendu:
la source
Gelée, 9 octets
Merci à Dennis pour les -2 octets.
Le corps doit comporter au moins 30 caractères. tu es entré ... .
la source
Mathematica,
53 octets57 octets59 octetsla source
〚
et〛
sont des caractères de 3 octets. En outre, votre code ne fonctionne pas car une{##,1}
partie implique que l'entrée est un entier séparé (c'est-à-diref[1, 2, 3]
) mais lax=#
partie implique que l'entrée est unList
(c'est-à-diref[{1, 2, 3}]
). Une solution rapide serait de changerx=#
pourx={#}
et accepter les entiers premières en entrée, ce qui rend votre code 59 octets.Equal@#
, même si#==##
c'est plus court.R ,
72 6665 octetsEssayez-le en ligne!
L'incrément est fait en utilisant
which.min
qui retourne la première correspondance."[<-"
permet de remplacer la valeur et renvoie le vecteur modifié en un appel de fonction.-7 octets grâce à Giuseppe!
la source
!=
par-
!Ruby, 46 octets
Je pense qu'il existe un meilleur moyen de vérifier si tous les éléments sont identiques que
a.uniq.size<2
, mais je suis trop paresseux pour le trouver.la source
a.uniq[1]
sera la vérité ssi il y a des valeurs distinctes.a[a.index(a.min)]
ena[a.index a.min]
Octave,
696764 octetsEn réalité, il était plus court d’en faire une fonction nommée complète que d’utiliser les deux
input
méthodesdisp
.3 octets sauvés grâce à Luis.
Ancienne réponse, n'utilisant pas de fonction:
la source
R, 97 octets
Dommage que le synthax
x=+1
n'existe pas dans R!Ungolfed:
la source
TI-Basic, 53 octets
la source
Matlab,
83,77, 71 octetsJe suis relativement nouveau dans le code de golf alors soyez gentil! J'ai essayé d'utiliser des fonctions anonymes mais googler indique que vous ne pouvez pas utiliser les instructions / else et que matlab n'a pas d'opérateur ternaire, c'est donc ce que j'ai le mieux pu faire.
Edit: Correction et raccourci (deux fois!) Grâce à stewie-griffin.
la source
sum(a)/length(a)==a(1)
ne garantit pas que tous les éléments sont égaux, cela montre seulement que la moyenne est égale àa(1)
. Une façon plus simple de faire cela seraitmean(a)==a(1)
.numel
est un octet plus court quelength
, mais puisque vous savez que toutes les valeurs sont positives, vous pouvez utilisernnz
ce qui est encore plus court (cela ne donnerait toujours pas le résultat correct dans ce défi, mais il est au moins plus court: P). Si vous prenez l'min(a)
appel en face de la boucle, vous pouvez utiliser les deux sorties et vérifier que lesall
élémentsa
sont égaux àmin(a)
.~nnz(a(a~=a(1)))
est simplement~nnz(a-a(1))
. En outre, vous n'avez pas besoin des parenthèses.if ~nnz(a-a(1));a=[a,1];else[~,I]=min(a);a(I)=a(I)+1;end
. Cela devrait être plus court de 5 octets (note: je ne l’ai pas testé).range(a)
place dennz(a-a(1))
a
est égal à la valeur la plus basse de ce vecteur. Un vecteura = [3 4 6]
en résulteratrue
, et un vecteura = [4 4 6]
en résulterafalse
. Je ne pense pas que cela sera utile ici ...?Clojure,
112100 octetsmin-key
Retourne malheureusement le dernier index du plus petit index, pas le premier. Cela fonctionne pour les entrées entières et les tableaux plus courts que 10 ^ 9 éléments;)Éditer: Définir une fonction anonyme en utilisant à la
(apply = a)
place de(= 1(count(set a)))
.Original:
Une solution moins fastidieuse de 134 octets inverse le vecteur avant de le mettre à jour, puis l'inverse à nouveau:
la source
Java 8, 85 + 38 = 123 octets
Vide lambda prenant un
List<Integer>
(la sortie est une entrée mutée). Le nombre d'octets comprend lambda et l'importation requise.Essayez-le en ligne
Cela ressemble presque à Python avec ces importations de méthodes ...
la source
MATLAB,
6653 octetsSortie:
Initialiser:
Pistes successives:
la source
@(x) …
.SmileBASIC 3, 101 octets
Définit une fonction d'instruction
I A
oùA
est notre tableau entier de nombres. La sortie est obtenue en modifiant l'entrée (les tableaux étant des références).la source
BREAK
parM=0
, carA
ne pouvant pas contenir0
,M==A[C]
il ne sera jamais vrai.SmileBASIC, 77 octets
la source
Pyth, 16 octets
Un programme qui prend l'entrée d'une liste et imprime le résultat.
Suite de tests
Comment ça marche
la source
Haskell, 93 octets
f z|and$(==)<$>z<*>z=z++[1]|1>0=z#minimum z where(x:z)#m|x==m=x+1:z;(x:z)#m|1>0=x:z#m;[]#_=[]
Ungolfed:
La première tentative tentera de trouver quelque chose de plus sophistiqué plus tard.
la source
where
?Merveille , 44 octets
Ce n'est pas ce que j'avais en tête quand j'ai créé ce langage ... C'est littéralement pire que Perl en termes de lisibilité!
Usage:
Explication
Plus lisible:
Vérifie en gros si supprimer un élément du sous-ensemble unique de l'argument rend la liste vide. Si ce n'est pas le cas, nous incrémentons le minimum du tableau. Sinon, nous concaténons simplement 1 à l'argument.
la source
Kotlin, 75 octets
Modifie l'argument de la fonction.
Bon sang vous tapant fort!
:MutableList<Int>
représente 17 octets seulement. Je ne pense pas qu'il y ait une solution où le type peut être déduit, malheureusement.la source