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
s
niS
nulle part.LOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
Réponses:
Lithp commun, 62
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 utilisonsmap
pour itérer sur chaque caractère. Le premier argument àmap
représente le type du résultat (par exemple, je pourrais construire une liste à partir d'un vecteur). Quand il estnil
, alias()
, les résultats sont mis au rebut. La fonction qui est mappée à l'entrée simplementprinc
(imprime de façon illisible) chaque caractère, sauf ceux qui doivent être remplacés.la source
s
parth
, comme tout le monde l'a fait: regardez ces réponses de Pyson.s
->th
,S
->Th
,th
->th
,Th
->Th
.(defmacro cathe (&rest args) `(case ,@args))
Rétine, 9 octets
Essayez-le en ligne!
La réponse évidente.
la source
JavaThcript ETh6, 38 octets
Au début, je suis allé avec la solution évidente
Mais je l'ai joué au golf 4 octets
Cela utilise l'
i
indicateur 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
la source
'Tt'[b>'r']+'h'
, mais c'est la même duréeGNU Sed - 17
La réponse évidente.
la source
Gelée , 13 octets
Thhowing off Jelly'th minuscule nouvel atome de tranthlate. Essayez-le en ligne!
la source
Python 3 - 40 octets
Premier golf!
Il utilise la méthode translate
str
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.dict
str
la source
JavaThcript ETh6, 43 octets
Tetht Thuite:
la source
V , 11 octets
Essayez-le en ligne!
Avec une langue que j'ai faite. Ce n'est pas fini, mais c'est vraiment bon en regekth.
la source
C, 50 octets
Remplacez
\1
par un\x01
octet réel .jimmy23013 a enregistré un octet, puis j'ai enregistré deux autres en utilisant son approche! Merci.
la source
&c
paramètre est cassé. Mais ce n'est pas le cas, car sur une architecture peu endienne, le deuxième octetint
sera0x00
et terminera la "chaîne" ... C'est horriblement intelligent, j'adore!s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
char
.'h\1'
05AB1E,
1412 octetsLa réponse simple.
Essayez-le en ligne
Sauvegardé 2 octets grâce à @Adnan
la source
Java,
7165 octetsPremière tentative de golf, alors pourquoi pas avec Java.
la source
replace
place dereplaceAll
s->s.replace("S","Th").replace("s","th")
GNU AWK, 31 octets
Il suffit d'utiliser la
gsub
fonction 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 avecstdin
comme dans ce casla source
CJam, 15 octets
Testez-le ici.
Explication
la source
Python3 - 46 octets
Supprimé 4 octets avec l'aide de @DenkerAffe !
la source
lambda s:s.replace("s","th").replace("S","Th")
est un peu plus court.C # 6.0 - 58 octets
Prend la chaîne d'entrée comme argument de la fonction.
la source
Haskell, 36 octets
la source
f's'=...
Char
s ...Rouille, 46 octets
Essayez-le en ligne!
la source
PHP, 42 octets
si exécuté à partir d'un fichier:
Courir comme:
la source
php -d error_reporting=0
pour supprimer les notifications.TI-Basic, 126 octets
la source
Str1
ne change jamais etAns
contiendra un numéro à la fin.Str1
à nouveau ...Java, 101 octets
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 CLEpré-preneur):la source
Pyth, 14 octets
Suite de tests
Merci à @LeakyNun d'avoir repéré une faute de frappe!
la source
MATL , 17 octets
Essayez-le en ligne!
Explication
la source
Python 3, 53 octets
Usage:
la source
lambda s:s.replace("s","th").replace("S","Th")
Utilisation:(lambda s:s.replace("s","th").replace("S","Th"))(s)
GameMaker Language, 74 bytes
la source
Matlab, 39 byteth
A straitforward approach:
la source
Emacth Lithp, 61 byteth
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".
la source
x86 machine code, 19 bytes
In hex:
Input:
ESI
: input string,EDI
: output buffer.Disassembly:
la source
test al, 'S'
to check both at onceBefunge 98,
3749 bytesOriginal version :
Terminating edition, as per consensus :
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.
la source
35 Byteth of Julia:
Try it online! (includes all test cases)
la source
SpecBASThpecBATh - 53 bytesla source