iBug a récemment obtenu une longue barre en matériaux composites, mais précieux. La barre est si longue qu'iBug ne peut pas facilement la vendre pour des crédits, donc il veut la couper. La barre est faite de matériaux si fragiles et magiques que, si une pièce est cassée, toutes les parties de la barre faites du même matériau se briseront également, ce qui rendra difficile la coupe arbitraire.
iBug veut couper la barre en autant de morceaux que possible. Il aime également les programmes très courts et le golf de code, il a donc fait une analyse abstraite de son problème.
La barre magique d'iBug est représentée sous la forme d'une chaîne (ou d'un tableau ou d'une séquence de caractères si vous préférez), comme ceci:
aaabbccccccbbbaaacccccaabbbaaaaa
Chaque lettre de la chaîne représente un matériau magique. La barre correspond toujours au RegEx ^\w*$
, il peut donc y avoir jusqu'à 63 matériaux dans la barre. Une "partie" est une séquence consécutive de tous les caractères qui ne sont pas séparés par des espaces.
iBug veut que vous écriviez un programme qui calcule le maximum de parties qu'il pourrait obtenir, si zéro ou plusieurs jeux de caractères sont complètement supprimés (remplacés par des espaces), et dites à iBug ce nombre.
Exemple 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Description: S'il b
est complètement retiré de la barre, iBug pourrait obtenir 4 parties. Il peut également obtenir 4 parties en retirant b
et c
, comme indiqué ci-dessous
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
Et c'est le nombre maximum de pièces que iBug peut obtenir de cette barre
Exemple 2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Description: en supprimant uniquement le trait de soulignement, iBug peut obtenir 6 parties de la barre et c'est le maximum.
Exemple 3:
In: __________
Out: 1
Description: Quoi? Tu veux couper ça? Il n'est possible d'obtenir 1 partie que si vous ne la coupez pas du tout.
Exemple 4:
In:
Out: 0
Description: Il n'y a rien à couper, donc zéro.
Il y a aussi quelques règles auxquelles iBug veut que les programmes obéissent:
iBug n'aime pas les failles standard et elles sont interdites.
Tant qu'il fonctionne, il n'est pas nécessaire que ce soit un programme complet. Une fonction qui prend l'entrée d'un paramètre et donne une sortie via une valeur de retour est également acceptée.
Les entrées et sorties flexibles sont autorisées. Votre programme ou fonction peut prendre une chaîne, un tableau de caractères ou tout ce que vous trouvez le plus facile à gérer. Vous pouvez donner la sortie en imprimant le numéro ou en le renvoyant.
Exemples de cas de test (mais sans s'y limiter)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Puisqu'il s'agit d'un code-golf , le programme le plus court (en octets) dans chaque langue gagne!
Supplémentaire
iBug apprécie grandement si vous pouvez fournir une explication pour votre programme, même si cela n'affecte pas votre score (il est toujours en octets).
123456789
donne 5? Et commentaaabcccdedaaabefda
donne 6? J'obtiens respectivement 2 et 4 pour ces deux cas de test.2468
, pour le second, supprimezbd
.2,4,6,8
du premier etb,d,f
du second.Réponses:
Haskell ,
73 7170 octetsMerci à Laikoni d' avoir économisé 1 octet!
Essayez-le en ligne!
la source
maximum$(length$words x):
peut être raccourcimaximum$length(words x):
.JavaScript (ES6),
10990 octetsUn peu lent sur le
123456789
cas de test. La réponse précédente de 109 octets ne se limitait pas à!/\s/
:la source
Python 2 ,
1119372 octets-21 octets merci Kirill L.
Essayez-le en ligne!
la source
Gelée ,
1311 octetsTrop d'instructions 2 octets-2 grâce à Zgarb (utilisez le produit externe rapidement
þ
>. <)Un lien monadique acceptant une liste de caractères et renvoyant un entier non négatif.
Essayez-le en ligne!
Comment?
Pour chaque sous-séquence de l'entrée (les ensembles que nous pouvons supprimer, plus les équivalents redondants) obtient une liste d'existence pour identifier ceux qui sont supprimés, puis trouve efficacement le nombre de séries de zéros restant et donne le maximum. La dernière partie fonctionne de manière un peu étrange depuis que je l'ai trouvé plus golfeur que des alternatives plus naïves - elle trouve les pistes par
[element, count]
paires, nie pour identifier les zéros comme des uns, les sommes trouvent le maximum puis prennent la tête (la somme des éléments plutôt que des comptes) ).la source
€Đ€
possibleþ
.Rubis ,
98 89 75 6461 octetsEssayez-le en ligne!
plus petit et plus lent qu'auparavant!
Fondamentalement, un portage de la réponse Javascript de @ Neil
Non golfé et annoté
Essayez-le en ligne!
la source
Husk ,
1211 octetsEssayez-le en ligne! Cela fonctionne par force brute et est assez lent. Ajoutez
u
à l'extrémité droite pour le faire fonctionner plus rapidement, sans changer la sémantique.Explication
la source
Perl 5 , (versions plus anciennes),
-p -I.
,524943 octetsComptage à l'ancienne:
+3
pour-p
:46
octets (car il doit être dans un programme, il ne peut pas être exécuté en utilisant-e
)barsplit.pl
:Exécutez avec la chaîne sur STDIN:
Essayez-le en ligne!
L'
-I.
option est là pour que cela fonctionne également sur les perles récentes où, par défaut, il.
n'y en a plus@INC
. Dans les anciennes versions de perl, cette option n'est pas nécessaire. J'ai testé cela sur une machine plus ancienne qui en avait encoreperl 5.20
, donc le score est basé sur cela (sinon je devrais aussi compter l'.
argument-I
)Version rapide (
49
octets):la source
Wolfram Language (Mathematica) , 77 octets
Essayez-le en ligne!
la source