모순 폴리 글 로트


19

글쎄, 모두 Polyglots를 좋아 합니다. 표준 입력 형식으로 두 개의 정수가 제공됩니다 (하드 코딩 없음). 귀하의 작업은 언어 의 최소값과 다른 언어의 두 숫자 사이의 최대 값을 찾아 다음 작업을 수행하는 폴리로트 를 작성하는 것입니다 .

  • 최대 값을 찾는 코드도 합계를 계산해야합니다.
  • 최소값을 찾는 프로그램도 빼기 결과를 계산해야합니다 ( max - min)
  • "tricky part"는 다음과 같습니다 . 두 숫자가 같으면 두 프로그램 모두 출력하거나 반환하지 않아야합니다 ( STDOUTSTDERR다른 return방법 모두).
  • 참고 항목 출력 사양 서식 지정에 대한 자세한 내용은 섹션을

입력

위에서 언급했듯이, 두 가지 정수는 표준 방법 에서 입력으로 사용되며 두 언어에 공통입니다.

출력 사양

  • 를 찾는 프로그램의 max경우 형식은 다음과 같아야합니다.max_value, addition result
  • 를 찾는 프로그램의 min경우 형식은min_value, subtraction result (max - min)
  • 결과는 명확한 구분 기호 (로 인쇄 할 수 있습니다 , \n, ,구분 기호 또는 번호 목록으로 두 예상 값을 포함하는 문자열로 함수에서 반환, 또는 다른 무엇이든 당신이 원하는) (예 : [max_value,sum])

예 :

Input   || Max Language Output || Min Language Output

100, 40 || 100, 140            || 40, 60
63, 67  || 67, 130             || 63, 4
-45, -5 || -5, -50             || -45, 40
21, 21  ||                     ||
-1, 1   || 1, 0                || -1, 2 

채점 :

이것은 이므로 원하는 결과를 얻기 위해 가장 짧은 코드를 작성하고 표준 허점 은 엄격히 허용되지 않습니다. 동일한 언어의 다른 버전이 아닌 두 개의 다른 언어를 사용해야합니다 (예 : Python 2- Python 3쌍이 유효하지 않음)


@downvoter 왜 그랬습니까?
Mr. Xcoder

6
메인에 게시하기 전에 충분한 관심을 끌 수 있도록 적어도 며칠 동안 샌드 박스에 질문을 보관하는 것이 좋습니다. 나는 공감하지 않았다.
Outgolfer Erik

Goddammit은 Py2 / Py3 답변을 썼으며 게시하려고 할 때 규칙을 보았습니다. 30 분 나는 다시 하하로 돌아 오지 않을 것이다.
sagiksp

답변:


6

05AB1E / 젤리 , 21 20 바이트

도움을 요청한 후 -1 바이트-감사합니다 Emigna! ( `의지 push(uwrapped(pop())))

원시 바이트 (오른쪽 덤프는 내 Windows 시스템에 표시되는 내용) :

60 ca 69 b9 5a 73 4f 29 71 93 18 fa 2c d3 f7 d3    `Êi¹ZsO)q..ú,Ó÷Ó
cd 04 18 2f                                         Í../

둘 다 STDIN에서 입력을 받아 STDOUT으로 목록 표현으로 출력합니다 [x, y].

최대 언어는 05AB1E입니다.

`Êi¹ZsO)q“.ú,Ó÷ÓÍ../

.코드 페이지 ( cp1252 ) 에서 인쇄 할 수없는 바이트를 나타내는 곳 이며 아마도 (0x18 = CAN및 0x04 = EOT) 무엇이든 여기에 있습니다 .

05AB1E 버전을 사용해보십시오

최소 언어는 젤리입니다.

İ__iỤZs0)qƓð«,ạẋạṠ¥ð/

젤리 버전을 사용해보십시오 .

어떻게?

05AB1E :

`Êi¹ZsO)q“.ú,Ó÷ÓÍ../ - parsed left to right, executed as parsed
                     - implicit input taken
  i                  - If:
`                    -     push(unwrapped(pop()))
 Ê                   -     push(pop()!=pop())
                     - ...Then:
   ¹                 -     push(1st item from input history)
    Z                -     push(max(top of stack))
     s               -     push(reverse(pop(),pop()))
      O              -     push(sum(pop()))
       )             -     wrap(pop())
        q            -     quit - implicit print of top of stack
         “.ú,Ó÷ÓÍ../ - unexecuted and unparsed string

젤리:

`ȮiỤZs0)qƓð«,ạẋạṠ¥ð/ - parsed left to right, not executed until parsed
`ȮiỤZs0              - a dyadic chain which would error if executed (monad from dyad, index of, grade up, transpose, split into chunks of length 0)
       )q            - currently unassigned code points each currently creates a new link
         Ɠ           - read and evaluate a line of input
          ð       ð  - dyadic chain separations
                   / - reduce by:
           «         -     minimum(left, right)
             ạ       -     absolute difference(left, right)
            ,        -     pair(result)
                 ¥   -     last two links as a dyad:
               ạ     -         absolute difference(left, right)
                Ṡ    -         sign(result) (i.e. {0:0, +x:1, -x:-1} but -x never happens)
              ẋ      -     repeat list left right times
                     - implicit print

18

C 및 C ++ (gcc), 117107 바이트

@Steadybox 덕분에 -10 바이트!

#include<stdio.h>
int f(int a,int b){auto c=.5;a-b&&printf("%d %d",c?b<a?b:a:a>b?a:b,c?a-b>0?a-b:b-a:a+b);}

설명 : C auto c=.5에서 자동 스토리지 클래스 (기본값)를 사용하여 정수 변수를 선언 한 다음 0으로 초기화하고 C ++ 11에서는 double을 선언하여 0.5로 초기화합니다. 따라서 변수의 값은 C ++에서는 진실하고 C에서는 거짓입니다.

C-최대 언어 : 온라인으로 사용해보십시오!

C ++-최소 언어 : 온라인으로 사용해보십시오!


2
매우 똑똑한 솔루션. 의견이 사용되지 않았다는 사실이 마음에 듭니다.
Mr. Xcoder

5
몇 바이트를 절약하기 위해 변수를 선언 한 auto c=.5다음 c대신 사용할 수 있습니다 sizeof'a'-1. C에서는 auto c=.5자동 스토리지 클래스 (기본값)를 사용하여 정수 변수를 선언 한 다음 0으로 초기화하고 C ++ 11에서는 double을 선언하여 0.5로 초기화합니다. 따라서 변수의 값은 C ++에서는 진실하고 C에서는 거짓입니다.
Steadybox

9

파이썬 3 / 젤리 , 42 바이트

Jelly의 코드 페이지 를 사용하여 파일 인코딩

원시 바이트 :

6c 61 6d 62 64 61 20 78 2c 79 3a 5b 6d 61 78 28    lambda x,y:[max(
78 2c 79 29 2c 78 2b 79 5d 2a 28 78 21 3d 79 29    x,y),x+y]*(x!=y)
0a 23 7f fa 2c d3 f7 d3 cd 04                      .#.ú,Ó÷ÓÍ.

둘 다 명명되지 않은 2 차원 함수를 정의합니다.

파이썬 (최대 언어) :

lambda x,y:[max(x,y),x+y]*(x!=y)
#\x7fú,Ó÷ÓÍ\x04

파이썬으로 테스트합니다 .

젤리 (최소 언어) :

lambda x,y:[max(x,y),x+y]*(x!=y)½#
«,ạẋạṠ¥

젤리로 테스트합니다 .

어떻게?

Jelly는 0x0a를 ½제곱근 원자로 해석하지만 Python 은이를 개행 문자로 해석합니다. Jelly에서 0x7f는 링크 (함수) 사이의 분리로 해석되며 코드 페이지에서 줄 바꿈 또는 필로우로 표시됩니다. 젤리의 경우 마지막 링크는 주요 기능입니다. 여기서는 위의 링크를 호출하지 않습니다 (인터프리터는 여전히 올바르게 구문 분석해야합니다). Python 0x23에서는 #줄 바꿈 후 0x0a 이전의 주석이 주석임을 지시합니다.

실행되는 파이썬 코드 :

lambda x,y:[max(x,y),x+y]*(x!=y)
lambda x,y:                      - A function taking two inputs, x and y
           [        ,   ]        - A list with two items
            max(x,y)             - take the maximum of x and y
                     x+y         - x plus y
                           x!=y  - x not equal to y?
                         *(    ) - multiply - True is treated as if it were 1, False as if it were 0

실행되는 젤리 코드 :

«,ạẋạṠ¥ - A dyadic link (function of two variables): x, y
«       - minimum(x, y)
  ạ     - absolute difference(x, y)
 ,      - pair left with right (creating a list)
      ¥ - last two links as a dyad:
     ạ  -     absolute difference(x, y)
    Ṡ   -     sign(result) (i.e. {0:0, +x:1, -x:-1} but -x never happens)
   ẋ    - repeat the list to the left right times (either the same list or an empty list)
        - return the result

재미있는 언어 선택
Xcoder Mr.

바이트 카운트를 줄이기 위해 젤리 코드와 다른 골프 언어를 결합하는 것이 거의 가능합니다.
Jonathan Allan

음 ... 코드 스 니펫이 다르게 보입니다.
Outgolfer Erik

1
@EriktheOutgolfer 해당 코드 블록은 미가공 바이트 (따라서 막 표현한 \x7f\x04파이썬 하나로 unprintables 위해).
Jonathan Allan

1
@JonathanAllan 아니요, 스 니펫이 실제로 다르다는 것을 의미합니다. 각 파이썬 코드를 참조하십시오.
Outgolfer Erik

8

루비 / 파이썬 3, 102 바이트

루비는 최대 / 합을 반환하고, 파이썬은 최소 / 차를 반환합니다. 입력은 STDIN에서 읽은 배열 객체입니다.

a=eval((0and gets or input()))
b=a.sort()
x,y=(b or a)
z=0 or 1
x==y or print([[y,x][z],[x+y,y-x][z]])

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

온라인 사용해보기 : Python

여기서 사용되는 주요 단점 0은 루비 에서 진실 을 사용 하는 것인데, 파이썬에서는 거짓입니다. 언급 할 가치가있는 또 다른 것은 파이썬의 sort함수가 목록을 제 위치에서 수정하고 반환 None하지만 루비는 정렬 된 배열을 반환하지 않고 b or amin / max를 얻는 데 사용해야 한다는 것입니다.

당신이 전화를하려고하면 파이썬이 불평 때문에 파이썬 3가 필요 print애프터 or마지막 줄의 문장.


영리 해요! +1
Arjun

4

자바 / AWK , 219 217 212 196 바이트

/*#\/* /
{$0=((x=$1)<y=$2)?x" "y-x:y" "x-y}x!=y
#*/interface B{static void main(String[]A){Integer x=Integer.parseInt(A[0]);int y=x.parseInt(A[1]);System.out.print(x==y?"":(x<y?y:x)+" "+(x+y));}}

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

Java는 최대 및 합계를 출력하고 AWK는 최소 및 차이를 출력합니다. 입력이 동일한 경우 출력이 없습니다.

이것은 나의 첫번째 polyglot이고 첫번째 TIO입니다 :)


3

자바 스크립트 (ES6) / QBASIC, 172 171 바이트

'';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
INPUT c
LET m=c
LET s=c
INPUT n
IF n>c THEN m=n
IF n<c THEN s=n
IF n<>c THEN PRINT m,m+s
END
'*/

비슷한 질문 에 대한 이 솔루션을 기반으로 합니다 .

이 솔루션도 주석 접근법을 사용합니다!

JavaScript는 최소한의 언어입니다. 숫자를 입력으로 포함하는 배열을받습니다. ing으로 두 숫자를 출력합니다 ,(1 번째 숫자는 입력 배열의 가장 작은 값이고 2 번째 숫자는 입력 배열의 가장 큰 값과 가장 작은 값의 차이) alert(). alert()숫자가 같으면 아무것도 하지 않습니다 . 같은 함수를 호출 할 수 있습니다 f([100,40]).

QBasic은 최대 언어입니다. 입력을 두 번 반복해서 요청합니다. 가장 큰 수의 입력 수와 가장 크고 작은 수의 합을 인쇄합니다. PRINT숫자가 같으면 아무것도 하지 않습니다 .


어떻게 작동합니까?

QBasic (구조화 된 BASIC 제품군의 언어, 줄 번호가 필요하지 않음) '에서 줄 끝까지가는 주석의 시작을 표시합니다. JavaScript에서는 문자열의 시작을 표시합니다. 따라서 첫 번째 줄 전체는 QBasic에서 주석으로 표시되지만 JavaScript에서는 줄이 실행됩니다 (이 줄에는 가장 작은 숫자와 가장 큰 숫자와 가장 작은 숫자의 차이를 계산하는 JavaScript 부분과/* 있으며 끝에는 JavaScript 인터프리터에서 나머지 QBasic 코드를 숨기기 위해 주석을 시작합니다.)

두 번째 줄에서 두 번째 줄까지의 코드에는 QBasic 코드가 포함되어 가장 큰 숫자와 가장 큰 숫자와 가장 작은 숫자의 합계를 계산합니다 (코드는 매우 설명이 필요합니다).

마지막 줄은를 포함 '*/합니다. 'QBasic 인터프리터가 다음 코드를 주석으로 해석하도록하는 반면 JavaScript에서는 주석의 일부 (첫 번째 줄의 끝에서 시작된)이므로 아무런 영향을 미치지 않습니다. 다음 코드 ( */)는 JavaScript가 첫 번째 행에서 시작된 주석을 종료하도록하지만 QBasic은 주석의 일부라고 생각하기 때문에 QBasic에서 실행되지 않습니다.


테스트 사례

자바 스크립트 (최소 언어) :

'';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
INPUT c
LET m=c
LET s=c
INPUT n
IF n>c THEN m=n
IF n<c THEN s=n
IF n<>c THEN PRINT m,m+s
END
'*/

f([100,40]);

Q 기본 (최대 언어) :

이 웹 사이트로 이동 하십시오 . 텍스트 편집기에 다음 코드를 붙여 넣습니다.

1 '';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
2 INPUT c
3 LET m=c
4 LET s=c
5 INPUT n
6 IF n>c THEN m=n
7 IF n<c THEN s=n
8 IF n<>c THEN PRINT m,m+s
9 END
10 '*/

줄 번호가 필요한 이유는 내가 언급 한 웹 사이트가 구조화되지 않은 BASIC 언어 만 지원하기 때문입니다. 그 웹 사이트는 내가 찾은 유일한 온라인 베이직 통역사입니다. 그러나 게시물 맨 위에있는 코드 (행 번호가없는 코드)를 실행하면 구조적 BASIC을 지원 '하는 주석이있는 QBasic 인터프리터와 주석 스타터에서 잘 작동합니다 (그러나 대부분은 그렇지 않습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.