Tout le monde sait ce qu'est le codage de longueur. Il a déjà fait l'objet de nombreux défis de code-golf. Nous allons examiner une certaine variation.
Exemple
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322
Le nombre entre parenthèses indique le nombre de fois où le symbole précédent s'est produit. Dans l'exemple, seules des séries de 5 caractères ou plus ont été encodées. Cela est dû au fait que l'encodage de 4 séquences ou moins n'améliore pas le nombre de caractères.
Défi
Écrivez une fonction / un programme qui implémente cette variation de codage de longueur d'exécution, mais peut également coder des séries de deux symboles. Les séquences de deux symboles doivent également être placées entre parenthèses. Un groupe sera également mis entre parenthèses. Votre programme doit accepter une chaîne en entrée et produire la chaîne modifiée avec des modifications qui raccourcissent la chaîne.
Exemple
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
Remarques
111
n'a pas été encodé car l'encodage (1(3)
) n'est pas plus court.- La chaîne
444111
se produit 3 fois, elle est donc codée. 676767
n'a pas été encodé car il((67)(4))
est plus long qu'avant.222222277777222222277777
n'était pas codé comme((222222277777)(2))
. Pourquoi? Parce que222222277777
lui-même peut être réduit à2(7)7(5)
.123123123123
n'est pas codé car votre programme est censé gérer des séries de deux symboles, pas trois.
C'est le code-golf donc le code le plus court gagne. Le bris d'égalité est une soumission anticipée.
Si j'ai raté quelque chose ou si vous n'êtes sûr de rien, veuillez m'en informer dans les commentaires.
67
s.441444144414
->((4414)(3))
?4414
est techniquement une série de 4. Ma formulation est tout simplement mauvaise.111111111
être codé comme(1)(9)
?Réponses:
Rétine, 162 octets
Essayez-le en ligne!
la source
10101010100100100100100
, la sortie est((10)(5))0((100)(4))
, mais((10)(4))((100)(5))
serait un caractère plus court.