Salah satu paradigma pemrograman yang kurang dikenal yang tampaknya cukup pas untuk kode golf adalah Overlapping Oriented Programming (OOP) *. Saat menulis kode yang sebagian identik, banyak byte yang dapat disimpan dengan hanya menumpangtindih bagian-bagian yang identik dan mengingat dengan cara di mana dua baris kode asli dimulai. Tugas Anda adalah menulis dua program atau fungsi yang tumpang tindihcompress
dan decompress
dengan spesifikasi berikut:
* Jangan gunakan dalam kode produksi, mungkin.
compress
compress
mengambil dua string dalam format apa pun yang nyaman dan tumpang tindih sebanyak mungkin. Itu adalah string s
dengan panjang minimal dikembalikan sehingga kedua string input adalah substring dari s
. Selain itu, beberapa output yang mengidentifikasi indeks awal dan akhir dari kedua string dikembalikan.
Contoh: (Format IO yang tepat terserah Anda)
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
menghitung fungsi kebalikan dari compress
, yang diberi string dan dua indeks awal dan akhir (dalam format di mana mereka dikembalikan oleh Anda compress
), mengembalikan dua string asli. Anda hanya perlu menangani input yang valid. Kesetaraan berikut harus berlaku untuk semua string s1
, s2
:
(s1, s2) == decompress (compress (s1, s2))
Contoh: (terbalik compress
contoh)
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"
Mencetak gol
Skor Anda adalah ukuran string yang dikembalikan dengan menelepon compress("<code of compress>", "<code of decompress>")
. Karena ini adalah kode-golf, skor yang lebih rendah lebih baik.
Contoh:
Asumsikan kode untuk fungsi Anda compress
adalah c=abcd
dan kode untuk decompress
adalah d=efghi
. Kemudian compress("c=abcd", "d=efghi")
menghasilkan "c=abcd=efghi"
(dan indeks, tetapi itu tidak mempengaruhi penilaian) sehingga nilainya length "c=abcd=efghi" = 12
.
Aturan tambahan
- Dalam semangat tantangan ini, Anda
compress
dandecompress
harus tumpang tindih dalam setidaknya satu karakter. Anda mungkin mencapai ini sepele dengan menambahkan komentar, tetapi perhatikan bahwa hal itu akan meningkatkan skor Anda dan mungkin ada solusi yang lebih pendek menggunakan kode yang tumpang tindih secara inheren. compress
dandecompress
harus dapat menangani string yang berisi karakter ASCII yang dapat dicetak serta semua karakter yang Anda gunakan untuk mendefinisikancompress
dandecompress
.- Indeks bisa nol atau satu diindeks.
- Program atau fungsi Anda tidak harus benar-benar diberi nama
compress
dandecompress
.