Lithp Tranthlator

28

Teman saya membuat penerjemah bahasa Inggris beberapa hari yang lalu, artinya mengambil string dan mengonversi s => th dan S => Th. Itu cukup lama dan saya pikir itu bisa bermain golf.

Jadi tugasnya adalah membuat program / fungsi yang mengambil string input, menerjemahkannya ke lisp dan output string

Kasus cobaan

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

Perhatikan bahwa tidak masalah jika dia diulang sepanjang waktu

Ini kode golf sehingga jawaban terpendek menang

George
sumber
13
Saya berharap semua orang akan mengubah byte di header mereka untuk memotong .
Leaky Nun
6
Harus ada poin bonus jika program tidak digunakan satau Sdimanapun di dalamnya.
Nate Diamond
1
Saya pikir nama bahasa harus dibuat jelas. Tanpa penggantian. Beberapa bahasa sudah mengandung "th", jadi ambigu. Dan siapa yang mengatakan bahwa seseorang tidak akan membuat bahasa yang berbeda yang sebenarnya disebut "Common Lithp" di masa depan?
mbomb007
1
@ mbomb007 Saya tidak akan terlalu khawatir tentang itu. Saya tidak yakin apakah sebenarnya ada cara standar untuk memberi judul jawaban Anda. Sebagian besar pertanyaan saya lihat apakah mereka menyatakan bagaimana melakukannya biasanya dengan cara yang sama. Karena saya belum menjelaskan bagaimana jawabannya harus ditetapkan, maka pengguna bebas untuk memberi mereka judul sesuai keinginan mereka. Menjadi seorang pedant, saya bahkan tidak meminta bahasa, jadi saya bisa membantah mereka bahkan menulisnya. Tapi saya mengerti maksud Anda. Saya hanya tidak berpikir itu menjadi perhatian
george
2
Suatu hal yang akan membuat tantangan ini lebih menarik adalah pelestarian keseluruhan kasus, mis.LOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
lembut

Jawaban:

36

Lithp Umum, 62

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

Pertama, (read)input (harus berupa string). String dalam CL adalah urutan sehingga kami gunakan mapuntuk beralih pada setiap karakter. Argumen pertama yang mapmerepresentasikan tipe hasil (mis. Saya bisa membuat daftar dari vektor). Ketika itu nil, alias (), hasilnya dibuang. Fungsi yang dipetakan ke input cukup princ(cetak tidak terbaca) setiap karakter, kecuali yang harus diganti.

coredump
sumber
14
Namun nama bahasa itu.
Joe Z.
1
@ Joz. Saya hanya mengganti sdengan th, seperti yang dilakukan orang lain: lihat jawaban Pyson itu.
coredump
@coredump Mereka semua salah: ini satu arah: s-> th, S-> Th, th-> th, Th-> Th.
Erik the Outgolfer
1
@DrGreenEggsandIronMan Tentu, (defmacro cathe (&rest args) `(case ,@args))
coredump
1
Ok lol itu lebih masuk akal
17

Retina, 9 byte

S
Th
s
th

Cobalah online!

Jawaban yang jelas.

pengguna48538
sumber
13

JavaThcript ETh6, 38 byte

Pada awalnya saya pergi dengan solusi yang jelas

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

Tapi saya memutarnya 4 byte

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

Ini menggunakan ibendera regex , yang mencari pola case-sensitive. Hal yang baik tentang Javascript adalah Anda dapat menentukan fungsi anonim untuk menangani penggantian (regex).

Coba di sini

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
sumber
11
"E eth tebal"?
Joe Z.
Saya berpikir 'Tt'[b>'r']+'h', tetapi panjangnya sama
Washington Guedes
1
Maksud Anda 38 byteth
Downgoat
+1 untuk TIL bahwa perbandingan string dilakukan melalui Nilai Poin Kode
MayorMonty
@Upgoat Itu salah saya, maaf.
Neil
11

GNU Sed - 17

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

Jawaban yang jelas.

$ 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
sumber
17
Apakah maksud Anda GNU Thed? ;)
m654
8

Python 3 - 40 byteth

Golf pertama!

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

Ia menggunakan metode penerjemahanstr modul yang menerima tabel terjemahan. Tabel terjemahan sederhana dengan kode kunci sebagai kunci dan di tempat itu sebagai nilai.dictstr

Gabor Fekete
sumber
1
Selamat datang di komunitas PP&CG!
Erik the Outgolfer
4
Boleh saya bertanya, mengapa Anda memiliki 2 akun terpisah?
Bálint
@ Bálint Rupanya, dia lupa login ke akunnya saat ini dengan hanya 3 rep, tetapi pengalaman di Stack Overflow . Dan diposting dengan akun baru.
user48538
6

JavaThcript ETh6, 43 byteth

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
sumber
6
Keyakinan: Engkau hanya menulis yang menidurkan thuite untuk merebut gelar itu!
lagi mengaktifkan counterclock
6

V , 11 byteth

Ís/th
ÍS/Th

Cobalah online!

Dengan bahasa yang saya buat. Itu tidak finithed, tapi itu benar-benar bagus di regekth.

DJMcMayhem
sumber
5

C, 50 byte

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

Ganti \1dengan \x01byte yang sebenarnya .

jimmy23013 menyimpan satu byte, dan kemudian saya menyimpan dua lagi menggunakan pendekatannya! Terima kasih.

Lynn
sumber
Saya hendak berkomentar bahwa &cparameternya rusak. Tapi itu tidak, karena pada arsitektur little-endian byte kedua yang intakan 0x00dan benar-benar mengakhiri "string" ... Ini sangat pintar, aku menyukainya!
Quentin
s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
jimmy23013
Anda tidak dapat mendorong 2 byte ke dalam char. 'h\1'
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Konstanta multi-karakter adalah implementasi yang ditentukan, namun C. benar-benar valid
Dennis
5

05AB1E, 14 12 byte

's„th:'S„Th:

Jawaban lurus ke depan.

Cobalah online

Disimpan 2 byte berkat @Adnan

Emigna
sumber
Bukankan ini anthwer ke depan daripada jawaban lurus ke depan?
dorukayhan ingin Monica kembali
4

Java, 71 65 byte

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

Usaha pertama bermain golf, jadi mengapa tidak dengan Jawa.

Gila
sumber
2
Anda dapat menggunakan replacesebagai gantireplaceAll
aditsu
Oh, ya kamu benar. Terima kasih! @aditsu
Gila
3
Anda dapat menyimpan beberapa byte dengan menggunakan ekspresi lambda alih-alih fungsi. s->s.replace("S","Th").replace("s","th")
Denker
4

GNU AWK, 31 byte

Hanya menggunakan gsubfungsi untuk menerjemahkan S yang lebih rendah atau lebih tinggi melalui regex dan mencetaknya sesudahnya. Dapat bekerja dengan file, atau dengan stdinseperti dalam hal ini

$ awk '{gsub(/s/,"th");gsub(/S/,"Th")}1' <<< "This is Sparta"                   
Thith ith Thparta
Sergiy Kolodyazhnyy
sumber
3

CJam, 15 byte

q"sS""thTh"2/er

Uji di sini.

Penjelasan

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
sumber
3

Python3 - 46 byte

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

Turun 4 byte dengan bantuan @DenkerAffe !

Yytsi
sumber
1
Python 3 adalah bahasa yang pada awalnya ditulis. Versi kodenya adalah 59 byte, jadi kita akan selesai!
george
1
lambda s:s.replace("s","th").replace("S","Th")sedikit lebih pendek.
Denker
@ DenkerAffe Ya itu lebih pendek tetapi untuk menggunakan lambda dalam kasus ini, Anda masih akan membutuhkan input dan output untuk menjawab pertanyaan awal.
george
1
@george Komunitas konsensus adalah bahwa fungsi dapat menggunakan argumen dan mengembalikan nilai daripada menggunakan stdin / stdout. Silahkan lihat pada kami default untuk I / O . Meskipun tentu saja Anda dapat menimpa mereka jika Anda mau, itu tidak masuk akal dalam tantangan khusus ini.
Denker
@ DenkerAffe oke tidak apa-apa. Ketika saya mengajukan pertanyaan, maksud saya outputnya berupa gema atau cetakan. Tapi saya akan membiarkannya ke default. Jadi ya menggunakan lambda akan lebih pendek
george
3

C # 6.0 - 58 byte

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

Mengambil string input sebagai argumen ke fungsi.

Yytsi
sumber
3

Haskell, 36 byte

f 's'="th";f 'S'="Th";f x=[x]
(>>=f)
Lynn
sumber
Anda tidak perlu ruang:f's'=...
ThreeFx
1
Sayangnya, saya tahu. Nama Haskell mungkin mengandung apostrof. :(
Lynn
Sialan aku benar-benar lupa itu. Saya hampir tidak pernah membutuhkan Char...
ThreeFx
8
Saya pikir itu dengan "Hathkell"
Patrick Roberts
3

Karat, 46 byte

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

Cobalah online!

Kek
sumber
1
@ mbomb007. Saya tidak yakin Anda harus mengeditnya.
Washington Guedes
Saya membuatnya mengikuti pedoman menjawab. Saya harus dapat melihat posting dan tahu bahasa apa itu. Beberapa bahasa sudah mengandung "th", jadi ambigu. Dan siapa yang akan mengatakan bahwa seseorang tidak akan membuat bahasa yang berbeda yang sebenarnya disebut "Rutht" di masa depan?
mbomb007
2
@ mbomb007, siapa bilang seseorang tidak akan membuat bahasa lain yang disebut "Karat" di masa depan?
msh210
@ msh210 Poin moot, karena jika digunakan poster perlu diklarifikasi.
mbomb007
3

PHP, 42 Bytes

jika dijalankan dari file:

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

Jalankan sebagai:

~$ php [file] "This is Silly"
InaScuffle
sumber
-1 byte: hapus baris baru di akhir
Erik the Outgolfer
-8 byte: hapus tanda kutip. -> gunakan php -d error_reporting=0untuk menekan pemberitahuan.
Titus
3

TI-Basic, 126 byte

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
sumber
Ini salah. Str1tidak pernah berubah, dan Ansakan menyimpan nomor di bagian akhir.
lirtosiast
Terima kasih atas catatannya, perbaiki sekarang. Saya tidak tahu bagaimana saya lupa untuk menyimpan Str1kembali ...
Timtech
Ini masih salah; kesalahan ketika karakter pertama atau terakhir adalah S. Seperti yang saya katakan sebelumnya, silakan uji kode Anda sebelum Anda mempostingnya.
lirtosiast
3

Java, 101 byteth

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

Perhatikan bahwa ini adalah program yang lengkap tidak seperti jawaban Java sebelumnya .

Bonus (harus diumpankan ke C preprocessor, THE preprothethor THEE terlebih dahulu):

#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 ingin Monica kembali
sumber
2

Pyth, 14 byte

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

Suite uji

Terima kasih kepada @LeakyNun karena menemukan kesalahan ketik!

Denker
sumber
5
Jadi bahasanya adalah "Pys"? : P
mbomb007
2

MATL , 17 byte

115'th'YX83'Th'YX

Cobalah online!

Penjelasan

115    % 's' (ASCII)
'th'   % String 'th'
YX     % Regex replacement
83     % 'S' (ASCII)
'Th'   % String 'Th'
YX     % Regex replacement
Luis Mendo
sumber
2

Python 3, 53 byte

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

Pemakaian:

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

Tham and Thally like Thheep
m654
sumber
-7 byte: lambda s:s.replace("s","th").replace("S","Th")Penggunaan:(lambda s:s.replace("s","th").replace("S","Th"))(s)
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Yah, itu identik dengan jawaban TuukkaX (yang diposting sebelum saya), jadi ...
m654
Tidak ada alasan untuk mengirim jawaban lain.
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Saya tidak memperhatikannya ketika saya memposting milik saya.
m654
Anda dapat menghapus jawaban Anda setelah melihat ada jawaban yang lebih pendek dikirim sebelum jawaban Anda.
Erik the Outgolfer
2

Bahasa GameMaker, 74 byte

return string_replace_all(string_replace_all(argument0,'s','th'),'S','Th')
Timtech
sumber
2

Matlab, 39 byteth

Pendekatan langsung:

@(t)strrep(strrep(t,'s','th'),'S','Th')
pajonk
sumber
2

Emacth Lithp, 61 byteth

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

Emacs Lisp mencoba untuk menjadi pintar ketika mengganti teks, tetapi kecerdasan itu rusak ketika string yang diganti hanya membutuhkan satu ruang, yaitu huruf kapital S. Untuk mencegah hal ini dari mengubah "Sam dan Sally" menjadi "THam and THally", seluruh kata lebih cocok sebagai gantinya. Namun, ini juga menangani "SAM dan Sally" dengan cara yang diinginkan, yaitu memproduksi "THAM and Thally".

Tuan Yuuma
sumber
2

kode mesin x86, 19 byte

Dalam hex:

86ac3c5374043c73750440aab068aa84c075eec3

Input:: ESIstring input,: EDIbuffer output.

Membongkar:

_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
sumber
Anda dapat menggunakannya test al, 'S'untuk memeriksa keduanya sekaligus
anatolyg
2

Menembus 98, 37 49 byte

Versi asli :

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

Mengakhiri edisi, sesuai konsensus:

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

Ini meninggalkan lubang klakson besar dalam kisi kode yang tidak begitu saya sukai. Saya akan melihat itu ketika saya punya waktu.
Byte ke-49 adalah ruang di akhir baris kedua, termasuk untuk memiliki kotak persegi panjang, yang diperlukan untuk mencegah ccbi (dan mungkin penerjemah lain) dari menyadap dan mencetak garis "Th" yang tak terbatas.

karhell
sumber
2

35 Byteth of Julia:

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

Cobalah online! (termasuk semua kasus uji)

satu menit lagi
sumber
Hei, tidakkah aku mengenalmu dari suatu tempat? ;)
Alex A.
1

SpecBAS ThpecBATh - 53 byte

1 INPUT a$: ?REPLACE$(REPLACE$(a$,"S","Th"),"s","th")
Brian
sumber