Seu desafio é escrever um programa para traduzir (inglês) leetspeak / lolspeak / txtspk para o inglês normal. Seu programa deve ler de entrada e saída padrão para saída padrão, a menos que seu idioma não os suporte.
Você pode usar um arquivo que contém uma lista de palavras no idioma inglês, separadas por novas linhas. Ele deve ser chamado W
e estará localizado no mesmo diretório do seu programa. (Nos sistemas GNU / Linux e possivelmente em outros, você pode criar W
um link para /usr/share/dict/words
) A lista não precisa estar em letras minúsculas, você pode usá-lo para determinar se as palavras devem ter letras maiúsculas.
Isso se baseia em uma pergunta agora excluída postada por Nikos M., que pode ser encontrada aqui . Esta não é uma duplicata, pois esta pergunta original foi encerrada e não recebeu nenhuma resposta, porque não havia critério de vencimento e o usuário não estava disposto a colocá-lo.
Pontuação
A pontuação é um pouco complicada!
Sua pontuação é
(leet items + bonuses) * 10 / (code length)
Maior pontuação ganha.
Seu programa não precisa ser e provavelmente não pode ser perfeito, mas quanto mais preciso, mais bônus ele recebe!
Desde $
pode significar tanto s
e S
, você recebe um bônus de 5 pontos por item leet para decidir se ele deve ter uma letra maiúscula (letras maiúsculas ou seja, no início de frases).
Você recebe um bônus adicional de 5 pontos por item leet para implementar substantivos próprios (palavras que sempre possuem maiúsculas) - a maneira como isso funciona é que você examinaria a lista de palavras, tornaria a saída maiúscula se apenas uma versão maiúscula estiver presente no lista, e se as duas versões estiverem lá, apenas adivinhe.
Se um personagem tiver dois significados (por exemplo, 1
pode significar L
ou I
), você ganha 20 pontos por item leet por escolher apenas as traduções do item que produzem palavras reais em inglês - use a lista de palavras para isso. Se mais de uma tradução de um item leet formar uma palavra em inglês real, você poderá escolher arbitrariamente uma das traduções válidas e ainda assim obter o bônus.
Lista de Leet
Estes são os itens leet que você pode implementar. Você não precisa implementar todos eles, mas quanto mais você adicionar, mais pontos receberá.
Você nunca pode marcar pontos traduzindo um item ou personagem para si mesmo. Esta regra substitui quaisquer erros que eu possa ter cometido na lista.
É tentador fazer um simples tr
ou s/.../.../g
. O verdadeiro desafio é determinar qual dos múltiplos significados poderia ou não estar correto, usando a lista de palavras.
Itens Leet (cada um deles adiciona 1 a leet items
na fórmula)
$ -> s, S (-> c, C 5 -> s, S @ -> a, A 4 -> a, A 3 -> e, E 7 -> t, T + -> t, T # -> h, H teh -> o 'd -> ed pwnd -> pwned pwnt -> pwned k, K -> OK kk -> OK 0 [zero] -> o, O y, Y -> por que 4 -> para txt -> texto dafuq -> que porra é essa / \, ^ -> a, A \ / -> v, V d00d -> cara n00b -> novato \ / \ / -> w, W 8 -> b, B | _ | -> u, U | - | -> h, H Я -> r, R j00 -> você joo -> você vv, VV -> w, W tomoz -> amanhã | <-> k, K [), |) -> d, D <3 -> amor > <-> x, X 10100111001 -> leet (representação binária de 1337) 2 -> também ur, UR -> seu, você é (não é necessário distinguir corretamente entre os dois) você, você 8 -> -ate-, 8 x, X -> -ks -, - cks- z, Z -> s, S 1 -> i, eu, eu, L ! -> eu, eu! c, C -> ver, C, mar b, B -> ser, B, abelha [letra acentuada] -> [formulário sem acentuação] (pontuação 1 por letra acentuada suportada) &, 7 -> e, anned, ant (pode ser usado no meio de uma palavra)
"Leet" mais difícil: faça 30 pontos por leet items
cada
!!! 1 !! 1-> !!!!!!! (traduza 1's em uma sequência de! 's para!' s) !!! um! -> !!!!! ! eleven-> !!!
Exemplos
Estes são exemplos do que um programa que implementa todos os personagens leet acima e alguns dos bônus pode ser capaz de fazer:
Exemplo de frase: |-|3 15 $|_|(# @ n00b
=He is such a newbie
Censura baseada em Leet: $#!+
=s**t
Extreme leet: \/\/ 1 |< 1 P 3 [) 1 A
=Wikipedia
-xor sufixo: H4X0R
=hacker
Leet mais extremo: @1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x
=Always post your new questions in the sandbox
Exemplo de Pontuação
Bash, 10 caracteres, 3 itens, sem bônus:
tr 137 let
Isso marca ( 1 * 3 ) * 10 / 10 = 3
.
fonte
tr
ous/.../.../g
. Apenas traduzir coisas como que faria um desafio chato, por isso precisamos para recompensar melhores traduções que usam a lista de palavrassed
script.)sed
script, quero dizer mais do que um simpless/.../.../g
, mas um arquivo que é analisado e executado porsed
si só. Como concisa como a língua é, pode ser uma linguagem golfable decente ...sed
scripts também são bons e podem ser muito interessantes, pois eles podem se sair muito bem devido à breve sintaxe de substituição. Você pode ler a lista de palavras, com extensões GNU ou usandosed
como parte de um programa Bash maiorRespostas:
Javascript (49 + 5635) * 10/2174 = 26,14
Demo Online:
A opção "Dicionário real" não funciona na caixa suspensa, mas funcionará se for executada em um servidor Web real. Testado no servidor de desenvolvimento do visual studio e no google chrome.
https://dl.dropboxusercontent.com/u/141246873/leettranslator/index.html
Ponto:
49 itens leet = 49
Bônus de capitalização = 5 * 49 = 245
bônus de pesquisa de dicionário = 20 * 49 = 980
bônus de exclamação * 3 = 90 * 49 = 4410
(itens leet + bônus) * 10 / (comprimento do código)
(49 + 5635) * 10/2174 = 26,14
Código:
Ungolfed:
Resultado dos testes:
Notas:
O dicionário é um arquivo javascript separado com um objeto chamado W contendo todas as palavras. Isso contém apenas as palavras necessárias para executar os testes relevantes.
fonte
W.js
, se for removido)Haskell - Pontuação 1.421421421: (37 itens + (21 bônus (capitalização) * 5)) * 10 / (999 bytes)
Esta é a minha resposta final.
Testes
Quando o programa é compilado em um arquivo chamado
min-lt
, você pode escrever o seguinte script de shellque imprimirá isto
fonte
-ks-
eu quis dizerks
no meio de uma palavra. Vou dar uma olhada nisso assim que encontrar um compilador haskellhaskell-platform
pacote. Você tem um exemplo paraks
?<insertnamehere> rocX
ouroX
BrainFuck estendido : 0.6757
Portanto, isso faz 15 traduções "$ (5 @ 437 + # 0821! &", Sem bônus e possui 222 bytes (feeds de linha desnecessários não incluídos). 15 * 10/222 = 0,6757
Uso:
O EBF não é realmente feito para o golfe, mas seu recurso básico, macros e recurso de cadeia de impressão tornam um pouco mais fácil compactar do que o BrainFuck. O final do binário BrainFuck compilado é assim:
fonte
~"OTLHEAND"
eu poderia fez todos os caracteres de uma vez por 107 bytes código objeto em vez de fazê-los a partir de 0 a cada vez usando 354, mas a minha resposta é otimizada para o tamanho do código EBF :)Java: 1.236
Por isso, realiza as seguintes transformações
O cálculo da pontuação é complicado
((39 + (21 * 5)) * 10) / 1165 = 1.236
Código não golfe:
fonte
Pontuação C # 45 * 10/2556 = 0,176
O programa pode gerar quase todas as letras maiúsculas e minúsculas. Como não estou usando uma lista de palavras em inglês, a primeira chave encontrada no Dicionário é usada. Por exemplo, \ / \ / torna-se vav. Se char for a primeira letra de uma palavra, o ToUpper será aplicado.
Aqui está a minha saída de teste:
fonte