Problème
Disons qu'un mot est presque un palindrome s'il est possible d'enlever une de ses lettres pour que le mot devienne un palindrome. Votre tâche consiste à écrire un programme qui, pour un mot donné, détermine la lettre à supprimer pour obtenir un palindrome.
Le code le plus court pour le faire dans n'importe quel langage de programmation gagne.
Contribution
L'entrée se compose d'un mot de lettres majuscules de 2 à 1 000 caractères.
Production
Sortez la position indexée 1 (la lettre la plus à gauche a la position 1, la suivante a la position 2 et ainsi de suite) de la lettre qui doit être supprimée. S'il existe des choix possibles menant au palindrome, sortez l'une de ces positions. Notez que vous devez supprimer une lettre même si le mot donné est déjà un palindrome. Si le mot donné n'est pas presque un palindrome, affichez -1.
Exemple
L'entrée:
racercar
pourrait produire la sortie:
5
parce que la suppression de la 5
e lettre produit racecar
, qui est un palindrome.
De plus, l'entrée
racecar
peut toujours produire la sortie
4
parce que retirer la 4
e lettre à produire raccar
est toujours un palindrome.
Réponses:
J -
3125 caractèresTarif largement standard pour J, donc je vais juste souligner les morceaux sympas.
L'adverbe
\.
s'appelle Outfix .x u\. y
supprime tous les infix de la longueurx
dey
et appliqueu
au résultat de chaque retrait. Ici,x
est 1,y
est la chaîne d'entrée, etu
est(-:|.)
, un test pour savoir si la chaîne correspond à son inverse. D'où le résultat de cette application de\.
est une liste de booléens, 1 à la place de chaque personnage dont la suppression fait de l'entrée un palindrome.I.
crée une liste de tous les indices (origine 0) d'en haut où il y avait un 1. L'ajout de 1 avec1+
rend ces indices d'origine 1. Si aucun indice n'était égal à 1, la liste est vide. Maintenant, nous essayons de prendre le dernier élément avec_1{
. (Nous sommes autorisés à sortir n'importe laquelle des lettres amovibles!) Si cela fonctionne, nous revenons. Cependant, si la liste était vide, il n'y avait aucun élément du tout,{
lance donc une erreur de domaine avec laquelle nous interceptons::
et renvoyons le -1 avec[
.Utilisation (rappelez-vous que
NB.
c'est pour les commentaires):la source
Pythonnon PHP(73):Où a est la chaîne que vous souhaitez vérifier.
Cependant, cela génère une erreur si vous ne pouvez pas le tourner dans un palindrome. Au lieu de cela, vous pouvez utiliserEDIT: Non, attendez, cela fonctionne!Merci, cela augmente en effet le contenu php de ce script d'environ 25% (c'est ce que vous voulez, non?)
la source
1>0
lieu deTrue
et en supprimant l'espace entre]
etfor
dans...[::-1] for g...
1
plutôtTrue
que.1 == True
, après tout.Mathematica,
106988791 caractèresJe suppose que je suis légèrement handicapé par les longs noms de fonctions, mais des problèmes comme celui-ci sont assez amusants dans Mathematica:
Il lance quelques avertissements, car le
l_
modèle correspond également à tous les caractères à l'intérieur, quiReverse
ne peuvent pas fonctionner. Mais bon, ça marche!Assez peu golfé:
la source
GolfScript,
2826 caractèresMerci à Peter d'avoir raccourci de 2 caractères. Essayez les cas de test en ligne :
la source
RACECAR
est toujours un palindrome avec le E. Est-il nécessaire de spécifier un caractère à supprimer, alors que le mot saisi est déjà un palindrome?-2]$-1=)
? Au début de ce bloc, vous avez au plus un élément sur la pile, vous pouvez donc facilement le raccourcir-2]0=)
. (Ou pour la même durée]-2or)
. J'ai appris à aimeror
des cas spéciaux).Rebol (81)
Exemple d'utilisation dans la console Rebol:
Ci-dessus retourne l'indice du dernier palindrome trouvé. Une solution alternative (85 caractères) qui renvoie chaque palindrome trouvé serait:
Donc,
"racercar"
cela reviendrait à la liste[4 5]
.la source
C #, 134 caractères
Je sais que je perds :( mais c'était quand même amusant : D
Version lisible:
la source
R
défini et utilisé?Stax ,
810 octetsExécuter et déboguer
Ce programme montre tous les indices basés sur 1 qui peuvent être supprimés de la chaîne pour former un palindrome. Et s'il n'y en a pas, il indique -1.
la source
aaabb
sorties5
au lieu de-1
).Rubis (61):
Ici, ayez une solution rubis. Il retournera la position du personnage à supprimer ou -1 si cela ne peut pas être fait.
Je ne peux pas m'empêcher de penser qu'il y a une amélioration à faire avec la section dup et slice, mais Ruby ne semble pas avoir de méthode String qui supprimera un caractère à un index spécifique et renverra la nouvelle chaîne -__-.
Modifié selon le commentaire, ty!
la source
-1
si aucun palindrome n'a été trouvé.-1
, merci. Je ne sais pas ce que vous avez en tête concernant la suppression d'une méthode, j'aurai une réflexion.05AB1E , 10 octets
Essayez-le en ligne ou vérifiez d'autres cas de test .
Explication:
la source
Pas PythonPHP ,858381 octetsEssayez-le en ligne!
Inutilement récursif:
PHP , 96 octets
Essayez-le en ligne!
la source
Haskell, 107 caractères:
En fonction ( 85 caractères ):
version originale non golfée:
la source
C # (184 caractères)
J'avoue que ce n'est pas la meilleure langue pour faire du golf de code ...
Formaté et commenté:
la source
C # (84 caractères)
Instruction LINQpad s'attendant à ce que la variable
i
contienne la chaîne d'entrée. La sortie est stockée dans lao
variable.la source
Haskell, 80
Appelé comme ceci:
la source
Japt , 8 octets
Essayez-le
la source
Haskell, 118C
Non golfé:
la source
Gelée ,
1714 octetsEssayez-le en ligne!
Puisque j'ai changé mon approche assez rapidement pour que l'ancienne version ne s'affiche pas dans l'historique des modifications, voici ce qui suit:
ŒPṚḊŒḂ€TṂ©’<La®o-
la source
Brachylog , 24 octets
Essayez-le en ligne!
Sent trop long.
Peut être de deux octets plus court si la sortie peut être indexée sur 2 :
Deux itérations antérieures et encore pires:
L'utilisation par ce dernier d'une variable globale nécessite un en- tête de test différent .
la source
Python 3 , 71 octets
Essayez-le en ligne!
Renvoie le caractère indexé 1 si l'opération peut être effectuée et
-1
sinon.la source
Wolfram Language (Mathematica) , 56 octets
Essayez-le en ligne!
Prend la saisie sous forme de liste de caractères. Pour l'entrée de chaîne, ajoutez
@*Characters
.PalindromeQ
a été introduit en 2015. L'alternative coûte +4 octets .la source
Perl 5
-p
,5652 octetsEssayez-le en ligne!
la source
C (gcc) ,
180168159157140139 octetsEssayez-le en ligne!
21617 octets rasés grâce au plafond! Et 3 octets de plus puisque les règles stipulent que la longueur minimale de l'entrée est de 2 caractères, donc ne devez pas vérifier les chaînes vides.Non golfé:
la source
&&!++p
juste sournois à expliquer :)Python, 84
Cela ne vérifie pas si l'entrée (chaîne s) est presque palindrome, mais est efficace en temps et lisible.
la source
s[-(i+1)]
peut être raccourcis[-i-1]
. De plus, je ne suis pas sûr, mais vous pourrez peut-être remplacer leif...else...
parreturn i+1 if ... else len(s)-1
s = "abcde"
, il doit retourner -1.Mon premier code-golf.
Java. ~ 1200 caractères dans les fonctions principales (et secondaires). Ouais bébé.
Dessus de classe et utilisation:
La fonction principale:
Sous-fonctions:
Classe complète:
la source