Votre tâche est simple. Le programme lit une ligne de texte à partir de l'entrée standard et imprime le même texte sous une forme inversée. Il n'est pas autorisé d'imprimer autre chose.
Par exemple:
entrée: "Bonjour!", sortie: "! olleH"
Le hic , c'est que votre programme doit être capable de faire exactement la même chose si le code source lui-même est inversé!
Notation: la notation par code-golf standard s'applique, avec la modification suivante pour limiter l'ennui
//margorp
program//
réponses de style: toute solution qui est un palindrome entraînera une pénalité de + 25% au score, arrondie. Cette pénalité s'applique toujours, si vous, par exemple, insérez des caractères dans le programme qui n'ont aucun effet utile, juste pour casser le palindrome.
-1%#%1-/1
ou-1%#%(0
?Réponses:
APL, 5
Cela inverse (
⌽
, le long du dernier axe) l'entrée (⍞
), et est suivi d'un commentaire (⍝
marque un commentaire de ligne). Inversé, le programme inverse (le⊖
long du premier axe) l'entrée et est suivi d'un commentaire. Parce que l'entrée va toujours être unidimensionnelle, dans ce cas⌽
et⊖
sont fonctionnellement équivalentes. C'est peut-être encore plus sournois que la solution GolfScript, alors voici une solution plus propre (sans commentaires), qui obtient un score de 9 .Ce premier saisit un vecteur vide (
⍬
), l'aplatit (monadique,
) et l'inverse (⊖
, le long du premier axe). Cela laisse toujours un vecteur vide. Ensuite, il concatène (dyadique,
) à l'entrée (⍞
), laissant l'entrée intacte. Il aplatit ensuite (monadique,
) l'entrée déjà plate et l'inverse (⌽
, le long du dernier axe). Ensuite, il concatène (dyadique,
) un autre vecteur vide (⍬
) à l'entrée inversée. Cela ne fait rien et laisse l'entrée inversée derrière. Inversé, ce programme fait la même chose, basé à nouveau sur le fait que⌽
et⊖
sont fonctionnellement équivalents avec des arguments unidimensionnels.Vous ne pouvez vraiment pas dire que j'ajoute des caractères inutiles pour briser le palindrome (les deux fonctions inverses différentes sont différentes avec une entrée bidimensionnelle ou plus; je profite simplement du fait qu'elles agissent de la même façon avec une- entrée dimensionnelle)
la source
Coque Unix - 8 + 25% = 10
La réponse précédente de
cat|tac
ne fonctionnait pas réellement,tac
inverse l'ordre des lignes, pas l'ordre des caractères d'une ligne.la source
Haskell, 53
Techniquement, ce n'est pas un palindrome, mais, comme l'ordre de déclaration des fonctions n'a pas d'importance, une fois inversé, vous avez exactement le même programme.
la source
main=niam
déclaration vers le milieu et vous obtenez un palindrome.Rubis, 37
Renversé:
la source
Tcl, 78
Pas un palindrome.
la source
exit
à#
(le # est un paramètre, pas le début d'un commentaire).\#
dans la ligne suivante s'exécutera#
(pas le début du commentaire car échappé) qui est le nouveauexit
.gs2, 2
(Oui, ce langage a été fait avant le défi. Non, ce n'est pas une blague ou une faille. L' espace ASCII (0x20
) est inversé .)EDIT: aw, mec, cette question est super vieille? Si seulement je m'étais engagé plus tôt. : <Je vais laisser cette réponse juste parce que c'est trop beau pour la laisser passer.
la source
Golfscript, 9 (7 * 1,25 = 8,75)
sale, sale, sale, mais extrêmement court.
-1%
signifie "sélectionner chaque élément (caractère), en arrière" et#
signifie "commentaire de ligne". Le reste n'est qu'un peu de la magie d'E / S de GolfScript.C'est la solution "propre" la plus courte (aucun commentaire) que j'ai trouvée ( 14 * 1,25 = 17,5 ):
ce qui signifie: pousser une chaîne vide, la supprimer, inverser l'entrée, la cloner deux fois, la diviser par elle-même (consommer deux copies et produire un tableau vide), supprimer toutes celles du tableau vide, supprimer le tableau emtpy, pousser une chaîne vide et (implicitement) imprimer la pile.
la source
Rubis, 44
Juste un commentaire à la fin d'un programme normal: P
35 caractères, + 25% = 44
la source
Tcl, 75,25
Cette fois, un palindrome.
la source
]]
et]]
est le caractère \ x1A.)Python 3, 42
Crédits
:-)
) créée par moila source
print(input()[::-1])#)]1-::[)(tupni(tnirp
en Python 3 à la place pour réduire le score à 51,25.;
c'est une telle insertion qui n'a aucun effet utile.Rebmu : 9 (avec pénalité) ou 13 (sans)
La solution ennuyeuse de Rebmu est 9 et porte la pénalité palindromique. Je vais le montrer quand même "juste parce que":
En utilisant l' astuce impassible de remarquer les majuscules des lettres, ce sont des mots séparés, et le manque de majuscule signifie que nous ne faisons pas un mot d'ensemble, nous produisons cinq mots ordinaires:
Ce qui est un raccourci pour le code équivalent (également Rebmu légal):
Le fait que vr et nr soient dénués de sens n'a pas d'importance, car bien qu'ils ne soient affectés à rien, ce sont des mots valides. L'évaluateur ne fait donc que
return reverse a
... ça marche dans les deux sens. Mais cela est analogue dans un sens à la triche ennuyeuse: le code n'est pas commenté, mais il est mort et n'est pas exécuté sur un chemin.Pour quelque chose de plus excitant qui n'encourt pas la pénalité, que diriez-vous de cette solution à 13 caractères:
Voyons comment cela est traité sur ses chemins avant et arrière, une fois développé. Vers l'avant:
En arrière comme
ArvA vr: RV a
:À la baisse, la variante à l'envers écrase l'abréviation de reverse. Mais bon, ce n'est pas un palindrome, et c'est seulement 13 caractères. :-)
(Remarque: cela suppose que vous exécutez Rebmu en mode / args, où a est l'argument par défaut du programme transmis à l'interpréteur sur la ligne de commande et que vous acceptez le résultat. Si la lecture à partir de l'entrée standard est en fait une exigence, les choses passer par exemple de 9 à 11 caractères pour la solution simple:.
rnRVrArVRnr
Et si vous devez imprimer sur une sortie standard à partir du programme au lieu d'accepter la sortie d'expression de l'interpréteur qui ajouterait également quelques caractères.)la source
JavaScript, 62 * 1,25 = 78
Pas trop créatif, mais le meilleur que j'ai pu trouver. (suppose que l'entrée est stockée dans une variable
i
)J'ai compris ceci:
63 caractères, pas de palindrome
mais ça ressemblait trop à de la triche. : PI pourrait faire beaucoup plus de changements triviaux (comme utiliser à la
i['split']
place dei.split
), mais tous ceux-là ont toujours envie de tricher: Pla source
(p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)
(60 octets) fait cette chose.Pyke, 2 (+ 25%), non compétitif
Pyke prend l'entrée implicitement et sort implicitement.
_
est la fonction inverse.la source
Tcl, 99
Si une commande qui n'existe pas est appelée, une
unknown
commande spéciale est appelée qui pourrait charger la commande. Ou faites d'autres trucs drôles.la source
T-SQL, 86 * 1,25 = 108
Voici une entrée palindromique ennuyeuse pour SQL Server 2008 (et plus récent) juste pour montrer que c'est possible.
@ contient le texte saisi, l'exemple de chaîne étant "Hi". Le nombre de caractères de cette entrée correspond à une chaîne d'entrée de deux caractères.
la source
Keg , ceil (1 + 0,25) = 2 octets
Cela prend l'entrée et l'inverse, et la sortie implicite la produit littéralement. TIO
la source
Befunge-98 (PyFunge) , 17 octets
Essayez-le en ligne!
Essayez-le en ligne! (Renversé)
la source
QBIC , 14 + 25% = 18 octets
Utilise un code source palindromique. L'utilisation de deux méthodes distinctes pour ce faire prend un peu plus de temps (34 octets):
Explication:
la source
Pushy , 7 octets (5 + 25%)
Essayez-le en ligne!
Cela entraîne une pénalité de 25% car c'est un palindrome, mais c'est le mieux que je puisse faire. Peu importe la façon dont le programme est exécuté, il exécute ces 3 commandes:
La substitution
i
dec
(effacer la pile) ou de\
(commentaire) a le même effet.la source
05AB1E , 1 + 25% = 2 octets
Essayez-le en ligne!
la source
R , 65 octets
EDIT: abandonné la pénalité de 25% grâce à un changement trivial, mais invisible pour moi, de Grimy.
Essayez-le en ligne!
Dites bonjour à la capacité abyssale de R à gérer les chaînes, même lorsque vous utilisez des packages conçus pour des chaînes comme
stringi
... barfla source