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 decompressavec les spécifications suivantes:
* Ne pas utiliser dans le code de production, probablement.
compress
compressprend deux chaînes dans n'importe quel format pratique et les chevauche autant que possible. C'est-à-dire qu'une chaîne sde 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
decompresscalcule 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' compressexemples)
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 compressest c=abcdet que le code de decompressest 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
compressetdecompressdoit 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. compressetdecompressdevrait ê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éfinircompressetdecompress.- Les indices peuvent être indexés à zéro ou à un.
- Vos programmes ou fonctions n'ont pas besoin d'être nommés
compressetdecompress.