回文多语


15

您的任务是编写一个以两种不同的语言运行的程序,并执行以下操作:

  • 用一种语言,它会palindromise给定的字符串。
    • 拿弦。 abcde
    • 反转字符串。 edcba
    • 删除第一个字符。 dcba
    • 将其粘贴到原始字符串上。 abcdedcba
  • 用另一种语言,它使给定的字符串去palindromind。
    • 采取上述方法使琴弦失去光泽。 abcdedcba
    • 从头到中间获取字符。 abcde

记住,这是,因此,字符最少(不是字节)的代码将获胜。

排行榜

这是一个堆栈片段,用于按语言生成常规排行榜和获胜者概述。

为确保您的答案显示出来,请使用以下Markdown模板以标题开头。

# Language 1/Language 2, N bytes

N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数保持标题。例如:

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

如果您想在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

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

您还可以将语言名称设置为链接,然后该链接将显示在页首横幅代码段中:

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


@LuisMendo一秒钟……
Oliver Ni

@LuisMendo好的,我已经更新了问题
Oliver Ni

字符串是否会包含换行符?
暴民埃里克

两种语言的输入格式可以不同吗?就像带引号或不带引号的字符串一样
Luis Mendo

@LuisMendo是的。
奥利弗·尼

Answers:


14

05AB1E / MATL10 9个字符

9LQ2/)%¹û

在05AB1E中此回文。在MATL中,它去palindromizes

05AB1E中的解释

这部分代码不执行任何操作(全局):

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 

这是完成工作的部分:

¹     Push input again
û     Palindromize. Implicitly display

MATL中的说明

这是完成工作的部分:

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

这被忽略:

%¹û   Everything after '%' is a comment

12

05AB1E / 果冻,6个字符

在05AB1E中发生Palindromizes。
去皮冻在果冻中。

œs2Ḣ¹û

在05AB1E中尝试

05AB1E说明

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

在果冻中尝试

果冻解释

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

6

Python 3 / JavaScript,83个字符

@LevitatingLion节省了2个字节

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

Python palindromizes,JavaScript palindromizes

我试图在两者之间保持更多的代码恒定,但是我想不出一个很好的方法来潜入.slicePython。这是另一种方法:

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

您可以替换x[::-1][1:]使用x[-2::-1],以保存2个字符。
LevitatingLion

@LevitatingLion谢谢!我试图弄清楚如何将两个部分组合在一起,但是似乎没有任何效果。
ETHproductions 2016年

5

Scala / Javascript,106字节

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

在scala中Palindromizes,在javascript中depalindromizes。

ideone(scala)上尝试-警告:语法高亮显示错误

jsfiddle(javascript)上尝试一下。

说明:

与Java一样,Scala会先处理Unicode转义,因此scalac会看到如下代码:

/**/                                //\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

javascript解析如下:

/*\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个字符

r_W%(;
"j9LQ2/)%";

在CJam中,这回文了。在MATL中,它去palindromizes

CJam中的说明

工作部分:

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

虚拟部分:

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

MATL中的说明

虚拟部分:

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

工作部分:

"           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

另一个虚拟部分:

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

4

𝔼𝕊𝕄𝕚𝕟/ Javascript ES6,55个字符

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

Try it here (ES6 browsers only).

Palindromizes在𝔼𝕊𝕄𝕚𝕟中,palindromizes在Javascript ES6中。

尽管这很容易,因为𝔼𝕊𝕄𝕚𝕟可以编译为ES6,并且大多数ES6都可以在run中运行。显然,我完全错了。

说明

this._检查变量是否_在全局范围内;𝔼𝕊𝕄𝕚𝕟使用Lodash并因此进行了_存储,但未存储纯ES6。

𝔼𝕊𝕄𝕚𝕟段-- Σ(`ï+ï.Ħ⬮.Đ1`)从字符串中计算出回显输入的代码。通常,代码是ï+ïĦ⬮Đ1,但是为了使编译器满意,我加了点。

Javascript段-- (x=prompt()).slice(0,-x.length/2)从提示符中删除字符串的字符串。


我本打算使用一个函数(因此我不必处理prompt),但是𝔼𝕊𝕄𝕚𝕟的评估函数并不喜欢这样,所以我使用了promptno函数来使编译器满意


哇,编译器很挑剔。
HyperNeutrino '16

4

JavaScript ES6 / JavaScript ES3,143字节

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()}

在JavaScript ES6中进行Palindromize,在JavaScript ES3中进行Palindromize。非竞争性的,这只是尝试为同一种语言的两个版本制作多语种。

在ES3中,块中允许使用函数,但是由于块未定义范围,因此新功能仅替换了第一个功能。在ES5严格模式下,它失败,因为它不允许在块中定义函数。在ES6中是允许的,并且因为块现在定义了作用域,所以第一个功能不会被替换。

在用于ES3和Node.JS的Internet Explorer 5(模拟)和用于ES6的Firefox中进行测试。


4

果冻 / CJam,15个 14个字符

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

-1个字符,感谢42545(ETHproductions)

在线尝试!(果冻)(Palindromization)

CJam解释器(去palindromization)

果冻说明:

在Jelly中,与相同\n,因此这是Jelly看到的:

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

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

CJam说明:

在CJam中,e#一行之后的所有内容均为注释。因此,这就是CJam所看到的:

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

@ETHproductions糟糕,我忘记了!这就是所谓的“反弹”。
暴民埃里克

4

Perl / JavaScript,73个字节

Perl返回回文,JavaScript将“ de-palindromize”输入字符串。

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

的JavaScript

假设字符串已经是有效的回文。

所有工作都在第一部分中进行:

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

将输入存储在中s,然后返回字符串的前半部分(四舍五入)。脚本的其余部分是无意义的变量分配:

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

在这里尝试:

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

佩尔

必须与一起运行-pl,例如:

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

该代码基本上是两个替换(s///),但=用作分隔符而不是/

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

第一个是ed,返回(prompt();console.log(s.slice(0,-s.length\/2));eg如果它包含"prompt;console.logs.slice0,-s.length/2;eg"...的话,它会弄乱您的字符串,然后返回),第二个替换1;tevaled t的字符串($)的末尾,reverse$_然后加上evaled并附加原始源字符串反转。

在线尝试!


3

Python 2 / Nim76 74字节

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

在Python中Palindromize,在Nim中Depalindromize。滥用注释语法。

Python和Nim都#用于注释。Python完全不支持块注释(带有的多行字符串除外"""),但Nim支持#[ comment ]#

我们滥用它来为Nim注释掉Python(在开始时),然后使用]Python中的结尾来启动Nim代码,就像对Python的注释一样。

Python代码要求其输入用引号引起来。Nim代码没有此限制。

在Python 2.7.8和Nim 0.14.2上测试。

伊迪恩!-Python 2,palindromizing

伊迪恩!-Nim,去palindroming显然Nim Ideone使用的版本(0.11.2)不支持多行注释。适用于Nim 0.14.2。




2

Japt / JavaScript,63个字符

每日经验教训:Japt / JavaScript多语言始终是个坏主意...

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

的JavaScript

第一行将变量设置$Oq为1,然后使用$Oq &&0

第二行提示用户输入字符串,将其分配给变量$U,然后将其从index 0*$U(始终为0)切成index -$U.length/2。这将执行必要的去钯化;然后alert编辑结果。该程序以ReferenceError结尾,因为变量$Uê未定义。

杰普特

在Japt中,美元符号之间的任何内容都直接插入到已编译的源代码中。除此之外,每个小写字母都转换为例如.q(,除非前一个字符是另一个小写字母,在这种情况下它将变为"q"。会将空间转换为),并自动添加所有缺少的括号。上面的程序大致转换为:

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

然后将其作为JavaScript执行。Oq=1;将该变量设置Oq为1。将不再使用该变量,因此它是无操作的。O.q()是清除STDOUT并返回的函数undefined; 这是虚假的,所以整个&&0 .a("l".e(...不会执行部分。

真正重要的唯一部分是U.ê()。隐式输入将输入字符串放入U.ê()将其转换为回文,然后隐式输出将结果发送到STDOUT。


如果允许输入函数,则以下内容适用于34个字符:

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

第一部分定义了ES6函数,但在Japt中仍然是完整的程序。在线测试!


2

Java / Brainfuck,71个字节

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

BF中的Palindromize,在Java中的Palindromize。

为了清楚起见,这对于BF解释器很重要:

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

其中包含Java lambda字符的最后一个循环被跳过,因为指针指向该点的空字符。


0

05AB1E / Java 8,102个字符

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

在05AB1E中进行Palindromize。
在Java 8中去palindromize。

说明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

说明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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.