OOP:指向プログラミングの重複
コードゴルフに適していると思われるあまり知られていないプログラミングパラダイムの1つは、オーバーラップ指向プログラミング(OOP) *です。部分的に同一のコードを記述する場合、同一の部分を単にオーバーラップし、2つの元のコード行の開始位置を何らかの方法で記憶することにより、多くのバイトを節約できます。あなたの仕事は2書くことです重複したプログラムまたは機能をcompressしてdecompress、以下の仕様で: *本番コードではおそらく使用しないでください。 compress compress任意の便利な形式の2つの文字列を取り、可能な限りそれらをオーバーラップします。これは、s両方の入力文字列がの部分文字列であるような最小長の文字列ですs。さらに、両方の文字列の開始インデックスと終了インデックスを識別する出力が返されます。 例:(正確なIOフォーマットはあなた次第です) 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。これは、文字列と2つの開始インデックスと終了インデックス(によって返される形式で)が与えられcompress、2つの元の文字列を返します。有効な入力のみを処理する必要があります。以下の等式は、すべての文字列のために保持する必要がありs1、s2: (s1, s2) == decompress (compress (s1, s2)) 例:(例の逆compress) decompress "deabcd" ((2,5),(0,3)) -> "abcd" "deab" decompress "abcd" ((0,3),(1,2)) -> "abcd" "bc" decompress "abcdef" ((0,2),(3,5)) -> …