(Premier défi, faites-le moi savoir s'il y a des problèmes.)
Un hétérogramme est un mot où aucune lettre de l'alphabet n'apparaît plus d'une fois, et un palindrome est une phrase qui est la même en arrière et en avant.
Le défi ici est d'écrire un morceau de code qui prend un mot (juste des lettres) en entrée et qui émet, qu'il s'agisse ou non d'un hétérogramme (véridique / faux). Le hic, c'est que le programme doit être un palindrome - lit le même en arrière et en avant. La capitalisation n'a pas d' importance ici, donc pour que l'hétérogramme soit valide, il ne peut pas avoir à la fois q et Q, par exemple. Aucun commentaire n'est autorisé et vous ne pouvez pas placer de chaînes contenant votre code (ou une partie importante de votre code) pour essayer de rendre la partie palindrome facile: P
C'est le code-golf, donc le code le plus court l'emporte. Bonne chance!
EDIT: Les parens, crochets ou autres symboles qui ont des formes gauche et droite doivent être inversés de manière appropriée pour la partie palindrome. Donc (helloolleh) est un palindrome, mais (helloolleh (ne l'est pas. Apparemment, cela s'appelle un palindrome commode.
EDIT 2: Vous n'obtiendrez aucune entrée vide, entrée avec plusieurs mots ou entrée avec des caractères autres que des lettres. Alors ne vous en faites pas :)
la source
(hellolleh)
un palindrome valide? Similaire pour[]
,{}
et<>
(le cas échéant).asdsa
considéré comme égal àasd\nsa
?Réponses:
Pyth - 11 octets
(Espaces de fuite et de tête nécessaires et comptés).
Suite de tests .
la source
Pyth, 17 octets
Essayez-le en ligne ici.
L'espace de tête est nécessaire. Je l'ai compté et l'espace de fin dans le nombre d'octets.
Voici la ventilation:
la source
.q
dans vos commentaires, mais un.w
dans votre programme.Python 3, 125
Le principal problème est de rendre l'inverse du code analysable. Ensuite, nous pouvons laisser sortir l'erreur des identificateurs non définis.
la source
<
en un>
!Perl, 43 octets
Exemple d'utilisation:
la source
> <> ,
137131 octetsQuand j'ai vu ce défi, j'ai pensé que <<> pourrait enfin être un bon choix de langue car en l'utilisant, vous pouvez surtout ignorer les palindromes; il est simple de s'assurer que le pointeur ne reste que là où il devrait. Bien que cela soit vrai,> <> rend malheureusement les conditions de golf atroces (ou tout simplement le golf en général). J'espère utiliser des astuces étranges auxquelles j'ai pensé pour compenser cela, mais voici une réponse "rapide" (pas en fait, à la fois au niveau du programme et de la création). Vous pouvez l'essayer en ligne ici .
Renvoie 1 pour vrai et -1 pour faux (je pourrais le changer à 0 mais la longueur resterait la même, malheureusement)
Comme toujours, faites-moi savoir si cela ne fonctionne pas et si vous avez des idées sur la façon de jouer au golf. Je l'ai testé par rapport à quelques cas de test, mais il pourrait toujours y avoir une exception.
Voici une autre version, une qui je pense est un peu plus intelligente, mais hélas est de dix octets de plus. Les valeurs Truthy / falsey cette fois sont 1 et une erreur (
something smells fishy...
):Explication:
Voici le code sans la partie ajoutée pour en faire un palindrome. Celui-ci n'utilise pas les astuces "plus intelligentes" que j'ai essayé d'utiliser pour la version alternative, il est donc un peu plus facile à expliquer (si quelqu'un est intéressé par une explication des "astuces", je serais heureux d'en donner une , bien que).
Ligne 1:
Voici comment fonctionne le swapping (
:{:@=?v$
) alambiqué - je vais utiliser un cas de test de cette pile:[5,1,8,1]
où le dernier caractère est le haut.:{
Le haut de la pile est dupliqué:,[5,1,8,1,1]
et la pile déplacée vers la gauche:[1,8,1,1,5]
:@
Le haut est dupliqué:,[1,8,1,1,5,5]
puis les trois premières valeurs sont décalées vers la droite:[1,8,1,5,1,5]
=?v
Inutile pour cette partie de l'explication$
La valeur supérieure est inversée une fois de plus[1,8,1,5]
, ce qui, si vous le remarquez, est la pile d'origine décalée une fois (comme si{
c'était la seule commande).Donc, ce que cela fait en anglais ("Dieu merci, il explique en fait les choses") est de vérifier la pile entière par rapport à la valeur supérieure et de passer à un point dans la deuxième ligne si une valeur est égale au sommet. Cette vérification est effectuée proportionnellement au nombre de valeurs dans la pile (
l - 1
, oùl
est la longueur de la pile) afin que toutes les valeurs soient vérifiées les unes par rapport aux autres.Ligne 2:
la source
><>
est un palindrome lui-même (tout simplement pas pratique)PHP, 126 octets
Vous devez l'exécuter avec la
short_tags
directive ini désactivée en 5.4 ou supérieur.Premier golf de tous les temps. Deux exemplaires, le premier imprime tout un tas d'ordures avec le résultat falsifié / véridique:
Cette version n'imprimera aucun jargon (162 octets):
Exécuter à partir de la ligne de commande avec
Peut probablement être joué un peu plus loin
la source
?><?
, vous pouvez utiliser//\\
. Cela devrait supprimer cette exigence. Et au lieu d'__halt_compiler()
utiliserreturn;
return;
est toujours valable.05AB1E, 9 octets
Essayez-le en ligne.
* insérer quelque chose sur le chemin du retour à mon tout premier défi *
La non-compétition depuis 05AB1E a été faite après ce challenge.
Explication
la source
Brachylog , 3 octets, défi de postdates de langue
Essayez-le en ligne!
C'est l'un des très rares programmes qui fonctionne à la fois dans Brachylog 1 et Brachylog 2. Le lien TIO est vers Brachylog 1 pour le bon vieux temps. Également inhabituel pour Brachylog, c'est un programme complet, pas une fonction. (Les programmes complets dans Brachylog produisent implicitement des booléens, ce qui est exactement ce que nous voulons pour cette question.)
Le principe général ici est que placer un prédicat entre une paire de lettres majuscules identiques est une affirmation que la valeur actuelle est invariante sous ce prédicat. Ainsi, vous voyez souvent des choses comme
AoA
pour "est trié" ("invariant sous tri");A↔A
signifierait (dans Brachylog 2) "est un palindrome" ("invariant sous inversion"), et ainsi de suite. Ce programme est "invariant lors de la suppression des doublons", c'est-à-dire "ne contient pas de doublons". Il est très pratique que cette méthode de spécification de l'invariance se trouve être un palindrome.la source
Brachylog , 3 octets
Essayez-le en ligne!
Le prédicat réussit si l'entrée est un hétérogramme et échoue s'il ne l'est pas.
la source
MATL , 7 octets
Essayez-le en ligne!
Renvoie la liste [1, 1] si l'entrée est un hétérogramme et [0, 0] sinon.
Explication:
la source