Litplator


28

Bạn tôi đã làm một dịch giả lisp vào một ngày khác, nghĩa là nó đã lấy một chuỗi và chuyển đổi s => th và S => Th. Nó khá dài và tôi nghĩ rằng nó có thể được chơi gôn.

Vì vậy, nhiệm vụ là tạo một chương trình / hàm lấy chuỗi đầu vào, dịch nó thành lisp và xuất chuỗi

Trường hợp thử nghiệm

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

Lưu ý rằng việc h lặp đi lặp lại mọi lúc

Đây là mã golf nên câu trả lời ngắn nhất sẽ thắng


13
Tôi ước mọi người sẽ thay đổi các byte trong tiêu đề của họ thành byteth .
Leaky Nun

6
Cần có điểm thưởng nếu chương trình không sử dụng scũng như không có Schỗ nào trong đó.
Kim cương Nate

1
Tôi nghĩ rằng tên ngôn ngữ nên được làm rõ. Nếu không có sự thay thế. Một số ngôn ngữ đã chứa "th", vì vậy nó không rõ ràng. Và ai sẽ nói rằng ai đó sẽ không tạo ra một ngôn ngữ khác thực sự được gọi là "Common Litp" trong tương lai?
mbomb007

1
@ mbomb007 Tôi sẽ không lo lắng về nó quá nhiều. Tôi không chắc chắn nếu thực sự có một cách mặc định để đặt tiêu đề cho câu trả lời của bạn. Hầu hết các câu hỏi tôi thấy nếu họ làm thế nào để làm điều đó thường là như vậy. Vì tôi không giải thích được câu trả lời nên được đặt ra như thế nào, nên người dùng có thể tự do đặt tiêu đề cho họ theo cách họ muốn. Là một giáo viên, tôi thậm chí không yêu cầu một ngôn ngữ, vì vậy tôi có thể tranh luận chống lại họ thậm chí viết chúng. Nhưng tôi hiểu quan điểm của bạn. Tôi chỉ không nghĩ rằng đó là mối quan tâm
george

2
Một điều có thể làm cho thử thách này trở nên thú vị hơn là bảo quản trường hợp tổng thể, ví dụLOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
fluffy

Câu trả lời:


36

Tiếng Litva thông thường, 62

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

Đầu tiên, (read)đầu vào (nó phải là một chuỗi). Chuỗi trong CL là chuỗi nên chúng tôi sử dụng mapđể lặp trên mỗi ký tự. Đối số đầu tiên mapđại diện cho loại kết quả (ví dụ: tôi có thể xây dựng một danh sách từ một vectơ). Khi đó nil, aka (), kết quả bị loại bỏ. Hàm được ánh xạ tới đầu vào một cách đơn giản princ(in không thể đọc được) mỗi ký tự, ngoại trừ các ký tự cần được thay thế.


14
Tên ngôn ngữ đó mặc dù.
Joe Z.

1
@JoeZ. Tôi chỉ thay thế sbằng th, giống như mọi người khác đã làm: nhìn vào những câu trả lời của Pyson.
coredump

@coredump Tất cả đều sai: đó là một chiều: s-> th, S-> Th, th-> th, Th-> Th.
Erik the Outgolfer

1
@DrGreenEggsandIronMan Chắc chắn, (defmacro cathe (&rest args) `(case ,@args))
đã kết thúc vào

1
Ok lol có ý nghĩa hơn


13

JavaThcript ETh6, 38 byte

Lúc đầu tôi đi với giải pháp rõ ràng

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

Nhưng tôi đã đánh nó xuống 4 byte

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

Điều này sử dụng icờ regex , tìm kiếm các mẫu không phân biệt chữ hoa chữ thường. Điểm hay của Javascript là bạn có thể chỉ định một hàm ẩn danh để xử lý (regex) thay thế.

Hãy thử nó ở đây

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 độ dày"?
Joe Z.

Tôi đã suy nghĩ 'Tt'[b>'r']+'h', nhưng nó có cùng chiều dài
Washington Guedes

1
Bạn có nghĩa là 38 byteth
Downgoat

+1 cho TIL rằng so sánh chuỗi được thực hiện thông qua Giá trị điểm mã
MayorMonty

@Upgoat Đó là lỗi của tôi xin lỗi.
Neil

11

GNU Sed - 17

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

Câu trả lời rõ ràng.

$ 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
Ý bạn là GNU Thed? ;)
m654


8

Python 3 - 40 byteth

Chơi golf đầu tiên!

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

Nó sử dụng phương thức dịchstr của mô-đun chấp nhận bảng dịch. Bảng dịch đơn giản với mã khóa là khóa và vị trí của nó là giá trị.dictstr


1
Chào mừng đến với cộng đồng PP & CG!
Erik the Outgolfer

4
Tôi có thể hỏi bạn, tại sao bạn có 2 tài khoản riêng biệt?
Bálint

@ Bálint Rõ ràng, anh ta quên đăng nhập vào tài khoản hiện tại của mình chỉ với 3 đại diện, nhưng một trải nghiệm trên Stack Overflow . Và được đăng với một tài khoản mới.
dùng48538

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: ngươi chỉ wroteth rằng tetht thuite cho thake của tiêu đề thứ i!
đã ngừng quay ngược chiều


5

C, 50 byte

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

Thay thế \1bằng một \x01byte thực tế .

jimmy23013 đã lưu một byte, và sau đó tôi đã lưu thêm hai byte bằng cách sử dụng phương pháp của anh ấy! Cảm ơn.


Tôi đã nhận xét rằng các &ctham số bị hỏng. Nhưng không phải vậy, bởi vì trên một kiến ​​trúc nhỏ bé, byte thứ hai intsẽ 0x00và thực sự chấm dứt "chuỗi" ... Điều này thật thông minh khủng khiếp, tôi yêu nó!
Quentin

s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
tháng bảy23013

Bạn không thể đẩy 2 byte vào a char. 'h\1'
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Hằng số nhiều ký tự được xác định, bu hoàn toàn hợp lệ C.
Dennis


4

Java, 71 65 byte

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

Lần đầu tiên thử chơi golf, vậy tại sao không với Java.


2
Bạn có thể sử dụng replacethay vìreplaceAll
aditsu

Ồ, vâng, bạn đúng. Cảm ơn! @aditsu
Mất trí

3
Bạn có thể lưu một số byte bằng cách sử dụng biểu thức lambda thay vì hàm. s->s.replace("S","Th").replace("s","th")
Denker

4

GNU AWK, 31 byte

Chỉ cần sử dụng gsubchức năng để dịch S thấp hơn hoặc cao hơn thông qua regex và in nó sau đó. Có thể làm việc với các tệp hoặc với stdinnhư trong trường hợp này

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

3

CJam, 15 byte

q"sS""thTh"2/er

Kiểm tra nó ở đây.

Giải trình

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

Giảm 4 byte với sự trợ giúp của @DenkerAffe !


1
Python 3 là ngôn ngữ ban đầu được viết bằng. Phiên bản mã của tôi là 59 byte, vậy là xong!
george

1
lambda s:s.replace("s","th").replace("S","Th")ngắn hơn một chút
Denker

@DenkerAffe Có, nó ngắn hơn nhưng để sử dụng lambda trong trường hợp này, bạn vẫn sẽ cần một đầu vào và đầu ra để trả lời câu hỏi ban đầu.
george

1
@george Đồng thuận cộng đồng là các hàm có thể sử dụng đối số và trả về giá trị thay vì sử dụng stdin / stdout. Có một cái nhìn tại của chúng tôi giá trị mặc định cho I / O . Mặc dù bạn có thể ghi đè chúng nếu bạn muốn, nhưng điều đó sẽ không có ý nghĩa gì trong thử thách đặc biệt này.
Denker

@DenkerAffe không sao đâu. Khi tôi hỏi câu hỏi tôi có nghĩa là đầu ra sẽ là một tiếng vang hoặc in. Nhưng tôi sẽ để mặc định. Vì vậy, có sử dụng lambda sẽ ngắn hơn
george

3

C # 6.0 - 58 byte

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

Lấy chuỗi đầu vào làm đối số cho hàm.


3

Haskell, 36 byte

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

Bạn không cần dung lượng:f's'=...
ThreeFx

1
Đáng buồn thay, tôi làm. Tên Haskell có thể chứa dấu nháy đơn. :(
Lynn

Ôi chết tiệt, tôi hoàn toàn quên mất điều đó. Tôi gần như không bao giờ cần Char...
ThreeFx

8
Tôi nghĩ rằng nó đã "Hathkell"
Patrick Roberts

3

Rust, 46 byte

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

Hãy thử trực tuyến!


1
@ mbomb007. Tôi không chắc bạn nên chỉnh sửa nó.
Washington Guedes

Tôi đang làm cho nó theo hướng dẫn trả lời. Tôi có thể xem một bài đăng và biết nó là ngôn ngữ gì. Một số ngôn ngữ đã chứa "th", vì vậy nó không rõ ràng. Và ai sẽ nói rằng ai đó sẽ không tạo ra một ngôn ngữ khác thực sự gọi là "Rutht" trong tương lai?
mbomb007

2
@ mbomb007, ai sẽ nói ai đó sẽ không tạo ra một ngôn ngữ khác gọi là "Rust" trong tương lai?
msh210

@ msh210 Điểm Moot, vì nếu sử dụng poster sẽ cần làm rõ.
mbomb007

3

PHP, 42 byte

nếu chạy từ một tập tin:

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

Chạy như:

~$ php [file] "This is Silly"

-1 byte: xóa dòng mới ở cuối
Erik the Outgolfer

-8 byte: xóa dấu ngoặc kép. -> sử dụng php -d error_reporting=0để triệt tiêu các thông báo.
Tít

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

Cái này sai. Str1không bao giờ thay đổi, và Anssẽ giữ một số ở cuối.
lirtosiast

Cảm ơn đã lưu ý, cố định ngay bây giờ. Tôi không biết làm thế nào tôi quên lưu Str1lại ...
TimTech

Điều này vẫn sai; nó bị lỗi khi ký tự đầu tiên hoặc cuối cùng là S. Như tôi đã nói trước đây, vui lòng kiểm tra mã của bạn trước khi bạn đăng nó.
lirtosiast

3

Java, 101 byteth

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

Lưu ý rằng đây là một chương trình hoàn chỉnh không giống như câu trả lời Java trước đó .

Phần thưởng (trước tiên phải được đưa vào bộ tiền xử lý C THEE preprothethor):

#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 byte

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

Sử dụng:

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

Tham and Thally like Thheep

-7 byte: lambda s:s.replace("s","th").replace("S","Th")Cách sử dụng:(lambda s:s.replace("s","th").replace("S","Th"))(s)
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Chà, giống hệt câu trả lời của TuukkaX (đã được đăng trước tôi), vì vậy ...
m654

Không có lý do để gửi câu trả lời khác sau đó.
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Tôi đã không chú ý đến anh ấy khi tôi đăng bài của tôi.
m654

Bạn có thể xóa câu trả lời của mình sau khi bạn nhận thấy có một câu ngắn hơn được đăng trước câu trả lời của bạn.
Erik the Outgolfer

2

Ngôn ngữ GameMaker, 74 byte

return string_replace_all(string_replace_all(argument0,'s','th'),'S','Th')

2

Matlab, 39 byteth

Một cách tiếp cận eo biển:

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

2

Emacth Litva, 61 byteth

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

Emacs Lisp cố gắng thông minh khi thay thế văn bản, nhưng sự thông minh đó bị phá vỡ khi chuỗi thay thế chỉ chiếm một khoảng trắng, tức là chữ in hoa S. Để ngăn điều này chuyển đổi "Sam và Sally" thành "THam và THally", toàn bộ từ được kết hợp thay thế. Tuy nhiên, điều này cũng xử lý "SAM và Sally" theo cách mà người ta muốn, tức là sản xuất "THAM và Thally".


2

mã máy x86, 19 byte

Trong hex:

86ac3c5374043c73750440aab068aa84c075eec3

Đầu vào :: ESIchuỗi đầu vào,EDI : bộ đệm đầu ra.

Tháo gỡ:

_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         

Bạn có thể sử dụng test al, 'S'để kiểm tra cả hai cùng một lúc
anatolyg

2

Befunge 98, 37 49 byte

Phiên bản gốc :

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

Phiên bản chấm dứt, theo sự đồng thuận:

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

Điều này để lại một lỗ hổng lớn trong lưới mã mà tôi không hài lòng lắm. Tôi sẽ xem xét điều đó khi tôi có thời gian.
Byte thứ 49 là khoảng trắng ở cuối dòng thứ hai, được bao gồm để có lưới hình chữ nhật, được yêu cầu để ngăn ccbi (và có thể là các trình thông dịch khác) phát hiện ra và in một dòng "Th" vô hạn.



1

SpecBAS ThpecBATh - 53 byte

1 INPUT a$: ?REPLACE$(REPLACE$(a$,"S","Th"),"s","th")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.