莉丝·坦珀斯


28

前几天,我的朋友做了一个轻快的翻译器,也就是说,它花了一个字符串并转换了s => th和S => Th。时间很长,我认为可以打高尔夫球。

因此,任务是制作一个程序/函数,以接收输入字符串,将其转换为lisp并输出字符串

测试用例

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
Leaky Nun

6
如果程序既不使用s也不使用S任何地方,则应该有加分。
Nate Diamond

1
我认为语言名称应明确。无需更换。一些语言已经包含“ th”,因此它是模棱两可的。谁又说将来不会有人创造出另一种实际上称为“ Common Lithp”的语言呢?
mbomb007 '16

1
@ mbomb007我不用担心太多。我不确定是否真的有默认的标题标题。我所看到的大多数问题是,他们是否确实声明了如何做,通常是相同的方式。由于我还没有解释应如何设置答案,因此用户可以自由地为他们添加所需的标题。作为一个学徒,我什至不要求一种语言,所以我甚至可以反对他们写这些东西。但我理解您的意思。我只是认为这
乔治

2
整个案例的保存将使这个挑战变得更加有趣,例如LOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
蓬松的2016年

Answers:


36

普通石狮,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-> thS-> Thth-> thTh-> Th
暴民埃里克

1
@DrGreenEg​​gsandIronMan当然, (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标志,该标志搜索不区分大小写的模式。关于Javascript的好处是,您可以指定一个匿名函数来处理(正则表达式)替换。

在这里尝试

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 thickth”?
Joe Z.

我当时在想'Tt'[b>'r']+'h',但长度是一样的
华盛顿瓜迪斯

1
您的意思是38个字节
Downgoat

对于TIL +1,该字符串比较是通过代码点值完成的
MayorMonty

@Upgoat对不起,这是我的错。
尼尔

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字节

第一次打高尔夫球!

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

它使用str模块的翻译方法,该方法接受翻译表。转换表很简单dict,键码是键,而键码str是值。


1
欢迎来到PP&CG社区!
暴民埃里克

4
我可以问一下,为什么您有两个不同的帐户?
巴林特

@Bálint显然,他忘记了只有3个代表的当前帐户,却没有Stack Overflow的经验。并用新帐户发布。
user48538

6

JavaThcript ETh6,43字节

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:您只为那个标题而写了thuite!


5

C,50个字节

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

替换\1为实际的\x01字节。

jimmy23013保存了一个字节,然后我使用他的方法保存了两个字节!谢谢。


我即将评论该&c参数已损坏。但它不是,因为一个小端架构的第二个字节int0x00实际上终止“串” ......这是可怕的聪明,我喜欢它!
昆汀

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

您不能将2个字节放入char'h\1'
暴民埃里克(Erik the Outgolfer)

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ多字符常数的实现定义的,BU完全有效C.
丹尼斯


4

Java,71 65字节

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

首先尝试打高尔夫球,为什么不使用Java。


2
您可以使用replace代替replaceAll
aditsu

哦,是的,你是对的。谢谢!@aditsu
Insane

3
您可以使用lambda表达式而不是函数来节省一些字节。s->s.replace("S","Th").replace("s","th")
Denker

4

GNU AWK,31个字节

只需使用gsub功能通过正则表达式转换低或高S,然后再打印即可。可以使用文件,或stdin在这种情况下

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

3

CJam,15个字节

q"sS""thTh"2/er

在这里测试。

说明

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个字节

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

@DenkerAffe的帮助下删除了 4个字节!


1
Python 3是它最初使用的语言。我的代码版本是59字节,所以我们会做的!
乔治,

1
lambda s:s.replace("s","th").replace("S","Th")有点短。
Denker

@DenkerAffe是的,它比较短,但是在这种情况下使用lambda,您仍然需要输入和输出来回答原始问题。
乔治,

1
@george社区的共识是,函数可以使用参数并返回值,而不是使用stdin / stdout。看看我们的I / O默认值。虽然当然可以根据需要覆盖它们,但是在此特定挑战中并没有多大意义。
Denker

@DenkerAffe好的,很好。当我问这个问题时,我的意思是输出将是回显或打印。但是我将其保留为默认值。所以是的,使用lambda会更短
乔治

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名称可能包含撇号。:(
林恩

噢,该死,我完全忘记了。我几乎永远都不需要Char...
ThreeFx

8
我以为它是“ Hathkell”的样子
Patrick Roberts

3

Rust,46个字节

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

在线尝试!


1
@ mbomb007。我不确定您应该对此进行编辑。
华盛顿瓜

我正在按照回答指南进行操作。我应该能够查看帖子并知道它是哪种语言。一些语言已经包含“ th”,因此它是模棱两可的。谁又说将来有人不会创造另一种实际上称为“ Rutht”的语言呢?
mbomb007 '16

2
@ mbomb007,谁说将来不会有人创建另一种叫做“ Rust”的语言?
msh210 '16

@ msh210讨论要点,因为如果使用海报,则需要澄清。
mbomb007 '16

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隐藏通知。
泰特斯(Titus)

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 2016年

感谢您的来信,现已修复。我不知道我如何忘记Str1再次保存...
Timtech '16

这仍然是错误的。当第一个或最后一个字符为S时,它会出错。正如我之前说过的,请在发布代码之前对其进行测试。
lirtosiast

3

Java,101字节

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

请注意,这是一个完整的程序,与以前的Java答案不同

奖金(必须先送至C预处理程序 THEE prothetheth):

#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个字节: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的答案(在我的面前发布)
完全相同

那时没有理由再发布另一个答案。
暴民埃里克

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ发布我的消息时,我没有注意到他。
m654

一旦发现您的答案较短,您可以删除答案。
暴民埃里克(Erik the Outgolfer)

2

GameMaker语言,74字节

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

2

Matlab,39字节

僵硬的方法:

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

2

Emacth Lithp,61字节

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

Emacs Lisp尝试在替换文本时变得聪明,但是当替换的字符串仅占用一个空格(即大写字母S)时,这种聪明就破坏了。为防止将其替换为“ Sam and Sally”到“ THam and 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个字节

原始版本:

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

终止版本,根据共识:

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

这在代码网格中留下了一个很大的麻烦,我对此并不满意。有空的时候我会调查一下。
第49个字节是第二行末尾的空格,包括一个矩形网格,可防止ccbi(可能还有其他解释器)错误输出并打印无限行“ Th”。



1

SpecBAS ThpecBATh-53字节

1 INPUT a$: ?REPLACE$(REPLACE$(a$,"S","Th"),"s","th")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.