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


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.


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


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>


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

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


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'));


6
Keyakinan: Engkau hanya menulis yang menidurkan thuite untuk merebut gelar itu!
lagi mengaktifkan counterclock


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.


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


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.


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

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'.

3

Python3 - 46 byte

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

Turun 4 byte dengan bantuan @DenkerAffe !


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.


3

Haskell, 36 byte

f 's'="th";f 'S'="Th";f x=[x]
(>>=f)

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!


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"

-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

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"));}}

2

Pyth, 14 byte

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

Suite uji

Terima kasih kepada @LeakyNun karena menemukan kesalahan ketik!


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

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

-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')

2

Matlab, 39 byteth

Pendekatan langsung:

@(t)strrep(strrep(t,'s','th'),'S','Th')

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".


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         

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.



1

SpecBAS ThpecBATh - 53 byte

1 INPUT a$: ?REPLACE$(REPLACE$(a$,"S","Th"),"s","th")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.