Text kann in eine schriftliche Version der TUT-Sprache übersetzt werden, indem jeder Buchstabe durch das entsprechende "TUT-Wort" ersetzt wird, wie in der folgenden Tabelle angegeben (angepasst aus dem verlinkten Artikel) * :
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').
Schreiben Sie ein Programm mit folgendem E / A-Verhalten:
Eingabe (von stdin): Ein binärer (0/1) Indikator i und eine ASCII-Zeichenfolge s .
- Wenn i = 0 ist, kann s beliebigen ASCII-Text enthalten.
- Wenn i = 1 ist, muss s die TUT-Sprachausgabe für eine gültige Eingabe sein.
Ausgabe (an stdout): Ein binärer (0/1) Indikator j und eine ASCII-Zeichenfolge t .
- Wenn i = 0, dann ist j = 1 und t ist die Übersetzung von s in die TUT-Sprache.
- Wenn i = 1, dann ist j = 0 und t ist die Übersetzung von s aus der TUT-Sprache.
- Für jede gültige Eingabe muss das Anwenden des Programms auf seine eigene Ausgabe die ursprüngliche Eingabe exakt wiedergeben. dh Programm ( Programm ( i , s )) = ( i , s ). Eingabe und Ausgabe müssen genau das gleiche Format haben.
Wertung : Die Punktzahl ist die Anzahl der Zeichen im Programm - die niedrigste Punktzahl gewinnt.
Beispiele
(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)
(((Außer über die Aussprache: Die TUN Worte für die Vokale ( e
, i
, ay
, o
, yu
werden) soll die üblichen Geräusche des (a, e darstellen, i, o, u) , wenn das Alphabet rezitieren - dh mit Reimen (Mai , mich, meine, mähen, mew) in den drei-oder-mehr-Buchstaben TUT Worten, die Symbole (. u
, a
, e
) sollen klingen , als in (aber, bat, Wette) , die jeweils - diese ASCII Ersatz für ( ʌ
æ
ɛ
) im verlinkten Artikel.)))
AA
,SKWERE
oderskwerE
? Was ist mit verdreifachten Buchstaben? ist eswakswakswaks
,skwerwakswaks
,waksskwerwaks
, oder auchkyubwaks
, oder wir wählen?rrd
sollte übersetzen inskwerruddud
; dürfen wir es bei lassenskwerrutdud
?0,"AA"
übersetzt man1,"ee"
? Was1,"SKWERE"
nehme ich an Dich gedacht0,"AA"
, nicht0,"EE"
.Antworten:
Rubin,
310311 ZeichenRichtig behandelt:
AA
Fall sein sollteskwerE
, tauschen Sie die Zeilen 3 und 4 ausaA
undAa
sollte wiederum ineE
undEe
jeweilsrrd
übersetzt in `skwerruddud (unfix erhält 3 Zeichen)rrrd
verwandelt sich inskwerrutruddud
.rrrrd
wirdskwerrutskwerruddud
Die Eingabe erfordert, dass zwischen dem Indikator und der Zeichenfolge keine neue Zeile steht, die Ausgabe setzt sie dort ab (Fix: 1 Zeichen).Die Konsolenausgabe wird an dieser Stelle unterdrückt, um ein Mischen mit STDIN zu verhindern. Unfix frei, es ist nur ein bisschen hässlicher.Beispieleingabe:
Ausgabe:
quelle
getc
vorangestellt sindSTDIN.
.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).
Aber es würde nur 1 Zeichen kosten, um das zu beheben.Perl,
453443309307303299Testfälle:
Ich habe die im OP bereitgestellten Testfälle (a), (b), (c) und (d) erfolgreich getestet.
Eine * etwas * besser lesbare Version:
quelle
qw(bub kut ... yak zuz)
zu(bub,kut ... yak,zuz)
), können Sie auch ersetzenkeys%x
mit@b
(da Sie wissen , was die Tasten sind wegen$x
). Eine kleine Änderung, um weitere drei zu speichern, ist$1eq uc($1)
zuuc$1eq$1
. Sie können auch das+
vor dem!
Druck stehen lassen, um dieses zusätzliche Byte auf 443 zu bringen. Ich hoffe, das ist alles gültig. Ich habe begrenzte Testfälle getestet!uc$1eq$1
vielleicht seinuc$1 eq$1
, aber ich bin mir nicht sicher ... Entschuldigung, wenn das falsch ist!APL (Dyalog) (372)
Sie können wirklich feststellen, dass APL keine integrierten Funktionen zur Behandlung von Zeichenfolgen hat (mit Ausnahme der generischen Array-Funktionen). Ich musste mein eigenes schreiben
tolower
(es istL
). Wie immer bei mehrzeiliger Dyalog-APL, um sie zu testen, fügen Sie sie in ein Bearbeitungsfenster ein und rufen Sie sie dann auf (T
).Verwendungszweck:
quelle
Tcl,
395394392Anmerkungen:
skwerruddud
fürrrd
.skwereskweree
füraaaaa
.Beispieleingabe:
Ausgabe:
Wie es funktioniert:
m
ist am Anfang eine Zeichenfolge.ঙ
).quelle
\ufff
iirc. Ist nicht wirklich wichtig. Jedes Nicht-ASCII-Zeichen würde ausreichen.\u999
. Wie gesagt, das einzig Wichtige war: kein ASCII-Charakter.1KWAKWAKSEKS skwerWAKSWAKS RUTskwerrutruddud dudskweriskweriipup
.A doubled letter is replaced by `skwer` followed by the TUT word for that letter.
Keine Erwähnung vonSKWER
.Perl 385
Syntax Textmarker hasst diesen ...
Erwartet Eingabe auf STDIN, Format ist
0 (or 1) String to convert here.
:Bearbeiten : Ich habe ein Problem mit der Übersetzung von X festgestellt (es wird in der Umkehrung zu "aks", ich werde dies später untersuchen. Möglicherweise muss der Hash neu angeordnet werden :(.
quelle
GNU Sed, 514
Könnte wahrscheinlich verkürzt werden, obwohl ich jetzt fertig bin.
Verwendet eine Nachschlagetabelle, um Konvertierungen in beide Richtungen zu verarbeiten, sollte alle Ausnahmen, einschließlich Skwer-Fall und Ruddud / RUDDUD, korrekt behandeln.
Eingabe in jeder Zeile als 0/1 gefolgt von der Zeichenfolge. Verwendet
\v
(vertikale Registerkarte) als Cursor.quelle