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 decompressdengan spesifikasi berikut:
* Jangan gunakan dalam kode produksi, mungkin.
compress
compressmengambil dua string dalam format apa pun yang nyaman dan tumpang tindih sebanyak mungkin. Itu adalah string sdengan 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
decompressmenghitung 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 compresscontoh)
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 compressadalah c=abcddan kode untuk decompressadalah 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
compressdandecompressharus 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. compressdandecompressharus dapat menangani string yang berisi karakter ASCII yang dapat dicetak serta semua karakter yang Anda gunakan untuk mendefinisikancompressdandecompress.- Indeks bisa nol atau satu diindeks.
- Program atau fungsi Anda tidak harus benar-benar diberi nama
compressdandecompress.