Uno dei paradigmi di programmazione meno conosciuti che sembra piuttosto appropriato per il golf di codice è la programmazione orientata a sovrapposizione (OOP) *. Quando si scrive un codice parzialmente identico, è possibile salvare molti byte semplicemente sovrapponendo le parti identiche e ricordando in qualche modo dove iniziano le due righe di codice originali. Il tuo compito è scrivere due programmi o funzioni sovrapposticompress e decompresscon le seguenti specifiche:
* Non utilizzare nel codice di produzione, probabilmente.
compress
compressprende due stringhe in qualsiasi formato conveniente e le sovrappone il più possibile. sViene restituita una stringa di lunghezza minima in modo tale che entrambe le stringhe di input siano sottostringhe di s. Inoltre, viene restituito un output che identifica gli indici di inizio e fine di entrambe le stringhe.
Esempi: (L'esatto formato IO dipende da te)
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
decompresscalcola la funzione inversa di compress, a cui viene data una stringa e due indici di inizio e fine (nel formato in cui sono restituiti dal tuo compress), restituisce le due stringhe originali. Devi solo gestire input validi. Il seguente uguaglianza deve valere per tutte le stringhe s1, s2:
(s1, s2) == decompress (compress (s1, s2))
Esempi: (inversioni di compressesempi)
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"
punteggio
Il tuo punteggio è la dimensione della stringa restituita chiamando compress("<code of compress>", "<code of decompress>"). Dato che si tratta di code-golf, un punteggio più basso è migliore.
Esempio:
Supponiamo che il codice per la tua funzione compresssia c=abcde il codice per decompresssia d=efghi. Quindi i compress("c=abcd", "d=efghi")rendimenti "c=abcd=efghi"(e gli indici, ma quelli non influiscono sul punteggio), quindi il punteggio è length "c=abcd=efghi" = 12.
Regole aggiuntive
- Nello spirito di questa sfida, il tuo
compressedecompressdeve sovrapporsi in almeno un personaggio. Puoi ottenere ciò in modo banale aggiungendo un commento, ma nota che facendo ciò aumenterai il tuo punteggio e potrebbero esserci soluzioni più brevi usando un codice intrinsecamente sovrapposto. compressedecompressdovrebbe essere in grado di gestire stringhe contenenti caratteri ASCII stampabili e tutti i caratteri che hai usato per definirecompressedecompress.- Gli indici possono essere zero o uno-indicizzati.
- I tuoi programmi o funzioni non devono essere effettivamente nominati
compressedecompress.