Lithp Tranthlator

28

Mon ami a fait un traducteur lisp l'autre jour, c'est-à-dire qu'il a fallu une chaîne et converti s => th et S => Th. C'était assez long et je pensais qu'il pouvait être joué au golf.

La tâche consiste donc à créer un programme / une fonction qui prend une chaîne d'entrée, la traduit en lisp et génère la chaîne

Cas de test

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

Notez que peu importe que h soit répété tout le temps

C'est le golf de code, donc la réponse la plus courte l'emporte

George
la source
13
Je souhaitais que tout le monde change les octets de leurs en-têtes en octets .
Leaky Nun
6
Il devrait y avoir des points bonus si le programme ne l'utilise pas, sni Snulle part.
Nate Diamond
1
Je pense que les noms de langue devraient être clairs. Sans le remplacement. Certaines langues contiennent déjà "th", donc c'est ambigu. Et qui peut dire que quelqu'un ne créera pas à l'avenir un langage différent appelé "Common Lithp"?
mbomb007
1
@ mbomb007 Je ne m'en inquiéterais pas trop. Je ne sais pas s'il existe réellement un moyen par défaut de titrer votre réponse. La plupart des questions que je vois s’ils indiquent comment le faire est normalement la même chose. Comme je n'ai pas expliqué comment la réponse devrait être énoncée, les utilisateurs sont libres de les nommer comme ils le souhaitent. Étant pédant, je n'ai même pas demandé de langue, donc je pouvais m'opposer à eux, même les écrire. Mais je comprends votre point. Je ne pense pas que cela soit préoccupant
George
2
Une chose qui aurait rendu ce défi plus intéressant serait la préservation globale du boîtier, par exempleLOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
moelleux

Réponses:

36

Lithp commun, 62

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

Tout d'abord, (read)l'entrée (il doit s'agir d'une chaîne). Les chaînes en CL sont des séquences que nous utilisons mappour itérer sur chaque caractère. Le premier argument à mapreprésente le type du résultat (par exemple, je pourrais construire une liste à partir d'un vecteur). Quand il est nil, alias (), les résultats sont mis au rebut. La fonction qui est mappée à l'entrée simplement princ(imprime de façon illisible) chaque caractère, sauf ceux qui doivent être remplacés.

coredump
la source
14
Ce nom de langue cependant.
Joe Z.
1
@JoeZ. Je viens de remplacer le spar th, comme tout le monde l'a fait: regardez ces réponses de Pyson.
coredump
@coredump Ils ont tous tort: ​​c'est unidirectionnel: s-> th, S-> Th, th-> th, Th-> Th.
Erik the Outgolfer
1
@DrGreenEggsandIronMan Bien sûr, (defmacro cathe (&rest args) `(case ,@args))
coredump
1
Ok lol qui a plus de sens
17

Rétine, 9 octets

S
Th
s
th

Essayez-le en ligne!

La réponse évidente.

user48538
la source
13

JavaThcript ETh6, 38 octets

Au début, je suis allé avec la solution évidente

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

Mais je l'ai joué au golf 4 octets

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

Cela utilise l' iindicateur regex , qui recherche les modèles insensibles à la casse. La bonne chose à propos de Javascript est que vous pouvez spécifier une fonction anonyme pour gérer (regex) le remplacement.

Essayez-le ici

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
la source
11
"E eth épaisseur"?
Joe Z.
J'y pensais 'Tt'[b>'r']+'h', mais c'est la même durée
Washington Guedes
1
Vous voulez dire 38 octets
Downgoat
+1 pour TIL que la comparaison des chaînes se fait via la valeur du point de code
MayorMonty
@Upgoat Ce fut ma faute désolé.
Neil
11

GNU Sed - 17

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

La réponse évidente.

$ 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
la source
17
Voulez-vous dire GNU Thed? ;)
m654
8

Python 3 - 40 octets

Premier golf!

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

Il utilise la méthode translatestr du module qui accepte une table de traduction. La table de traduction est un simple avec keycode comme clés et la place de celui-ci comme valeur.dictstr

Gabor Fekete
la source
1
Bienvenue dans la communauté PP&CG!
Erik the Outgolfer
4
Puis-je vous demander pourquoi vous avez 2 comptes séparés?
Bálint
@ Bálint Apparemment, il a oublié de se connecter à son compte actuel avec seulement 3 représentants, mais une expérience sur Stack Overflow . Et publié avec un nouveau compte.
user48538
6

JavaThcript ETh6, 43 octets

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

Patrick Roberts
la source
6
Confethth: tu tords seulement que thetht thuite pour le titre de thake de itth!
cessé de tourner dans le sens inverse des aiguilles d'une montre le
6

V , 11 octets

Ís/th
ÍS/Th

Essayez-le en ligne!

Avec une langue que j'ai faite. Ce n'est pas fini, mais c'est vraiment bon en regekth.

DJMcMayhem
la source
5

C, 50 octets

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

Remplacez \1par un \x01octet réel .

jimmy23013 a enregistré un octet, puis j'ai enregistré deux autres en utilisant son approche! Merci.

Lynn
la source
J'étais sur le point de dire que le &cparamètre est cassé. Mais ce n'est pas le cas, car sur une architecture peu endienne, le deuxième octet intsera 0x00et terminera la "chaîne" ... C'est horriblement intelligent, j'adore!
Quentin
s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
jimmy23013
Vous ne pouvez pas pousser 2 octets dans un fichier char. 'h\1'
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Les constantes multi-caractères sont définies par l'implémentation, mais parfaitement valides C.
Dennis
5

05AB1E, 14 12 octets

's„th:'S„Th:

La réponse simple.

Essayez-le en ligne

Sauvegardé 2 octets grâce à @Adnan

Emigna
la source
N'est-ce pas la réponse directe plutôt que la réponse directe?
dorukayhan veut que Monica revienne le
4

Java, 71 65 octets

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

Première tentative de golf, alors pourquoi pas avec Java.

Insensé
la source
2
Vous pouvez utiliser à la replaceplace dereplaceAll
aditsu
Oh, oui tu as raison. Merci! @aditsu
Insane
3
Vous pouvez enregistrer certains octets en utilisant une expression lambda au lieu d'une fonction. s->s.replace("S","Th").replace("s","th")
Denker
4

GNU AWK, 31 octets

Il suffit d'utiliser la gsubfonction pour traduire le S inférieur ou supérieur via l'expression régulière et l'imprimer ensuite. Peut fonctionner avec des fichiers, ou avec stdincomme dans ce cas

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

CJam, 15 octets

q"sS""thTh"2/er

Testez-le ici.

Explication

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
la source
3

Python3 - 46 octets

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

Supprimé 4 octets avec l'aide de @DenkerAffe !

Yytsi
la source
1
Python 3 était le langage dans lequel il était écrit à l'origine. Ma version de son code faisait 59 octets, alors c'est fait!
george
1
lambda s:s.replace("s","th").replace("S","Th")est un peu plus court.
Denker
@DenkerAffe Oui, il est plus court mais pour utiliser lambda dans ce cas, vous aurez toujours besoin d'une entrée et d'une sortie pour répondre à la question d'origine.
george
1
@george Le consensus de la communauté est que les fonctions peuvent utiliser des arguments et retourner des valeurs au lieu d'utiliser stdin / stdout. Jetez un coup d' œil à nos valeurs par défaut pour les E / S . Bien que vous puissiez bien sûr les remplacer si vous le souhaitez, cela n'aurait pas beaucoup de sens dans ce défi particulier.
Denker
@DenkerAffe, ça va. Quand j'ai posé la question, je veux dire que la sortie serait un écho ou une impression. Mais je vais laisser les valeurs par défaut. Alors oui, utiliser lambda serait plus court
George
3

C # 6.0 - 58 octets

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

Prend la chaîne d'entrée comme argument de la fonction.

Yytsi
la source
3

Haskell, 36 octets

f 's'="th";f 'S'="Th";f x=[x]
(>>=f)
Lynn
la source
Vous n'avez pas besoin de l'espace:f's'=...
ThreeFx
1
Malheureusement, oui. Les noms Haskell peuvent contenir des apostrophes. :(
Lynn
Oh putain, j'ai complètement oublié ça. Je n'ai presque jamais besoin de Chars ...
ThreeFx
8
Je pensais que c'était "Hathkell"
Patrick Roberts
3

Rouille, 46 octets

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

Essayez-le en ligne!

Kek
la source
1
@ mbomb007. Je ne suis pas sûr que vous devriez modifier cela.
Washington Guedes
Je le fais suivre les directives de réponse. Je devrais être en mesure d'afficher un message et de savoir de quelle langue il s'agit. Certaines langues contiennent déjà "th", donc c'est ambigu. Et qui peut dire que quelqu'un ne créera pas un autre langage appelé "Rutht" à l'avenir?
mbomb007
2
@ mbomb007, qui veut dire que quelqu'un ne créera pas un autre langage appelé "Rust" à l'avenir?
msh210
@ msh210 Point discutable, car s'il est utilisé, l'affiche devra être clarifiée.
mbomb007
3

PHP, 42 octets

si exécuté à partir d'un fichier:

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

Courir comme:

~$ php [file] "This is Silly"
InaScuffle
la source
-1 octet: supprimer la nouvelle ligne à la fin
Erik the Outgolfer
-8 octets: supprime les guillemets. -> utiliser php -d error_reporting=0pour supprimer les notifications.
Titus
3

TI-Basic, 126 octets

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
la source
C'est faux. Str1ne change jamais et Anscontiendra un numéro à la fin.
lirtosiast
Merci pour la note, corrigée maintenant. Je ne sais pas comment j'ai oublié de sauvegarder Str1à nouveau ...
Timtech
C'est encore faux; il génère des erreurs lorsque le premier ou le dernier caractère est S. Comme je l'ai déjà dit, veuillez tester votre code avant de le publier.
lirtosiast
3

Java, 101 octets

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

Notez qu'il s'agit d'un programme complet contrairement à la réponse Java précédente .

Bonus (doit d'abord être fourni au préprocesseur C LE pré- preneur):

#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 veut récupérer Monica
la source
2

Pyth, 14 octets

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

Suite de tests

Merci à @LeakyNun d'avoir repéré une faute de frappe!

Denker
la source
5
Le langage est donc "Pys"? : P
mbomb007
2

MATL , 17 octets

115'th'YX83'Th'YX

Essayez-le en ligne!

Explication

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

Python 3, 53 octets

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

Usage:

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

Tham and Thally like Thheep
m654
la source
-7 octets: lambda s:s.replace("s","th").replace("S","Th")Utilisation:(lambda s:s.replace("s","th").replace("S","Th"))(s)
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Eh bien, c'est identique à la réponse de TuukkaX (qui a été publiée avant la mienne), alors ...
m654
Il n'y a donc aucune raison de poster une autre réponse.
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Je n'ai pas remarqué le sien quand j'ai posté le mien.
m654
Vous pouvez supprimer votre réponse une fois que vous avez remarqué qu'une réponse plus courte est affichée avant la vôtre.
Erik the Outgolfer
2

GameMaker Language, 74 bytes

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

Matlab, 39 byteth

A straitforward approach:

@(t)strrep(strrep(t,'s','th'),'S','Th')
pajonk
la source
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".

Lord Yuuma
la source
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         
meden
la source
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.

karhell
la source
2

35 Byteth of Julia:

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

Try it online! (includes all test cases)

one-more-minute
la source
Hey, don't I know you from somewhere? ;)
Alex A.
1

SpecBAS ThpecBATh - 53 bytes

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