Un palindrome est un mot qui est son propre revers.
Maintenant, il y a des mots qui pourraient ressembler à des palindromes mais qui ne le sont pas. Par exemple , considérons le mot sheesh
, sheesh
n'est pas un palindrome parce que son inverse est hseehs
différent, si l' on considère sh
comme une seule lettre, il est est inverse sheesh
. Ce genre de mot, nous l'appellerons semi-palindrome.
Plus précisément, un mot est un semi-palindrome si nous pouvons diviser le mot en un certain nombre de morceaux de sorte que lorsque l'ordre des morceaux est inversé, le mot d'origine est formé. (Pour sheesh
ces morceaux sont sh e e sh
) Nous exigerons également qu'aucun morceau ne contienne des lettres des deux moitiés du mot (sinon chaque mot serait un semi-palindrome). Par exemple, ce rear
n'est pas un semi-palindrome car il r ea r
a un morceau ( ea
) qui contient des lettres des deux côtés du mot d'origine. Nous considérons que le caractère central dans un mot de longueur impaire n'est sur aucun côté du mot, donc pour les mots de longueur impaire, le caractère central doit toujours être dans son propre bloc.
Votre tâche sera de prendre une liste d'entiers positifs et de déterminer s'il s'agit d'un semi-palindrome. Votre code doit produire deux valeurs inégales cohérentes, l'une si l'entrée est un semi-palindrome et l'autre sinon. Cependant, la séquence d'octets de votre code doit être elle- même un semi-palindrome .
Les réponses seront notées en octets avec moins d'octets étant mieux.
Cas de test
[] -> True
[1] -> True
[2,1,2] -> True
[3,4,2,2,3,4] -> True
[3,5,1,3,5] -> True
[1,2,3,1] -> False
[1,2,3,3,4,1] -> False
[11,44,1,1] -> False
[1,3,2,4,1,2,3] -> False
Programme pour générer plus de cas de test.
borrible a souligné que ceux-ci sont similaires aux palindromes de Smarandache généralisés . Donc, si vous voulez faire d'autres lectures, c'est un point de départ.
la source
Réponses:
Retina 0.8.2 ,
8569 octetsEssayez-le en ligne! Explication:
Sélectionne le mode Match. En fait, Retina utilise par défaut le mode Correspondance pour un programme sur une seule ligne, mais la deuxième copie du code correspondra toujours si ce n'est pour ces caractères supplémentaires.
Le match doit commencer au début.
Capturez un certain nombre de séries de personnages. Chaque course doit se terminer par une virgule.
Faites éventuellement correspondre une série de chiffres et une virgule.
Faites éventuellement correspondre toutes les captures dans l'ordre inverse, en les faisant apparaître au fur et à mesure de leur correspondance.
Le match doit se terminer à la fin.
Revenez en arrière, sauf si toutes les captures ont été sautées. Cela fonctionne en exigeant que la correspondance soit toujours au début de la chaîne si nous avons une capture non coupée, ce qui est impossible.
la source
Gelée ,
2723 octetsRenvoie 1 pour les semi-palindromes, 0 sinon.
Essayez-le en ligne!
Comment ça marche
la source
Python 2 ,
157153147 147143 octets-4 octets grâce à tsh .
Essayez-le en ligne!
la source
x==x[::-1]
pourlen(x)<2
enregistrer 2 * 2 octets; 143 octets05AB1E ,
59474341 octets-12 octets grâce à @Emigna .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
2ä
øøε.œ} `, en économisant 6 octets. Vous semblez également avoir laissé 30 octets inutilisés dans ...€
au lieu deε }
. :)05AB1E , 37 octets
Utilise à peu près la même technique que Jonathan a inventée.
Essayez-le en ligne!
Programme complet. Reçoit une liste de STDIN, sort 1 ou 0 vers STDOUT.
Filtrez-gardez les partitions qui satisfont ...
Cette condition: Les longueurs de chaque (
€g
) sont stockées dans une liste, dont les préfixes (η
) sont ensuite additionnés (O
), nous donnant ainsi les sommes cumulées de la liste des longueurs. Ensuite, la moitié plafonnée du maximum de cette liste est poussée sur la pile - mais en conservant également la liste d'origine (Z;î
) et si elle se produit (å
) dans les sommes cumulées, la fonction retourne véridique.Pour chacun, comparez (
Q
) a avec un inversé, qui sont poussés séparément sur la pile parÂ
. Renvoie une liste de 0 s et 1 s.Maximum. Si l'un d'eux est véridique, alors 1 sinon 0 . Fin de l'exécution. Tout ce qui suit est complètement ignoré.
la source
Python 2 ,
275251205 octets-24 octets grâce à @KevinCruijssen
-44 octets grâce à @PostLeftGhostHunter
-2 octets de plus grâce à @KevinCruijssen
Renvoie True pour le semi-palindrome, None sinon
Essayez-le en ligne!
la source
Gelée ,
3332 octets-1 Merci à Erik l'Outgolfer
Merci également à Dennis pour une correction de bogue et pour avoir cherché à changer un détail d'implémentation dans Jelly.
Les semi-palindromes donnent
1
, d'autres donnent0
.Ou consultez la suite de tests .
Les seuls morceaux sont les
ŒḂ
s ({3 rd & 4 th } vs {29 th & 30 th } octets), juste pour permettre au code d'analyser.Comment?
Tout le travail est effectué par le côté droit - le "lien principal":
la source
Perl 6 ,
8779 octets-8 octets avec quelques astuces de la réponse de Jo King
Essayez-le en ligne!
Réponse JavaScript du port de tsh. Renvoie deux objets Regex différents.
la source
Rubis , 129 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 139 octets
Essayez-le en ligne!
la source
C (gcc) (X86), 216 octets
Essayez-le en ligne!
p(L,a,n)
renvoie 0 si le tableaua
de longueurL
est un semi-palindrome, 1 sinon. Étant donné que tous les préfixes de longueur>n
sont déjà vérifiés, il compare le préfixe de longueurn
avec le suffixe de longueurn
.p(L,a)
est le point d'entrée.Malheureusement, la solution la plus intéressante est plus longue:
224 octets
Essayez-le en ligne!
Non golfé:
la source
Japt , 66 octets
Interprète Japt
Grande amélioration de cette version, elle bat actuellement la plupart des langues pratiques. Fonctionne maintenant sur un tableau d'entiers puisque la méthode précédente avait un bogue.
Explication:
la source
PHP 237 octets
fonction récursive, renvoie
true
(pour une entrée contenant moins de deux éléments) ou1
pour true,0
pour falsy. Essayez-le en ligne (contient une ventilation).La longueur réelle du code est de 118 octets; semi-palindrome créé par duplication de code.
Pour de meilleures performances, remplacez
&
par&&
et insérez!$x&&
avant++$i
.la source
Scala, 252 octets
Essayez-le en ligne!
PS. Apparemment, la solution est 2 fois plus longue juste pour satisfaire une exigence selon laquelle le code source est également semi-palindrome.
PPS. Pas un candidat au code-golf mais une solution purement fonctionnelle utilisant la correspondance de modèles:
la source
Perl 6 , 81 octets
Essayez-le en ligne!
Renvoie l'expression régulière
/../
pour True et l'expression régulière/^(.+)(.*)$0$/
pour False. Fonctionne de manière similaire à la réponse de nwellnhof , mais convertit la liste en chaîne au préalable.la source