Uno de los paradigmas de programación menos conocidos que parece más adecuado para el golf de código es la programación orientada a la superposición (OOP) *. Al escribir código parcialmente idéntico, se pueden guardar muchos bytes simplemente superponiendo las partes idénticas y recordando de alguna manera dónde comienzan las dos líneas de código originales. Su tarea es escribir dos programas o funciones superpuestoscompress
y decompress
con la siguiente especificación:
* No usar en código de producción, probablemente.
compress
compress
toma dos cadenas en cualquier formato conveniente y las superpone tanto como sea posible. Es una cadena s
con una longitud mínima que se devuelve de manera que ambas cadenas de entrada son subcadenas de s
. Además, se devuelve alguna salida que identifica los índices de inicio y finalización de ambas cadenas.
Ejemplos: (El formato IO exacto depende de usted)
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
calcula la función inversa de compress
, que se le da una cadena y dos índices de inicio y fin (en el formato en el que los devuelve compress
), devuelve las dos cadenas originales. Solo necesita manejar entradas válidas. El siguiente igualdad debe mantener para todas las cadenas s1
, s2
:
(s1, s2) == decompress (compress (s1, s2))
Ejemplos: (inversos de compress
ejemplos)
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"
Tanteo
Su puntaje es el tamaño de la cadena devuelta al llamar compress("<code of compress>", "<code of decompress>")
. Como se trata de código de golf, una puntuación más baja es mejor.
Ejemplo:
Suponga que el código para su función compress
es c=abcd
y el código para decompress
es d=efghi
. Luego, los compress("c=abcd", "d=efghi")
rendimientos "c=abcd=efghi"
(y los índices, pero no afectan la puntuación), entonces la puntuación es length "c=abcd=efghi" = 12
.
Reglas Adicionales
- En el espíritu de este desafío, tu
compress
ydecompress
debes superponerse en al menos un personaje. Puede lograr esto de manera trivial agregando un comentario, pero tenga en cuenta que hacerlo aumentará su puntaje y puede haber soluciones más cortas usando un código inherentemente superpuesto. compress
ydecompress
debería poder manejar cadenas que contengan caracteres ASCII imprimibles, así como todos los caracteres que utilizó para definircompress
ydecompress
.- Los índices pueden estar indexados a cero o uno.
- Sus programas o funciones no tienen que ser nombrados
compress
ydecompress
.