Kod golf oynamak için uygun görünen daha az bilinen programlama paradigmalarından biri, Overlapping Oriented Programming (OOP) * dır . Kısmen özdeş kod yazarken, birçok öznitelik, özdeş bölümlerin üst üste binmesi ve iki orijinal kod satırının başladığı bir şekilde hatırlanmasıyla kaydedilebilir. Göreviniz örtüşen iki program veya işlev yazmak compressve decompressaşağıdaki özelliklere sahip olmaktır :
* Muhtemelen üretim kodunda kullanmayınız.
compress
compressHerhangi bir uygun formatta iki dizge alır ve mümkün olduğunca üst üste bindirir. Bu, sher iki giriş dizesinin de alt dizileri olacağı şekilde en az uzunlukta bir dize döndürülür s. Ayrıca, her iki dizenin başlangıç ve bitiş dizinlerini tanımlayan bazı çıktılar döndürülür.
Örnekler: (Kesin GÇ formatı size bağlıdır)
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
decompresscompressBir dize ve iki başlangıç ve bitiş indeksi verilen ters fonksiyonunu hesaplar (sizin tarafınızdan döndürüldüğü biçimde compress), iki orijinal diziyi döndürür. Sadece geçerli girişleri kullanmanız yeterli. Aşağıdaki eşitlik bütün dizeleri tutmak gerekir s1, s2:
(s1, s2) == decompress (compress (s1, s2))
Örnekler: ( compressörneklerin tersi )
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"
puanlama
Puanınız, çağrılarak döndürülen dizenin boyutudur compress("<code of compress>", "<code of decompress>"). Bu kod golf olduğu için düşük puan daha iyidir.
Örnek:
Fonksiyonun kodunu varsayalım compressolduğunu c=abcdve kod decompressDİR d=efghi. Sonra compress("c=abcd", "d=efghi")verim "c=abcd=efghi"(ve endeksler, ancak bunlar skorlamayı etkilemez) yani skor length "c=abcd=efghi" = 12.
Ek Kurallar
- Bu zorluğun ruhuna göre, sizin
compressve en az bir karakterledecompressçakışmanız gerekir . Bunu bir yorum ekleyerek başarabilirsiniz, ancak bunu yapmanın puanınızı artıracağını ve kendiliğinden çakışan kodu kullanan daha kısa çözümler olabileceğini unutmayın. compressvedecompressherhangi bir yazdırılabilir ASCII karakterleri içeren dizeleri yanı sıra tanımlamak için kullanılan tüm karakterleri işlemek mümkün olmalıdırcompressvedecompress.- Endeksler sıfır veya bir indeksli olabilir.
- Programların veya işlevlerin aslında adlandırılmaları gerekmiyor
compressvedecompress.