회문 폴리 글 로트


15

당신의 임무는 두 개의 다른 언어로 실행되는 프로그램을 작성하고 다음을 수행하는 것입니다.

  • 한 언어에서, 주어진 문자열을 palindromize합니다.
    • 끈을 가져 가라. abcde
    • 줄을 바꾸십시오. edcba
    • 첫 번째 문자를 제거하십시오. dcba
    • 원래 끈에 붙입니다. abcdedcba
  • 다른 언어에서는 주어진 문자열을 depalindromize합니다.
    • 위의 방법으로 palidromized 문자열을 가져 가라. abcdedcba
    • 처음부터 중간까지 문자를 가져옵니다. abcde

이것은 이므로 바이트 수가 아닌 문자 가 가장 적은 코드가 이깁니다.

리더 보드

다음은 일반 리더 보드와 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

# 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 1 초 ...
Oliver Ni

@LuisMendo 좋아요, 질문을 업데이트했습니다
Oliver Ni

문자열에 줄 바꿈이 포함됩니까?
Outgolfer Erik

두 언어에서 입력 형식이 다를 수 있습니까? 따옴표가 있거나없는 문자열처럼
Luis Mendo

@LuisMendo 예.
Oliver Ni

답변:


14

05AB1E / MATL , 10 9 자

9LQ2/)%¹û

05AB1E에서 이것은 palindromize 합니다. MATL에서는이를 depalindromize 합니다.

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))//"""

파이썬은 palindromizes , JavaScript는 depalindromizes .

두 코드 사이에 더 많은 코드를 일정하게 유지하려고 시도했지만 .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]할인율이 개 문자.
LevitatingLion

트윗 담아 가기 두 조각을 결합하는 방법을 알아 내려고 시도했지만 아무것도 작동하지 않는 것 같습니다.
ETHproductions

5

스칼라 / 자바 스크립트, 106 바이트

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

스칼라에서 Palindromize하고 자바 스크립트에서 Palindromize합니다.

ideone (scala) 에서 사용해보십시오 -경고 : 잘못된 구문 강조

jsfiddle (javascript) 에서 사용해보십시오 .

설명:

스칼라는 자바와 마찬가지로 유니 코드 이스케이프를 다른 모든 것보다 먼저 처리하므로 스칼라는 다음과 같은 코드를 봅니다.

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

자바 스크립트는 다음과 같이 구문 분석됩니다.

/*\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에서이 palindromizes . MATL에서는이를 depalindromize 합니다.

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

Javascript ES6에서는 Palindromize, 𝔼𝕊𝕄𝕚𝕟에서는 Palindromize

𝔼𝕊𝕄𝕚𝕟 ES6로 컴파일하고 대부분의 ES6을 𝔼𝕊𝕄𝕚𝕟에서 실행할 수 있기 때문에 이것이 쉽지 않을 것입니다. 분명히, 나는 완전히 틀렸다.

설명

this._변수 _가 전역 범위에 존재 하는지 확인합니다 . 𝔼𝕊𝕄𝕚𝕟 Lodash를 사용하므로 _저장되었지만 순수 ES6은 그렇지 않습니다.

𝔼𝕊𝕄𝕚𝕟 세그먼트-- Σ(`ï+ï.Ħ⬮.Đ1`)는 문자열에서 입력을 차단 하는 코드를 평가합니다. 일반적으로 코드는 ï+ïĦ⬮Đ1되지만 컴파일러를 행복하게 만들기 위해 점을 넣었습니다 .

Javascript 세그먼트- (x=prompt()).slice(0,-x.length/2)는 프롬프트에서 문자열을 분리 해제합니다.


나는 함수를 사용할 것이므로 (처리하지 않아도 됨 prompt))의 평가 함수는 그렇게 좋아하지 않았으므로 컴파일러를 행복하게하는prompt 함수를 사용하지 않았습니다 .


와우, 컴파일러의 까다로운.
HyperNeutrino

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

42545 (ETHproductions) 덕분에 -1 문자

온라인으로 사용해보십시오! (젤리)

CJam 통역사 (Depalindromization)

젤리 설명 :

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 으악, 잊었다! "바운스"라고 불리는 이유입니다.
Outgolfer Erik

4

Perl / JavaScript, 73 바이트

Perl은 회문을 반환하고 JavaScript는 입력 문자열을 '무장 해제'합니다.

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

자바 스크립트

문자열이 이미 유효한 회문이라고 가정합니다.

모든 작업은 첫 번째 섹션에서 이루어집니다.

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

첫 번째는, 대체 prompt();console.log(s.slice(0,-s.length\/2));eg(인정 하듯이 엉망이 같은 포함 된 경우 귀하의 문자열까지 것이다, "prompt;console.logs.slice0,-s.length/2;eg"...)로 1;t이는 eval반환 에드 t문자열의 끝, 두 번째 대체합니다은 ( $)에 reverse$_있는 다음 또한 eval에드와하면 원본 소스를 추가 문자열이 반전되었습니다.

온라인으로 사용해보십시오!


3

Python 2 / Nim , 76 74 바이트

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

파이썬에서 Palindromizes, Nim에서 Depalindromizes. 주석 구문을 남용합니다.

Python과 Nim은 모두 #주석에 사용 합니다. 파이썬은 블록 주석을 전혀 지원하지 않지만 (으로 여러 줄 문자열 제외 """) Nim은으로 처리 #[ comment ]#합니다.

우리는 이것을 악용하여 Nim ]에 대한 Python을 처음에 주석 처리 한 다음 Python 의 후행을 사용 하여 Python에 대한 주석처럼 Nim 코드를 시작합니다.

파이썬 코드에는 따옴표로 묶은 입력이 필요합니다. Nim 코드에는이 제한이 없습니다.

Python 2.7.8 및 Nim 0.14.2에서 테스트되었습니다.

무시 했어! -파이썬 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ê

자바 스크립트

첫 번째 줄은 변수 $Oq를 1로 설정 한 다음로 no-op를 수행합니다 $Oq &&0.

두 번째 줄은 사용자에게 입력 문자열을 입력하여 변수에 할당 $U한 다음 index 0*$U(항상 0) 에서 index로 슬라이스합니다 -$U.length/2. 이것은 필요한 depalindromization을 수행합니다. 그런 다음 결과가 나타납니다 alert. 변수 $Uê가 정의되지 않았 으므로 프로그램은 ReferenceError에서 종료 됩니다.

apt

Japt에서 달러 기호 사이의 모든 것은 변환 된 소스 코드에 직접 삽입됩니다. 그 .q(외에는, 이전의 문자가 다른 소문자가 아닌 한, 각 소문자는 예를 들어로 변환됩니다 "q". 공백이 (으)로 변환되고 )누락 된 모든 Parens 가 자동으로 추가됩니다. 위의 프로그램은 대략 다음과 같이 번역합니다.

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

자바 / Brainfuck, 71 바이트

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

BF에서 Palindromizes, Java에서 Depalindromizes.

명확성을 위해, 이것은 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에서 Palindromize
자바 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

자바 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.