Palindromic palindrome checker [zamknięte]


37

Napisz program, aby sprawdzić, czy ciąg jest palindromiczny, z dodatkowym warunkiem, że sam program będzie palindromiczny.


1
Jeśli język ma komentarze do końca linii, jest to trywialne, więc myślę, że należy je zabronić.
Joey

1
@Joey Z przyjemnością odradzam korzystanie z takich komentarzy, ale ich odrzucenie po postawieniu pytania jest surowe dla tych, którzy już odpowiedzieli. Odpowiedź @ Ventero (jedyna, która ich nie używa) wyprzedza liczebność głosów, więc wszyscy się zgadzają.
marcog

1
Cóż, aby wyeliminować takie problemy wcześniej (zdarzyło się to również w podobnym zadaniu na SO), możesz użyć piaskownicy lub Puzzle Lab ;-)
Joey

1
A może narzucenie, że program sam w sobie jest palindromicznym uśmiechem, zły uśmiech ;-)
Quixotic

4
Wiem, że to stare pytanie, ale myślę, że wymaga ono arbitralnego kryterium wygranej, takiego jak konkurs popularności lub golf. Pytanie nie określa żadnego.
mbomb007,

Odpowiedzi:


34

Rubin

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

Drukuje 1, jeśli wejście jest palindromem, 0, jeśli nie jest. Wejście bez podziału linii.

Nie używa żadnych komentarzy, zamiast tego używa 2 lew:

  • Krótkie spięcie: 0w Rubim jest prawdziwy (tylko nili falseoceniany jako fałszywy), więc 1&&z==esrever.z* stupnie jest analizowany, a zatem nie może zgłosić wyjątku czasu wykonywania
  • Operator splat / multiplication ( *): Aby uniknąć błędu składniowego z=esrever.z stup, zmuszamy parser do przeanalizowania tego z=esrever.z()*stupprzez dodanie *. Z drugiej strony *parsowany jest jako operator splat, który w wywołaniu funkcji dzieli tablicę na szereg parametrów. Jeśli zamiast tablicy jest tylko jeden element, w zasadzie nic nie robi, więc puts *foojest równoważny puts foo.

Oczywiste rozwiązanie z wykorzystaniem komentarzy (drukuje prawda / fałsz):

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

Czy możesz wyjaśnić, jak to działa. Nie znam rubinu.
mellamokb

@mellamokb: Dodałem krótkie wyjaśnienie. Daj mi znać, jeśli nadal nie jest jasne.
Ventero

26

Python bez komentarza

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

Dziwi mnie, że nikt jeszcze nie znalazł tej sztuczki, powinna działać w większości języków!


2
Bardzo sprytny, podoba mi się uciekający cytat.
Wayne Werner,

Ładne rozwiązanie, możesz nawet upuścić printinstrukcję, a jeśli pozwolisz, aby dane wejściowe określone w cudzysłowach raw_input()można było skrócić input(). Brakuje dodatkowego „=” na początku.
Willem,

usunięto końcowe dane wyjściowe po Prawda lub Fałsz:"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$"

bez sztuczek w komentarzach, po prostu sprytne nadużywanie operatora podstawienia (hej, zmienne perla też zaczynają się od $, więc co?)


7

Python 2.7

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

6

do

#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#

Przykład działania:

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

nie wygra za zwięzłość, ale jestem pod wrażeniem
Wayne Werner

lol, sprytny lvl 11/10.
nymo,

5

Golfscript

.-1%=#=%1-.
  • tylko z trikiem komentowania
  • wprowadź bez \ n na końcu
  • wykonaj dopasowanie char przez char (nawet dla interpunkcji)
  • zwraca 1 dla sukcesu, 0 dla niepowodzenia

4

PHP

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

Fakty:

  • $z ciąg wejściowy ciąg do sprawdzenia
  • $twartość logiczna, PRAWDA, jeśli ciąg wejściowy $zjest palindromem, w przeciwnym razie FAŁSZ
  • Używanie komentarzy do pomocy w tworzeniu palindromu kodu.
  • Wyjścia $t
  • Samo źródło to palindrom

Powodem, dla którego nie będzie możliwe zaimplementowanie palindromowego kontrolera palindromów w PHP, jest to, że zmienne PHP są nazwane od $. Nie można zakończyć nazwy identyfikatora $w PHP.


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?>

Używa kilku dziwnych sztuczek, aby uniknąć tego $problemu, technicznie nie jest to palindrom, ponieważ musiałem podkraść się ;na końcu.

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

Jest to działający, który wykorzystuje /* */komentarze PHP i fakt, że nie potrzebujesz dla nich końca.


2
Na końcu evalpowinien być pierwszy kod lave.
Aycan Yaşıt

1

CoffeeScript

Właściwie walczyłem z odwrotną pisownią „split”, „reverse” i „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

Użyłeś tutaj komentarzy!
Ant's

1

Python 3, 55 bajtów

Używa komentarza, ale jest krótszy niż drugi Python, który używa komentarzy.

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

1

Fuzzy Octo Guacamole , 17 bajtów

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

Nie jestem do końca pewien, jak zdefiniowano wygraną, ale umieszczam bajt na górze.

^ pobiera dane wejściowe i wypycha je do pierwszego stosu.

C kopiuje pierwszy stos na drugi.

z odwróć górę stosu, aby „as” zmienia się w „sa”.

. przesuwa aktywny stos, więc aktywny stos ma dane wejściowe, a nieaktywny ma dane odwrócone.

=sprawdza równość, wraca 0do równości.

iodwraca ToS, a więc 0staje się 1i wszystko inne staje się właściwie False.

_wyskakuje i ustawia zmienną temp, którą ;następnie drukuje.

@kończy program ręcznie, aby nie uderzył w odwróconą część. To sprawia, że ​​palindrom.


0

JavaScript

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

Trudno to zrobić bez komentarzy ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.