L'un des paradigmes de programmation les moins connus qui semble plutôt approprié pour le golf de code est Overlapping Oriented Programming (OOP) *. Lors de l'écriture de code partiellement identique, de nombreux octets peuvent être enregistrés en chevauchant simplement les parties identiques et en se souvenant d'une manière où les deux lignes de code d'origine commencent. Votre tâche consiste à écrire deux programmes ou fonctions qui se chevauchentcompress
et decompress
avec les spécifications suivantes:
* Ne pas utiliser dans le code de production, probablement.
compress
compress
prend deux chaînes dans n'importe quel format pratique et les chevauche autant que possible. C'est-à-dire qu'une chaîne s
de longueur minimale est renvoyée de telle sorte que les deux chaînes d'entrée sont des sous-chaînes de s
. De plus, une sortie identifiant les indices de début et de fin des deux chaînes est renvoyée.
Exemples: (Le format IO exact dépend de vous)
compress("abcd", "deab") -> "deabcd" ((2,5),(0,3))
compress("abcd", "bc") -> "abcd" ((0,3),(1,2))
compress("abc", "def") -> "abcdef" ((0,2),(3,5)) or "defabc" ((3,5),(0,2))
decompress
decompress
calcule la fonction inverse de compress
, qui est donnée une chaîne et deux indices de début et de fin (dans le format dans lequel ils sont retournés par votre compress
), renvoyer les deux chaînes d'origine. Vous n'avez besoin que de gérer des entrées valides. L'égalité suivante devrait tenir toutes les chaînes s1
, s2
:
(s1, s2) == decompress (compress (s1, s2))
Exemples: (inverses d' compress
exemples)
decompress "deabcd" ((2,5),(0,3)) -> "abcd" "deab"
decompress "abcd" ((0,3),(1,2)) -> "abcd" "bc"
decompress "abcdef" ((0,2),(3,5)) -> "abc" "def"
or (whichever version your "compress" generates)
decompress "defabc" ((3,5),(0,2)) -> "abc" "def"
Notation
Votre score est la taille de la chaîne retournée en appelant compress("<code of compress>", "<code of decompress>")
. Comme il s'agit de code-golf, un score inférieur est meilleur.
Exemple:
Supposons que le code de votre fonction compress
est c=abcd
et que le code de decompress
est d=efghi
. Ensuite, les compress("c=abcd", "d=efghi")
rendements "c=abcd=efghi"
(et les indices, mais ceux-ci n'affectent pas le score), le score est donc length "c=abcd=efghi" = 12
.
Règles supplémentaires
- Dans l'esprit de ce défi, votre
compress
etdecompress
doit se chevaucher dans au moins un caractère. Vous pouvez y parvenir de manière triviale en ajoutant un commentaire, mais notez que cela augmentera votre score et il pourrait y avoir des solutions plus courtes utilisant du code se chevauchant intrinsèquement. compress
etdecompress
devrait être capable de gérer les chaînes contenant tous les caractères ASCII imprimables ainsi que tous les caractères que vous avez utilisés pour définircompress
etdecompress
.- Les indices peuvent être indexés à zéro ou à un.
- Vos programmes ou fonctions n'ont pas besoin d'être nommés
compress
etdecompress
.