Étant donné une chaîne s
, retourne la plus petite sous-chaîne contiguë que vous pouvez supprimer pour créer un palindrome.
Exemples:
800233008 -> 2
racecarFOOL -> FOOL
abcdedcba -> (empty string)
ngryL Myrgn -> "L " (or " M")
123456789 -> 12345678 (or 23456789)
aabcdbaa -> c (or d)
[[]] -> [[ (or ]])
a -> (empty string)
Suggestions de cas de test des utilisateurs (si vous trouvez un cas de bord non répertorié, merci de poster un commentaire):
aabaab -> b | Suggested by Zgarb, some returned "aa".
Règles
- Seuls les caractères ASCII imprimables apparaîtront dans l'entrée (pas de nouvelle ligne, restez simple).
- Pas vraiment une règle, mais notez
<>
,/\
,()
,[]
et{}
ne sont pas palindromes.
C'est le code-golf , le plus petit nombre d'octets gagnés.
+ 100 primes ont été réclamées par Adnan
code-golf
string
palindrome
Urne Magique De Pieuvre
la source
la source
aabaab
[[]]
un palindrome?]][[
. Considérez queaabb
c'est la même chose, juste des personnages différents.Réponses:
Gelée , 16 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
J , 24 octets
Essayez-le en ligne!
Explication
la source
(;"e f)&>
le verbe harnais de test?Wolfram Language (Mathematica) ,
5351 octetsLe nombre d'octets suppose le codage CP-1252.
Essayez-le en ligne!
Définit un opérateur unaire
±
(ou une fonctionPlusMinus
). L'entrée et la sortie sont des listes de caractères. La suite de tests effectue la conversion depuis et vers les chaînes réelles pour plus de commodité.la source
Reverse
ce que la comparaison de l'inverse de l'original est plus courte que PalindromeQ? Je ne connais pas Mathematica, alors aucune idée.Characters@#/.{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:>b~~""&
Reverse[x={a,c}]==x
est deux octets plus long. Je ne sais pas s'il existe une alternative plus courte.Gelée , 20 octets
Essayez-le en ligne!
la source
05AB1E , 18 octets
Utilise le codage 05AB1E . Essayez-le en ligne!
la source
ǝ
était sérieusement génie cependant.Python 3 , 97 octets
Essayez-le en ligne!
la source
Python 2 , 116 octets
Essayez-le en ligne!
Enregistré quelques octets avec l'aide de Halvard Hummel !
la source
Japt ,
2622 octetsTestez-le en ligne! Essayer de comprendre comment mapper
false
à quelque chose de faux et n'importe quelle ficelle à quelque chose de vrai dans un octet. Actuellement , je suis en utilisant+0
...la source
Bash , 108 octets
Prend l'entrée comme argument de ligne de commande.
Essayez-le en ligne! avec des guillemets imprimés autour de la sortie pour visualiser les espaces de début / fin.
la source
Prolog , 271 octets
À un moment donné, j'ai réalisé que cela allait être énorme en termes de code-golf, alors j'ai gardé quelques espaces vierges supplémentaires pour préserver la ressemblance avec la version non obfusquée. Mais je pense toujours que cela pourrait être intéressant car c'est une approche différente du problème.
La version non-obscurcie:
la source
C ++,
254248246 octets-6 octets grâce à Zacharý -2 octets grâce à Toby Speight
Alors...
T
comme définition de macro parce que faireR""
comme un autre effet sur le littéral chaîne (c'est un préfixe utilisé pour définir les littéraux chaîne bruts, voir cppreference pour plus d'informations) qui n'est pas là quand je le faisT""
p(std::string)
tester si la chaîne est un palindrome. Si c'est le cas, il retourne1
qui jette àtrue
, sinon il retourne0
, qui jette àfalse
the last index - number of erased char
. S'il trouve que l'effacement d'une partie est un palindrome, alors, il revient. Par exemple, lorsque vous transmettez la chaîne en"aabcdbaa"
tant que paramètre, les deuxc
etd
sont une réponse valide, mais ce code sera renvoyéc
car l'effacement et la vérification si c'est un palindrome vient avant de vérifier si l'effacement est correctd
et si c'est toujours le cas.Voici le code à tester:
la source
using s=std::string;int p(s t){for(int i=0;i<t.S/2;++i)if(t[i]!=t[t.S-i-1])T 0;T 1;}s d(s e){if(!p(e))for(int i,w=1;w<e.S;++w)for(i=0;i<=e.S-w;++i){s t=e;t.erase(i,w);if(p(t))T e.substr(i,w);}T"";}
/2
on l'omettre? Itérer sur toute la longueur ne fera que répéter les tests que nous avons effectués, ce qui devrait être sans danger. Vous voudrez peut-être développer ce que vous entendez par "autre effet"R""
(c’est-à-dire qu’il est analysé comme un littéral de chaîne brute).Gelée , 33 octets
Essayez-le en ligne!
la source
PHP 104 + 1 octets
Exécuter en pipe
-nR
ou essayer en ligne .la source
Haskell ,
109105 octetsEssayez-le en ligne!
EDIT: Merci @ H.PWiz pour avoir décollé 4 octets! Je dois aller mieux avec ces monades!
la source
JavaScript, 90 octets
Essayez-le en ligne!
Afficher l'extrait de code
la source
Perl 5, 72 +1 (-p) octets
Essayez-le en ligne
la source
JavaScript (ES6),
9178 octetsL'entrée et la sortie sont des listes de caractères.
Supprime récursivement une coupe de plus en plus grande de l'entrée jusqu'à ce qu'un palindrome soit trouvé.
Fragment:
Afficher l'extrait de code
la source
TSQL (2016) 349B
Pas la solution la plus compacte mais la plus simple:
la source
@
comme variable pour quelques octets. Dans le CTE, vous pouvez utiliserwhere''=value)
pour un autre et vous n'avez pas besoin de revenirC
dans le résultat.Coque , 18 octets
Essayez-le en ligne!
Explication
la source
Haskell ,
98948180 octetsEssayez-le en ligne! Exemple d'utilisation:
""#0 $ "aabaab"
rendements"b"
.Edit: -1 octet grâce à Ørjan Johansen.
la source
""
part
.C ++,
189186176167 octetsJ'ai commencé avec la réponse de HatsuPointerKun , modifiant le test pour simplement comparer l'égalité avec une chaîne inversée; alors j'ai changé la façon dont nous énumérons les chaînes candidates. Suite à cela, les macros n’ont été utilisées qu’une ou deux fois, et il était plus court de les aligner.
Explication
Code lisible équivalent:
L'énumération des candidats commence par initialiser une chaîne avec les premiers
w
caractères omis, puis en copiant les caractères successifs de l'original pour déplacer l'espace. Par exemple, avec la chaînefoobar
etw
== 2:La première passe (avec
w
== 0) est un no-op, donc la chaîne complète sera considérée encore et encore. C'est bien, le golf l'emporte sur l'efficacité! La dernière itération de cette boucle accédera à l'index du passé. Il me semble que je m'en sors avec GCC, mais strictement, c'est un comportement indéfini.Programme de test
Une réponse directe de la réponse de HatsuPointerKun :
la source
REXX, 132 octets
la source
Rubis ,
8684 octetsEssayez-le en ligne!
la source
z=s.size-l+1
.C (gcc) , 307 octets
Essayez-le en ligne!
la source