Palindromic Palindrome Checker [geschlossen]


37

Schreiben Sie ein Programm, um zu testen, ob eine Zeichenfolge palindrom ist, mit der zusätzlichen Bedingung, dass das Programm selbst palindrom ist.


1
Wenn die Sprache bis zum Ende der Zeile Kommentare enthält, ist dies trivial. Ich denke, diese sollten nicht zugelassen werden.
Joey

1
@Joey Ich würde gerne davon abraten, solche Kommentare zu verwenden, aber das Ablehnen, nachdem die Frage gestellt wurde, ist hart für diejenigen, die bereits geantwortet haben. @ Venteros Antwort (die einzige, die sie nicht verwendet) liegt bei der Stimmenauszählung weit vorne, sodass alle einverstanden zu sein scheinen.
Marcog

1
Nun, um solche Probleme früher auszumerzen (dies trat auch bei einer ähnlichen Aufgabe bei SO auf), könnten Sie die Sandbox oder das Puzzle-Labor verwenden ;-)
Joey,

1
Wie wäre es, wenn Sie das Programm als palindromes Quine- Grinsen bezeichnen ;-)
Quixotic

4
Ich weiß, dass dies eine alte Frage ist, aber ich denke, dass sie ein willkürliches Gewinnkriterium erfordert, wie etwa einen Beliebtheitswettbewerb oder Codegolf. Die Frage gibt keine an.
mbomb007

Antworten:


34

Rubin

z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z

Gibt 1 aus, wenn die Eingabe ein Palindrom ist, und 0, wenn dies nicht der Fall ist. Eingabe ohne Zeilenumbruch.

Verwendet keine Kommentare, sondern zwei Tricks:

  • Kurzschluss: 0Ist in Ruby wahr (nur nilund wird falseals falsch ausgewertet), wird also 1&&z==esrever.z* stupnicht ausgewertet und kann daher keine Laufzeitausnahme auslösen
  • Der Splat- / Multiplikationsoperator ( *): Um einen Syntaxfehler in zu vermeiden z=esrever.z stup, erzwingen wir, dass der Parser dies analysiert, z=esrever.z()*stupindem wir a hinzufügen *. Auf der anderen Seite wird das *als Splat-Operator analysiert, der in einem Funktionsaufruf ein Array in eine Reihe von Parametern aufteilt. Wenn es nur ein Element anstelle eines Arrays gibt, tut es im Grunde nichts und puts *fooist äquivalent zu puts foo.

Offensichtliche Lösung mit Kommentaren (druckt wahr / falsch):

puts gets.reverse==$_#_$==esrever.steg stup

Können Sie erklären, wie das funktioniert? Ich weiß nicht, Rubin.
Mellamokb

@mellamokb: Ich habe eine kurze Erklärung hinzugefügt. Lass es mich wissen, wenn es immer noch nicht klar ist.
Ventero

26

Python ohne Kommentar

"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"

Ich bin überrascht, dass noch niemand diesen Trick gefunden hat, er sollte in den meisten Sprachen funktionieren!


2
Sehr klug, ich mag das flüchtige Zitat.
Wayne Werner

Gute Lösung, man könnte sogar die printAnweisung fallen lassen und wenn man die in Anführungszeichen gesetzten Eingaben zulässt, raw_input()kann auf gekürzt werden input(). Am Anfang fehlt ein zusätzliches '='.
Willem

Nachgestellte Ausgabe nach True oder False entfernt:"a\"#;w==]1-::[w;)(tupni_war=w;";w=raw_input();w[::-1]==w;#"\a"
Willem

13

Perl

perl -nle "$s=$_ eq+reverse;print$s;s$tnirp;esrever+qe _$=s$"

Keine Kommentar-Tricks, nur geschickter Missbrauch des Substitutionsoperators (hey, Perl-Variablen beginnen auch mit einem $, na und?)


7

Python 2.7

s=raw_input();print'YNEOS'[s!=s[::-1]::2]#]2::]1-::[s=!s['SOENY'tnirp;)(tupni_war=s

6

C

#include <stdio.h>                   //
#include <string.h>                  //
int main() {                         //
  char str[1024];                    //
  fgets(str, sizeof(str), stdin);    //
  int i = 0, j = strlen(str) - 2;    //
  for (; i < j; i++, j--)            //
    if (str[i] != str[j]) {          //
      printf("no\n");                //
      return 0;                      //
    }                                //
  printf("yes\n");                   //
}                                    //
//                                    }
//                   ;)"n\sey"(ftnirp  
//                                }    
//                      ;0 nruter      
//                ;)"n\on"(ftnirp      
//          { )]j[rts =! ]i[rts( fi    
//            )--j ,++i ;j < i ;( rof  
//    ;2 - )rts(nelrts = j ,0 = i tni  
//    ;)nidts ,)rts(foezis ,rts(stegf  
//                    ;]4201[rts rahc  
//                         { )(niam tni
//                  >h.gnirts< edulcni#
//                   >h.oidts< edulcni#

Laufendes Beispiel:

$ gcc -std=c99 c.c && ./a.out 
blahalb
yes

wird der Kürze halber nicht gewinnen, aber ich bin beeindruckt
Wayne Werner

lol, clever-lvl 11/10.
Nymo

5

Golfscript

.-1%=#=%1-.
  • nur mit kommentar trick
  • Eingabe ohne \ n am Ende
  • Führe Zeichen für Zeichen zusammen (auch zur Zeichensetzung)
  • Liefert 1 für Erfolg, 0 für Misserfolg

4

PHP

echo strrev($z)==$z;#;z$==)z$(verrts ohce

Fakten:

  • $z string, die zu überprüfende Eingabezeichenfolge
  • $tBoolescher Wert, TRUE, wenn die Eingabezeichenfolge $zpalindrom ist, andernfalls FALSE
  • Mithilfe von Kommentaren kann ich den Code palindromisieren.
  • Ausgänge $t
  • Die Quelle selbst ist ein Palindrom

Der Grund, warum es nicht möglich sein wird, palindromic palindrome checker in PHP zu implementieren, liegt darin, dass PHP-Variablen mit einem beginnend benannt werden $. Sie können einen Bezeichnernamen nicht mit $in PHP beenden .


2

PHP

<?php eval/*/*/(';{$i=fgets(STDIN,2e9);};{$a="strrev";}{var_dump("{$i}"=="{$a($i)}");}/*}{*\{;("{(tupni$)a$}"=="{putni$}")ohce}{;"verrts"==a$};{;(9e2,NIDTS)stegf=i$);');/*\*\eval php?>

Benutzt einige seltsame Tricks, um das $Problem zu umgehen , technisch gesehen ist es kein Palindrom, da ich mich ;am Ende einschleichen musste .

 <?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>

Dies ist eine funktionierende, die PHP- /* */Kommentare und die Tatsache verwendet, dass Sie das Ende für sie nicht brauchen.


2
Am Ende sollte der erste Code evalsein lave.
Aycan Yaşıt

1

CoffeeScript

Ich kämpfte tatsächlich mit der umgekehrten Schreibweise von 'split', 'reverse' und 'join': \

p=(s)->s.split('').reverse().join('')==s#s==)''(nioj.)(esrever.)''(tilps.s>-)s(=p

1

Groovy

print args[0]==args[0].reverse()?1:0//0:1?)(esrever.]0[sgra==]0[sgra tnirp

Sie haben Kommentare hier verwendet!
Ameis

1

Python 3, 55 Bytes

Verwendet einen Kommentar, ist aber kürzer als der andere Python, der Kommentare verwendet.

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

1

Fuzzy Octo Guacamole , 17 Bytes

^Cz.=i_;@;_i=.zC^

Ich bin mir nicht ganz sicher, wie der Gewinn definiert ist, aber ich habe die Byteanzahl nach oben gesetzt.

^ Ruft die Eingabe ab und schiebt sie zum ersten Stapel.

C kopiert den ersten Stapel in den zweiten.

z kehren Sie die Oberseite des Stapels um, so dass "as" zu "sa" wird.

. verschiebt den aktiven Stapel, so dass der aktive Stapel den Eingang und der inaktive den umgekehrten Eingang hat.

=prüft auf Gleichheit, kehrt 0auf Gleichheit zurück.

iinvertiert den ToS, 0wird also 1, und alles andere wird so ziemlich False.

_Pops und legt die Temp-Variable fest, die ;dann gedruckt wird.

@Beendet das Programm manuell, damit es den umgekehrten Teil nicht berührt. Dies macht das Palindrom.


0

Javascript

function a(b){return b==b.split('').reverse().join('')}//})''(nioj.)(esrever.)''(tilps.b==b nruter{)b(a noitcnuf

Schwer zu machen ohne Kommentare ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.