Poliglotas contraditórias


19

Bem, todo mundo adora poliglotas . Você receberá dois números inteiros, em qualquer forma padrão de entrada (sem codificação). Sua tarefa é escrever uma poliglota que encontre o valor mínimo em um idioma e o valor máximo entre os dois números no outro idioma e execute as seguintes operações:

  • O código que encontra o valor máximo também deve calcular sua soma.
  • O programa que encontrar o valor mínimo também deve calcular o resultado de sua subtração ( max - min)
  • Aqui está a "parte complicada" : se os dois números forem iguais, os dois programas não devem produzir / retornar nada (para STDOUTe / STDERRou qualquer outro returnmétodo)
  • Consulte a seção Especificações de saída para obter mais detalhes sobre a formatação.

Entrada

Como mencionado acima, dois números inteiros tomados como entrada em qualquer método padrão , comum aos dois idiomas.

Especificações de saída

  • Para o programa que encontra o max, o formato deve ser:max_value, addition result
  • Para o programa que encontra o min, o formato deve sermin_value, subtraction result (max - min)
  • Os resultados podem ser impressos, com qualquer delimitador clara ( , \n, ,ou o que você quiser), retornado da função como uma string contendo os dois valores esperados com um delimitador ou como uma lista de números (por exemplo: [max_value,sum])

Exemplos:

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 

Pontuação:

Isso é , portanto, tente escrever o código mais curto para obter os resultados desejados, observando que as brechas padrão são estritamente proibidas. Você deve usar dois idiomas diferentes, não outras versões do mesmo idioma (por exemplo: Python 2- Python 3pares não são válidos)


@ downvoter por que foi isso?
Mr. Xcoder

6
Eu recomendo manter as perguntas na sandbox por pelo menos alguns dias, para que elas ganhem atenção suficiente antes de postar na main. Eu não voto negativo.
Erik the Outgolfer

Droga, escrevi uma resposta Py2 / Py3 e quando eu estava prestes a postar vi a regra. 30 minutos eu nunca voltarei Haha.
Sagiksp

Respostas:


6

05AB1E / Jelly , 21 20 bytes

-1 byte depois de pedir ajuda - obrigado Emigna! ( `vai push(uwrapped(pop())))

Bytes brutos (o despejo à direita mostra o que minha máquina Windows exibe):

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

Ambos recebem entrada de STDIN e saída para STDOUT como uma representação de lista [x, y].

O idioma máximo é 05AB1E:

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

Onde os .bytes representados não podem ser impressos em sua página de código ( cp1252 ) e provavelmente aqui no que você estiver usando (0x18 = CANe 0x04 = EOT).

Experimente a versão 05AB1E

O idioma mínimo é Jelly:

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

Experimente a versão Jelly .

Quão?

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

Geléia:

`Ȯ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 e C ++ (gcc), 117 107 bytes

-10 bytes graças a @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);}

Explicação: Em C, auto c=.5declara uma variável inteira com a classe de armazenamento automático (que é o padrão), que é inicializada em 0, enquanto que em C ++ 11 declara um duplo, inicializado em 0,5. Portanto, o valor da variável será verdadeiro em C ++ e falso em C.

Idioma C - max: Experimente online!

C ++ - idioma mínimo: Experimente online!


2
Solução muito inteligente. Eu gosto do fato de que nenhum comentário foi usado.
Mr. Xcoder

5
Para salvar alguns bytes, você pode declarar uma variável auto c=.5e usar em cvez de sizeof'a'-1. Em C, auto c=.5declara uma variável inteira com a classe de armazenamento automático (que é o padrão), que é inicializada como 0, enquanto que em C ++ 11 declara um duplo, inicializado como 0,5. Assim, o valor da variável será truthy em C ++ e Falsas em C.
Steadybox

9

Python 3 / Jelly , 42 bytes

Usando a página de código de Jelly para codificar o arquivo.

Bytes brutos:

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                      .#.ú,Ó÷ÓÍ.

Ambos definem uma função diádica sem nome.

Python (a linguagem máxima) vê:

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

Testes como Python .

Jelly (o idioma mínimo) vê:

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

Testes como geléia .

Quão?

Jelly interpreta 0x0a como ½, o átomo de raiz quadrada, enquanto Python interpreta como uma nova linha. No Jelly, 0x7f é interpretado como uma separação entre links (funções) e é representado por uma nova linha ou um pilcrow em sua página de código. Para o Jelly, o último link é a função principal - aqui ele não chama o link acima (que o intérprete ainda precisa analisar corretamente). No Python 0x23, #instrui que qualquer coisa após e antes de 0x0a, uma nova linha, é um comentário.

O código Python que é executado:

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

O código Jelly que é executado:

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

Escolha de idioma interessante
Mr. Xcoder 18/04

É quase certamente possível combinar o código Jelly com outro idioma do golfe para diminuir a contagem de bytes.
Jonathan Allan

Umm ... seus trechos de código parecem ser diferentes.
Erik o Outgolfer

11
@EriktheOutgolfer esses blocos de código são apenas representações dos bytes brutos (daí \x7fe \x04para os não imprimíveis no Python).
Jonathan Allan

11
@ JonathanAllan Não, quero dizer que seus trechos são realmente diferentes. Basta ver o código Python para cada um.
Erik o Outgolfer

8

Ruby / Python 3, 102 bytes

Ruby retorna max / sum, Python retorna min / diferença. Entrada é um objeto de matriz lido de 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]])

Experimente on-line: Ruby

Experimente on-line: Python

A principal peculiaridade usada aqui é o uso da verdade 0no Ruby, que é falso no Python. A outra coisa que vale a pena mencionar é que a sortfunção do Python modifica a lista no local e retorna None, enquanto o Ruby não faz e retorna a matriz classificada, daí a necessidade de usarb or a para obter o mínimo / máximo.

O Python 3 é necessário porque o Python 2 reclama se você tentar chamar printapós a ordeclaração na última linha.


Isso é esperto! 1
Arjun

4

Java / AWK , 219 217 212 196 bytes

/*#\/* /
{$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));}}

Experimente online!

Java gera max e sum, AWK produz min e diferença. Nenhuma saída para se as entradas são idênticas.

Este é meu primeiro poliglota e primeiro TIO :)


3

JavaScript (ES6) / QBasic, 172 171 bytes

'';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
'*/

Baseado nesta solução minha de uma pergunta semelhante .

Essa solução também usa a abordagem de comentários!

JavaScript é o idioma min. Ele recebe uma matriz contendo números como entrada. Gera dois números separados por ,(1º número é o menor valor da matriz de entrada e 2º número é a diferença dos maiores e menores valores da matriz de entrada) por alert()ing. Não faz alert()nada se os números são iguais. Você pode chamar a função como f([100,40]).

QBasic é o idioma máximo. Solicita repetidamente a entrada, duas vezes. Imprime o maior número de números de entrada, bem como a soma dos números maiores e menores da entrada. Não faz PRINTnada se os números são iguais.


Como funciona?

No QBasic (um idioma da família BASIC estruturada; não requer números de linha), 'marca o início de um comentário que vai até o final da linha. Enquanto no JavaScript, ele marca o início de uma string. Portanto, a primeira linha inteira é marcada como um comentário no QBasic, mas no JavaScript, a linha é executada (e essa linha contém a parte do JavaScript que calcula o menor número e a diferença entre o maior e o menor número, além de um/* no final que inicia um comentário para ocultar o restante do código QBasic do interpretador JavaScript.)

O código da segunda linha para a segunda linha contém o código QBasic para calcular o maior número e a soma do maior e do menor número (o código é muito autoexplicativo).

A última linha contém '*/. 'faz com que o intérprete QBasic interprete o código a seguir como um comentário, enquanto que no JavaScript ele não tem nenhum efeito, pois faz parte de um comentário (iniciado no final da primeira linha). O código a seguir ( */) faz com que o JavaScript termine o comentário iniciado na primeira linha, mas não é executado no QBasic porque o QBasic acha que faz parte de um comentário.


Casos de teste

JavaScript (idioma mínimo):

'';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 (idioma máximo):

Vá para este site . Copie e cole o seguinte código no editor de texto:

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

A razão pela qual os números de linha são necessários é que o site que mencionei suporta apenas idiomas BASIC não estruturados. E esse site é o único intérprete online do BASIC decente que eu pude encontrar. No entanto, a execução do código presente na parte superior da postagem (o código sem números de linha) deve funcionar bem em qualquer bom intérprete QBasic que ofereça suporte ao BASIC estruturado e 'como iniciador de comentários (poucos, no entanto, a maioria)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.