Haskell (antes de GHC 8.4), ( 10119 7767 7626 7540 bytes), pontuação 15 14 10
(<>)(<><>)(<>)(<<>>)()=(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)(<><>)))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))<<>>((<><>)<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))<<>>(((<>)((<>)((<>)((<>)((<>)(<><>))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))<<>>((<><>)<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>[])))))))))))))))))))))))))))))))))))))
(<>)'y'pred(:)
Experimente online!
A última linha define uma função anônima (<>)'y'pred(:)
. Ligue com (<>)'y'pred(:)()
para produzir a sequência.
Edit: Um enorme agradecimento a @ Ørjan Johansen por sugerir passar as funções auxiliares como parâmetros em vez de declará-las, economizando quatro bytes de pontuação!
Os bytes sem colchetes são
=
'y'pred:
Como funciona?
Uma cadeia de caracteres "wxy"
em Haskell é açúcar sintático para uma lista de caracteres ['w','x','y']
, o que mais uma vez é o açúcar sintático para a construção posterior com o operador contras :
e a lista vazia: 'w':'x':'y':[]
. Ao definir, (<<>>)=(:)
produzimos a mesma string escrevendo 'w'<<>>('x'<<>>('y'<<>>[]))
.
Porque caracteres são ordenados, podemos calcular o antecessor de cada caractere com uma função chamada pred
. Usando apenas o caractere 'y'
e pred
, a sequência se torna pred(pred 'y')<<>>(pred 'y'<<>>('y'<<>>[]))
. Ao definir (<>)=pred
e (<><>)='y'
podemos representar a sequência usando apenas colchetes:
(<>)((<>)(<><>))<<>>((<>)(<><>)<<>>((<><>)<<>>[]))
No entanto, no final, não queremos uma string, mas uma função retornando uma string; portanto, definimos nosso operador contras (<<>>) x xs ()=x:xs
. (Obviamente, com x
e xs
substituídos por identificadores usando apenas colchetes:) (<<>>)(<>)(<><>)()=(<>):(<><>)
. Deste jeito,
((<>)((<>)(<><>))<<>>((<>)(<><>)<<>>((<><>)<<>>[])())())
é uma função do tipo () -> String
e, ao anexar um final, ()
produz a sequência original:
((<>)((<>)(<><>))<<>>((<>)(<><>)<<>>((<><>)<<>>[])())())()
Usando este método conseguimos uma solução com pontuação 15. No entanto, podemos condensar as três declarações em um declarando uma função que leva quatro argumentos: 'z'
, pred
, (:)
e ()
para chamar.
A função a seguir encode
codifica uma string com caracteres menores ou iguais a 'y'
este modo: (Por quê y
? Porque é o maior caractere "Surprise!\nHappy Birthday, Brain-Flak!"
e, portanto, produz a menor representação. Agradecemos novamente a Ørjan Johansen por apontar isso).
c x = let l = fromEnum 'y' - fromEnum x
in "(" ++ ([1..l]>>"((<>)") ++ "(<><>)" ++ ([1..l]>>")") ++ "<<>>"
encode s = concatMap c s ++ "[]" ++ ([1..length s-1]>>")()") ++ ")"
Experimente online!