O texto pode ser traduzido para uma versão escrita do idioma TUT , substituindo cada letra pela "palavra TUT" correspondente, conforme indicado na tabela a seguir (adaptada do artigo vinculado) * :
a e h hash o o u yu
b bub i ay p pup v vuv
c kut j jag q kwak w waks
d dud k kak r rut x eks
e i l lul s sus y yak
f fuf m mum t tut z zuz
g jug n nun
* Exceptions:
(1) Upper case letters have corresponding TUT words in upper case.
(2) A doubled letter becomes 'skwer' ('SKWER') followed by the TUT word for that letter.
- An n-fold letter is treated as a number of doubles, followed by a single if needed.
- To be considered a double or n-fold letter, the letters must be in the same case.
(3) 'rut' ('RUT') is replaced by 'rud' ('RUD') if immediately followed by 'dud' ('DUD').
Escreva um programa com o seguinte comportamento de E / S:
Input (from stdin): Um indicador binário (0/1) ie uma string ASCII s .
- Se i = 0, então s pode conter qualquer texto ASCII.
- Se i = 1, então s deve ser a saída do idioma TUT para alguma entrada válida.
Saída (para stdout): Um indicador binário (0/1) j e uma string ASCII t .
- Se i = 0, então j = 1 e t é a tradução de s para o idioma TUT.
- Se i = 1, então j = 0 e t é a tradução de s da linguagem TUT.
- Para qualquer entrada válida, a aplicação do programa à sua própria saída deve reproduzir exatamente a entrada original; isto é, programa ( programa ( i , s )) = ( i , s ). A entrada e a saída devem ter exatamente o mesmo formato.
Pontuação : A pontuação é o número de caracteres no programa - a pontuação mais baixa vence.
Exemplos
(0, 'Look for the birds.')
(1, 'LULskwerokak fuforut tuthashi bubayruddudsus.')
(0, '"Mrs. Hogwallop up and R-U-N-N-O-F-T."')
(1, '"MUMrutsus. HASHojugwakseskwerlulopup yupup enundud RUT-YU-NUN-NUN-O-FUF-TUT."')
( C )
(0, 'QWX WWW Rrrrd deeeeep')
(1, 'KWAKWAKSEKS SKWERWAKSWAKS RUTskwerrutruddud dudskweriskweriipup')
( D )
(0, 'aa AA aA Aa rd RD rD Rd')
(1, 'skwere SKWERE eE Ee ruddud RUDDUD rutDUD RUTdud)
(((Além cerca de pronúncia: As palavras TUT para as vogais ( e
, i
, ay
, o
, yu
) é suposto representar os sons habituais de (a, e, i, o, u) ao recitar o alfabeto - ou seja, que rima com (maio , me, meu, cortar, mew) nos três ou mais-palavrões TUT, os símbolos (. u
, a
, e
) é suposto som como em (mas, bastão, aposta), respectivamente - estes são substitutos ASCII para ( ʌ
æ
ɛ
) no artigo vinculado.)))
AA
,SKWERE
ouskwerE
? E as cartas triplicadas? é elewakswakswaks
,skwerwakswaks
,waksskwerwaks
, ou mesmokyubwaks
, ou podemos escolher?rrd
deve traduzir paraskwerruddud
; podemos deixar como estáskwerrutdud
?0,"AA"
traduz1,"ee"
? Quanto a1,"SKWERE"
, suponho que você quis dizer0,"AA"
, não0,"EE"
.Respostas:
Rubi,
310311 caracteresManipula corretamente:
AA
deve se transformarskwerE
, troque as linhas 3 e 4aA
eAa
devo me transformareE
e,Ee
respectivamente,rrd
traduz para `skwerruddud (o unfix ganha 3 caracteres)rrrd
se transformaskwerrutruddud
.rrrrd
torna-seskwerrutskwerruddud
A entrada requer que não exista nova linha entre o indicador e a sequência, a saída a coloca lá (correção: 1 caractere).Saída do console suprimida neste momento para impedir a mistura com STDIN. Sem correção, é apenas um pouco mais feio.Exemplo de entrada:
Resultado:
fonte
getc
for prefixado comSTDIN.
(mais seis caracteres).For any valid input, applying the program to its own output must exactly reproduce the original input; i.e., program (program (i, s)) = (i, s).
mas custaria apenas 1 caractere para corrigir isso.Perl,
453443309307303299Casos de teste:
Testei com sucesso os casos de teste (a), (b), (c) e (d) fornecidos no OP.
Uma versão * um pouco * mais legível:
fonte
qw(bub kut ... yak zuz)
para(bub,kut ... yak,zuz)
), também pode substituirkeys%x
por@b
(já que você sabe o que são as chaves$x
). Uma pequena alteração para salvar outras três é$1eq uc($1)
parauc$1eq$1
. Você também pode deixar o+
antes!
da impressão desse byte extra para levá-lo à 443. Espero que tudo seja válido, eu testei casos de teste limitados!uc$1eq$1
pode ter que seruc$1 eq$1
, mas não tenho certeza ... Desculpe se isso está errado!APL (Dyalog) (372)
Você pode realmente dizer que o APL não possui funções de manipulação de seqüência de caracteres incorporadas (exceto as de matriz genérica). Eu tive que escrever o meu próprio
tolower
(éL
). Como sempre com o Dyalog APL com várias linhas, para testá-lo, cole-o em uma janela de edição e depois chame-o (T
).Uso:
fonte
Tcl,
395394392Notas:
skwerruddud
pararrd
.skwereskweree
paraaaaaa
.Exemplo de entrada:
Resultado:
Como funciona:
m
é no início uma string.ঙ
).fonte
\ufff
iirc. Realmente não importa. Qualquer caractere não-ascii serviria.\u999
. Como eu disse, a única coisa importante era: não um personagem ascii.1KWAKWAKSEKS skwerWAKSWAKS RUTskwerrutruddud dudskweriskweriipup
.A doubled letter is replaced by `skwer` followed by the TUT word for that letter.
nenhuma menção aSKWER
.Perl 385
O marcador de sintaxe odeia este ...
Espera entrada no STDIN, o formato é
0 (or 1) String to convert here.
:Edit : notei um problema com a tradução do X (torna-se 'aks' na reversão, analisarei isso mais tarde. Talvez seja necessário reordenar o hash :(.
fonte
GNU Sed, 514
Provavelmente poderia ser encurtado, embora eu esteja pronto por enquanto.
Usa uma tabela de pesquisa para lidar com conversões em ambas as direções, deve lidar com todas as exceções, incluindo skwer case e ruddud / RUDDUD corretamente.
entrada tomada em cada linha como 0/1 seguida pela sequência. Usa
\v
(guia vertical) como um cursor.fonte