Tekst można przetłumaczyć na pisemną wersję języka TUT , zastępując każdą literę odpowiednim „słowem TUT”, jak podano w poniższej tabeli (zaadaptowanej z powiązanego artykułu) * :
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').
Napisz program o następującym działaniu we / wy:
Dane wejściowe (ze standardowego wejścia): binarny (0/1) wskaźnik i oraz ciąg ASCII s .
- Jeśli i = 0, to s może zawierać dowolny tekst ASCII.
- Jeśli i = 1, to s musi być wyjściem języka TUT dla niektórych prawidłowych danych wejściowych.
Dane wyjściowe (na standardowe wyjście): binarny (0/1) wskaźnik j oraz ciąg ASCII t .
- Jeśli i = 0, to j = 1 it jest tłumaczeniem s na język TUT.
- Jeśli i = 1, to j = 0 it jest tłumaczeniem s z języka TUT.
- Dla każdego ważnego wejścia, zastosowanie programu do własnego wyjścia musi dokładnie odtworzyć oryginalne wejście; tj. program ( program ( i , s )) = ( i , s ). Dane wejściowe i wyjściowe muszą mieć dokładnie ten sam format.
Punktacja : Wynik to liczba znaków w programie - najniższy wynik wygrywa.
Przykłady
(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)
(((Poza około wymowa: The tut słowy dla samogłosek ( e
, i
, ay
, o
, yu
) mają reprezentować zwykłe dźwięki (a, e, i, o, u), gdy recytuje alfabet - czyli z rymowania (może , ja, my, kosić, MEW) w trzy-lub-bardziej-literowych tut słów, symbole (. u
, a
, e
) mają dźwięk jak w (ale, bat, zakład) odpowiednio - są to zamienniki ASCII ( ʌ
æ
ɛ
) w powiązanym artykule.)))
AA
,SKWERE
alboskwerE
? Co powiesz na trzykrotne litery? jest towakswakswaks
,skwerwakswaks
,waksskwerwaks
, lub nawetkyubwaks
, czy możemy wybrać?rrd
powinien tłumaczyć naskwerruddud
; czy wolno nam to zostawićskwerrutdud
?0,"AA"
tłumaczy1,"ee"
? Co do tego1,"SKWERE"
, zakładam, że miałeś na myśli0,"AA"
, nie0,"EE"
.Odpowiedzi:
Rubin,
310311 znakówPrawidłowo obsługuje:
AA
powinno się zmienićskwerE
, zamień linie # 3 i # 4aA
iAa
powinny przekształcićeE
iEe
odpowiedniorrd
tłumaczy się na `skwerruddud (unix zyskuje 3 znaki)rrrd
zamienia się wskwerrutruddud
.rrrrd
staje sięskwerrutskwerruddud
Dane wejściowe wymagają, aby między wskaźnikiem a łańcuchem nie było znaku nowej linii, dane wyjściowe umieszczają je tam (poprawka: 1 znak).Wyjście konsoli zostało w tym momencie wyłączone, aby zapobiec mieszaniu ze STDIN. Unfix free, to tylko trochę brzydsze.Przykładowe dane wejściowe:
Wynik:
źródło
getc
jest poprzedzonySTDIN.
(sześć dodatkowych znaków).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).
ale naprawienie go kosztowałoby tylko 1 znak.Perl,
453443309307303299Przypadki testowe:
Z powodzeniem przetestowałem przypadki testowe (a), (b), (c) i (d) podane w PO.
* Nieco * bardziej czytelna wersja:
źródło
qw(bub kut ... yak zuz)
do(bub,kut ... yak,zuz)
), także można zastąpićkeys%x
z@b
(ponieważ wiem, jakie są klucze powodu$x
). Niewielka zmiana, aby zapisać kolejne trzy to$1eq uc($1)
douc$1eq$1
. Możesz także upuścić+
przed!
drukiem, aby ten dodatkowy bajt zabrał cię do 443. Mam nadzieję, że to wszystko jest ważne, przetestowałem ograniczone przypadki testowe!uc$1eq$1
być możeuc$1 eq$1
, ale nie jestem pewien ... Przepraszam, jeśli to źle!APL (Dyalog) (372)
Naprawdę możesz powiedzieć, że APL nie ma wbudowanych funkcji obsługi ciągu (z wyjątkiem tych z tablicy ogólnej). Musiałem napisać własny
tolower
(toL
). Jak zawsze w przypadku wielowierszowego APL-u Dyalog, aby go przetestować, wklej go w oknie edycji, a następnie wywołaj (T
).Stosowanie:
źródło
Tcl,
395394392Uwagi:
skwerruddud
dorrd
.skwereskweree
dlaaaaaa
.Przykładowe dane wejściowe:
Wynik:
Jak to działa:
m
jest na początku łańcuchem.ঙ
).źródło
\ufff
Iirc. To naprawdę nie ma znaczenia. Zrobiłaby to każda postać nie-ascii.\u999
. Jak powiedziałem, jedyną ważną rzeczą było: nie postać ascii.1KWAKWAKSEKS skwerWAKSWAKS RUTskwerrutruddud dudskweriskweriipup
.A doubled letter is replaced by `skwer` followed by the TUT word for that letter.
Brak wzmianki oSKWER
.Perl 385
Zakreślacz składni nienawidzi tego ...
Oczekuje danych wejściowych STDIN, format to
0 (or 1) String to convert here.
:Edycja : Zauważyłem problem z tłumaczeniem X (staje się „aks” w wersji, zajrzę do tego później. Może trzeba zmienić kolejność hash :(.
źródło
GNU Sed, 514
Prawdopodobnie można go skrócić, choć na razie skończę.
Używa tabeli odnośników do obsługi konwersji w obu kierunkach, powinien poprawnie obsługiwać wszystkie wyjątki, w tym przypadek skwer i ruddud / RUDDUD.
wejście pobierane w każdym wierszu jako 0/1, po którym następuje łańcuch. Używa
\v
(tabulator pionowy) jako kursora.źródło