Vous devriez écrire un programme ou une fonction qui donne une liste d’entiers positifs multipliant chaque élément avec le plus petit entier positif possible pour créer une liste strictement croissante.
Par exemple, si l'entrée est
5 4 12 1 3
les multiplications seront
5*1=5 4*2=8 12*1=12 1*13=13 3*5=15
et la sortie sera la liste croissante
5 8 12 13 15
Contribution
- Une liste d'entiers positifs contenant au moins 1 élément
Sortie
- Une liste d'entiers positifs
Exemples
9 => 9
1 2 => 1 2
2 1 => 2 3
7 3 => 7 9
1 1 1 1 => 1 2 3 4
5 4 12 1 3 => 5 8 12 13 15
3 3 3 8 16 => 3 6 9 16 32
6 5 4 3 2 1 => 6 10 12 15 16 17
9 4 6 6 5 78 12 88 => 9 12 18 24 25 78 84 88
8 9 41 5 12 3 5 6 => 8 9 41 45 48 51 55 60
15 8 12 47 22 15 4 66 72 15 3 4 => 15 16 24 47 66 75 76 132 144 150 153 156
Il s’agit d’un code de golf, de sorte que le programme ou la fonction le plus court gagne.
Fait amusant: le dernier élément de la sortie pour l'entrée N, N-1, ... ,1
semble être l' (N+1)th
élément de la séquence A007952 . Si vous trouvez une preuve, vous êtes invité à l'inclure dans votre réponse au golf ou à la poster en tant que commentaire.
code-golf
math
number
arithmetic
randomra
la source
la source
Réponses:
Gelée ,
6 à5 octetsPremière réponse Jelly
avant que @Dennis se réveille et me batte.Essayez-le en ligne!Explication
Merci à @Dennis pour -1 octet.
la source
:‘×µ\
enregistre un octet.JavaScript (ES6), 28
modifier Comme suggéré par @Patrick Roberts,
p
peut être un paramètre non initialisé. Même nombre d'octets mais éviter d'utiliser une variable globaleTESTER
la source
f=a=>a.map(n=>a+=n-a%n,a=0)
. Mais ce n'est pas mon algorithme (idiot moi) donc je vais garder le mien tel quel et le vote vers le hautPython 2,
6764 octetsCommencez par essayer le code-golf, les conseils sont donc appréciés.
la source
print l
au lieu dereturn l
sauvegarder un autre octet. Bon travail!PHP,
55464241 octetsUtilise le codage ISO 8859-1.
Courez comme ceci (
-d
ajouté pour l'esthétique seulement):~ß
pour donner un espace.la source
$a+0
par+$a
. En outre, vous pouvez supposer que l’entrée n’aura jamais de valeur0
, vous pouvez donc$a+0&&print
simplement remplacer votre par+$a&print
. En fait, vous pourriez même le faire$a&print
, car en PHP"0" == 0 == 0.0 == false
. Mais cela ne sera peut-être pas nécessaire si vous utilisez simplement unecho
, je pense.and
ne fonctionnera pas (contrairement à la logique), et écho ne fonctionnera pas de cette façon. Étant donné que je prends des informations de la CLI, le premier argument est celui-
que je veux comprendre au lieu d’imprimer un zéro. Essayezphp -r 'print_r($argv);' foo
. Enregistré 1 octet avec votre première suggestion cependant, thx.for(;$a=$argv[++$i];)echo$l+=$a-$l%$a,' ';
vous Il a une longueur de 42 octets et ignore le premier élément.a^A
, mais cela produirait trop d'avertissements (les avertissements sont ignorables). Cela ne changera en rien le nombre de tiers, mais il semblera que ce sera différent.Haskell (
302825 octets)Version élargie
Explication
scanl1
vous permet de plier une liste et d’accumuler toutes les valeurs intermédiaires dans une autre liste. C'est une spécialisation descanl
, qui a le type suivant:Par conséquent, tout ce dont nous avons besoin est une fonction appropriée prenant à la fois le dernier élément de notre liste (
acc
dans la version étendue) et celui que nous souhaitons traiter (next
dans la version étendue) et renvoyer un nombre approprié.Nous pouvons facilement déduire ce nombre en divisant l'accumulateur par le suivant et en recouvrant le résultat.
div
prend soin de cela. Ensuite, nous devons simplement ajouter1
pour nous assurer que la liste augmente réellement (et que nous ne finissons pas avec0
).la source
( ... )
avec par$ ...
et je pense que vous avez compté une nouvelle ligne qui peut être omise:,scanl1$\x y->y*div x y+y
24 octets.(...)
vs$
, car$\
est analysé en tant qu'opérateur et j'aurais besoin d'un espace après$
.scanl1(...)
est une fonction non nommée. En ce qui concerne$
vs()
: vous avez raison, mon erreur.C ++,
636057 octetsFonctionne sur place étant donné une plage
[first, last)
. Initialement écrit en tant que variante de modèle, mais c'était plus long:Version étendue
la source
CJam, 13 octets
Entrée sous forme de liste de style CJam. La sortie est séparée par un saut de ligne.
Testez-le ici.
Explication
La valeur finale est laissée sur la pile et imprimée automatiquement à la fin.
la source
Mathematica,
3632 octetsTester
la source
Perl, 17 + 3 = 20 octets
Requiert
-p
et-l
drapeaux:Explication:
la source
Python (3.5),
6362 octetsTester
Solution précédente
des solutions récursives mais plus grandes
la source
r+=[…]
, vous pouvez utiliserr+=…,
r=[0]
dans le paramètre par défautr
deviennent non locauxBrachylog , 12 octets
Assez bizarre pour essayer de multiplier chaque variable par un nombre commencera par essayer de multiplier par 2 et non par 0 ou 1. Cela semble fonctionner bien et bat les deux autres implémentations de Brachylog
Explication
Essayez-le en ligne!
la source
Brachylog , 54 octets
Explication
la source
Pyth, 11
Suite de tests
Est-ce qu'une réduction cumulative, une réduction qui renvoie toutes les valeurs intermédiaires, en commençant par
0
. Comme il est garanti que l'entrée ne contient que des entiers positifs, c'est bon. À chaque étape, nous prenons l'ancienne valeur, nous la divisons par la nouvelle valeur et ajoutons1
, puis nous multiplions par la nouvelle valeur.la source
C, 79 octets
Ungolfed
la source
p=p/x*x+x
marcherait pas ?PowerShell, 26 octets
Prend les entrées sous forme de tableau explicite, par exemple
> .\sort-by-multiplying.ps1 @(6,5,4,3,2,1)
via$args[0]
.Ensuite, nous bouclons dessus avec
|%{...}
et chaque itération effectue de la magie . Nah, je plaisante, nous utilisons le même truc modulo que d'autres réponses (accessoires à @aross parce que je l'ai repéré ici en premier).Les parenthèses encapsulantes
(...)
garantissent que le résultat de l'opération mathématique est placé sur le pipeline, et ainsi généré. Si nous les laissions désactivés, rien ne serait sorti puisque la$l
variable est nettoyée une fois l'exécution terminée.Exemple
la source
Japt, 11 octets
Testez-le en ligne!
Comment ça marche
la source
05AB1E , 11 octets
Code:
Essayez-le en ligne!
Explication:
Utilise le codage CP-1252.
la source
Minkolang 0,15 , 17 octets
Essayez-le ici!
Explication
Essentiellement, le registre conserve le dernier membre de la liste ascendante. Cette dernière est divisée par l'entrée et incrémentée pour obtenir le multiplicateur du prochain membre. La fonction toroïdal des moyens de champ de code de Minkolang que les boucles horizontalement sans avoir besoin de
()
ou des[]
boucles.la source
Brachylog , 21 octets
Essayez-le en ligne!
Utilise la somme des valeurs d'entrée comme limite supérieure pour les coefficients C. Assez lentement, la temporisation sur TIO pour les longueurs de liste en entrée supérieures à 5 ou 6 (également en fonction de la somme des valeurs). Mais pas aussi lentement que ma version d'origine, qui nécessite de minuscules listes de 3 éléments maximum, avec des valeurs infimes, pour ne pas expirer:
21 octets
Essayez-le en ligne!
la source
C (gcc) , 37 octets
Essayez-le en ligne!
la source
Python 2 , 53 octets
Essayez-le en ligne!
k*x>y
impliquek>y/x
; donc le plus petitk
peut être estk=floor(y/x)+1
. Depuis Python 2.7, la division entière est déjà prise commefloor
, nous voulonsk=y/x+1
, etk*x = (y/x+1)*x = y/x*x+x
.la source
Oracle SQL 11.2, 210 octets
Non-golfé
la source
Chez Scheme (140 Bytes)
Version Golfée:
Version non-golfée:
Essayez-le en ligne!
la source
* m(car l)
peut être*(car l)m
.K (oK) , 11 octets
Essayez-le en ligne!
la source