Dans ce défi simple, vous obtenez un tableau d'entrée L
d'entiers non négatifs et un nombre de cases b
supérieur à 0 mais pas plus que la longueur de L
. Votre code doit renvoyer un nouveau tableau M
dont la longueur est b
et qui a regroupé le tableau L
. Ceci est expliqué plus facilement avec des exemples.
L = [1,0,5,1]
et b = 2
retourne M = [1,6]
.
L = [0,3,7,2,5,1]
et b = 3
retourne M = [3,9,6]
.
Jusqu'à présent, si simple. Cependant, dans cette question b
ne doit pas nécessairement diviser len(L)
. Dans ce cas, le dernier bac aura juste moins de numéros à composer.
Chaque bac, sauf éventuellement le dernier, doit avoir le même nombre de chiffres contribuant à son total. Le dernier bac ne doit pas avoir plus de numéros qui y contribuent que les autres bacs. Le dernier bac doit avoir autant de numéros qui y contribuent que possible sous réserve des autres règles.
L = [0,3,7,2,5,1]
et b = 4
retourne M = [3,9,6,0]
. M = [10,8,0,0]
n'est pas une sortie acceptable car le troisième bac n'a pas le nombre de nombres qui y contribuent en tant que bacs 1
et 2
.
L = [0,3,7,2,5]
et b = 2
retourne M = [10,7]
. M = [3, 14]
n'est pas une sortie acceptable car le dernier bin aura des 3
éléments qui y contribueront mais le premier n'en aura que 2
.
L = [1,1,1,1,1,1,1]
et b = 3
retourne M = [3,3,1]
.
En règle générale, votre code doit s'exécuter en temps linéaire.
Vous pouvez utiliser n'importe quelle langue ou bibliothèque que vous aimez et pouvez supposer que l'entrée est fournie de la manière qui vous convient.
Il s'avère que certaines entrées ne peuvent pas être résolues. Par exemple [1,1,1,1,1]
et b=4
. Votre code peut sortir ce qu'il veut pour ces entrées.
your code must run in linear time
- Je trouverais tout algorithme qui ne suit pas cela naturellement assez bizarreRéponses:
APL (Dyalog) , 19 octets
Essayez-le en ligne!
Nous ajoutons b zéros au tableau avant de le remodeler en parties égales de
⌈⍺÷⍨≢⍵
( ⌈ longueur de L ÷ b ⌉ ) et de les additionner, comme illustré dans,⍺⍴0
, car toute quantité de taches vides (qui ne font pas partie du tableau d'origine) plus grande que b - 1 serait rempli d'au moins b - 1 éléments d'autres morceaux, ce qui fait que le point d'équilibrage du dernier groupe à b - 1 maximum diffère du reste. Nous utilisons b> b - 1 car il s'agit du code golf.Par exemple, L avec 15 éléments et b = 3 ne serait pas groupé comme
mais plutôt comme (notez comment les 2
x
s les plus à droite "remplissent" les zéros les plus à gauche)tandis qu'un tableau de 16 éléments serait rempli de 2 ( 3 - 1 ) espaces vides, comme
la source
Python 2 , 65 octets
Essayez-le en ligne!
la source
R ,
75717063 octetsEssayez-le en ligne!
Ce tampon
L
avecNA
jusqu'à ce que la longueur soit un multiple deb
, puis prend les sommes des colonnesL
comme une matrice avec desb
colonnes, supprimant lesNA
valeurs.Expliquant comme un langage basé sur la pile:
la source
function(L,b)colSums(matrix("length<-"(L,ceiling(length(L)/b)*b),,b),T)
no bytes saved for less readability
est probablement la devise du golf R ... bien que je suppose quesum(L|1)
c'est un octet sauvélength(L)
!MATL , 6 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Pensez à l' entrée
4
, à[0,3,7,2,5,1]
titre d'exemple.la source
Rubis ,
5453 octetsUn octet enregistré grâce à @Kirill L.
Essayez-le en ligne!
la source
[0]*b
par1..b
C (gcc) , 107 octets
Essayez-le en ligne!
la source
Haskell , 61 octets
Essayez-le en ligne!
la source
[1, 2, 3, 4, 5, 6] # 3
.Java 10,
968986 octetsEssayez-le en ligne ici .
J'ai trouvé un moyen plus court d'écrire
i/(n/b+(n%b==0?0:1)
ici:i/((n+b-1)/b)
Merci à Olivier Grégoire pour avoir joué au golf 3 octets.
Version non golfée:
la source
Elixir , 98 octets
Essayez-le en ligne!
Le meilleur Elixir est de se diviser en parties d'une longueur de n . Et il ne peut pas très bien plafonner la division comme entier, donc nous faisons la division flottante, arrondissons-la. Malheureusement, la seule façon de le faire se traduit par un flottant, donc nous l'arrondissons à nouveau à un entier.
la source
Perl 6 ,
52 5150 octets52 octets: testez-le
51 octets: testez-le
50 octets: essayez-le
47 octets non concurrents Testez-le
C'est non concurrentiel car il
».sum
est permis de faire les calculs en parallèle. Il peut donc ou non être en temps linéaire.Étendu:
la source
Fusain , 22 octets
Essayez-le en ligne!Le lien est vers la version détaillée du code. Explication:
Contribution
b
.Contribution
L
.Appuyez
0
surL
jusqu'à ce queL
la longueur de soit divisible parb
.Divisez
L
la longueur deb
et divisez-laL
en sections de cette longueur, puis additionnez chaque section et transformez-la en chaîne pour une sortie implicite sur des lignes distinctes.la source
JavaScript (Node.js) , 71 octets
Essayez-le en ligne!
la source
C (clang) , 58 octets
Essayez-le en ligne!
f()
prend les paramètres comme suit::L
pointeur vers le tableau d'entréel
: longueur du tableau d'entréeb
: nombre de casesm
: pointeur sur le tampon qui reçoit le nouveau tableauVoici une version rentrante @ 60 octets:
la source
PHP, 88 octets
fonction anonyme, prend un tableau et un entier, retourne un tableau
Le potentiel de golf que cela avait été de remplacer
ceil(count($a)/$b))
avec(count($a)-1)/$b+1
et abrégeant(count($a)-1)
avec~-count($a)
. Le flottant résultant est implicitement converti en entier dans l'array_chunk
appel.Essayez-le en ligne .
la source