Défi
Étant donné une chaîne et un nombre, divisez la chaîne en autant de parties de taille égale. Par exemple, si le nombre est 3, vous devez diviser la chaîne en 3 morceaux, quelle que soit sa longueur.
Si la longueur de la chaîne ne se divise pas également en nombre fourni, vous devez arrondir la taille de chaque pièce et renvoyer une chaîne "restante". Par exemple, si la longueur de la chaîne d'entrée est 13 et le nombre est 4, vous devez renvoyer quatre chaînes de taille 3 chacune, plus une chaîne restante de taille 1.
S'il n'y a pas de reste, vous ne pouvez tout simplement pas en renvoyer un ou renvoyer la chaîne vide.
Le nombre fourni est garanti inférieur ou égal à la longueur de la chaîne. Par exemple, l'entrée "PPCG", 7
ne se produira pas car elle "PPCG"
ne peut pas être divisée en 7 chaînes. (Je suppose que le bon résultat serait (["", "", "", "", "", "", ""], "PPCG")
. Il est plus facile de simplement refuser cela comme entrée.)
Comme d'habitude, les E / S sont flexibles. Vous pouvez renvoyer une paire de chaînes et la chaîne restante, ou une liste de chaînes avec le reste à la fin.
Cas de test
"Hello, world!", 4 -> (["Hel", "lo,", " wo", "rld"], "!") ("!" is the remainder)
"Hello, world!", 5 -> (["He", "ll", "o,", " w", "or"], "ld!")
"ABCDEFGH", 2 -> (["ABCD", "EFGH"], "") (no remainder; optional "")
"123456789", 5 -> (["1", "2", "3", "4", "5"], "6789")
"ALABAMA", 3 -> (["AL", "AB", "AM"], "A")
"1234567", 4 -> (["1", "2", "3", "4"], "567")
Notation
C'est le golf de code , donc la réponse la plus courte dans chaque langue l'emporte.
Points bonus (pas vraiment 😛) pour que votre solution utilise réellement l'opérateur de division de votre langue.
;⁹/
PPCG
,7
donc le reste estPPCG
Réponses:
Python 2 , 63 octets
Essayez-le en ligne!
la source
PHP> = 7.1, 75 octets
Cas de test
PHP> = 7.1, 52 octets
imprimer uniquement le reste
Cas de test
la source
Pip , 21 octets
20 octets de code, +1 pour l'
-n
indicateur.Prend les entrées comme arguments de ligne de commande; affiche les chaînes et le reste séparé par des sauts de ligne. Essayez-le en ligne!
Explication
Amusez-vous avec les opérations regex!
Prenons
abcdefg
comme chaîne et3
comme numéro. Nous construisons l'expression régulière(.{2})(.{2})(.{2})
, qui correspond à trois séries de deux caractères et les stockons dans trois groupes de capture. Ensuite, en utilisant les variables de correspondance d'expression régulière de Pip, nous pouvons imprimer 1) la liste des groupes de capture["ab";"cd";"ef"]
et 2) le reste de la chaîne qui n'a pas été mise en correspondance"g"
.la source
Haskell , 62 octets
#
est un opérateur prenant unString
et unInt
, et retournant une liste deString
s.Utilisé comme
"Hello, world!"#4
.Essayez-le en ligne!
Comment ça marche
s
est la chaîne d'entrée etn
le nombre de pièces non restantes.d
est la longueur de chaque pièce "normale".div
est une division entière.n+1
morceaux, le dernier étant le reste.i
itère de0
àn
, inclus.i*d
) de caractères initiaux estdrop
ped du début des
, puis une sous-chaîne initiale esttake
n du résultat.d
, sauf pour la pièce restante.n
, sinon les pièces normales seraient allongées à la place.take
renvoie la chaîne entière si la longueur donnée est trop grande, nous pouvons donc utiliser n'importe quel nombre>=n-1
pour la pièce restante.d+n*0^(n-i)
donned
sii<n
etd+n
sii==n
. Il utilise0^x
c'est1
quandx==0
, mais0
six>0
.la source
Python 2 ,
68 6765 octets[]
x[p*i:p+p*i]
asx[p*i][:p]
Essayez-le en ligne!
la source
x[p*i:p+p*i]
parx[p*i:][:p]
:p
😛 Bravo pour les autres réponses Python!C ++ 14,
209180 octetsC'est un peu trop long, mais utilise l'opérateur de division:
Usage:
Version en ligne: http://ideone.com/hbBW9u
la source
Pyth, 9 octets
Essayez-le en ligne
Comment ça marche
Le premier
Q
est automatiquement initialisé àeval(input())
etz
est automatiquement initialisé àinput()
.la source
Gelée , 11 octets
Essayez-le en ligne!
la source
Rouille , 107 octets
Essayez-le en ligne!
Formaté:
Il s'agit simplement d'
map
indexer les tranches correctes de la sourcestr
(collect
en aVec
) et de découper le reste.Malheureusement, je ne peux pas en faire une fermeture (74 octets):
comme le compilateur échoue avec
et si je fournis le type de
s:&str
, les durées de vie sont fausses:la source
Rétine , 92 octets
Essayez-le en ligne! Explication: La première étape convertit le nombre de parties en unaire et prend également la longueur de la chaîne. La deuxième étape divise ensuite la longueur par le nombre de pièces, en laissant le reste. La troisième étape multiplie à nouveau le résultat par le nombre de pièces. Cela nous donne le nombre correct de chaînes de la bonne longueur, mais elles n'ont pas encore le contenu. Le nombre de pièces peut maintenant être supprimé par la quatrième étape. La cinquième étape inverse tous les personnages. Cela a pour effet de basculer le contenu d'origine avec les chaînes d'espace réservé, mais bien qu'il soit maintenant au bon endroit, il est dans l'ordre inverse. Les espaces réservés ont atteint leur objectif et sont supprimés à la sixième étape. Enfin, la septième étape remet les personnages dans leur ordre d'origine.
la source
Perl 6 , 36 octets
Essayez-le en ligne!
Renvoie une liste de listes de chaînes, où le dernier élément est le reste (s'il y en a un).
Explication:
la source
JavaScript (ES6), 77 octets
Renvoie un tableau de deux éléments: les parties de chaîne divisées et la partie restante.
Extrait de test
la source
Japt , 18 octets
Testez-le en ligne! (utilise un
-Q
indicateur pour visualiser la sortie)Explication
la source
Python,
827674 octetsEh bien, on dirait que cela donne droit aux points bonus. Puis-je recevoir un cookie à la place? Oh, attends, ils ne sont pas réels? Zut...
Essayez-le en ligne!
la source
len(h)
? :)Python,
95, 87, 7673 octetsEssayez-le en ligne!
la source
05AB1E , 12 octets
Essayez-le en ligne!
Explication
la source
Brachylog , 16 octets
Essayez-le en ligne!
Prend les entrées sous forme de liste
[string, number]
et les sorties sous forme de liste[remainder, parts]
. (Les virgules ont été remplacées par des points-virgules dans les cas de test "Bonjour, monde!" Pour plus de clarté, car les fragments de chaîne ne sont pas imprimés avec des guillemets.)(J'ai également remplacé une virgule dans le code par un point-virgule pour un format de sortie cohérent. Avec la virgule , les cas sans reste produiraient simplement les parties sans reste vide, et aussi agréable que cela soit à certaines fins, je ne le fais pas sais vraiment pourquoi ça marche comme ça ...)
Après que cela soit devenu un total de 16 octets, j'ai essayé de faire quelque chose basé sur le
+₁ᵗ⟨ġl⟩
travail, mais comme les correctifs devenaient de plus en plus longs, j'ai décidé que je resterais avec ma solution d'origine pour l'instant.la source
C (gcc), 72 octets
Essayez-le en ligne
la source
Formule Excel,
185173165161 161149 octetsLes éléments suivants doivent être saisis sous forme de formule matricielle ( Ctrl+ Shift+ Enter):
Où
A1
contient votre entrée (par exemple12345678
) etB1
contient le diviseur. Cela utilise également l'opérateur de division d'Excel pour un bonus.Après avoir entré la formule en tant que formule matricielle, mettez-la en surbrillance dans la barre de formule et évaluez-la en utilisant F9pour renvoyer le résultat, par exemple:
-12 octets: remplacez chacun
INDIRECT("1:"&B1+1)
parOFFSET(A1,,,B1+1)
pour économiser 2 octets par occurrence, plus un certain nettoyage supprimant les crochets redondants.-8 octets: supprime la
INDEX
fonction redondante .-4 octets: retravailler la gestion du "reste".
-12 octets: supprime la redondance
INT(LEN(A1)/B1)
en décalant le tableau généréROW(OFFSET(A1,,,B1+1))
par -1.la source
Python 2 ,
7776 octets-1 octet grâce à musicman523.
Essayez-le en ligne!
la source
Ruby, 53 bytes
Try it online!
la source
Mathematica, 58 bytes
Pure function taking a list of characters and a positive integer as input. For example, the last test case is called by
and returns:
la source
Haskell,
12088 bytes (thanks to Ørjan Johansen!)Does
div
count as the division operator?I am curious how I could cut this down, I haven't learned all the tricks yet.
la source
t=splitAt;x!s|n<-div(length s)x,let g""=[];g s|(f,r)<-t n s=f:g r,(a,b)<-t(n*x)s=(g a,b)
. So, (1) A repeatedly used identifier may be abbreviated, especially if it's long. (2) Guards and pattern guards are almost always shorter thanlet
...in
,where
andif
then
else
. (3) Pattern matching is often better than equality testing. (OK, thatlet
in a pattern guard isn't that basic, I recently learned it from someone else here.) And check out codegolf.stackexchange.com/questions/19255/… .let
in the guard is pretty devious. But shorter code is more readable, right?Ohm, 3 bytes (non-competing?)
Non competing because the built-in isn't implemented yet in TIO and i have no PC handy to test whether it works in the latest pull in the repo.
Built-in ¯\\_(ツ)_/¯. I used the wrong built-in... But hey there is still an other one laying around.Now I used the wrong built-in two times (or one built-in works wrong with remainders).Do I get bonus points because
v
is (floor) division?la source
Hello, world!
5
testcase is wrong. Try it online!CJam, 16 bytes
Anonymous block expecting the arguments on the stack and leaves the result on the stack after.
Try it online!
Explanation
Expects arguments as
number "string"
.la source
J, 26 bytes
Apart from elminating spaces and intermediate steps, this hasn't been golfed. I expect that I've taken the long way somehow, what with my parentheses and argument references (
[
and]
).See Jupyter notebook for test cases, such as the following:
la source
R,
7963 bytes-16 from Giuseppe fixing the indexing
Try it online!
Built around giving vector inputs to
substring()
la source
PHP, 152 bytes
Thanks @JörgHülsermann (brackets tip!)
Try it online!
la source
preg_replace
is an alternative or you can use[,$s,$d]=$argv;print_r(array_slice(str_split($s,$l=strlen($s)/$d^0),0,$d)+[$d=>substr($s,$l*$d)]);
A
in the first runPython 3, 94 bytes
Try it online!
la source
PowerShell v3+,
72, 80 bytesAssumes
$s
contains the input string;$n
contains the number of characters per "piece". This also assumes that "StrictMode" is off. Otherwise, an error would be returned because of indexing further into an array than actually exists (i.e. if array has 4 elements and i call the non-existent 5th element). With StrictMode off, PS doesn't care and it'll ignore the error.Using notation
($s|% ToCharA*)
i was able to save 1 character compared to$s.ToCharArray()
: )Update:
Updated code to actually satisfy challenges requirements. Again assumes
$s
contains the input string; however, this time$n
contains the number of "pieces". The remainder is printed out last. And i used PowerShell's division operatorTry it online!
la source