Tranthlator lithp


28

เพื่อนของฉันทำนักแปลเสียงกระเพื่อมในวันอื่น ๆ นั่นก็คือมันใช้เชือกและแปลง s => th และ S => Th มันค่อนข้างยาวและฉันคิดว่ามันสามารถเล่นกอล์ฟได้

ดังนั้นงานคือการสร้างโปรแกรม / ฟังก์ชั่นที่รับสายป้อนเข้าแปลมันเป็นเสียงกระเพื่อมและเอาท์พุทสตริง

กรณีทดสอบ

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

โปรดทราบว่าไม่สำคัญว่า h จะถูกทำซ้ำตลอดเวลา

นี่คือรหัสกอล์ฟเพื่อให้ได้คำตอบที่สั้นที่สุดชนะ


13
ฉันทุกคนอยากจะเปลี่ยนไบต์ในส่วนหัวของพวกเขาเพื่อbyteth
Leun Nun

6
ควรมีคะแนนโบนัสหากโปรแกรมไม่ได้ใช้sหรือไม่มีSในโปรแกรม
Nate Diamond

1
ฉันคิดว่าชื่อภาษาควรชัดเจน โดยไม่ต้องเปลี่ยนใหม่ บางภาษามี "th" อยู่แล้วดังนั้นจึงไม่ชัดเจน และใครจะบอกว่าใครบางคนจะไม่สร้างภาษาที่แตกต่างกันจริง ๆ เรียกว่า "สามัญ Lithp" ในอนาคต?
mbomb007

1
@ mbomb007 ฉันจะไม่กังวลมากเกินไป ฉันไม่แน่ใจว่าจริงๆแล้วมีวิธีเริ่มต้นในการตั้งชื่อคำตอบของคุณหรือไม่ คำถามส่วนใหญ่ฉันดูว่าพวกเขาระบุว่าจะทำอย่างไรโดยปกติแล้วจะเป็นเช่นเดียวกัน ในขณะที่ฉันยังไม่ได้อธิบายว่าควรตั้งคำตอบอย่างไรผู้ใช้มีอิสระในการตั้งชื่อพวกเขาว่าพวกเขาต้องการอย่างไร ในฐานะที่เป็นคนอวดรู้ฉันไม่ได้ขอภาษาเพื่อที่ฉันจะได้โต้เถียงกับพวกเขาแม้แต่เขียนมัน แต่ฉันเข้าใจประเด็นของคุณ ฉันไม่คิดว่ามันเป็นเรื่องกังวล
จอร์จ

2
สิ่งที่จะทำให้ความท้าทายนี้น่าสนใจยิ่งขึ้นก็คือการเก็บรักษาเคสโดยรวมเช่นLOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
นุ่ม

คำตอบ:


36

Lithp สามัญ, 62

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

ก่อนอื่น(read)อินพุต (ควรเป็นสตริง) สตริงใน CL เป็นลำดับดังนั้นเราจึงใช้mapในการทำซ้ำกับตัวละครแต่ละตัว อาร์กิวเมนต์แรกเพื่อmapแสดงประเภทของผลลัพธ์ (เช่นฉันสามารถสร้างรายการจากเวกเตอร์) เมื่อเป็นnilเช่น()นั้นแล้วผลลัพธ์จะถูกยกเลิก ฟังก์ชั่นที่แมปเข้ากับอินพุตprinc(พิมพ์อย่างไม่สามารถอ่านได้) แต่ละตัวอักษรยกเว้นตัวที่ควรเปลี่ยน


14
แม้ว่าชื่อภาษานั้น
Joe Z.

1
@JoeZ ฉันเพิ่งแทนที่sโดยthเหมือนทุกคนอื่น: ดูคำตอบที่ Pyson
coredump

@coredump พวกเขากำลังผิดทั้งหมด: มันเป็นทางเดียว: s-> th, S-> Th, th-> th, ->Th Th
Erik the Outgolfer

1
@DrGreenEggsandIronMan แน่นอน, (defmacro cathe (&rest args) `(case ,@args))
coredump

1
โอเค ๆ นั่นเหมาะสมกว่า


13

JavaThcript ETh6, 38 ไบต์

ตอนแรกฉันไปกับทางออกที่ชัดเจน

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

แต่ฉันตีมันลง 4 ไบต์

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

สิ่งนี้ใช้iแฟล็ก regex ซึ่งค้นหารูปแบบที่ไม่ต้องสนใจตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ข้อดีของ Javascript คือคุณสามารถระบุฟังก์ชันที่ไม่ระบุชื่อเพื่อจัดการ (regex) การแทนที่

ลองที่นี่

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 Ethththththth"?
Joe Z.

ฉันกำลังคิด'Tt'[b>'r']+'h'แต่มันมีความยาวเท่ากัน
Washington Guedes

1
คุณหมายถึง 38 byteth
Downgoat

+1 สำหรับ TIL นั้นการเปรียบเทียบสตริงจะกระทำผ่าน Code Point Value
MayorMonty

@Upgoat นั่นเป็นความผิดของฉันขอโทษ
Neil

11

GNU Sed - 17

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

คำตอบที่ชัดเจน

$ 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
คุณหมายถึง GNU Thed หรือเปล่า ;)
m654


8

Python 3 - 40 byteth

ตีกอล์ฟครั้งแรก!

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

มันใช้วิธีการแปลstrของโมดูลซึ่งยอมรับตารางการแปล ตารางการแปลนั้นใช้งานง่ายโดยมีรหัสเป็นกุญแจและเป็นค่าแทนdictstr


1
ยินดีต้อนรับสู่ชุมชน PP&CG!
Erik the Outgolfer

4
ฉันขอถามคุณได้ไหมว่าทำไมคุณมี 2 บัญชีแยกกัน
Bálint

@ Bálintเห็นได้ชัดว่าเขาลืมที่จะเข้าสู่ระบบบัญชีปัจจุบันของเขามีเพียง 3ตัวแทน แต่ประสบการณ์ในกองมากเกิน และโพสต์ด้วยบัญชีใหม่
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
Confethth: เจ้าเขียน แต่คนที่ใช้ชื่อของมันเท่านั้น!
หยุดที่จะเปลี่ยนรหัสลับเมื่อ


5

C, 50 ไบต์

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

แทนที่\1ด้วย\x01ไบต์จริง

jimmy23013 บันทึกหนึ่งไบต์จากนั้นฉันบันทึกอีกสองวิธีโดยใช้วิธีของเขา! ขอบคุณ


ฉันกำลังจะแสดงความคิดเห็นว่า&cพารามิเตอร์เสีย แต่ไม่ใช่เพราะในสถาปัตยกรรมเล็ก ๆ น้อย ๆ ไบต์ที่สองของนั้นintจะเป็น0x00จริงและยุติ "สตริง" ... นี่มันช่างฉลาดเหลือเกินฉันรักมัน!
เควนติน

s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
jimmy23013

คุณไม่สามารถผลักดัน 2 charไบต์เป็น 'h\1'
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀค่าคงที่แบบหลายตัวอักษรถูกกำหนดไว้การใช้งานนั้นถูกต้องสมบูรณ์ C
Dennis


4

Java, 71 65 ไบต์

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

ความพยายามครั้งแรกในการเล่นกอล์ฟดังนั้นทำไมไม่ใช้ Java


2
คุณสามารถใช้replaceแทนreplaceAll
aditsu

โอ้ใช่คุณพูดถูก ขอบคุณ! @aditsu
Insane

3
คุณสามารถบันทึกบางไบต์โดยใช้การแสดงออกแลมบ์ดาแทนฟังก์ชั่น s->s.replace("S","Th").replace("s","th")
Denker

4

GNU AWK, 31 ไบต์

เพียงแค่ใช้gsubฟังก์ชั่นในการแปล S หรือ S ที่ต่ำกว่าผ่าน Regex และพิมพ์มันในภายหลัง สามารถทำงานกับไฟล์หรือstdinในกรณีนี้

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


3

Python3 - 46 ไบต์

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

ลดลง 4 ไบต์ด้วยความช่วยเหลือของ@DenkerAffe !


1
Python 3 เป็นภาษาที่เขียนขึ้นในตอนแรกโค้ดของฉันมีขนาด 59 ไบต์ดังนั้นเราจะทำให้เสร็จ!
george

1
lambda s:s.replace("s","th").replace("S","Th")สั้นกว่านี้เล็กน้อย
Denker

@DenkerAffe ใช่มันสั้นกว่า แต่ถ้าใช้แลมบ์ดาในกรณีนี้คุณยังคงต้องการอินพุตและเอาต์พุตเพื่อตอบคำถามเดิม
george

1
@george Community consensus คือฟังก์ชันสามารถใช้อาร์กิวเมนต์และส่งคืนค่าแทนการใช้ stdin / stdout มีลักษณะที่เราค่าเริ่มต้นสำหรับ I / O แม้ว่าคุณจะสามารถเอาชนะพวกเขาได้หากคุณต้องการ แต่มันก็ไม่สมเหตุสมผลในความท้าทายนี้
Denker

@DenkerAffe โอเคไม่เป็นไร เมื่อฉันถามคำถามฉันหมายถึงผลลัพธ์จะเป็นเสียงสะท้อนหรือการพิมพ์ แต่ฉันจะปล่อยให้มันเป็นค่าเริ่มต้น ดังนั้นใช่การใช้แลมบ์ดาจะสั้นลง
จอร์จ

3

C # 6.0 - 58 ไบต์

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

รับค่าสตริงป้อนเข้าเป็นอาร์กิวเมนต์ของฟังก์ชัน


3

Haskell, 36 ไบต์

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

คุณไม่ต้องการพื้นที่:f's'=...
ThreeFx

1
น่าเศร้าที่ฉันทำ ชื่อ Haskell อาจมีเครื่องหมายวรรคตอน :(
Lynn

โอ้ฉันลืมไปหมดแล้ว ฉันเกือบจะไม่ต้องChars ...
ThreeFx

8
ฉันคิดว่ามันน่าจะ "Hathkell"
Patrick Roberts

3

สนิม 46 ไบต์

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

ลองออนไลน์!


1
@ mbomb007 ฉันไม่แน่ใจว่าคุณควรแก้ไขมัน
Washington Guedes

ฉันทำตามแนวทางการตอบรับ ฉันควรจะสามารถดูโพสต์และรู้ว่ามันเป็นภาษาอะไร บางภาษามี "th" อยู่แล้วดังนั้นจึงไม่ชัดเจน และใครจะบอกว่าใครบางคนจะไม่สร้างภาษาที่แตกต่างกันจริง ๆ เรียกว่า "รูทท์" ในอนาคต?
mbomb007

2
@ mbomb007 ใครจะพูดว่าบางคนจะไม่สร้างภาษาอื่นที่เรียกว่า "สนิม" ในอนาคต
msh210

@ msh210 จุดที่สงสัยเพราะถ้าใช้โปสเตอร์จะต้องชี้แจง
mbomb007

3

PHP, 42 ไบต์

หากเรียกใช้จากไฟล์:

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

ทำงานเป็น:

~$ php [file] "This is Silly"

-1 ไบต์: ลบบรรทัดใหม่ในตอนท้าย
Erik the Outgolfer

-8 ไบต์: ลบเครื่องหมายคำพูด -> ใช้php -d error_reporting=0เพื่อระงับการแจ้งเตือน
ติตัส

3

TI-Basic, 126 ไบต์

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

นี่เป็นสิ่งที่ผิด Str1ไม่เคยเปลี่ยนแปลงและAnsจะถือหมายเลขที่ส่วนท้าย
lirtosiast

ขอขอบคุณสำหรับการแก้ไขตอนนี้ ฉันไม่รู้ว่าจะลืมบันทึกStr1อีกครั้งได้อย่างไร ...
Timtech

สิ่งนี้ยังคงผิด มันเป็นข้อผิดพลาดเมื่อตัวอักษรตัวแรกหรือตัวสุดท้ายคือ S ดังที่ฉันได้บอกไปแล้วก่อนหน้านี้โปรดทดสอบรหัสของคุณก่อนโพสต์
lirtosiast

3

Java, 101 byteth

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

ทราบว่านี้เป็นโปรแกรมที่สมบูรณ์แตกต่างจากคำตอบ Java ก่อนหน้านี้

โบนัส (จะต้องถูกส่งไปยังตัวประมวลผลล่วงหน้า C ล่วงหน้าก่อนพวกเขา):

#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

Python 3, 53 ไบต์

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

การใช้งาน:

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

Tham and Thally like Thheep

-7 bytes: lambda s:s.replace("s","th").replace("S","Th")การใช้งาน:(lambda s:s.replace("s","th").replace("S","Th"))(s)
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀก็เหมือนกับคำตอบของ TuukkaX (ซึ่งโพสต์ก่อนหน้าฉัน) ดังนั้น ...
m654

ไม่มีเหตุผลที่จะโพสต์คำตอบอื่นแล้ว
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀฉันไม่ได้สังเกตเห็นเขาเมื่อฉันโพสต์ของฉัน
m654

คุณสามารถลบคำตอบของคุณเมื่อคุณสังเกตเห็นว่ามีคำตอบที่สั้นกว่าอยู่ข้างหน้าคุณ
Erik the Outgolfer



2

Emacth Lithp, 61 byteth

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

Emacs Lisp พยายามที่จะฉลาดเมื่อเปลี่ยนข้อความ แต่ความฉลาดนั้นแตกเมื่อสตริงที่ถูกแทนที่ใช้พื้นที่เพียงหนึ่งเดียวนั่นคือตัวพิมพ์ใหญ่ S เพื่อป้องกันไม่ให้สิ่งนี้แปลง "แซมกับแซลลี" เป็น "THAM และ THally" จับคู่แทน อย่างไรก็ตามสิ่งนี้ยังจัดการ "SAM และ Sally" ในแบบที่เราต้องการเช่นการผลิต "THAM และ Thally"


2

รหัสเครื่อง x86 ขนาด 19 ไบต์

ในรูปหกเหลี่ยม:

86ac3c5374043c73750440aab068aa84c075eec3

อินพุต:: ESIสตริงอินพุต, EDI: บัฟเฟอร์เอาต์พุต

ถอดชิ้นส่วน:

_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         

คุณสามารถใช้test al, 'S'เพื่อตรวจสอบทั้งสองได้ในครั้งเดียว
Anatolyg

2

Befunge 98, 37 49 bytes

รุ่นเดิม :

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

การยกเลิกฉบับเป็นฉันทามติ:

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

นี่ทำให้เกิดช่องโหว่ขนาดใหญ่ในกริดโค้ดที่ฉันไม่พอใจมาก ฉันจะดูว่าเมื่อฉันมีเวลา
ไบต์ที่ 49 เป็นช่องว่างที่ส่วนท้ายของบรรทัดที่สองซึ่งรวมถึงมีตารางสี่เหลี่ยมจำเป็นต้องป้องกัน ccbi (และอาจเป็นล่ามอื่น ๆ ) จากการดักฟังและพิมพ์บรรทัดที่ไม่มีที่สิ้นสุดของ "Th"



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.