Công cụ kiểm tra palindrom Palindromic [đóng]


37

Viết chương trình để kiểm tra xem một chuỗi có phải là palindromic hay không, với điều kiện được thêm vào là chính chương trình đó là palindromic.


1
Nếu ngôn ngữ có những bình luận cho đến cuối dòng thì điều này là không đáng kể nên tôi đoán những thứ đó không được phép.
Joey

1
@Joey tôi rất vui lòng không khuyến khích sử dụng những bình luận như vậy, nhưng không cho phép họ sau khi đặt câu hỏi là khó khăn với những người đã trả lời. Câu trả lời của @ Ventero (người duy nhất không sử dụng chúng) đang đi trước về số phiếu, vì vậy mọi người dường như đồng ý.
marcog

1
Chà, để loại bỏ những vấn đề như vậy sớm hơn (điều này cũng xảy ra trong một nhiệm vụ tương tự trên SO), bạn có thể sử dụng hộp cát hoặc phòng thí nghiệm Puzzle ;-)
Joey

1
Làm thế nào về việc áp đặt rằng chương trình nên là một nụ cười độc ác tự nó ;-)
Quixotic

4
Tôi biết đây là một câu hỏi cũ, nhưng tôi nghĩ rằng nó cần một tiêu chí chiến thắng tùy ý, chẳng hạn như cuộc thi về sự nổi tiếng hoặc môn đánh gôn. Câu hỏi chỉ định không có.
mbomb007

Câu trả lời:


34

Hồng ngọc

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

In 1 nếu đầu vào là một bảng màu, 0 nếu không. Đầu vào không có ngắt dòng.

Không sử dụng bất kỳ nhận xét nào, thay vào đó, nó sử dụng 2 thủ thuật:

  • Đoản mạch: 0là true-ish trong Ruby (chỉ nilfalseđánh giá thành false), do đó 1&&z==esrever.z* stupkhông được đánh giá và do đó không thể tăng ngoại lệ thời gian chạy
  • Toán tử splat / phép nhân ( *): Để tránh lỗi cú pháp z=esrever.z stup, chúng tôi buộc trình phân tích cú pháp phân tích cú pháp này z=esrever.z()*stupbằng cách thêm a *. Mặt khác, cái *được phân tích cú pháp như một toán tử splat, trong một lệnh gọi hàm chia một mảng trong một chuỗi các tham số. Nếu chỉ có một phần tử thay vì một mảng, thì về cơ bản nó không có gì, puts *footương đương với puts foo.

Giải pháp rõ ràng bằng cách sử dụng nhận xét (in đúng / sai):

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

Bạn có thể giải thích làm thế nào điều này hoạt động. Tôi không biết ruby.
mellamokb

@mellamokb: Tôi đã thêm một lời giải thích ngắn. Hãy cho tôi biết nếu nó vẫn chưa rõ ràng.
Ventero

26

Python không có bình luận

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

Tôi ngạc nhiên khi chưa ai tìm thấy mánh khóe đó, nó sẽ hoạt động với hầu hết các ngôn ngữ!


2
Rất thông minh, tôi thích các trích dẫn thoát.
Wayne Werner

Giải pháp tuyệt vời, bạn thậm chí có thể bỏ printcâu lệnh và nếu bạn cho phép đầu vào được chỉ định kèm theo trong dấu ngoặc kép raw_input()có thể được rút ngắn thành input(). Thiếu thêm '=' khi bắt đầu.
Willem

đã xóa đầu ra sau khi đúng hoặc sai:"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$"

không có thủ thuật bình luận, chỉ cần khéo léo lạm dụng toán tử thay thế (hey, các biến perl bắt đầu bằng $ quá, vậy thì sao?)


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#

Chạy ví dụ:

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

sẽ không giành chiến thắng vì sự ngắn ngủi, nhưng tôi rất ấn tượng
Wayne Werner

lol, thông minh-lv 11/10.
nymo

5

Golf

.-1%=#=%1-.
  • chỉ với thủ thuật bình luận
  • đầu vào không có \ n ở cuối
  • thực hiện khớp char bằng char (ngay cả khi chấm câu)
  • trả về 1 cho thành công, 0 cho thất bại

4

PHP

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

Sự thật:

  • $z chuỗi, chuỗi đầu vào để kiểm tra
  • $tboolean, TRUE nếu chuỗi đầu vào $zlà palindrom, FALSE nếu không
  • Sử dụng các ý kiến ​​để giúp tôi làm cho mã palindrom.
  • Đầu ra $t
  • Nguồn chính nó là một palindrom

Lý do tại sao không thể triển khai trình kiểm tra palindromic palindromic trong PHP bởi vì các biến PHP được đặt tên bắt đầu bằng a $. Bạn không thể kết thúc một tên định danh bằng $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?>

Sử dụng một số thủ thuật kỳ quặc để tránh $vấn đề này, về mặt kỹ thuật không phải là một palindrom khi tôi phải lẻn ;vào cuối.

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

Đây là một tác phẩm sử dụng các /* */bình luận của PHP và thực tế là bạn không cần kết thúc cho chúng.


2
Cuối cùng mã đầu tiên, evalnên được lave.
Aycan Yaşıt

1

Cà phê

Tôi thực sự vật lộn với các cách viết ngược của 'split', 'Reverse' và 'tham gia': \

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

Bạn đã sử dụng ý kiến ​​ở đây!
Ant's

1

Python 3, 55 byte

Sử dụng một nhận xét, nhưng ngắn hơn một Python khác sử dụng các nhận xét.

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

1

Fuzzy Octo Guacamole , 17 byte

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

Không chắc chắn chính xác làm thế nào chiến thắng được xác định, nhưng tôi đặt số byte lên hàng đầu.

^ lấy đầu vào và đẩy nó vào ngăn xếp đầu tiên.

C sao chép ngăn xếp thứ nhất sang ngăn thứ hai.

z đảo ngược đỉnh của ngăn xếp, vì vậy "as" trở thành "sa".

. thay đổi ngăn xếp hoạt động, vì vậy ngăn xếp hoạt động có đầu vào và ngăn không hoạt động có đầu vào đảo ngược.

=kiểm tra sự bình đẳng, trở lại 0bình đẳng.

iđảo ngược ToS, vì vậy 0trở thành 1, và bất cứ điều gì khác gần như trở thành False.

_bật và đặt biến temp mà ;sau đó in.

@kết thúc chương trình một cách thủ công, vì vậy nó không đạt phần đảo ngược. Điều này làm cho palindrom.


0

Javascript

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

Khó để làm điều đó mà không có ý kiến ​​...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.