Lithp Tranthlator

28

Mein Freund hat neulich einen Lisp-Übersetzer gemacht, das heißt, er hat einen String genommen und s => th und S => Th konvertiert. Es war ziemlich lang und ich dachte, es könnte Golf gespielt werden.

Die Aufgabe besteht also darin, ein Programm / eine Funktion zu erstellen, die eine Eingabezeichenfolge akzeptiert, in lisp übersetzt und die Zeichenfolge ausgibt

Testfall

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

Beachten Sie, dass es keine Rolle spielt, dass h die ganze Zeit wiederholt wird

Dies ist Code Golf, also gewinnt die kürzeste Antwort

George
quelle
13
Ich wünschte, alle würden die Bytes in ihren Headern in byteth ändern .
Undichte Nonne
6
Es sollte Bonuspunkte geben, wenn das Programm diese nicht verwendet soder nicht verwendet S.
Nate Diamond
1
Ich denke, die Namen der Sprachen sollten klargestellt werden. Ohne den Ersatz. Einige Sprachen enthalten bereits "th", daher ist dies nicht eindeutig. Und wer soll sagen, dass in Zukunft niemand mehr eine andere Sprache namens "Common Lithp" erstellen wird?
mbomb007
1
@ mbomb007 Ich würde mir darüber keine Sorgen machen. Ich bin mir nicht sicher, ob es tatsächlich eine Standardmethode gibt, um Ihre Antwort zu benennen. Die meisten Fragen, die ich sehe, wenn sie angeben, wie es geht, sind normalerweise die gleichen. Da ich nicht erkläre, wie die Antwort zu formulieren ist, können die Benutzer sie benennen, wie sie möchten. Da ich ein Pedant bin, habe ich nicht einmal nach einer Sprache gefragt, damit ich mich gegen sie aussprechen kann, auch wenn ich sie schreibe. Aber ich verstehe deinen Standpunkt. Ich glaube einfach nicht, dass es Anlass zur Sorge gibt
George
2
Eine Sache, die diese Herausforderung interessanter gemacht hätte, wäre die allgemeine Aufbewahrung des Gehäuses, z. B.LOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
flauschig

Antworten:

36

Gemeinsame Lithp, 62

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

Zuerst (read)die Eingabe (es sollte eine Zeichenkette sein). Zeichenfolgen in CL sind Sequenzen, mit denen wir mapjedes Zeichen durchlaufen. Das erste Argument, mapdas den Typ des Ergebnisses darstellt (z. B. könnte ich eine Liste aus einem Vektor erstellen). Wann ist esnil Fall ist (), werden die Ergebnisse verworfen. Die Funktion, die der Eingabe zugeordnet ist, princdruckt einfach jedes Zeichen (nicht lesbar), mit Ausnahme derjenigen, die ersetzt werden sollen.

Core-Dump
quelle
14
Der Name dieser Sprache.
Joe Z.
1
@JoeZ. Ich habe gerade , wie alle anderen auch, das sdurch ersetzt th: Schau dir die Antworten von Pyson an.
Coredump
@coredump Sie sind alle falsch: es ist in eine Richtung: s-> th, S-> Th, th-> th, Th-> Th.
Erik der Outgolfer
1
@ DrGreenEggsandIronMan Sicher, (defmacro cathe (&rest args) `(case ,@args))
Coredump
1
Ok lol das macht mehr Sinn
17

Netzhaut, 9 Bytes

S
Th
s
th

Probieren Sie es online!

Die offensichtliche Antwort.

user48538
quelle
13

JavaThcript ETh6, 38 Bytes

Zuerst habe ich mich für die offensichtliche Lösung entschieden

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

Aber ich habe es 4 Bytes runter gespielt

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

Hierbei wird das Regex- iFlag verwendet, das nach Mustern sucht, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird. Das Gute an Javascript ist, dass Sie eine anonyme Funktion für das Ersetzen (Regex) angeben können.

Probieren Sie es hier aus

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>

Bassdrop Cumberwubwubwub
quelle
11
"E eth thickth"?
Joe Z.
Ich habe nachgedacht 'Tt'[b>'r']+'h', aber es ist die gleiche Länge
Washington Guedes
1
Du meinst, 38 Byteth
Downgoat
+1 für TIL, dass der String-Vergleich über Code Point Value
MayorMonty
@Upgoat Das war meine Schuld sorry.
Neil
11

GNU Sed - 17

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

Die offensichtliche Antwort.

$ 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
C. Quilley
quelle
17
Meinten Sie GNU Thed? ;)
m654
8

Python 3 - 40 byteth

Erstes Golfen!

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

Es verwendet die Übersetzungsmethode des strModuls, die eine Übersetzungstabelle akzeptiert. Die Übersetzungstabelle ist eine einfache Tabelle mit einem Schlüsselcode als Schlüssel und dem Ersatzschlüssel als Wert.dictstr

Gabor Fekete
quelle
1
Willkommen in der PP & CG Community!
Erik der Outgolfer
4
Darf ich Sie fragen, warum Sie zwei separate Konten haben?
Bálint
@ Bálint Anscheinend hat er vergessen, sich mit nur 3 Wiederholungen in sein Girokonto einzuloggen, aber eine Erfahrung mit Stack Overflow . Und mit einem neuen Account gebucht.
User48538
6

JavaThcript ETh6, 43 Byteth

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

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'));

Patrick Roberts
quelle
6
Bekenntnis: du schreibst nur das, was du tust, um des Titels willen!
hörte auf, gegen den Uhrzeigersinn am
6

V , 11 byteth

Ís/th
ÍS/Th

Probieren Sie es online!

Mit einer Sprache, die ich gemacht habe. Es ist nicht abgeschlossen, aber es ist wirklich gut im Regieren.

DJMcMayhem
quelle
5

C 50 Bytes

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

Ersetzen Sie \1mit einem tatsächlichen \x01Byte.

jimmy23013 hat ein Byte gespeichert, und dann habe ich mit seinem Ansatz zwei weitere gespeichert! Vielen Dank.

Lynn
quelle
Ich wollte gerade kommentieren, dass der &cParameter defekt ist. Aber es ist nicht so, denn auf einer Little-Endian-Architektur wird das zweite Byte davon die "Zeichenfolge" intsein 0x00und sie tatsächlich beenden ... Das ist schrecklich clever, ich liebe es!
Quentin
s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
Jimmy23013
Sie können keine 2 Bytes in ein char. 'h\1'
Erik der Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Konstanten mit mehreren Zeichen sind implementierungsdefiniert, aber absolut gültig. C.
Dennis
5

05AB1E, 14 12 Bytes

's„th:'S„Th:

Die direkte Antwort.

Probieren Sie es online aus

2 Bytes dank @Adnan gespart

Emigna
quelle
Ist das nicht eher die direkte Antwort als die direkte Antwort?
Dorukayhan will Monica zurück
4

Java, 71 65 Bytes

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

Erster Golfversuch, warum also nicht mit Java?

Wahnsinnig
quelle
2
Sie können replaceanstelle von verwendenreplaceAll
Aditsu
Oh ja, du hast recht. Vielen Dank! @aditsu
Insane
3
Sie können einige Bytes speichern, indem Sie einen Lambda-Ausdruck anstelle einer Funktion verwenden. s->s.replace("S","Th").replace("s","th")
Denker
4

GNU AWK, 31 Bytes

Verwenden Sie einfach die gsubFunktion, um das untere oder obere S über Regex zu übersetzen und es anschließend zu drucken. Kann mit Dateien arbeiten, oder mit stdinwie in diesem Fall

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

CJam, 15 Bytes

q"sS""thTh"2/er

Teste es hier.

Erläuterung

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'.
Martin Ender
quelle
3

Python3 - 46 Bytes

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

Fiel 4 Bytes mit Hilfe von @DenkerAffe !

Yytsi
quelle
1
Python 3 war die Sprache, in der es ursprünglich geschrieben wurde. Meine Version seines Codes war 59 Bytes, also sind wir fertig!
George
1
lambda s:s.replace("s","th").replace("S","Th")ist etwas kürzer.
Denker
@DenkerAffe Ja, es ist kürzer, aber wenn Sie in diesem Fall Lambda verwenden, benötigen Sie immer noch eine Eingabe und eine Ausgabe, um die ursprüngliche Frage zu beantworten.
George
1
@george Community-Konsens ist, dass Funktionen Argumente verwenden und Werte zurückgeben können, anstatt stdin / stdout zu verwenden. Sehen Sie sich unsere Standardeinstellungen für E / A an . Sie können sie natürlich überschreiben, wenn Sie möchten, aber bei dieser besonderen Herausforderung ergibt das keinen Sinn.
Denker
@DenkerAffe okay, das ist in Ordnung. Wenn ich die Frage stelle, ist die Ausgabe ein Echo oder ein Ausdruck. Aber ich werde es den Vorgaben überlassen. Also ja mit Lambda wäre kürzer
George
3

C # 6.0 - 58 Bytes

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

Nimmt die Eingabezeichenfolge als Argument für die Funktion.

Yytsi
quelle
3

Haskell, 36 Bytes

f 's'="th";f 'S'="Th";f x=[x]
(>>=f)
Lynn
quelle
Sie brauchen keinen Platz:f's'=...
ThreeFx
1
Traurigerweise tue ich das. Haskell-Namen können Apostrophe enthalten. :(
Lynn
Oh verdammt, das habe ich komplett vergessen. Ich brauche fast nie Chars ...
ThreeFx
8
Ich dachte, es wäre "Hathkell"
Patrick Roberts
3

Rust, 46 Bytes

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

Probieren Sie es online!

Kek
quelle
1
@ mbomb007. Ich bin mir nicht sicher, ob du das ändern solltest.
Washington Guedes
Ich lasse es den Beantwortungsrichtlinien folgen. Ich sollte in der Lage sein, einen Beitrag anzusehen und zu wissen, welche Sprache es ist. Einige Sprachen enthalten bereits "th", daher ist dies nicht eindeutig. Und wer soll sagen, dass in Zukunft niemand mehr eine andere Sprache namens "Rutht" erschaffen wird?
mbomb007
2
@ mbomb007, wer sagt, dass in Zukunft keine andere Sprache namens "Rust" mehr erstellt wird?
msh210
@ msh210 Streitpunkt, da bei Verwendung das Poster geklärt werden muss.
mbomb007
3

PHP, 42 Bytes

Wenn von einer Datei ausgeführt:

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

Rennen wie:

~$ php [file] "This is Silly"
InaScuffle
quelle
-1 Byte: Entfernen Sie den Zeilenvorschub am Ende
Erik the Outgolfer
-8 Bytes: Anführungszeichen entfernen. -> verwenden php -d error_reporting=0, um Mitteilungen zu unterdrücken.
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
Timtech
quelle
Das ist falsch. Str1ändert sich nie und Anshält am Ende eine Zahl.
Lirtosiast
Danke für den Hinweis, der jetzt behoben wurde. Ich weiß nicht, wie ich vergessen habe, Str1wieder zu retten ...
Timtech
Das ist immer noch falsch; Es ist ein Fehler, wenn das erste oder letzte Zeichen S ist. Wie ich bereits sagte, testen Sie bitte Ihren Code, bevor Sie ihn veröffentlichen.
Lirtosiast
3

Java, 101 byteth

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

Beachten Sie, dass dies im Gegensatz zur vorherigen Java-Antwort ein vollständiges Programm ist .

Bonus (muss dem C-Präprozessor zugeführt werden Preprozessor THEE Preprothethor weitergeleitet werden):

#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"));}}
Dorukayhan will Monica zurück
quelle
2

Pyth, 14 Bytes

::z\s"th"\S"Th

Testsuite

Vielen Dank an @LeakyNun für den Tippfehler!

Denker
quelle
5
Die Sprache ist also "Pys"? : P
mbomb007
2

MATL , 17 Bytes

115'th'YX83'Th'YX

Probieren Sie es online!

Erläuterung

115    % 's' (ASCII)
'th'   % String 'th'
YX     % Regex replacement
83     % 'S' (ASCII)
'Th'   % String 'Th'
YX     % Regex replacement
Luis Mendo
quelle
2

Python 3, 53 Bytes

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

Verwendung:

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

Tham and Thally like Thheep
m654
quelle
-7 Bytes: lambda s:s.replace("s","th").replace("S","Th")Verwendung:(lambda s:s.replace("s","th").replace("S","Th"))(s)
Erik der Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Nun, das ist identisch mit TuukkaXs Antwort (die vor meiner gepostet wurde), also ...
m654
Es gibt dann keinen Grund, eine andere Antwort zu posten.
Erik der Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Ich habe seine nicht bemerkt, als ich meine gepostet habe.
m654
Sie können Ihre Antwort löschen, wenn Sie bemerken, dass eine kürzere vor Ihrer steht.
Erik der Outgolfer
2

GameMaker-Sprache, 74 Byte

return string_replace_all(string_replace_all(argument0,'s','th'),'S','Th')
Timtech
quelle
2

Matlab, 39 byteth

Ein direkter Ansatz:

@(t)strrep(strrep(t,'s','th'),'S','Th')
pajonk
quelle
2

Emacth Lithp, 61 byteth

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

Emacs Lisp versucht, beim Ersetzen von Text schlau zu sein, aber diese Schlauheit bricht ab, wenn die ersetzte Zeichenfolge nur ein Leerzeichen, dh den Großbuchstaben S, einnimmt wird stattdessen abgeglichen. Dies behandelt jedoch auch "SAM und Sally" so, wie man es möchte, dh "THAM und Thally".

Lord Yuuma
quelle
2

x86-Maschinencode, 19 Byte

In hex:

86ac3c5374043c73750440aab068aa84c075eec3

Eingabe:: ESIEingabezeichenfolge,: EDIAusgabepuffer.

Demontage:

_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         
meden
quelle
Sie können test al, 'S'beide gleichzeitig überprüfen
anatolyg
2

Befunge 98, 37 49 Bytes

Originalfassung :

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

Abschlussausgabe nach Konsens:

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

Dies hinterlässt ein großes Hupenloch im Code-Raster, über das ich nicht sehr glücklich bin. Ich werde das untersuchen, wenn ich Zeit habe.
Das 49. Byte ist ein Leerzeichen am Ende der zweiten Zeile, einschließlich eines rechteckigen Gitters, um zu verhindern, dass ccbi (und wahrscheinlich andere Interpreter) eine unendliche Zeile mit "Th" ausliest und druckt.

Karhell
quelle
2

35 Byteth of Julia:

s->replace(s,r"s"i,s->"$(s[1]+1)h")

Probieren Sie es online! (beinhaltet alle Testfälle)

noch eine Minute
quelle
Hey, kenne ich dich nicht von irgendwoher? ;)
Alex A.
1

SpecBAS ThpecBATh - 53 Bytes

1 INPUT a$: ?REPLACE$(REPLACE$(a$,"S","Th"),"s","th")
Brian
quelle