Lithp Tranthlator


28

Arkadaşım geçen gün lisp tercümanı yaptı, yani sicim aldı ve s => th ve S => Th. Oldukça uzundu ve golf oynayabileceğini düşündüm.

Böylece görev bir girdi dizgisini alan, onu lisp'a çeviren ve dizgeyi çıkaran bir program / işlev yapmaktır.

Test durumu

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

H'nin her zaman tekrarlanmasının önemli olmadığını unutmayın.

Bu kod golf çok kısa cevap kazanır


13
Herkesin başlığındaki baytları bayt olarak değiştirmesini diledim .
Sızdıran Rahibe

6
Programın kullanmaması sveya Sherhangi bir yerinde kullanılmaması durumunda bonus puanları olmalıdır .
Nate Diamond,

1
Dil isimlerinin netleştirilmesi gerektiğini düşünüyorum. Değiştirme olmadan. Bazı diller zaten "th" içeriyor, bu yüzden belirsiz. Ve kim ileride "Common Lithp" adı verilen farklı bir dil yaratmayacağını kim söylüyor?
mbomb007

1
@ mbomb007 Çok fazla endişe etmem. Cevabınızı almanın varsayılan bir yolu olup olmadığından emin değilim. Çoğu soru nasıl yapılacağını söyleyip söylemediklerini çoğu soru normalde aynı şekilde yapıyor. Cevabın nasıl ortaya konması gerektiğini açıklamadığım için kullanıcılar istedikleri şekilde onlara başlık vermekte özgürdürler. Bilgi sahibi olmak için bir dil bile istemedim, bu yüzden onlara karşı bile yazabilirim. Ama amacını anlıyorum. Sadece endişelendiğini düşünmüyorum
George

2
Bu meydan okumayı daha ilginç hale getirecek bir şey, genel vaka korumasını sağlayacaktır, örneğinLOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
kabarık

Yanıtlar:


36

Ortak Lithp, 62

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

İlk olarak, (read)giriş (bir dize olmalı). CL'deki diziler dizilerdir, bu yüzden mapher karakterde yineleme yapmak için kullanırız . İlk argüman mapsonucun türünü temsil eder (örneğin, bir vektörden bir liste oluşturabilirim). Olduğunda nil, aka (), sonuçlar atılır. Girdiye eşleştirilen işlev, princdeğiştirilmesi gerekenler dışındaki her karaktere basitçe (okunaksız yazdırın).


14
Bu dilin adı olsa.
Joe Z.

1
@JoeZ. Sadece yerini starafından thbu Pyson cevapları bakmak: herkes yaptığı gibi.
coredump,

@ coredump Hepsi yanlış: tek yönlü: s-> th, S-> Th, th-> th, Th-> Th.
Outgolfer Erik,

1
@DrGreenEggsandIronMan Tabii, (defmacro cathe (&rest args) `(case ,@args))
coredump

1
Bu daha mantıklı lol Tamam


13

JavaThcript ETh6, 38 bayt

İlk başta bariz bir çözüm ile gittim

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

Ama ben 4 byte aşağı golf

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

Bu, büyük / iküçük harf duyarlı olmayan kalıpları arayan regex bayrağını kullanır . Javascript ile ilgili iyi bir şey (regex) değiştirme işlemek için adsız bir işlev belirtebilirsiniz.

Burada dene

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 et kalınlığı"?
Joe Z.

Düşünüyordum 'Tt'[b>'r']+'h', ama aynı uzunlukta
Washington Guedes

1
Demek istediğin 38 byteth
Downgoat

TIL için +1 olan dizi karşılaştırması Code Point Value ile yapılır
MayorMonty

@ Upgoat Bu benim hatamdı üzgünüm.
Neil

11

GNU Sed - 17

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

Bariz cevap.

$ 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
Bunu mu demek istedin GNU Thed? ;)
m654 17:16


8

Python 3 - 40 byteth

İlk golf!

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

Bir çeviri tablosunu kabul eden strmodülün çeviri yöntemini kullanır . Çeviri tablosu, dictanahtar olarak anahtar kodu ve stryerine değer olarak basittir .


1
PP&CG topluluğuna hoş geldiniz!
Outgolfer Erik,

4
Size neden 2 ayrı hesabınız olduğunu sorabilir miyim?
Bálint

@ Bálint Görünüşe göre mevcut hesabına sadece 3 temsilci ile giriş yapmayı unutmuş , ancak Stack Overflow ile ilgili bir deneyime sahip olmayı unuttu . Ve yeni bir hesap ile gönderildi.
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: Sadece itth unvanının içindekilerle ilgili olanları bir araya getirdin!
Buna olmaktan counterclockwis


5

C, 50 bayt

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

\1Gerçek bir \x01bayt ile değiştirin .

jimmy23013 bir bayt kurtardı ve sonra onun yaklaşımını kullanarak iki tane daha kaydettim! Teşekkürler.


&cParametrenin bozulduğunu yorumlamak üzereydim . Ama öyle değil, çünkü küçük bir endian mimarisinde bunun ikinci baytı intolacak 0x00ve gerçekte "string" i sonlandıracak ... Bu çok zekice, bayıldım!
Quentin

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

2 bayt a a char. 'h\1'
Outgolfer Erik,

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Çok karakterli sabitler tam olarak tanımlanmış ve uygulama için tanımlanmıştır. C
Dennis


4

Java, 71 65 bayt

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

Golfe ilk girişimi, neden Java ile değil.


2
Sen kullanabilirsiniz replaceyerinereplaceAll
aditsu

Evet, haklısın. Teşekkürler! @aditsu
Insane

3
İşlev yerine lambda ifadesi kullanarak bazı baytları kaydedebilirsiniz. s->s.replace("S","Th").replace("s","th")
Denker

4

GNU AWK, 31 bayt

Sadece gsubalt veya üst S'yi regex yoluyla çevirmek ve sonra yazdırmak için işlevini kullanmak . Dosyalarla veya stdinbu durumda olduğu gibi çalışabilir

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

3

CJam, 15 bayt

q"sS""thTh"2/er

Burada test et.

açıklama

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 bayt

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

@DenkerAffe'nin yardımıyla 4 byte düştü !


1
Python 3, başlangıçta yazıldığı dildi. Kodumun sürümü 59 bayttı, bu yüzden yapacağız!
george

1
lambda s:s.replace("s","th").replace("S","Th")biraz daha kısa.
Denker

@DenkerAffe Evet daha kısa ama bu durumda lambda kullanmak için, asıl soruyu cevaplamak için hala bir girdi ve çıktıya ihtiyacınız olacak.
george

1
@george Topluluk fikir birliği, işlevlerin argümanları kullanabildiği ve stdin / stdout yerine değerleri döndürdüğüdür. G / Ç için varsayılan ayarlarımıza göz atın . İsterseniz elbette onları geçersiz kılabilseniz de, bu özel mücadelede pek anlamlı olmaz.
Denker

@DenkerAffe tamam sorun değil. Soruyu sorduğumda, çıktının bir yankı ya da baskı olacağını söyleyebilirim. Ama bunu varsayılanlara bırakacağım. Yani evet lambda kullanmak daha kısa olurdu
george

3

C # 6.0 - 58 bayt

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

Giriş dizesini işleve argüman olarak alır.


3

Haskell, 36 bayt

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

Bu alana ihtiyacınız yok:f's'=...
ThreeFx

1
Ne yazık ki yapıyorum. Haskell isimleri kesme işareti içerebilir. :(
Lynn

Kahretsin, bunu tamamen unuttum. Neredeyse gerek kalmaz Char... s
ThreeFx

8
Wath "Hathkell" sanıyordum
Patrick Roberts

3

Pas, 46 bayt

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

Çevrimiçi deneyin!


1
@ mbomb007. Bunu düzenlemen gerektiğinden emin değilim.
Washington Guedes

Cevaplama kurallarına uymasını sağlıyorum. Bir yayını görüntüleyebilmeli ve hangi dilden olduğunu bilmeliyim. Bazı diller zaten "th" içeriyor, bu yüzden belirsiz. Ve kim gelecekte gelecekte "Rutht" denilen farklı bir dil yaratmayacağını kim söyleyebilir?
mbomb007

2
@ mbomb007, kim gelecekte "Rust" adında farklı bir dil yaratmayacağını söyleyecek?
msh210

@ msh210 Yayılma noktası, çünkü kullanılırsa posterin açıklığa kavuşturulması gerekir.
mbomb007

3

PHP, 42 Bayt

bir dosyadan çalıştırıldığında:

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

Olarak çalıştırmak:

~$ php [file] "This is Silly"

-1 bayt: sonunda yeni satır kaldırmak
Erik Outgolfer

-8 bayt: tırnak işaretleri kaldırın. -> php -d error_reporting=0bildirimleri bastırmak için kullanın .
Titus,

3

TI-Basic, 126 bayt

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

Bu yanlış. Str1asla değişmez ve Anssonunda bir sayı tutar.
lirtosiast

Not için teşekkürler, düzeltildi. Tekrar nasıl kurtarmayı unuttuğumu bilmiyorum Str1...
Timtech

Bu hala yanlıştır; ilk veya son karakter S olduğunda hata yapar. Daha önce de söylediğim gibi, lütfen göndermeden önce kodunuzu test edin.
lirtosiast

3

Java, 101 byteth

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

Bunun önceki Java cevabından farklı bir program olduğunu unutmayın .

Bonus (önce C önişlemcisinin THE önişlemcisine verilmelidir)

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

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

Kullanımı:

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

Tham and Thally like Thheep

-7 bayt: lambda s:s.replace("s","th").replace("S","Th")Kullanım:(lambda s:s.replace("s","th").replace("S","Th"))(s)
Outgolfer Erik

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ TuukkaX'ın cevabının aynısı (benimkinden önce gönderildi), yani ...
m654

O zaman başka bir cevap göndermek için hiçbir sebep yok.
Outgolfer Erik

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Benimkini gönderdiğimde onun farkına varmadım.
m654

Cevabınızı sizinkinden daha kısa bir mesajın yayınlandığını fark ettikten sonra silebilirsiniz.
Outgolfer Erik,

2

GameMaker Dili, 74 bayt

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

2

Matlab, 39 byteth

Daha güçlü bir yaklaşım:

@(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, metni değiştirirken akıllı olmaya çalışır, ancak değiştirilen dize yalnızca bir alan kapladığında bu akıllılık bozulur, yani büyük harf S. yerine eşleştirilir. Bununla birlikte, bu aynı zamanda "SAM ve Sally" yi istediği gibi, yani "THAM ve Thally" üretmek gibi ele alır.


2

x86 makine kodu, 19 bayt

Onaltılı olarak:

86ac3c5374043c73750440aab068aa84c075eec3

Giriş:: ESIgiriş dizesi,: EDIçıktı tamponu.

demontaj:

_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         

Her test al, 'S'ikisini de aynı anda kontrol etmek için kullanabilirsiniz
anatolyg

2

Befunge 98, 37 49 bayt

Orijinal versiyon :

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

Konsensüs uyarınca, fesih baskısı:

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

Bu, kod ızgarasında çok mutlu olmadığım büyük bir honking deliği bırakır. Buna vaktim olduğunda bakacağım.
49. bayt, ikinci satırın sonunda, ccbi'nin (ve muhtemelen diğer tercümanların) sonsuz bir "Th" ler satırının çıkmasını ve yazdırmasını engellemek için gereken dikdörtgen bir ızgaraya sahip olan bir alandır.



1

SpecBAS ThpecBATh - 53 bayt

1 INPUT a$: ?REPLACE$(REPLACE$(a$,"S","Th"),"s","th")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.