Đa sắc thái


15

Nhiệm vụ của bạn là viết một chương trình chạy bằng hai ngôn ngữ khác nhau và thực hiện như sau:

  • Trong một ngôn ngữ, nó xác định lại một chuỗi đã cho.
    • Lấy chuỗi. abcde
    • Đảo ngược chuỗi. edcba
    • Xóa ký tự đầu tiên. dcba
    • Dán nó lên chuỗi gốc. abcdedcba
  • Trong một ngôn ngữ khác, nó làm mất giá trị của một chuỗi nhất định.
    • Lấy một chuỗi palidromized bằng phương pháp trên. abcdedcba
    • Lấy các ký tự từ đầu đến giữa. abcde

Hãy nhớ rằng, đây là , vì vậy mã có ít ký tự nhất (không phải byte) sẽ thắng.

Bảng xếp hạng

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language 1/Language 2, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

# Ruby/Python, <s>104</s> <s>101</s> 96 bytes

Nếu ở đó bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ phiên dịch), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

# Perl/C, 43 + 2 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành một liên kết mà sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

# [><>](http://esolangs.org/wiki/Fish)/Python, 121 bytes


@LuisMendo Một giây ...
Oliver Ni

@LuisMendo Được rồi, tôi đã cập nhật quesiton
Oliver Ni

Chuỗi sẽ bao giờ chứa dòng mới?
Erik các Outgolfer

Định dạng đầu vào có thể khác nhau trong hai ngôn ngữ? Giống như một chuỗi có dấu ngoặc kép kèm theo hoặc không có chúng
Luis Mendo

@LuisMendo Vâng.
Oliver Ni

Câu trả lời:


14

05AB1E / MATL , 10 9 ký tự

9LQ2/)%¹û

Trong 05AB1E điều này palindromizes . Trong MATL, nó làm mất giá trị .

Giải thích trong 05AB1E

Phần này của mã không làm gì cả (trên toàn cầu):

9L    Pushes array [1, 2, ... 9]
Q     Consumes the array, takes the input implicitly, and produces no output
2/    With no further input to take implicitly, this gives no output
)     Wrap stack into an array: gives an empty array
%     Consumes that array and, with no further input to take implicitly, gives no ouput 

Đây là phần thực hiện công việc:

¹     Push input again
û     Palindromize. Implicitly display

Giải thích về MATL

Đây là phần thực hiện công việc:

9L    Push array [0, 1j]
Q2/   Add 1, divide by two: transforms into [1/2, (1+1j)/2]
)     Use as index into implicit input. [1/2, (1+1j)/2] is interpreted as
      1/2:(end+1)/2, which is rounded to 1:(end+1)/2. So this takes elements
      from first to half, including both. Implicitly display

Điều này bị bỏ qua:

%¹û   Everything after '%' is a comment

12

05AB1E / Jelly , 6 ký tự

Palindromizes trong 05AB1E.
Depalindromizes trong Jelly.

œs2Ḣ¹û

Dùng thử trong 05AB1E

05AB1E Giải thích

œ       # compute powerset of input
 s      # swap (does nothing)
  2     # push 2
   Ḣ    # does nothing
    ¹û  # palindromize input

Hãy thử nó trong Jelly

Giải thích về thạch

œs2     # split input in 2 chunks (first chunk is larger for odd length strings)
   Ḣ    # head, take first
    ¹û  # does nothing

6

Python 3 / JavaScript, 83 ký tự

Đã lưu 2 byte nhờ @LevitatingLion

1//2;x=input();print(x+x[-2::-1]);"""
x=prompt();alert(x.slice(0,-x.length/2))//"""

Python palindromizes , JavaScript khử .

Tôi đã cố gắng giữ nhiều mã không đổi giữa hai người, nhưng tôi không thể tìm ra một cách hay để lẻn .slicevào Python. Đây là một phương pháp thay thế:

1//2;prompt=input,alert=print
x=prompt();1//2;x+=x[-2::-1]);"""
x=x.slice(0,-x.length/2))//"""
alert(x)

Bạn có thể thay thế x[::-1][1:]bằng x[-2::-1]để lưu hai ký tự.
LevitatingLion

@LevitatingLion Cảm ơn bạn! Tôi đã cố gắng tìm ra cách kết hợp hai lát, nhưng dường như không có gì hoạt động.
Sản phẩm ETH

5

Scala / Javascript, 106 byte

/*\u002A/print(args(0)+args(0).reverse.tail)//*/
/*/**/
alert((s=prompt()).slice(0,-s.length/2))//\u000A*/

Palindromizes trong scala và depalindromizes trong javascript.

Dùng thử trên ideone (scala) - Cảnh báo: tô sáng cú pháp sai

Hãy thử nó trên jsfiddle (javascript).

Giải trình:

Scala, giống như java, xử lý unicode thoát trước mọi thứ khác, vì vậy scalac nhìn thấy mã như thế này:

/**/                                //\u002A is as asterisk, results in an empty block comment
print(args(0)+args(0).reverse.tail) //scala code
//*/                                //a line comment
/*                                  //scala supports nested block comments, so this comment...
  /*
  */
  alert((s=prompt()).slice(0,-s.length/2)) 
  //                                  //\u000A (newline) inserted here
*/                                  //...ends here

Các javascript được phân tích cú pháp như thế này:

/*\u002A/print(args(0)+args(0).reverse.tail)//*/ //block comment
/*                                               //a block comment...
  /*
*/                                               //...ending here, no nesting
alert((s=prompt()).slice(0,-s.length/2))         //code
//\u000A*/                                       //line comment

4

CJam / MATL , 18 ký tự

r_W%(;
"j9LQ2/)%";

Trong CJam điều này palindromizes . Trong MATL, nó làm mất giá trị .

Giải thích về CJam

Phần làm việc:

r           Read string
_           Duplicate
W%          Reverse
(;          Remove first element

Phần giả:

"j9LQ2/)%"  Push this string
;           Remove it from the stack
            Implicitly display both strings obtained previously

Giải thích về MATL

Phần giả:

r           Push random number between 0 and 1
_           Negate
W           2 raised to that
%(;  Comment (ignored)

Phần làm việc:

"           For each element in the array at the top of the stack. Since it is a number,
            which is the same as a length-1 array, the following is executed once
  j         Input string
  9L        Push array [0, 1j]
  Q2/       Add 1, divide by 2: transforms into [1/2, (1+1j)/2]
  )         Use as index. [1/2, (1+1j)/2] is interpreted as 1/2:(end+1)/2, which is
            rounded to 1:(1+end)/2. So this takes elements from first to half,
            including both

Một phần giả khác:

   %";      Comment (ignored)
            Implicitly display the previously obtained string

4

𝔼𝕊𝕄𝕚𝕟 / Javascript ES6, 55 ký tự

this._?Σ(`ï+ï.Ħ⬮.Đ1`):(x=prompt()).slice(0,-x.length/2)

Try it here (ES6 browsers only).

Palindromizes trong, khử giá trị trong Javascript ES6.

Tôi mặc dù điều này sẽ dễ dàng, vì biên dịch sang ES6 và hầu hết ES6 có thể chạy trong. Rõ ràng, tôi hoàn toàn sai.

Giải trình

this._kiểm tra xem nếu biến _tồn tại trong phạm vi toàn cầu; Sử dụng Lodash và do đó đã _được lưu trữ, nhưng ES6 thuần túy thì không.

Phân đoạn - Σ(`ï+ï.Ħ⬮.Đ1`)- đánh giá từ chuỗi mã mã hóa đầu vào. Thông thường, mã sẽ là ï+ïĦ⬮Đ1, nhưng tôi đặt dấu chấm vào để làm cho trình biên dịch hài lòng .

Phân đoạn Javascript - (x=prompt()).slice(0,-x.length/2)- khử giá trị chuỗi từ dấu nhắc.


Tôi sẽ sử dụng một hàm (vì vậy tôi không phải xử lý prompt), nhưng hàm đánh giá của nó không giống như vậy, vì vậy tôi đã sử dụng promptvà không có chức năng nào để làm cho trình biên dịch hài lòng .


Wow, nhà soạn nhạc kén chọn.
HyperNeutrino

4

JavaScript ES6 / JavaScript ES3, 143 byte

function(x){'use strict';function a(){return x+x.split('').reverse().slice(1).join('')}{function a(){return x.slice(0,-x.length/2)}}return a()}

Palindromizes trong JavaScript ES6, khử giá trị trong JavaScript ES3. Không cạnh tranh , đó chỉ là một thử nghiệm để tạo ra một đa âm cho hai phiên bản của cùng một ngôn ngữ.

Trong các hàm ES3 được phép trong các khối, nhưng vì các khối không xác định phạm vi nên hàm mới chỉ thay thế hàm đầu tiên. Trong chế độ nghiêm ngặt ES5, nó không thành công vì nó không cho phép các hàm được xác định trong các khối. Trong ES6, điều đó được cho phép và, vì các khối hiện xác định phạm vi, hàm đầu tiên không được thay thế.

Đã thử nghiệm trong Internet Explorer 5 (mô phỏng) cho ES3 và Node.JS và Firefox cho ES6.


4

Thạch / CJam, 15 14 ký tự

q_,2./m]<e#¶ŒB

-1 char nhờ 42545 (ETHproductions)

Hãy thử trực tuyến! (Thạch) (Palindromization)

Thông dịch viên CJam (Depalindromization)

Jelly giải thích:

Trong Jelly, cũng giống như \nvậy, đây là những gì Jelly thấy:

q_,2./m]<e#
ṖṚṭ

ṖṚṭ         Main link. Arguments: z
Ṗ           Pop
 Ṛ          Reverse
  ṭ         Append
   ⁸        (implicit) z

Giải thích về CJam:

Trong CJam, tất cả mọi thứ sau khi e#trên một dòng là một nhận xét. Vì vậy, đây là những gì CJam thấy:

q_,2./m]< Code
q         All input
 _        Duplicate
  ,       Length
   2.     2.0
     /    Float division
      m]  Ceil
        < Take

@ETHproductions Rất tiếc, tôi đã quên nó! Nó được gọi là "nảy", đó là lý do tại sao.
Erik the Outgolfer 7/11/2016

4

Perl / JavaScript, 73 byte

Perl trả về một palindrom và JavaScript 'de-palindromizes' chuỗi đầu vào.

s=prompt();console.log(s.slice(0,-s.length/2));eg=1;t=eg;s=$=reverse$_=eg

JavaScript

Giả sử chuỗi là một palindrom hợp lệ rồi.

Tất cả các công việc xảy ra trong phần đầu tiên:

s=prompt();console.log(s.slice(0,-s.length/2));

Lưu trữ đầu vào s, sau đó trả về nửa đầu (làm tròn) của chuỗi. Phần còn lại của tập lệnh là các phép gán biến vô nghĩa:

eg=1;t=eg;s=$=reverse$_=eg

Hãy thử nó ở đây:

s=prompt();console.log(s.slice(0,-s.length/2));eg=1;t=eg;s=$=reverse$_=eg

Perl

Phải được chạy với -pl, ví dụ:

perl -ple 's=prompt();console.log(s.slice(0,-s.length/2));eg=1;t=eg;s=$=reverse$_=eg' <<< 'test'
# returns testtset

Mã về cơ bản là hai thay thế ( s///), nhưng sử dụng =làm dấu phân cách thay vì /:

s/prompt();console.log(s.slice(0,-s.length\/2));eg/1;t/eg;s/$/reverse$_/eg

Đầu tiên, thay thế prompt();console.log(s.slice(0,-s.length\/2));eg(trong đó, phải thừa nhận là sẽ lộn xộn lên chuỗi của bạn nếu nó có chứa một cái gì đó giống như "prompt;console.logs.slice0,-s.length/2;eg"...) với 1;tđó là evaled, trở về t, này thay thế thứ hai kết thúc chuỗi ( $) với reverse$_đó là sau đó cũng evaled và gắn thêm nguồn gốc chuỗi đảo ngược.

Hãy thử trực tuyến!


3

Python 2 / Nim , 76 74 byte

#[
s=input();print s+s[-2::-1]#let s=stdin.readLine;echo s[0..s.len div 2]

Palindromizes trong Python, depalindromizes trong Nim. Lạm dụng cú pháp bình luận.

Python và Nim đều sử dụng #cho ý kiến. Python hoàn toàn không hỗ trợ bình luận khối (ngoại trừ chuỗi đa dòng với """), nhưng Nim làm với #[ comment ]#.

Chúng tôi lạm dụng điều này để nhận xét Python (lúc đầu) cho Nim, sau đó sử dụng dấu ]trong Python để bắt đầu mã Nim, trông giống như một nhận xét cho Python.

Mã Python yêu cầu đầu vào của nó được bao quanh bằng dấu ngoặc kép. Mã Nim không có hạn chế này.

Đã thử nghiệm trên Python 2.7.8 và Nim 0.14.2.

Nghĩa là nó! - Python 2, palindromizing

Nghĩa là nó! - Nim, depalindromizing Rõ ràng phiên bản của Nim Ideone sử dụng (0.11.2) không hỗ trợ nhận xét đa dòng. Hoạt động trên Nim 0.14.2.




2

Japt / JavaScript, 63 ký tự

Bài học trong ngày: Các đa giác Japt / JavaScript luôn là một ý tưởng tồi ...

$Oq=1;$Oq &&0
alert(($U=prompt()).slice(0*$U,-$U.length/2));$Uê

JavaScript

Dòng đầu tiên đặt biến $Oqthành 1, sau đó thực hiện no-op với$Oq &&0 .

Dòng thứ hai nhắc người dùng cho một chuỗi đầu vào, gán nó cho biến $U, sau đó cắt nó từ chỉ mục 0*$U(luôn là 0) sang chỉ mục -$U.length/2. Điều này thực hiện khử khử cần thiết; kết quả là alerted. Chương trình kết thúc trên ReferenceError vì biến$Uê không được xác định.

Japt

Trong Japt, mọi thứ giữa các ký hiệu đô la được chèn trực tiếp vào mã nguồn được mã hóa. Ngoài ra, mỗi chữ cái viết thường chuyển sang ví dụ .q(, trừ khi char trước đó là một chữ cái viết thường khác, trong trường hợp đó nó trở thành "q". Một không gian được dịch mã )và tất cả các parens bị thiếu sẽ tự động được thêm vào. Chương trình trên chuyển mã đại khái sang:

Oq=1;O.q()&&0
.a("l".e("r".t((U=prompt()).slice(0*U,-U.length/2))));U.ê()

Điều này sau đó được thực thi như JavaScript. Oq=1;đặt biến Oqthành 1. Điều này không bao giờ được sử dụng lại, vì vậy nó là không có. O.q()là một chức năng xóa STDOUT và trả về undefined; Đây là giả, vì vậy toàn bộ&&0 .a("l".e(... phần không được thực hiện.

Phần duy nhất thực sự quan trọng là U.ê() . Đầu vào ngầm định đặt chuỗi đầu vào vào U, .ê()biến nó thành một bảng màu và đầu ra ngầm định gửi kết quả đến STDOUT.


Nếu các mục chức năng được cho phép, phần sau đây sẽ hoạt động trong 34 ký tự:

X=>($X=X).slice(0,-X.length/2);$Uê

Phần đầu tiên xác định hàm ES6, nhưng nó vẫn là một chương trình đầy đủ trong Japt. Kiểm tra nó trực tuyến!


2

Java / Brainfuck, 71 byte

/*+[,>]<[<]>[.>]<<[.<][*/a->a.substring(0,Math.ceil(a.length()/2d));//]

Palindromizes trong BF, depalindromizes trong Java.

Để rõ ràng, đây là điều quan trọng đối với trình thông dịch BF:

+[,>]<[<]>[.>]<<[.<][->,..]

trong đó vòng lặp cuối cùng chứa các ký tự từ lambda Java bị bỏ qua vì con trỏ trỏ đến một ký tự null tại điểm đó.


0

05AB1E / Java 8, 102 ký tự

//¹ûq
interface M{static void main(String[]a){System.out.print(a[0].substring(0,a[0].length()/2+1));}}

Palindromize trong 05AB1E.
Depalindromize trong Java 8.

Giải thích 05AB1E:

//     # No-ops
¹      # First input
 û     # Palindromize it
  q    # Terminate the program
interface M{static void main(String[]a){System.out.print(a[0].substring(0,a[0].length()/2+1));}}
       # No-ops

Giải thích Java 8:

//¹ûq                           // No-ops
interface M{                    // Class
  static void main(String[]a){  //  Mandatory main-method
    System.out.print(           //   Print to STDOUT:
      a[0].substring(0,         //    The substring of the input-argument from index 0 to
        a[0].length()/2+1));}}  //    the length of the input integer-divided by 2 plus 1
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.