Противоречивые полиглоты


19

Ну, все любят полиглоты . Вам будет дано два целых числа в любой стандартной форме ввода (без жесткого кодирования). Ваша задача - написать полиглот, который находит минимальное значение на одном языке и максимальное значение между двумя числами на другом языке и выполняет следующие операции:

  • Код, который находит максимальное значение, также должен вычислять их сумму.
  • Программа, которая находит минимальное значение, должна также вычислить результат их вычитания ( max - min)
  • Вот «сложная часть» : если два числа равны, обе программы не должны ничего выводить / возвращать (как для, так STDOUTи для STDERRлюбого другого 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 почему это было?
г-н Xcoder

6
Я бы посоветовал хранить вопросы в песочнице как минимум пару дней, чтобы они получили достаточно внимания, прежде чем отправлять сообщения на главную. Я не понизил.
Эрик Outgolfer

Черт возьми, написал ответ Py2 / Py3, и как только я собирался опубликовать, увидел правило. 30 минут, я никогда не вернусь, ха-ха.
sagiksp

Ответы:


6

05AB1E / Желе , 21 20 байт

-1 байт после обращения за помощью - спасибо, Эминья! ( `будет 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), 117 107 байтов

-10 байт благодаря @Steadybox!

#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 - max language: попробуйте онлайн!

C ++ - минимальный язык: попробуйте онлайн!


2
Очень умное решение. Мне нравится тот факт, что комментарии не использовались.
мистер 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                      .#.ú,Ó÷ÓÍ.

Оба определяют безымянную двоичную функцию.

Python (максимальный язык) видит:

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

Тесты как Python .

Желе (минимальный язык) видит:

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

Тесты как желе .

Как?

Jelly интерпретирует 0x0a как ½атом квадратного корня, а Python интерпретирует его как символ новой строки. В Jelly 0x7f интерпретируется как разделение между ссылками (функциями) и представляется либо новой строкой, либо символом в его кодовой странице. Для Jelly последняя ссылка является основной функцией - здесь она не вызывает ссылку выше (которую интерпретатору все равно нужно правильно анализировать). В Python 0x23 указывает, #что все, что после него и до 0x0a, символа новой строки, является комментарием.

Код Python, который выполняется:

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

Код Jelly, который выполняется:

«,ạẋạṠ¥ - 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

Почти наверняка возможно объединить код Jelly с другим языком игры в гольф, чтобы уменьшить счетчик байтов.
Джонатан Аллан

Хм ... ваши фрагменты кода кажутся разными.
Эрик Outgolfer

1
@EriktheOutgolfer эти блоки кода являются просто представлениями необработанных байтов (отсюда \x7fи \x04для непечатных в Python).
Джонатан Аллан

1
@JonathanAllan Нет, я имею в виду, что ваши фрагменты действительно разные. Просто посмотрите код Python для каждого.
Эрик Outgolfer

8

Ruby / Python 3, 102 байта

Ruby возвращает max / сумму, Python возвращает min / разницу. Ввод - это объект массива, считанный из 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в Ruby, что ложно в Python. Еще одна вещь, о которой стоит упомянуть, это то, что sortфункция Python изменяет список на месте и возвращает None, в то время как Ruby не возвращает и не возвращает отсортированный массив, поэтому необходимо использовать b or aдля получения min / max.

Python 3 необходим, потому что Python 2 жалуется, если вы пытаетесь вызвать printпосле orоператора в последней строке.


Это умно! +1
Арджун

4

Java / 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 выводит минимум и разницу. Нет выхода для любого, если входы идентичны.

Это мой первый полиглот и первый TIO :)


3

JavaScript (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 - это минимальный язык. Он принимает массив, содержащий числа в качестве входных данных. Вывод двух чисел, разделенных ,(1-е число - наименьшее значение массива ввода, а 2-е число - разность наибольшего и наименьшего значений массива ввода) с помощью alert()ing. alert()Ничего не делает, если числа равны. Вы можете вызвать функцию, как f([100,40]).

QBasic - это макс-язык. Неоднократно запрашивает ввод, дважды. Печатает наибольшее количество входных чисел, а также сумму самых больших и самых маленьких чисел ввода. PRINTНичего не делает, если числа равны.


Как это работает?

В QBasic (язык структурированного семейства BASIC; для него не требуются номера строк), 'отмечается начало комментария, которое идет до конца строки. Принимая во внимание, что в JavaScript это отмечает начало строки. Итак, вся первая строка помечена как комментарий в QBasic, но в JavaScript строка выполняется (и эта строка содержит часть JavaScript, которая вычисляет наименьшее число и разность наибольшего и наименьшего чисел, а также /*в конце который запускает комментарий, чтобы скрыть оставшуюся часть кода QBasic от интерпретатора JavaScript.)

Код от второй строки до второй-последней строки содержит код QBasic для вычисления наибольшего числа и суммы наибольшего и наименьшего числа (код очень понятен).

Последняя строка содержит '*/. 'заставляет интерпретатор QBasic интерпретировать следующий код как комментарий, тогда как в JavaScript он не имеет никакого эффекта, так как является частью комментария (который был запущен в конце первой строки). Следующий код ( */) заставляет JavaScript завершать комментарий, который был начат в первой строке, но он не выполняется в QBasic, потому что QBasic считает, что это часть комментария.


Тестовые случаи

JavaScript (минимальный язык):

'';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]);

QBasic (макс. Язык):

Перейти на этот сайт . Скопируйте и вставьте следующий код в их текстовый редактор:

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. И этот сайт - единственный достойный переводчик бейсика онлайн, которого я смог найти. Тем не менее, выполнение кода, присутствующего в верхней части поста (код без номеров строк), должно нормально работать в любом хорошем интерпретаторе QBasic, который поддерживает структурированный BASIC, и 'в качестве начального комментария (хотя некоторые этого не делают, большинство делают, хотя)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.