Lithp Tranthlator

28

Mój przyjaciel zrobił tłumacz seplenny pewnego dnia, to znaczy, że wziął ciąg i przekształcił s => th i S => th. To było dość długie i myślałem, że można grać w golfa.

Zadanie polega więc na utworzeniu programu / funkcji, która pobiera ciąg wejściowy, tłumaczy go na lisp i wyprowadza ciąg

Przypadek testowy

Sam and Sally like Sheep        Tham and Thally like Thheep
Sally likes sausages            Thally liketh thauthageth
Sally sells seashells           Thally thellth theathhellth

Pamiętaj, że nie ma znaczenia, że ​​h cały czas się powtarza

To jest golf golfowy, więc wygrywa najkrótsza odpowiedź

Jerzy
źródło
13
Żałowałem, że wszyscy nie zmienili bajtów w swoich nagłówkach na bajty .
Leaky Nun
6
Powinny być punkty bonusowe, jeśli program nie używa sani Snigdzie w nim.
Nate Diamond,
1
Myślę, że nazwy języków powinny być jasne. Bez wymiany. Niektóre języki zawierają już „th”, więc jest to niejednoznaczne. A kto powiedziałby, że ktoś nie stworzy w przyszłości innego języka o nazwie „Common Lithp”?
mbomb007
1
@ mbomb007 Nie martwiłbym się tym zbytnio. Nie jestem pewien, czy rzeczywiście istnieje domyślny sposób na tytuł odpowiedzi. Widzę większość pytań, czy stwierdzają, jak to zrobić, zwykle jest to ten sam sposób. Ponieważ nie wyjaśniłem, jak należy udzielić odpowiedzi, użytkownicy mogą dowolnie nadawać im tytuły. Będąc pedantem, nawet nie prosiłem o język, więc mogłem się kłócić nawet o ich pisanie. Ale rozumiem twój punkt widzenia. Po prostu nie sądzę, że to niepokoi
George
2
Rzeczą, która uczyniłaby to wyzwanie bardziej interesującym, byłoby ogólne zachowanie skrzynek, np.LOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
puszysty

Odpowiedzi:

36

Common Lithp, 62

(map()(lambda(u)(princ(case u(#\s"th")(#\S"Th")(t u))))(read))

Najpierw (read)dane wejściowe (powinien to być ciąg znaków). Ciągi w CL są sekwencjami, więc używamy mapdo iteracji każdego znaku. Pierwszy argument mapreprezentujący typ wyniku (np. Mógłbym zbudować listę z wektora). Gdy jest to nil, aka (), wyniki są odrzucane. Funkcja, która jest odwzorowana na dane wejściowe princ( po prostu drukuje nieczytelnie) każdy znak, z wyjątkiem tych, które powinny zostać zastąpione.

rdzeń rdzeniowy
źródło
14
Ale ta nazwa języka.
Joe Z.
1
@JoeZ. Właśnie otrzymuje sprzez th, jak każdy inny tego nie zrobił: Spójrz na te odpowiedzi Pyson.
coredump
@coredump Wszystkie są w błędzie: w jedną stronę: s-> th, S-> Th, th-> th, Th-> Th.
Erik the Outgolfer,
1
@DrGreenEggsandIronMan Sure, (defmacro cathe (&rest args) `(case ,@args))
coredump
1
Ok lol, to ma sens
17

Siatkówka, 9 bajtów

S
Th
s
th

Wypróbuj online!

Oczywista odpowiedź.

użytkownik48538
źródło
13

JavaThcript ETh6, 38 bajtów

Na początku wybrałem oczywiste rozwiązanie

a=>a.replace(/s/g,'th').replace(/S/g,'Th')

Ale grałem w golfa o 4 bajty

a=>a.replace(/s/gi,b=>b>'r'?'th':'Th')

Wykorzystuje to iflagę regex , która wyszukuje wzorce bez rozróżniania wielkości liter. Zaletą Javascript jest to, że możesz określić anonimową funkcję do obsługi (regex) zastępowania.

Wypróbuj tutaj

f=
a=>a.replace(/s/gi,b=>b>'r'?'th':'Th')

s.innerHTML = [
    'abScdsefSghsij',
    'Sam and Sally like Sheep',
    'Sally likes sausages',
    'Sally sells seashells'
].map(c=>c + ' => ' + f(c)).join`<br>`
<pre id=s>

Bassdrop Cumberwubwubwub
źródło
11
„E et grubość”?
Joe Z.
Myślałem o tym 'Tt'[b>'r']+'h', ale ma tę samą długość
Washington Guedes,
1
Masz na myśli 38 bajtów
Downgoat
+1 dla TIL, że porównywanie ciągów odbywa się za pomocą Code Point Value
MayorMonty,
@Upgoat To była moja wina, przepraszam.
Neil,
11

GNU Sed - 17

s/S/Th/g;s/s/th/g

Oczywista odpowiedź.

$ sed -e "s/S/Th/g;s/s/th/g"

Sam and Sally like Sheep
Tham and Thally like Thheep

Sally likes sausages
Thally liketh thauthageth

Sally sells seashells
Thally thellth theathhellth
C. Quilley
źródło
17
Miałeś na myśli GNU Thed? ;)
m654
8

Python 3 - 40 bajtów

Pierwszy golf!

lambda s:s.translate({115:'th',83:'Th'})

Wykorzystuje metodę translacjistr modułu, która akceptuje tabelę tłumaczeń. Tabela tłumaczeń jest prosta z kodem klucza jako kluczem i zamiast niego jako wartością.dictstr

Gabor Fekete
źródło
1
Witamy w społeczności PP&CG!
Erik the Outgolfer,
4
Czy mogę zapytać, dlaczego masz 2 oddzielne konta?
Bálint,
@ Bálint Najwyraźniej zapomniał zalogować się na swoje konto bieżące tylko 3 powtórzeniami, ale doświadczenie w stosie przepełnienia stosu . I opublikowane z nowym kontem.
user48538,
6

JavaThcript ETh6, 43 bajty

s=>s.replace(/s/gi,m=>({s:'th',S:'Th'})[m])

Tetht Thuite:

th=s=>s.replace(/s/gi,m=>({s:'th',S:'Th'})[m])
  
console.log(th('Sam and Sally like Sheep'));
console.log(th('Sally likes sausages'));
console.log(th('Sally sells seashells'));

Patrick Roberts
źródło
6
Confethth: ty tylko to, co myślisz, dla tytułu tego tytułu!
przestał obracać przeciwnie do ruchu wskazówek zegara
6

V , 11 bajtów

Ís/th
ÍS/Th

Wypróbuj online!

W języku, który stworzyłem. To nie jest skończone, ale naprawdę dobre w regekth.

DJMcMayhem
źródło
5

C, 50 bajtów

s(c){c=getchar();c+=c-83&95?0:'h\1';s(printf(&c));}

Zamień \1na rzeczywisty \x01bajt.

jimmy23013 zapisał bajt, a następnie zapisałem dwa kolejne, używając jego podejścia! Dzięki.

Lynn
źródło
Już miałem skomentować, że &cparametr jest zepsuty. Ale tak nie jest, ponieważ w architekturze little-endian drugim bajtem intbędzie 0x00i faktycznie zakończy „ciąg” ... To jest okropnie sprytne, uwielbiam to!
Quentin,
s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
jimmy23013
Nie możesz wcisnąć 2 bajtów do char. 'h\1'
Erik the Outgolfer,
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Stałe wieloznakowe są zdefiniowane w implementacji, ale doskonale poprawna C.
Dennis
5

05AB1E, 14 12 bajtów

's„th:'S„Th:

Prosta odpowiedź.

Wypróbuj online

Zaoszczędź 2 bajty dzięki @Adnan

Emigna
źródło
Czy to nie jest ciasna odpowiedź do przodu, a nie prosta odpowiedź?
dorukayhan chce odzyskać Monikę
4

Java, 71 65 bajtów

String t(String s){return s.replace("S","Th").replace("s","th");}

Pierwsza próba gry w golfa, więc dlaczego nie z Javą.

Szalony
źródło
2
Możesz użyć replacezamiastreplaceAll
aditsu
O tak, masz rację. Dzięki! @aditsu
Insane
3
Możesz zapisać niektóre bajty, używając wyrażenia lambda zamiast funkcji. s->s.replace("S","Th").replace("s","th")
Denker
4

GNU AWK, 31 bajtów

Wystarczy użyć gsubfunkcji do przetłumaczenia dolnej lub górnej litery S za pomocą wyrażenia regularnego i wydrukowania go później. Może pracować z plikami lub z stdinjak w tym przypadku

$ awk '{gsub(/s/,"th");gsub(/S/,"Th")}1' <<< "This is Sparta"                   
Thith ith Thparta
Sergiy Kolodyazhnyy
źródło
3

CJam, 15 bajtów

q"sS""thTh"2/er

Sprawdź to tutaj.

Wyjaśnienie

q      e# Read input.
"sS"   e# Push string.
"thTh" e# Push string.
2/     e# Split into pairs, i.e. ["th" "Th"].
er     e# Transliteration, replaces 's' with 'th' and 'S' with 'Th'.
Martin Ender
źródło
3

Python3 - 46 bajtów

lambda s:s.replace("s","th").replace("S","Th")

Usunięto 4 bajty za pomocą @DenkerAffe !

Yytsi
źródło
1
Python 3 był językiem, w którym został napisany. Moja wersja jego kodu miała 59 bajtów, więc skończymy!
George
1
lambda s:s.replace("s","th").replace("S","Th")jest nieco krótszy.
Denker
@DenkerAffe Tak, jest krótszy, ale aby użyć w tym przypadku lambda, nadal potrzebujesz danych wejściowych i wyjściowych, aby odpowiedzieć na pierwotne pytanie.
George
1
@george Społeczność jest zgodna co do tego, że funkcje mogą używać argumentów i zwracać wartości zamiast używać stdin / stdout. Zobacz nasze domyślne ustawienia we / wy . Chociaż możesz je oczywiście pominąć, jeśli chcesz, nie ma to większego sensu w tym konkretnym wyzwaniu.
Denker
@DenkerAffe w porządku, w porządku. Kiedy zadałem pytanie, mam na myśli, że wynikiem będzie echo lub wydruk. Ale pozostawię to domyślnym. Tak więc użycie lambdy byłoby krótsze
George
3

C # 6.0 - 58 bajtów

string f(string s)=>s.Replace("s","th").Replace("S","Th");

Pobiera ciąg wejściowy jako argument funkcji.

Yytsi
źródło
3

Haskell, 36 bajtów

f 's'="th";f 'S'="Th";f x=[x]
(>>=f)
Lynn
źródło
Nie potrzebujesz miejsca:f's'=...
ThreeFx
1
Niestety tak. Nazwy Haskell mogą zawierać apostrofy. :(
Lynn
Cholera, zupełnie o tym zapomniałem. Prawie nigdy nie potrzebuję Chars ...
ThreeFx,
8
Myślałem, że to „Hathkell”
Patrick Roberts,
3

Rdza, 46 bajtów

|s:&str|s.replace("s","th").replace("S","Th");

Wypróbuj online!

Kek
źródło
1
@ mbomb007. Nie jestem pewien, czy powinieneś to edytować.
Washington Guedes,
Sprawiam, że postępuje zgodnie z wytycznymi. Powinienem móc zobaczyć post i wiedzieć, jaki to język. Niektóre języki zawierają już „th”, więc jest to niejednoznaczne. A kto powiedziałby, że ktoś nie stworzy w przyszłości innego języka o nazwie „Rutht”?
mbomb007
2
@ mbomb007, kto może powiedzieć, że ktoś nie stworzy w przyszłości innego języka o nazwie „Rust”?
msh210,
@ msh210 Moot point, ponieważ jeśli zostanie użyty, plakat będzie musiał wyjaśnić.
mbomb007
3

PHP, 42 bajty

jeśli jest uruchamiany z pliku:

<?=strtr($argv[1],["s"=>"th","S"=>"Th"]);

Uruchom jako:

~$ php [file] "This is Silly"
InaScuffle
źródło
-1 bajt: usuń nowy wiersz na końcu
Erik the Outgolfer
-8 bajtów: usuń cudzysłowy. -> użyj, php -d error_reporting=0aby ukryć powiadomienia.
Tytus
3

TI-Basic, 126 bajtów

Input Str1
inString(Str1,"s
While Ans
sub(Str1,1,Ans-1)+"th"+sub(Str1,Ans+1,length(Str1)-Ans->Str1
inString(Str1,"s
End
inString(Str1,"S
While Ans
sub(Str1,1,Ans-1)+"Th"+sub(Str1,Ans+1,length(Str1)-Ans->Str1
inString(Str1,"S
End
Str1
Timtech
źródło
To jest źle. Str1nigdy się nie zmienia i Ansna końcu będzie zawierać liczbę.
lirtosiast
Dzięki za notatkę, teraz naprawione. Nie wiem, jak zapomniałem Str1ponownie uratować ...
Timtech
To nadal jest złe; błąd, gdy pierwszym lub ostatnim znakiem jest S. Jak już powiedziałem, przetestuj kod przed opublikowaniem go.
lirtosiast
3

Java, 101 bajtów

interface a{static void main(String[]A){System.out.print(A[0].replace("S","Th").replace("s","th"));}}

Zauważ, że jest to kompletny program w przeciwieństwie do poprzedniej odpowiedzi Java .

Premia ( najpierw należy przekazać preprocesorowi C THE preprocessoror THEE):

#define interfaith interface
#define thtatic static
#define Thtring String
#define Thythtem System
#define replaith(x,y) replace(x,y)

interfaith a{thtatic void main(Thtring[]A){Thythtem.out.print(A[0].replaith("S","Th").replaith("s","th"));}}
dorukayhan chce odzyskać Monikę
źródło
2

Pyth, 14 bajtów

::z\s"th"\S"Th

Zestaw testowy

Dzięki @LeakyNun za wykrycie literówki!

Denker
źródło
5
Więc językiem jest „Pys”? : P
mbomb007
2

MATL , 17 bajtów

115'th'YX83'Th'YX

Wypróbuj online!

Wyjaśnienie

115    % 's' (ASCII)
'th'   % String 'th'
YX     % Regex replacement
83     % 'S' (ASCII)
'Th'   % String 'Th'
YX     % Regex replacement
Luis Mendo
źródło
2

Python 3, 53 bajty

def l(s):return s.replace("s","th").replace("S","Th")

Stosowanie:

>> l('Sam and Sally like Sheep')

Tham and Thally like Thheep
m654
źródło
-7 bajtów: lambda s:s.replace("s","th").replace("S","Th")Zastosowanie:(lambda s:s.replace("s","th").replace("S","Th"))(s)
Erik the Outgolfer,
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Cóż, to jest identyczne z odpowiedzią TuukkaX (która została opublikowana przed moją), więc ...
m654
Nie ma więc powodu, aby publikować kolejną odpowiedź.
Erik the Outgolfer,
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Nie zauważyłem jego, kiedy opublikowałem mój.
m654
Możesz usunąć swoją odpowiedź, gdy zauważysz, że jest krótsza.
Erik the Outgolfer,
2

GameMaker Language, 74 bajty

return string_replace_all(string_replace_all(argument0,'s','th'),'S','Th')
Timtech
źródło
2

Matlab, 39 bajtów

Proste podejście:

@(t)strrep(strrep(t,'s','th'),'S','Th')
pajonk
źródło
2

Emacth Lithp, 61 bajtów

(lambda(s)(replace-regexp-in-string"[Ss]\\(\\w*\\)""th\\1"s))

Emacs Lisp stara się być mądry podczas zamiany tekstu, ale ta inteligencja psuje się, gdy zastąpiony ciąg zajmuje tylko jedną spację, tj. Wielką literę S. Aby zapobiec konwersji tego słowa „Sam i Sally” na „THam i THally”, całe słowo jest dopasowany zamiast. Jednak to również obsługuje „SAM i Sally” tak, jak byśmy tego chcieli, tj. Produkują „THAM i Thally”.

Lord Yuuma
źródło
2

kod maszynowy x86, 19 bajtów

W hex:

86ac3c5374043c73750440aab068aa84c075eec3

Dane wejściowe:: ESIciąg wejściowy,: EDIbufor wyjściowy.

Demontaż:

_loop:
0:  ac          lodsb       
1:  3c 53       cmp al,'S'  
3:  74 04       je _th      
5:  3c 73       cmp al,'s'  
7:  75 04       jne _nth    
_th:
9:  40          inc eax     ;[Ss]->[Tt]
a:  aa          stosb       
b:  b0 68       mov al,'h'  
_nth:
d:  aa          stosb       
e:  84 c0       test al,al  
10: 75 ee       jnz _loop   
12: c3          ret         
meden
źródło
Możesz użyć test al, 'S'do sprawdzenia obu naraz
anatolyg
2

Befunge 98, 37 49 bajtów

Orginalna wersja :

~:"s"- #v_$"ht",>,
_;#-"S":<;$"hT",^ 

Zakończenie wydania, zgodnie z konsensusem:

~:a-!#@_:"s"-#v_$"ht",>,
_;#-"S":      <;$"hT",^ 

Pozostawia to dużą lukę w siatce kodu, z której nie jestem bardzo zadowolony. Zajmę się tym, kiedy będę miał czas.
49. bajt to spacja na końcu drugiej linii, zawierająca prostokątną siatkę, niezbędna, aby uniemożliwić ccbi (i prawdopodobnie innym tłumaczom) wypaczenie i wydrukowanie nieskończonej linii „Th”.

karhell
źródło
2

35 Bajtów Julii:

s->replace(s,r"s"i,s->"$(s[1]+1)h")

Wypróbuj online! (obejmuje wszystkie przypadki testowe)

jeszcze jedna minuta
źródło
Hej, nie znam cię skądś? ;)
Alex A.,
1

SpecBAS ThpecBATh - 53 bajty

1 INPUT a$: ?REPLACE$(REPLACE$(a$,"S","Th"),"s","th")
Brian
źródło