Générateur de palindrome palindromique


22

Créez un programme qui convertit la chaîne d'entrée en un palindrome commençant par la chaîne d'entrée. Le programme lui-même doit être un palindrome.

Par exemple, saisissez neverod:, imprimez neveroddoreven. Vous devez également gérer les entrées multi-mots et multi-lignes.


2
Cela semble très similaire à cette question , sauf que nous générons ici au lieu de vérifier. Les chances sont que les mêmes astuces seront utilisées pour faire du programme un palindrome.
Sp3000

2
Je peux tout à fait comprendre la question downvote, mais pourquoi la réponse a-t-elle été downvote?
John Dvorak

2
@JanDvorak Je suppose que c'est parce qu'il utilise des commentaires pour créer le palindrome, ce qui rend cette stratégie correcte. Ce n'est pas une manière très intéressante et est spécifiquement interdit dans au moins une question nécessitant du code palindromique: codegolf.stackexchange.com/q/28190/15599 . Tomek, bienvenue dans la programmation d'énigmes et de codegolf. Je vote de toute façon, vous avez donc accès à notre sandbox meta.codegolf.stackexchange.com/q/2140/15599 mais je vous recommande de rester et de répondre à quelques questions avant d'en poser une autre. N'oubliez pas de rechercher des questions similaires avant de poster
Level River St

Les fonctions sont-elles autorisées (au lieu de programmes entiers)?
nimi

Peut-on utiliser un délimiteur pour le palindrome généré? soit neverod-> neverodadoreven(avec l' aintervalle)
R between

Réponses:


26

Dyalog APL, 6 4

⌽,,⌽

Essayez-le ici.

Autres solutions:

⌽,⊢⊢,⌽
⌽⊢⊢,⊢⊢⌽

Explication

Ce ne sont que:

{⌽((,⍵),(⌽⍵))}
{⌽((,⍵)⊢((⊢⍵),(⌽⍵)))}
{(⌽⍵)⊢((⊢⍵),((⊢⍵)⊢(⌽⍵)))}

Monadic ,et ne fait rien sur les cordes. Dyadique ,est concaténation. Dyadic retourne son opérande droit. Et c'est évidemment la réversion.


1
Notez que cela ne fonctionne que dans Dyalog APL.
FUZxxl

22

piet 19x2 = 38

http://www.pietfiddle.net/img/aoNhlwC47U.png?cs=15&rot=4

Accepte l'entrée jusqu'à ce qu'elle rencontre 0x00. Ne se termine pas, mais la sortie sera correcte.


3
Symétrique: oui; palindromique:?
Blue

@Blue Je ne pense pas qu'il soit possible de rendre un fichier image PNG palindromique en raison de l'en-tête et du pied de page. De plus, la compression PNG signifie que les octets de l'image ne sont certainement pas palindromiques.
Esolanging Fruit

1
@EsolangingFruit Bien que l'on puisse dire que l'équivalent d'image d'un palindrome devrait être centrosymétrique.
Jonathan Frech

17

APL, 9

⍞←Z,⌽,Z←⍞

Explication:

       Z←⍞  ⍝ read a line from the keyboard, and store it in Z
      ,     ⍝ flatten into one-dimensional array (this has no effect here)
     ⌽      ⍝ reverse
   Z,       ⍝ concatenate Z to its reverse
⍞←         ⍝ explicit output (not necessary, but it makes it a palindrome)

13

CJam, 13 octets

qL;_-1%1-_;Lq

qL;                 "Read the input, Put an empty array on stack and pop that array";
   _-1%             "Now the string is on top, make a copy and reverse the copy";
       1-           "Remove occurrences of integer 1 from the reverse string. [no-op]";
         _;         "Copy the reversed string and pop it";
           Lq       "Put an empty array on stack and read the remaining input. Remaining";
                    "input will be empty as we already read whole of the input";

Essayez-le en ligne ici


ou..

GolfScript, 9 octets

.-1%}%1-.

.                 "Input is already on stack. Make a copy";
 -1%              "Reverse the copy";
    }             "This marks the beginning of a super comment. Anything after this in the";
                  "code is a comment";
     %1-.         "no-op comment";

Essayez-le ici


Je pense que vous avez trouvé un bug dans l'analyseur GolfScript avec votre "super-commentaire". Attention, un #commentaire ordinaire fonctionnerait aussi bien là-bas.
Ilmari Karonen

@IlmariKaronen Ce n'est pas moi, }est connu pour être un super commentaire depuis des lustres :)
Optimizer

8

C ++, 162 octets

#include<cstdio>//
main(){int c=getchar();if(c>0)putchar(c),main(),putchar(c);}//};)c(rahctup,)(niam,)c(rahctup)0>c(fi;)(rahcteg=c tni{)(niam
//>oidtsc<edulcni#

C, 117 octets

main(c){c=getchar();if(c>0)putchar(c),main(),putchar(c);}//};)c(rahctup,)(niam,)c(rahctup)0>c(fi;)(rahcteg=c{)c(niam

1
Dieu bénisse les deux barres obliques lol
Abr001am

7

Haskell, 102 + 22 = 124 octets

a b fa=fa<|>b
fa=reverse>>=a
main=interact fa
niam=main
af tcaretni=niam
a=>>esrever=af
b>|<af=af b a

Cela doit être exécuté avec le Control.Applicativemodule dans la portée, qui peut être défini via le fichier d'initialisation ghci.ghci : :m Control.Applicative(-> +22 octets).

Pas de truc de commentaire, juste 7 fonctions dont 4 ne sont jamais appelées.

Si des fonctions (au lieu de programmes) sont autorisées:

Haskell, 55 + 22 = 77 octets

a b fa=fa<|>b
f=reverse>>=a
a=>>esrever=f
b>|<af=af b a

Utilisation f "qwer"->"qwerrewq"

Edit: la version précédente était juste fausse.


3

Pyth, 11 octets

+z_z " z_z+

En Pyth, tout ce qui précède avec un espace n'est pas imprimé. Donc, nous ajoutons simplement le négatif de la chaîne à lui-même, mettons un espace, commençons une chaîne et reflétons le côté gauche de la citation "

Essayez-le en ligne ici


3

Rubis, 44

s=gets p
s+=s.reverse||esrever.s=+s
p steg=s

Prend une chaîne multiligne en entrée de stdin, génère une représentation Ruby de cette chaîne concaténée à son inverse. Pourrait couper un caractère en le remplaçant ||par #pour mettre en commentaire le code mort sur la deuxième ligne.


s=gets p! =p steg=s
CalculatorFeline

... c'est vrai, je n'ai aucune idée de ce que je voulais dire par là.
histocrate

3

Jolf, 9 octets

Langue plus récente, non concurrente

Essayez ici

aη+i_i+ηa

Explication: je viens de commencer Jolf et je ne pense pas que j'explique cela correctement.

aη         alert function, arity of the function can't be reduced by 1 so it stays at 1
  +i_i     concatenate the input with the reversed input
      +η   arity of the add reduced by 1, it just takes the following character (a)
        a  returns the input

1
Bienvenue chez PPCG! J'ai vu votre autre réponse et j'apprécie beaucoup que vous utilisiez cette langue! Ce sont mes propres inventions, j'espère que vous l'aimez :) C'est une très bonne solution, très bien faite! J'aime la façon dont vous avez utilisé ηla solution, très bien faite. Vous pouvez enregistrer deux octets en éliminant les mu, comme: a+i_i+a. (Jolf a également une entrée implicite pour remplir le reste des arguments, mais ce n'est pas un problème car une seule entrée est donnée à la fois.) Je garderais toujours votre solution d'origine dans la réponse.
Conor O'Brien

@ Cᴏɴᴏʀ O'Bʀɪᴇɴ Merci! J'ai juste choisi une langue de golf qui ne semblait pas trop effrayante et j'ai sauté dedans, j'ai pris plaisir à le découvrir. J'essayais de comprendre d'où venait le η et j'ai réalisé que c'était en essayant de fixer mon point de départ de + i_i +. Merci pour l'info!
gonfle

3

PowerShell, 67

$args|%{$_+-join$_[$_.Length..0]}#}]0..htgneL._$[_$nioj-+_${%|sgra$

Essayez-le en ligne

Comme suggéré par @mazzy, le code peut être raccourci de 12 octets lors de l'utilisation d'une plage statique. Cependant, cela limite la longueur d'entrée à 9 Ko. Théoriquement, 9 Mo seraient possibles, mais cela ralentirait considérablement le code.

$args|%{$_+-join$_[9kb..0]}#}]0..bk9[_$nioj-+_${%|sgra$

1
Alternative 67 octets:param($s)$s+-join$s[$s.Length..0]#]0..htgneL.s$[s$nioj-+s$)s$(marap
mazzy

si la longueur de la chaîne d'entrée est inférieure à 9 Ko alors $args|%{$_+-join$_[9Kb..0]}#}]0..bK9[_$nioj-+_${%|sgra$(55 octets)
mazzy

2

Octo Guacamole flou, 17 octets

Le brouillard est plus récent que ce défi, il ne s'agit donc pas d'une compétition.

^dz''sjX@Xjs''zd^

Solution alternative en 19 octets:

^Czs''.jX@Xj.''szC^

Ils prennent tous deux en entrée, dupliquent et inversent, et rejoignent la pile.

Explication:

^dz''sj@js''zd^
^                # Get input
 d               # Duplicate ToS (input)
  z              # Reverse ToS
   ''            # Push empty string (for joining separator)
     s           # Move the empty string to the inactive stack
      j          # Join the active stack with the top of the inactive stack as the delimiter and push the result.
       X         # Print the ToS
        @        # End the program
        Xjs''zd^  # Backwards version of the beginning.

Aussi, non compétitif: P
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ oups. : P
Rɪᴋᴇʀ

1

tinyBF , 40

|=||==>|=|=|=+|=>==||==>=|+=|=|=|>==||=|

Ma première pensée a été Brainfuck, mais il est impossible de faire correspondre les accolades ... heureusement, tinyBF a un contrôle de flux plus simple.

Aucun commentaire, il prend en entrée une chaîne terminée par null et renvoie le résultat dans une chaîne terminée par null. Vous pouvez le tester ici , sachez simplement qu'il ne s'arrête pas (bien que Firefox invite au moins à arrêter le script qui ne répond pas).

Commenté:

|=|                        Retrieve a byte of input.
|                          Positive (opening) bracket.
   ==                      Output the byte.
   >                       Move the pointer in positive direction.
   |=|                     Retrieve a byte of input.
   =                       Switch direction to negative.
|                          Negative (closing) bracket.
=                          Switch direction.
+                          Increment byte to execute return loop.
|                          Opening bracket.
   =>                      Move the pointer in negative direction.
   ==                      Output the byte.
|                          Closing bracket.
|=|                        Output the null terminator.
|==>|=|=|=+|=>==|          ...and keep null terminating it just to be sure.

Notez que si vous le codez en instructions 2 bits, il réduit la taille à 10 octets (ce ne serait pas un palindrome).


1

Python 3, 59 octets

a=input()#
print(a+a[::-1])#([1-::]a+a)tnirp
#()tupni=a

J'ai fait de mon mieux pour trouver une solution qui n'utilisait qu'une seule ligne mais je n'ai pas eu de chance.

Python 3, 79 octets

a=input()#()tupni=a#
print(a+a[::-1])#([1-::]a+a)tnirp
#a=input()#()tupni=a

Ma tentative originale dans laquelle chaque ligne est un palindrome. Je ne pense pas que ce soit nécessaire pour ce défi, mais je l'ai inclus juste au cas où.


1
Une ligne mais encore plus longue (73, car lambdac'est si long):print((lambda a:a+a[::-1])(input()))#)))(tupni()]1-::[a+a:a adbmal((tnirp
no1xsyzy

Très agréable. Je connais moins les lambdas mais je m'y habitue lentement. Merci d'avoir partagé.
Noomann

1

Vitsy, 9 octets

z:Zr?rZ:z
z          Grab all string input from the command line arguments.
 :         Duplicate this stack.
  Z        Print all elements in this stack as a string.
   r       Reverse (reverses an empty stack).
    ?      Go right a stack.
     r     Reverse (reverses the input).
      Z    Print all elements in this stack as a string.
       :   Duplicate the stack (duplicates an empty stack).
        z  Grab all input from the command line (the command line arguments stack is already empty).

Essayez-le en ligne!


1

Befunge , 37 octets

~:0`!#v_:,
  >:#,_@_,#:>  
,:_v#!`0:~

Essayez-le en ligne!

La ligne supérieure pousse et imprime chaque caractère d'entrée. La deuxième ligne (avant le @) imprime la pile en sens inverse, mais nous entrons au contional _pour consommer le -1 généré à la fin de la lecture de l'entrée. L'autre moitié du code (y compris ces tristes nouvelles lignes laides) fait de la source un palindrome, mais ne fonctionne jamais.


1

C # ( 33 32 + 1) * 2 = 68 66 octets

enregistré 2 octets à l'utilisation de .Aggregate ()

s=>s+s.Aggregate("",(a,b)=>b+a);//;)a+b>=)b,a(,""(etagerggA.s+s>=s

Oh le bon vieux lambda, tu peux l'attraper avec

Func<string, string> f=<lambda here>

puis appelez-le avec

f("neverod")

1

Perl, 45 octets

;print$_=<>,~~reverse;m;esrever~~,><=_$tnirp;

Assez simple, c'est printl'entrée ( $_=<>) suivie de celle reverse-ci. reverserenvoie $_parce que nous l'utilisons dans un contexte scalaire en préfixant avec ~~. Ensuite, nous comparons (en m//utilisant ;comme délimiteur), dans un contexte vide, contre l'inverse du script.

Si nous pouvons garantir nous n'aurons pas à créer un palindrome de esrever,><=_$tnirpnous pouvons raccourcir le code à 43 octets :

g.print$_=<>,reverse.m.esrever,><=_$tnirp.g

Usage

echo -n 'neverod' | perl -e 'g.print$_=<>,reverse.m.esrever,><=_$tnirp.g'
neveroddoreven

Perl, 26 octets

Comprend un code de 25 octets + 1 pour -p.

$_.=reverse;m;esrever=._$

Je ne pense pas que cela soit valide car il nécessite le -pdrapeau qui, je pense, ne peut pas être facilement combiné dans le contenu du script pour faire un vrai palindrome. À peu près les mêmes appels que ci-dessus, sauf qu'il repose sur le fait qu'il -pajoute également un ;arrière-plan (sur les Perls plus récents ...) pour fermer le m//.

Usage

echo -n 'neverod' | perl -pe ';$_.=reverse;m;esrever=._$;'
neveroddoreven

0

Pyth, 15

 k k+ z_z +k k 

Remarquez l'espace au début et à la fin.

Tâche assez ennuyeuse en Pyth. z_zimprime le palindrome souhaité, mais il imprime z(la chaîne d'entrée) et _zl'inverse sur deux lignes différentes. +combine les deux mots, mais +à la fin nécessite deux nouvelles déclarations à la fin (et au début). Je choisis ketk , qui ne sont que des chaînes vides. Ensuite, beaucoup d'espace blanc, ce qui supprime l'impression (et l'impression d'espaces vides, qui génèrent bien sûr des sauts de ligne).

Étant donné que l'espace blanc supprime toutes les sorties à l'exception de la +z_z, vous pouvez remplacer le ks et le littéral par l'arité 0. Par exemple, 1 2+ z_z +2 1ou T Z+ z_z +Z T.

Essayez-le en ligne .


1
J'en ai un 11 en Pyth, que je n'ai pas encore posté car je pensais que vous le battrez sûrement;)
Optimizer

0

Javascript, 137 octets

Je n'utilise pas la "astuce de commentaire" mais j'utilise l'astuce de guillemets échappés lol.

"a\"};))''(nioj.)(esrever.)''(tilps.b(tacnoc.b nruter{)b(a noitcnuf";function a(b){return b.concat(b.split('').reverse().join(''));};"\a"

4
Je ne pense pas que cela compte; les deux caractères centraux sont ";. L'ajout d'un ;dernier caractère dans la chaîne devrait résoudre ce problème.
ETHproductions

En l'état, cette réponse n'est pas valide. Veuillez le réparer ou le supprimer.
Jonathan Frech

0

JavaScript, 58 octets

p=>p+[...p].reverse().join``//``nioj.)(esrever.]p...[+p>=p

0

PHP, 28 + 1 + 28 = 57 octets

<?=($x=$argv[1]).strrev($x);#;)x$(verrts.)]1[vgra$=x$(=?<

prend l'entrée de l'argument de ligne de commande. devis pour plusieurs mots, échapper aux nouvelles lignes pour plusieurs lignes.


0

Python 2, 51 octets

s=input();print s+s[::-1]#]1-::[s+s tnirp;)(tupni=s

Je suis surpris que personne n'y ait pensé! Nécessite une entrée citée ( 'ou "). Si les fonctions avaient été autorisées, j'aurais pu le faire pour 37 octets à la place:

lambda x:x+x[::-1]#]1-::[x+x:x adbmal

0

C ++ 14, 152 116 octets

En tant que lambda sans nom, suppose sêtrestring

[](auto s){decltype(s)r;for(auto c:s){r=c+r;}return s+r;}//};r+s nruter};r+c=r{)s:c otua(rof;r)s(epytlced{)s otua(][

Ancienne solution:

[](auto s){auto r=s;for(auto p=s.rbegin()-1;++p!=s.rend();r+=*p);return r;}//};r nruter;)p*=+r;)(dner.s=!p++;1-)(nigebr.s=p otua(rof;s=r otua{)s otua(][

Usage:

auto f=[](auto s){decltype(s)r;for(auto c:s){r=c+r;}return s+r;};

main(){
 string a="123456789";
 cout << f(a) << endl;
}

0

05AB1E , 5 octets

«q«Â

Essayez-le en ligne.

Explication:

        # Bifurcate (short for Duplicate & Reverse) the (implicit) input
         #  i.e. "neverod" → "neverod" and "doreven"
 «       # Concat both together
         #  i.e. "neverod" and "doreven" → "neveroddoreven"
  q      # Exit the program (and implicitly output the concatted result)
   «Â    # No-ops

Ou bien:

R«q«R

Essayez-le en ligne.

Rest inversé, et «prend à nouveau implicitement l'entrée pour concaténer.


REMARQUE: Si nous sommes autorisés à sortir neverodorevenpour l'entrée neverod, qui est toujours un palindrome, cela peut être fait en 1 octet à la place avec le palindromize intégré:

û

Essayez-le en ligne.


0

Assemblage x86-64 (convention d'appel Microsoft x64), 89 octets:

80 39 00 48 8B D1 4C 8B C1 74 0B 48 FF C2 49 FF C0 80 3A 00 75 F5 48 FF CA 8A 02 41 88 00 48 8B C2 48 FF CA 49 FF C0 48 3B C1 77 ED C3 ED 77 C1 3B 48 C0 FF 49 CA FF 48 C2 8B 48 00 88 41 02 8A CA FF 48 F5 75 00 3A 80 C0 FF 49 C2 FF 48 0B 74 C1 8B 4C D1 8B 48 00 39 80

Démonté:

 0000000000000000: 80 39 00           cmp         byte ptr [rcx],0
 0000000000000003: 48 8B D1           mov         rdx,rcx
 0000000000000006: 4C 8B C1           mov         r8,rcx
 0000000000000009: 74 0B              je          0000000000000016
 000000000000000B: 48 FF C2           inc         rdx
 000000000000000E: 49 FF C0           inc         r8
 0000000000000011: 80 3A 00           cmp         byte ptr [rdx],0
 0000000000000014: 75 F5              jne         000000000000000B
 0000000000000016: 48 FF CA           dec         rdx
 0000000000000019: 8A 02              mov         al,byte ptr [rdx]
 000000000000001B: 41 88 00           mov         byte ptr [r8],al
 000000000000001E: 48 8B C2           mov         rax,rdx
 0000000000000021: 48 FF CA           dec         rdx
 0000000000000024: 49 FF C0           inc         r8
 0000000000000027: 48 3B C1           cmp         rax,rcx
 000000000000002A: 77 ED              ja          0000000000000019
 000000000000002C: C3                 ret
 000000000000002D: ED                 in          eax,dx
 000000000000002E: 77 C1              ja          FFFFFFFFFFFFFFF1
 0000000000000030: 3B 48 C0           cmp         ecx,dword ptr [rax-40h]
 0000000000000033: FF 49 CA           dec         dword ptr [rcx-36h]
 0000000000000036: FF 48 C2           dec         dword ptr [rax-3Eh]
 0000000000000039: 8B 48 00           mov         ecx,dword ptr [rax]
 000000000000003C: 88 41 02           mov         byte ptr [rcx+2],al
 000000000000003F: 8A CA              mov         cl,dl
 0000000000000041: FF 48 F5           dec         dword ptr [rax-0Bh]
 0000000000000044: 75 00              jne         0000000000000046
 0000000000000046: 3A 80 C0 FF 49 C2  cmp         al,byte ptr [rax+FFFFFFFFC249FFC0h]
 000000000000004C: FF 48 0B           dec         dword ptr [rax+0Bh]
 000000000000004F: 74 C1              je          0000000000000012
 0000000000000051: 8B 4C D1 8B        mov         ecx,dword ptr [rcx+rdx*8-75h]
 0000000000000055: 48 00 39           add         byte ptr [rcx],dil
 0000000000000058: 80

Notez que le code après l' retinstruction à 2Cest inaccessible, donc peu importe que ce soit un non-sens


0

Japt , 4 octets

êêêê

Essayez-le en ligne!

Comment ça marche

U.ê("ê".ê("ê"))  Transpiled to JS

       .ê("ê")   String.ê(string): true if `this` is palindrome
    "ê".ê("ê")   true (treated same as 1)
U.ê(          )  String.ê(number): palindromify
                   "abc"->"abccba" if `number` is odd, "abcba" otherwise
                 `true` is odd number, so we achieve the desired function

Alternative 4 octets

pwwp

Essayez-le en ligne!

Comment ça marche

U.p("w".w("p"))  Transpiled to JS
    "w".w(   )   Reverse of "w" ("p" is ignored)
U.p("w")         Append U.w(), which is reverse of U, to the right of U

0

Revers , 33 27 octets

iH~0}|{<:: oi]io ::<{|}0~Hi

Essayez-le en ligne!

Contrairement à beaucoup de solutions ici, celle-ci fait ne n'utiliser le code palindromised!

Explication:

i  0 |{      Get the first character and enter the loop
        :  o    Output the character while preserving it
              i  :     Get input and duplicate it
                   <{  Turn around
             ]         Increment the copy to check if EOF   
    }| <    Loop again if not EOF
  ~   If EOF, pop the extra copy of EOF
 H    Terminate, printing the contents of the stack.

Au total, les instructions non exécutées sont:

       :   i  o :   |}0~Hi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.