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 compress
ve decompress
aşağıdaki özelliklere sahip olmaktır :
* Muhtemelen üretim kodunda kullanmayınız.
compress
compress
Herhangi bir uygun formatta iki dizge alır ve mümkün olduğunca üst üste bindirir. Bu, s
her 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
decompress
compress
Bir 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 compress
olduğunu c=abcd
ve kod decompress
Dİ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
compress
ve 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. compress
vedecompress
herhangi 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ırcompress
vedecompress
.- Endeksler sıfır veya bir indeksli olabilir.
- Programların veya işlevlerin aslında adlandırılmaları gerekmiyor
compress
vedecompress
.