Poliglotas mais ou menos!


14

Seu envio deve incluir uma lista de números (em qualquer formato de lista que seu idioma suporte, ou usando vários parâmetros de função / linha de comando) ou uma sequência de números separados por qualquer caractere que não seja 0123456789. Em um idioma, ele deve adicionar todos eles e gerar a soma. Em outro idioma, deve produzi-los subtraídos um do outro em ordem. Exemplo:

12
5
7
2

Em um idioma, ele deve produzir 26, e em outro, deve produzir -2. Observe que todos os números introduzidos serão números inteiros positivos menores que 100. Nunca haverá mais do que 20números fornecidos; portanto, você nunca produzirá maior 2000ou menor que -1899. Alguma pergunta? Comente abaixo!


O espaço em branco à direita na saída é permitido?
Business Cat

São permitidas duas versões diferentes do mesmo idioma? Veja a resposta de Python 2/3 por HyperNeutrino
Mr. Xcoder

@ Mr.Xcoder é permitido.
programmer5000

2
@BetaDecay você acha que isso é um problema, confira o código-golf!
programmer5000

1
@ programmer5000 Você quer dizer [code-golf] -[polyglot]?
Erik a Outgolfer

Respostas:


14

Jelly / 05AB1E , 3 bytes

00000000: c6 71 53                                         .qS

Este é um hexdump (xxd) do programa enviado.

Experimente online!

Jelly: Sum

Jelly usa a página de código Jelly , para ver os seguintes caracteres.

İqS

Experimente online!

Como funciona

İqS  Main link. Argument: A (array)

İ    (ignored)
 q   Unrecognized token. This breaks the link; nothing to the left is executed.
  S  Take the sum of A.

05AB1E: Diferença

05AB1E usa Windows-1252 , para ver os seguintes caracteres.

ÆqS

Experimente online!

Como funciona

Æ     Take the difference of the input.
 q    Quit.
  S   (ignored)

22

Python 2/3, 52 bytes

lambda l:sum(l[:1]+[x*int(1-(1/2)*4)for x in l[1:]])

int(1-(1/2)*4)retorna 1no Python 2 porque 1/2avalia primeiro 0e depois 0 * 4 = 0.

int(1-(1/2)*4)retorna -1no Python 3 porque 1/2avalia primeiro 0.5e depois int(0.5 * 4) = int(2.0) = 2.


1
Está usando o mesmo idioma, com outras versões permitidas?
Mr. Xcoder

3
@ Mr.Xcoder Não vejo por que não, já vi outras linguagens usando versões diferentes de C, Java, Python e Befunge. Vou perguntar na meta ou ver se consigo encontrar uma meta post relacionada.
precisa saber é o seguinte

Bom uso de truques de matemática devido a alterações de versão.
Mr. Xcoder

1
@ Mr.Xcoder Obrigado! Eu fiz a pergunta na meta aqui ; Espero obter uma resposta em breve.
HyperNeutrino

1
@ programmer5000 Divisão inteira.
HyperNeutrino

14

C e C ++ (ambos do GCC), 81 75 73 bytes

int c;int f(int*a,int l){auto d=.5;c=*a++;for(;--l;a++)c+=*a-4*d**a;c=c;}

Leva um ponteiro para matriz e comprimento.

Explicação: ainda usando a explicação @Steadybox ': p Em C, auto d=.5declara uma variável inteira com a classe de armazenamento automático (que é o padrão), que é inicializada como 0, enquanto que no C ++ 11 declara um duplo, que é inicializado a 0,5.

Idioma C - plus: Experimente online!

Menos linguagem: Experimente online!


11

05AB1E / Jelly , 5 bytes

00000000: 4f71 7f5f 2f                             Oq._/

Experimente online! (05AB1E)
Experimente online! (Geléia)

05AB1E vê :

Oq? _ /
Explicação:

Oq? / 1 argumento implícito.
O Pegue a soma do primeiro item de entrada.
 q Saia.
  ?_/ Nao funcional.

Jelly vê :

Oq
_ /
Explicação:

_ / Link principal. Argumentos: z
_ / Subtrai os elementos de z em ordem.

Link Oq Helper. Nao funcional.

Isso usa a página de código Jelly?
programmer5000

@ programmer5000 Este é um bytestream bruto que usa o CP-1252 para 05AB1E e o JELLY for Jelly. Daí o 7f.
Erik o Outgolfer

Oh, não percebi isso!
programmer5000

8

Na verdade / geléia , 4 bytes

00000000: e4 81 5f 2f                                      .._/

Este é um hexdump (xxd) do programa enviado. Não pode ser testado na forma bruta online; O TIO não suporta a codificação CP437.

Na verdade: soma

Na verdade, usa o CP 437 , para ver os seguintes caracteres.

Σü_/

Experimente online!

Como funciona

Σ     Take the sum on the input.
 ü    Print and empty the stack.
  _   Natural logarithm. Ignored since the stack is empty.
   /  Float division. Ignored since the stack is empty.

Geléia: Diferença

Jelly usa a página de código Jelly , para ver os seguintes caracteres.

ỵ¹_/

Experimente online!

Como funciona

ỵ¹_/  Main link. Argument: A (array)

ỵ     Unrecognized token. Splits the link.
 ¹    Identity; yield A.
  _/  Reduce (/) A by subtraction (_).

Eu li que como actually, Jelly.:)
programmer5000

Você abusou do fato de que um caráter indefinido age como :)
Erik o Outgolfer

1
@EriktheOutgolfer Mais ou menos. Para ser perfeitamente honesto, não tenho muita certeza do que os tokens não reconhecidos fazem.
Dennis

Pensando bem, acho que você apenas escolheu verdade só porque ele tem üatribuído à função perfeita> _>
Erik o Outgolfer

@ programmer5000 É jelly, actually.
Arjun


7

CJam / Jelly , 6 bytes

q~:-
S

CJam

q~    e# Read a list from input
:-    e# Reduce by subtraction
S     e# Push a space
      e# Implicit output

Experimente online!

Geléia

(usando UTF-8, não a página de código Jelly)

q~:-é o link auxiliar. Como não é chamado, realmente não importa o que faz. Scalcula a soma de uma matriz.

Experimente online!


5
Geléia e geléia. Faz sentido usar duas coisas semelhantes juntas.
mbomb007

1
Isto é inválido. A geléia tem 0x7f para nova linha, isso tem 0x0a para nova linha. Em Jelly, isso é realmente o mesmo que q~:-½S. Infelizmente, a correção ( q~:-e#\x7fS) é maior. Experimente online! (CJam) e experimente online! , cada um com sua própria codificação para testar por si mesmo.
Erik a Outgolfer

2
Como alternativa, você pode usar a codificação UTF-8 para Jelly, o que torna isso válido como atualmente, mas especifique-o.
Erik a Outgolfer

5

JavaScript / Cubix, 36 bytes

//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

Tente!

A função JavaScript pode ser testada usando o trecho de código abaixo, o programa Cubix pode ser testado aqui .

Como é que isso funciona?

Javascript

A primeira linha é um comentário de linha para JavaScript, uma vez que começa com duas barras, portanto, o JavaScript vê apenas a linha inferior ( a=>eval(a.join`-`)), que recebe uma matriz como entrada, junta-a com sinais de menos entre elas e executa como código, resultando em a subtração de todos os elementos na matriz.

let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))

Cubix

O Cubix vê o seguinte cubo (observe que o Cubix ignora todos os espaços em branco):

      / / .
      ! v +
      u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
      . . .
      . . .
      . . .

O início

O IP começa na terceira linha, apontando para o leste. Ele atinge o 'I'comando, que pega um número da entrada e o empurra para a pilha. Em seguida, ele é redirecionado '^'para o loop de soma.

Loop de soma

Eu removi todos os caracteres que não fazem parte do loop de soma e os substitui por no-ops ( '.'). O IP chega inicialmente na segunda linha, apontando para o leste.

      . . .
      ! v +
      u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Primeiro, o '!'comando verifica o elemento superior. Se isso é 0(ou seja, chegamos ao final da entrada), a próxima instrução ( 'v') é executada, refletindo o IP fora do loop. Se ainda não chegamos ao final da entrada, adicionamos os dois itens principais ( '+'o segundo item é a soma até esse ponto, o item principal é a nova entrada). Em seguida, o IP passa para outra face do cubo, no 'u'caractere, o que faz com que o IP faça uma inversão de marcha e execute um 'I'comando (leia outro número inteiro de entrada), enquanto aponta para o norte. O IP volta para a face superior, pula ( '$') a instrução de exclusão ( ';') e faz outra inversão de marcha, de volta ao ponto em que começamos.

O fim

Se o IP for refletido fora do loop, os seguintes caracteres serão executados:

      . . .
      . v .
      . ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Essas instruções excluem o elemento superior (que é zero) e, em seguida, emitem o elemento superior (a soma) como um número inteiro. Em seguida, o '@'comando é atingido, para que o programa termine.


4

Python 2 e 3, 33 bytes

lambda l,*r:l+sum(r)*(1/2>0 or-1)

Recebe a entrada como parâmetros separados.


Python 2.
Python 3.


lambda l,*r:l+sum(r)*(1/2-.5)*2para 31 bytes
ovs 21/04/19

@ovs Evitei propositadamente devolver um carro alegórico. Se você tem permissão, *(1/2*4-1)é um byte menor que o seu.
Veedrac

Eu acho que o tipo de retorno realmente não importa, desde o valor está correto
OVS

4

JS (ES6), CGL (linguagem de golfe CGL) , 32 26 bytes

 x=>eval(x.join`-`)
//-⨥

JS faz a subtração e CGL faz a adição.

JS:

x=>eval(x.join`-`)

Uma função anônima que subtrai cada elemento da matriz usando Array#reduce.

//-⨥

Um comentário.

CGL

 x=>eval(x.join`-`)

O que parece um espaço na primeira linha é na verdade um espaço sem quebra, um comentário no CGL. A primeira linha é ignorada.

//-⨥

Os /s não fazer nada. O -decrementa o ponteiro atual da pilha, apontando para a entrada. adiciona a pilha atual (entrada), empurra para a próxima pilha e incrementa a pilha atual. É gerado implicitamente.


1
Você pode encurtar a versão JS usando x=>eval(x.join`-`), salvando 5B
Luke


@ Adám, você está certo. Fixo.
programmer5000

4

JavaScript (ES6) / QBasic, 84 83 bytes

'';f=x=>eval(x.join`+`)/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/

Outra solução com o comentário hack!

JavaScript calcula a soma. Ele recebe uma matriz contendo números como entrada. Saídas como função return. Você pode chamar a função como alert(f([10,20,30])).

QBasic calcula a diferença. Solicita repetidamente a entrada. Assim que você insere um valor, ele gera a diferença de todos os números digitados até o momento da batida Entere novamente solicita a entrada. Continua fazendo o mesmo até o fim de tudo.


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 adiciona os números e também uma /*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 a diferença de todos os números de entrada (o código é muito auto-explicativo).

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 (adiciona):

'';f=x=>eval(x.join`+`);/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/
console.log(f([12,5,7,2]));

QBasic (subtrai):

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

1 '';f=x=>eval(x.join`+`);/*
2 INPUT a
3 FOR i=1 TO 2
4 i=0
5 INPUT n
6 a=a-n
7 PRINT a
8 NEXT i
9 '*/

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


Notas

  • Este é o meu primeiro post ! Espero que seja uma boa!
  • A parte QBasic do código não requer ENDporque o intérprete nunca o alcançará! (Ele ficará preso para sempre no loop infinito; sempre pedindo mais informações.)

3

Flak cerebral / Flueue cerebral , 20 bytes

({}<([({{}})]){}>{})

Experimente online! (Flak cerebral) (mais)

Experimente online! (Conduto cerebral) (menos)

Explicação

A única diferença entre o Brain-Flak e o Brain-Flueue é que o Brain-Flue substitui as duas pilhas (a última a entrar pela primeira vez) usadas na Brain-Flak por duas filas (a primeira a entrar pela primeira vez). Naturalmente, este programa usa essa diferença.

Código anotado

(                  ) Push the sum of...
 {}                   the first input,
   <            >     zero,
                 {}   the remaining sum (see below)
    ([      ])       Push the of below line
      ({{}})         Pop all the input sans first, push the sum
              {}     Pop (in Brain-Flak, this discards the negative sum,
                            in Brain-Flueue, the positive)
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.