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 decompress
con le seguenti specifiche:
* Non utilizzare nel codice di produzione, probabilmente.
compress
compress
prende due stringhe in qualsiasi formato conveniente e le sovrappone il più possibile. s
Viene 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
decompress
calcola 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 compress
esempi)
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 compress
sia c=abcd
e il codice per decompress
sia 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
compress
edecompress
deve 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. compress
edecompress
dovrebbe essere in grado di gestire stringhe contenenti caratteri ASCII stampabili e tutti i caratteri che hai usato per definirecompress
edecompress
.- Gli indici possono essere zero o uno-indicizzati.
- I tuoi programmi o funzioni non devono essere effettivamente nominati
compress
edecompress
.