Le texte peut être traduit dans une version écrite de la langue TUT en remplaçant chaque lettre par le "mot TUT" correspondant, comme indiqué dans le tableau suivant (adapté de l'article lié) * :
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').
Écrivez un programme avec le comportement d'E / S suivant:
Entrée (depuis stdin): un indicateur binaire (0/1) i et une chaîne ASCII s .
- Si i = 0, alors s peut contenir n'importe quel texte ASCII.
- Si i = 1, alors s doit être la sortie TUT Language pour une entrée valide.
Sortie (vers stdout): un indicateur binaire (0/1) j et une chaîne ASCII t .
- Si i = 0 alors j = 1 et t est la traduction de s en TUT Language.
- Si i = 1 alors j = 0 et t est la traduction de s à partir du langage TUT.
- Pour toute entrée valide, l'application du programme à sa propre sortie doit reproduire exactement l'entrée d'origine; c'est-à-dire programme ( programme ( i , s )) = ( i , s ). L'entrée et la sortie doivent avoir exactement le même format.
Score : Le score est le nombre de caractères dans le programme - le score le plus bas gagne.
Exemples
(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)
((( A part à la prononciation: Les mots TUT pour les voyelles ( e
, i
, ay
, o
, yu
) sont censés représenter les sons habituels de (a, e, i, o, u) en récitant l'alphabet - par exemple, qui riment avec (peut , moi, mon, faucher Mew) dans les trois ou-plus-lettre mots TUT, les symboles (. u
, a
, e
) sont censés son comme dans (mais, chauve - souris, pari) respectivement - ce sont des remplacements ASCII pour ( ʌ
æ
ɛ
) dans l'article lié.)))
AA
,SKWERE
ouskwerE
? Et les lettres triplées? est - ilwakswakswaks
,skwerwakswaks
,waksskwerwaks
, ou mêmekyubwaks
, ou nous pouvons choisir?rrd
devrait se traduire parskwerruddud
; sommes-nous autorisés à le laisser àskwerrutdud
?0,"AA"
traduit1,"ee"
? Quant à1,"SKWERE"
, je suppose que vous vouliez dire0,"AA"
non0,"EE"
.Réponses:
Rubis,
310311 caractèresGère correctement:
AA
se transforme enskwerE
, permutez les lignes # 3 et # 4aA
etAa
devrais devenireE
etEe
respectivementrrd
se traduit par `skwerruddud (unfix gagne 3 caractères)rrrd
se transforme enskwerrutruddud
.rrrrd
devientskwerrutskwerruddud
L'entrée nécessite qu'il n'y ait pas de nouvelle ligne entre l'indicateur et la chaîne, la sortie le place là (correction: 1 caractère).La sortie de la console est supprimée à ce stade pour empêcher le mélange avec STDIN. Unix gratuit, c'est juste un peu plus laid.Exemple d'entrée:
Production:
la source
getc
est préfixé parSTDIN.
(six caractères supplémentaires).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).
mais cela ne coûterait qu'un seul caractère pour résoudre ce problème.Perl,
453443309307303299Cas de test:
J'ai testé avec succès les cas de test (a), (b), (c) et (d) fournis dans le PO.
Une version * un peu * plus lisible:
la source
qw(bub kut ... yak zuz)
en(bub,kut ... yak,zuz)
), vous pouvez également le remplacerkeys%x
par@b
(puisque vous savez de quoi sont faites les clés$x
). Un petit changement pour sauver trois autres est$1eq uc($1)
deuc$1eq$1
. Vous pouvez également supprimer l'+
avant!
de l'impression pour cet octet supplémentaire pour vous amener à 443. J'espère que tout est valide, j'ai testé des cas de test limités!uc$1eq$1
devrait l'êtreuc$1 eq$1
, mais je ne suis pas certain ... Désolé si c'est faux!APL (Dyalog) (372)
Vous pouvez vraiment dire qu'APL n'a pas de fonctions intégrées de gestion des chaînes (à l'exception des tableaux génériques). J'ai dû écrire le mien
tolower
(c'estL
). Comme toujours avec Dyalog APL multiligne, pour le tester, collez-le dans une fenêtre d'édition puis appelez-le (T
).Usage:
la source
Tcl,
395394392Remarques:
skwerruddud
pourrrd
.skwereskweree
pouraaaaa
.Exemple d'entrée:
Production:
Comment ça fonctionne:
m
est au début une chaîne.ঙ
).la source
\ufff
iirc. Ça n'a pas vraiment d'importance. N'importe quel caractère non-ascii ferait l'affaire.\u999
. Comme je l'ai dit, la seule chose importante était: pas un caractère ascii.1KWAKWAKSEKS skwerWAKSWAKS RUTskwerrutruddud dudskweriskweriipup
.A doubled letter is replaced by `skwer` followed by the TUT word for that letter.
Aucune mention deSKWER
.Perl 385
Le surligneur de syntaxe déteste celui-ci ...
Attend l'entrée sur STDIN, le format est
0 (or 1) String to convert here.
:Edit : J'ai remarqué un problème avec la traduction de X (il devient 'aks' dans la réversion, je vais y revenir plus tard. Peut-être besoin de réorganiser le hachage :(.
la source
GNU Sed, 514
Pourrait probablement être raccourci, bien que j'aie fini pour l'instant.
Utilise une table de recherche pour gérer les conversions dans les deux sens, doit gérer correctement toutes les exceptions, y compris skwer case et ruddud / RUDDUD.
entrée prise sur chaque ligne comme 0/1 suivie de la chaîne. Utilise
\v
(onglet vertical) comme curseur.la source