리스프 트랜 슬레이터


28

내 친구가 며칠 동안 lisp 번역기를 만들었습니다. 즉, 문자열을 가져 와서 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어디서든한다.
네이트 다이아몬드

1
언어 이름이 명확해야한다고 생각합니다. 교체하지 않고. 일부 언어에는 "th"가 이미 포함되어 있으므로 모호합니다. 누가 미래에 실제로 "공통 언어"라는 다른 언어를 만들지 않을 것이라고 누가 말하겠습니까?
mbomb007

1
@ mbomb007 나는 그것에 대해 너무 걱정하지 않을 것입니다. 실제로 답변의 제목을 지정하는 기본 방법이 있는지 확실하지 않습니다. 그들이하는 방법을 진술하는 경우 대부분의 질문은 일반적으로 같은 방식입니다. 대답을 어떻게 설정해야하는지 설명하지 않았으므로 사용자는 원하는대로 제목을 자유롭게 지정할 수 있습니다. 나는 아이들이기 때문에 언어를 요구하지 않았기 때문에 언어를 쓰지도 않고 논쟁 할 수있었습니다. 그러나 나는 당신의 요점을 이해합니다. 난 그냥 걱정하지 않는다
조지

2
이 문제를 더욱 흥미롭게 만든 것은 전체적인 사례 보존 일 것입니다. 예 :LOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
솜털 같은

답변:


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-> th, S-> Th, th-> th, Th-> Th.
아웃 골퍼 에릭

1
@DrGreenEggsandIronMan 물론, (defmacro cathe (&rest args) `(case ,@args))
코어 덤프

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
"두껍게 전자?"
Joe Z.

에 대해 생각하고 'Tt'[b>'r']+'h'있었지만 길이는 같습니다
Washington Guedes

1
당신은 38 바이트를 의미
Downgoat

문자열 비교가 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

파이썬 3-40 바이트

첫 골프!

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

변환 표를 허용하는 str모듈의 변환 메소드를 사용 합니다. 변환 테이블은 dict키 코드를 키로 사용하고 str대신 키 값을 값 으로 사용 하여 간단 합니다.


1
PP & CG 커뮤니티에 오신 것을 환영합니다!
아웃 골퍼 에릭

4
왜 두 개의 별도 계정이 있는지 물어볼 수 있습니까?
Bálint

@ Bálint 분명히, 그는 3 명의 담당자 로만 현재 계정에 로그인하는 것을 잊었 지만 Stack Overflow 에 대한 경험이 있습니다 . 그리고 새 계정으로 게시했습니다.
user48538

6

JavaThcript ETh6, 43 바이트

s=>s.replace(/s/gi,m=>({s:'th',S:'Th'})[m])

테트 투이 트 :

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매개 변수가 손상 되었다고 언급하려고했습니다 . 그러나 그 때문에 두 번째 바이트는 리틀 엔디안 아키텍처, 아니다 int것입니다 0x00실제로 "문자열"...이 끔찍하게 똑똑, 나는 그것을 사랑을 종료!
Quentin

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

에 2 바이트를 넣을 수 없습니다 char. 'h\1'
Outgolfer Erik

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 다중 문자 상수는 구현 정의, 완벽하게 유효한 C입니다.
Dennis


4

자바, 71 65 바이트

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

골프를 먼저 치기 때문에 자바를 사용 해보지 않겠습니까?


2
replace대신 사용할 수 있습니다replaceAll
aditsu

아, 네 말이 맞아요 감사! @aditsu
Insane

3
함수 대신 람다 식을 사용하여 일부 바이트를 저장할 수 있습니다. 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

Python3-46 바이트

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

@DenkerAffe 의 도움으로 4 바이트를 삭제 했습니다 !


1
Python 3은 원래 작성된 언어였습니다. 그의 코드 버전은 59 바이트이므로 끝났습니다!
george

1
lambda s:s.replace("s","th").replace("S","Th")조금 더 짧습니다.
Denker

@DenkerAffe 예, 짧지 만이 경우 람다를 사용하려면 원래 질문에 대답하기 위해 여전히 입력과 출력이 필요합니다.
george

1
@george Community 의견 일치는 함수가 stdin / stdout 대신 인수를 사용하고 값을 반환 할 수 있다는 것입니다. I / O기본값을 살펴보십시오 . 원하는 경우 물론 재정의 할 수는 있지만이 특정 도전에서는 의미가 없습니다.
Denker

@DenkerAffe 괜찮습니다. 질문을했을 때 출력이 에코 또는 인쇄가 될 것임을 의미합니다. 그러나 나는 그것을 기본값으로 두겠습니다. 람다를 사용하는 예는 짧은 것 그래서
조지

3

C # 6.0-58 바이트

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

입력 문자열을 함수의 인수로 사용합니다.


3

하스켈, 36 바이트

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

당신은 공간이 필요하지 않습니다 :f's'=...
ThreeFx

1
슬프게도 요 하스켈 이름에는 아포스트로피가 포함될 수 있습니다. :(
Lynn

오 젠장, 나는 그것을 완전히 잊었다. 난 거의 필요하지 않습니다 Char...
ThreeFx

8
나는 "Hathkell을"wath 생각
패트릭 로버츠에게

3

녹, 46 바이트

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

온라인으로 사용해보십시오!


1
@ mbomb007. 편집해야할지 모르겠습니다.
Washington Guedes 2016 년

I'm making it follow the answering guidelines. I should be able to view a post and know what language it is. Some languages contain "th" already, so it's ambiguous. And who's to say that someone won't create a different language actually called "Rutht" in the future?
mbomb007

2
@mbomb007, who's to say someone won't create a different language called "Rust" in the future?
msh210

@msh210 Moot point, because if used the poster will need to clarify.
mbomb007

3

PHP, 42 Bytes

if run from a file:

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

Run as:

~$ php [file] "This is Silly"

-1 byte: remove the newline at the end
Erik the Outgolfer

-8 bytes: remove quotes. -> use php -d error_reporting=0 to suppress notices.
Titus

3

TI-Basic, 126 bytes

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

This is wrong. Str1 never changes, and Ans will hold a number at the end.
lirtosiast

Thanks for the note, fixed now. I don't know how I forgot to save Str1 back again...
Timtech

This is still wrong; it errors when the first or last character is S. As I've said before, please test your code before you post it.
lirtosiast

3

Java, 101 byteth

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

Note that this is a complete program unlike the previous Java answer.

Bonus (has to be fed to the C preprocessor THEE preprothethor first):

#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

MATL, 17 bytes

115'th'YX83'Th'YX

Try it online!

Explanation

115    % 's' (ASCII)
'th'   % String 'th'
YX     % Regex replacement
83     % 'S' (ASCII)
'Th'   % String 'Th'
YX     % Regex replacement

2

Python 3, 53 bytes

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

Usage:

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

Tham and Thally like Thheep

-7 bytes: lambda s:s.replace("s","th").replace("S","Th") Usage: (lambda s:s.replace("s","th").replace("S","Th"))(s)
Erik the Outgolfer

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Well, that's identical to TuukkaX's answer (which was posted before mine), so...
m654

There's no reason to post another answer then.
Erik the Outgolfer

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ I didn't notice his when I posted mine.
m654

You can delete your answer once you notice there is a shorter one posted before yours.
Erik the Outgolfer

2

GameMaker Language, 74 bytes

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

2

Matlab, 39 byteth

A straitforward approach:

@(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 tries to be smart when replacing text, but that smartness breaks when the replaced string only takes up one space, i.e. the capital letter S. To prevent this from converting "Sam and Sally" to "THam and THally", the whole word is matched instead. However, this also handles "SAM and Sally" in the way that one would want, i.e. producing "THAM and Thally".


2

x86 machine code, 19 bytes

In hex:

86ac3c5374043c73750440aab068aa84c075eec3

Input: ESI: input string, EDI: output buffer.

Disassembly:

_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         

You can use test al, 'S' to check both at once
anatolyg

2

Befunge 98, 37 49 bytes

Original version :

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

Terminating edition, as per consensus :

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

This leaves a big honking hole in the code grid that I'm not very happy about. I'll look into that when I have the time.
The 49th byte is a space at the end of the second line, included to have a rectangular grid, required to prevent ccbi (and probably other interpreters) from bugging out and printing an infinite line of "Th"s.



1

SpecBAS ThpecBATh - 53 bytes

1 INPUT a$: ?REPLACE$(REPLACE$(a$,"S","Th"),"s","th")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.