パリンドロームポリグロット


15

あなたの仕事は、2つの異なる言語で実行されるプログラムを作成し、次のことを行うことです。

  • 1つの言語では、指定された文字列を回文化します。
    • 文字列を取ります。 abcde
    • 文字列を逆にします。 edcba
    • 最初の文字を削除します。 dcba
    • 元の文字列に接着します。 abcdedcba
  • 別の言語では、特定の文字列をdepalindromizesし​​ます。
    • 上記の方法で回文化された文字列を取得します。 abcdedcba
    • 最初から真ん中までキャラクターを取得します。 abcde

これはであるため、バイト数ではなく文字数が最も少ないコードが優先されることに注意してください。

リーダーボード

これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

# Language 1/Language 2, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、リーダーボードスニペットに表示することもできます。

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


@LuisMendo 1秒...
オリバーニッケル

@LuisMendoさて、質問を更新しました
Oliver Ni

文字列に改行が含まれることはありますか?
エリックアウトゴルファー

入力形式は2つの言語で異なる場合がありますか?引用符で囲むか引用符なしで文字列のように
ルイスメンドー

@LuisMendoはい。
オリバーNi

回答:


14

05AB1E / MATL10 9文字

9LQ2/)%¹û

05AB1Eでは、これは回文化します。MATLでは、パリンドロマイズを解除します。

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


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がdepalindromizes

2つの間でより多くのコードを一定に保とうとしましたが.slice、Python に忍び込む良い方法を見つけることができませんでした。別の方法を次に示します。

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ありがとうございます!2つのスライスを組み合わせる方法を見つけようとしましたが、何もうまくいかないようでした。
ETHproductions

5

Scala / Javascript、106バイト

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

Scalaで回文化し、javascriptで回文化します。

ideone(scala)で試してください-警告:構文の強調表示が間違っています

jsfiddle(javascript)で試してください。

説明:

Scalaはjavaと同様に、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では、パリンドロマイズを解除します。

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).

indで回文、Javascript ES6で回文を解除します。

thisはES6にコンパイルされ、ES6の大部分はinで実行できるため、これは簡単になりました。どうやら、私は完全に間違っています。

説明

this.__グローバルスコープに変数が存在するかどうかを確認します。d Lodashを使用しているため、_保存されていますが、純粋なES6は保存されていません。

𝔼𝕊𝕄𝕚𝕟セグメント-- Σ(`ï+ï.Ħ⬮.Đ1`)文字列から入力を回文化するコードを評価します。通常、コードはになりますが、コンパイラを満足ï+ïĦ⬮Đ1せるためにドットを挿入します

Javascriptセグメント-- (x=prompt()).slice(0,-x.length/2)は、プロンプトから文字列をdepalindromizesし​​ます。


関数を使用するつもりでした(したがって、処理する必要はありませんでしたprompt)が、𝔼𝕊𝕄𝕚𝕟の評価関数はそれを気に入らなかっpromptため、コンパイラを満足せる関数を使用しました。


うわー、コンパイラのうるさい。
ハイパーニュートリノ

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で回文化し、JavaScript ES3で回文化します。非競合、それは同じ言語の2つのバージョンのポリグロットを作成しようとするだけです。

ES3では、ブロックで関数を使用できますが、ブロックはスコープを定義しないため、新しい関数は最初の関数を置き換えるだけです。ES5 strictモードでは、ブロックで関数を定義できないため失敗します。ES6では許可されており、ブロックがスコープを定義するようになったため、最初の関数は置き換えられません。

ES3およびNode.JSのInternet Explorer 5(エミュレート)およびES6のFirefoxでテスト済み。


4

ゼリー / CJam、15 14文字

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

42545(ETHproductions)のおかげで-1文字

オンラインでお試しください!(ゼリー)(回文化)

CJamインタープリター(Depalindromization)

ゼリーの説明:

ゼリーでは、と同じなので\n、これはゼリーが見ているものです。

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は入力文字列を「非回文化」します。

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

Perl

で実行する必要があります-pl。例:

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

コードは基本的に2つの置換(s///)ですが=、代わりに区切り文字として使用し/ます:

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

まず、交換prompt();console.log(s.slice(0,-s.length\/2));eg(それはのようなものが含まれている場合は、あなたの文字列をアップしており、確かに意志混乱が"prompt;console.logs.slice0,-s.length/2;eg"...)で1;tあるevalエド、戻ってt、文字列の最後(第2置き換え$)にreverse$_も、その後でありますevalエドと元のソースを追加します文字列が反転しました。

オンラインでお試しください!


3

Python 2 / Nim76 74バイト

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

Pythonで回文化し、Nimで回文化します。コメント構文を乱用します。

PythonとNimはどちらも使用します #コメントにします。Pythonはブロックコメントをまったくサポートしていません(の複数行の文字列を除く""")が、Nimは#[ comment ]#ます。

これを悪用して(最初に)NimのPythonをコメントアウトし、Pythonのコメントのように、Pythonの末尾]を使用してNimコードを開始します。

Pythonコードでは、引用符で囲まれた入力が必要です。Nimコードにはこの制限はありません。

Python 2.7.8およびNim 0.14.2でテスト済み。

できた!-Python 2、回文化

できた!-Nim、depalindromizingどうやら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ます。

2行目は、ユーザーに入力文字列の入力を求めて変数に割り当て$U、それをindex 0*$U(常に0)からindexにスライスします-$U.length/2。これにより、必要なdepalindromizationが実行されます。その後、結果がalert編集されます。変数$Uêが定義されていないため、プログラムはReferenceErrorで終了します。

ジャプト

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で回文化し、Javaで回文化します。

明確にするために、これはBFインタープリターにとって重要なものです。

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

Javaラムダの文字を含む最後のループはスキップされます。これは、ポインターがそのポイントでヌル文字を指しているためです。


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で回文化します。
Java 8でDepalindromize。

説明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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.