Avertissement: Ce n'est pas mon défi, mais ThisGuy a dit que j'étais d'accord pour poster.
Parfois, je veux faire un mot en son contraire, comme happiness
va à unhappiness
. Malheureusement, lorsque cela se produit, mon cerveau se vide parfois. Puis un jour, après un autre événement, je me suis dit "C'est à ça que servent les programmes!"
Comme la langue anglaise a de nombreuses exceptions, j'ai créé une liste qui contient le préfixe de la lettre de départ
q or h -> dis- (honest -> dishonest)
l -> il- (legal -> illegal)
m or p -> im- (mature -> immature)
r -> ir- (responsible -> irresponsible)
everything else -> un- (worthy -> unworthy)
Tâche
Étant donné une entrée sous forme de chaîne, transformez la chaîne en son négatif et affichez le résultat. Vous pouvez supposer que toutes les entrées fournies répondront aux règles ci-dessus. Les soumissions peuvent être des programmes ou des fonctions, pas des extraits.
Contribution
Une seule chaîne, prise soit comme paramètre, soit depuis STDIN
Production
La forme niée de cette chaîne, conforme aux règles ci-dessus
Comment gagner
Ceci est un code-golf donc le code le plus court gagne
q
sans unu
?qadi
,qat
, ce qui précèdeqi
,qirsh
etqwerty
. (Je joue beaucoup au Scrabble)q
est toujours suivi de au
dans la chaîne ou non?u
Réponses:
Python, 55 octets
Essayez-le en ligne!
Nous devons gérer 7 lettres de départ différentes:
g
->dis
,h
->dis
,p
->im
,m
->im
,l
->il
,r
->ir
et tout le reste ->un
Nous pouvons stocker toutes ces négations dans une seule chaîne et extraire la bonne par découpage:
Maintenant, nous devons calculer l'indice de départ
i
.'rlmphq'.find
renvoie 0 pour'r'
, 5 pourq
et -1 pour tout ce qui n'est pas contenu dans la chaîne. Pour obtenir la valeur nécessaire de 0 à 6, nous devons encore soustraire la valeur de retour de 5, ce qui donne ce code:la source
ddiiiiuiimmlrnss
etrlmphq
le nombre5
pour, pourquoi la tranche sauter 7?GNU sed , 50 octets
Comprend +1 pour
-r
Rien d'extraordinaire. Utilise
&
dans le remplacement pour combiner quelques substitutions ett
pour sauter la dernière si l'une des premières substitutions se produit.Essayez-le en ligne!
la source
Gelée , 30 octets
Essayez-le en ligne!
Comment?
Notez que le répété
r
dans se“qmlrrhp”
trouve dans le 5ème indice, ce qui, s'il était référencé, entraînerait un préfixeun
, donc il pourrait tout aussi bien être autre chose queh
oup
.la source
/// ,
5956 octetsEssayez-le en ligne!
L'entrée va après la toute dernière
#
.Comment ça fonctionne:
J'ai fait une optimisation qui a réduit la taille à 56 octets, mais comme cela complique les choses, je vais expliquer la version originale, puis expliquer le golf.
Intuition: Le défi est assez simple, il suffit d'ajouter le négatif selon le début du mot. Cependant, dans ///, vous ne pouvez pas simplement
concatenate if [...]
, vous pouvez uniquement remplacer quelque chose suivant un modèle spécifique. Ainsi, dans ce programme, les débuts de mots positifs sont remplacés par les débuts de mots négatifs. Le a#
été ajouté pour s'assurer qu'une fois qu'un nouveau commencement a été ajouté, plus aucun nouveau commencement ne serait ajouté. Le a#
également permis de faire «tout le reste: un».Le golf intègre une nouvelle substitution à il commençait:
/^/\/\/#/
. Cela remplace tout^
par//#
, ce qui était un modèle courant dans la version originale.la source
TI-Basic, 104 octets
Nécessite toutes les majuscules.
Explication:
la source
JavaScript (
716461 octets)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
Modifications:
charAt(0)
->[0]
)la source
w[0]
place dew.charAt(0)
?w=>...
? La définition de fonction réelle comprendraitlet f=w=>...
? (Probablement couvert dans une FAQ quelque part ...)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
3 octets de moinsLot, 114 octets
Vérifie le premier caractère du mot par rapport à la liste des préfixes personnalisés et, si tel est le cas, change le préfixe par défaut
un
. Un boîtier spécialqu
est possible au coût de 21 octets.la source
Haskell, 71 octets
Exemple d'utilisation:
f "legal"
->"illegal"
. Essayez-le en ligne!Construisez une table de recherche de paires préfixe / remplacement pour rechercher le premier caractère de la chaîne d'entrée avec une valeur par défaut
"un"
sinon.la source
Rétine , 54 octets
Explication:
C'est la première fois que j'utilise Retina. C'est une langue assez soignée.
Essayez-le en ligne!
la source
Javascript,
727166616059 octetsw=>('dis....il.im...im.dis.ir'.split('.')[w.charCodeAt(0)-104]||'un')+w
w=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+w
Oui, c'est encore plus long qu'une solution existante. :)Dans le cas où cela nécessite une explication, je profite des paires q / h et m / p en combinant leur index dans la chaîne de recherche avec un mod 4, puis en l'utilisant comme recherche dans le tableau de préfixes.
la source
search
au lieu deindexOf
. Et un peu plus, je pense, en utilisant&
au lieu de%
search
. Je ne vois pas comment faire fonctionner le & trick - serait parfait si mon tableau n'était que de 4 éléments.C,
109107 octetsEssayez-le en ligne!
la source
Mathematica, 107 octets
Explication:
StartOfString~~x:#:>#2<>x&
est une fonction pure où le premier argument est un modèle de chaîne à faire correspondre au début de la chaîne et le deuxième argument est une chaîne à ajouter à la correspondance. Il renvoie une règle retardée pouvant être utilisée à l'intérieurStringReplace
. Ceci est ensuite appliqué à chacune des paires{{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}
résultant en la liste des règlesEnfin cette liste est passée dans
StringReplace
laquelle donne un opérateur sur les chaînes.la source
PHP, 101 octets
Version en ligne
la source
Excel 78 octets
J'ai trouvé des candidats proches utilisant différentes méthodes qui ont marqué 81 octets:
Et 84 octets:
la source
REXX, 78 octets
Enregistre quelques octets en répondant en MAJUSCULE, par exemple puissant -> IMPOTENT.
la source
Perl, 49 + 1 (
-p
indicateur) = 50 octetsEn utilisant:
Essayez-le en ligne .
la source
Clojure, 65 octets
Eh bien, c'est ennuyeux ... mais je ne pouvais pas le raccourcir. Au moins, il y a très peu d'espaces.
la source
OCaml, 85
Fonction anonyme, utilise la correspondance de motifs sur son premier caractère.
la source