¡Más o menos políglotas!

14

Su envío debe tomar una lista de números (en cualquier formato de lista que admita su idioma, o utilizando múltiples parámetros de función / línea de comando) o una cadena de números separados por cualquier carácter que no lo sea 0123456789. En un idioma, debe agregarlos todos y generar la suma. En otro idioma, debe darles salida restados unos de otros en orden. Ejemplo:

12
5
7
2

En un idioma, debe generar 26, y en otro debe generar -2. Tenga en cuenta que todos los números ingresados ​​serán enteros positivos menores que 100. Nunca habrá más que 20números proporcionados, por lo que nunca tendrá una salida mayor 2000o menor que-1899 . ¿Alguna pregunta? ¡Comenta abajo!

programador 5000
fuente
¿Se permite el espacio en blanco al final de la salida?
Business Cat
¿Se permiten dos versiones diferentes del mismo idioma? Ver Python 2/3 Respuesta de HyperNeutrino
Mr. Xcoder
@ Mr.Xcoder está permitido.
programmer5000
2
@BetaDecay crees que es un problema, ¡mira el código golf!
programador
1
@ programmer5000 ¿Quieres decir [code-golf] -[polyglot]?
Erik the Outgolfer

Respuestas:

14

Jelly / 05AB1E , 3 bytes

00000000: c6 71 53                                         .qS

Este es un hexdump (xxd) del programa enviado.

Pruébalo en línea!

Jalea: Suma

Jelly usa la página de códigos Jelly , por lo que ve los siguientes caracteres.

İqS

Pruébalo en línea!

Cómo 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: diferencia

05AB1E usa Windows-1252 , por lo que ve los siguientes caracteres.

ÆqS

Pruébalo en línea!

Cómo funciona

Æ     Take the difference of the input.
 q    Quit.
  S   (ignored)
Dennis
fuente
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)regresa 1en Python 2 porque 1/2evalúa primero a 0, y luego 0 * 4 = 0.

int(1-(1/2)*4)regresa -1en Python 3 porque 1/2evalúa primero a 0.5, y luego int(0.5 * 4) = int(2.0) = 2.

Hiperneutrino
fuente
1
¿Está usando el mismo idioma, incluso con otras versiones permitidas?
Sr. Xcoder
3
@ Mr.Xcoder No veo por qué no, he visto otros lenguajes que usan versiones diferentes de C, Java, Python y Befunge. Sin embargo, preguntaré sobre meta o veré si puedo encontrar una meta publicación relacionada.
HyperNeutrino
Sin embargo, buen uso de trucos matemáticos debido a cambios en la versión.
Sr. Xcoder
1
@ Mr.Xcoder Gracias! He hecho la pregunta sobre meta aquí ; Espero recibir una respuesta pronto.
HyperNeutrino
1
@ programmer5000 División entera.
HyperNeutrino
14

C y C ++ (ambos de 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;}

Toma un puntero a la matriz y la longitud.

Explicación: sigo usando la explicación de @Steadybox: p En C,auto d=.5 declara una variable entera con la clase de almacenamiento automático (que es la predeterminada), que luego se inicializa a 0, mientras que en C ++ 11 declara un doble, que se inicializa a 0.5.

Lenguaje C - plus: ¡ Pruébelo en línea!

C ++ - sin lenguaje: ¡ Pruébelo en línea!

Betseg
fuente
11

05AB1E / Jelly , 5 bytes

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

Pruébalo en línea! (05AB1E) ¡
Pruébelo en línea! (Jalea)

05AB1E ve :

Oq? _ /
Explicación:

Oq? _ / 1 argumento implícito.
O Tome la suma del primer elemento de entrada.
 q Salir.
  ?_/ No funcional.

Jelly ve :

Oq
_ /
Explicación:

_ / Enlace principal. Argumentos: z
_ / Resta los elementos de z en orden.

Enlace Oq Helper. No funcional.
Erik el Outgolfer
fuente
¿Utiliza esto la página de códigos Jelly?
programador
@ programmer5000 Este es un bytestream sin procesar que utiliza CP-1252 para 05AB1E y JELLY para Jelly. De ahí el 7f.
Erik the Outgolfer
¡Oh, no me di cuenta de eso!
programmer5000
8

Actualmente / Jelly , 4 bytes

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

Este es un hexdump (xxd) del programa enviado. No se puede probar en forma cruda en línea; TIO no es compatible con la codificación CP437.

En realidad: suma

En realidad usa CP 437 , por lo que ve los siguientes caracteres.

Σü_/

Pruébalo en línea!

Cómo 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.

Jalea: diferencia

Jelly usa la página de códigos Jelly , por lo que ve los siguientes caracteres.

ỵ¹_/

Pruébalo en línea!

Cómo funciona

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

ỵ     Unrecognized token. Splits the link.
 ¹    Identity; yield A.
  _/  Reduce (/) A by subtraction (_).
Dennis
fuente
Lo leí como actually, Jelly.:)
programmer5000
Abusaste del hecho de que un personaje indefinido actúa como :)
Erik the Outgolfer
1
@EriktheOutgolfer Más o menos. Para ser sincero, no estoy muy seguro de lo que hacen los tokens no reconocidos.
Dennis
Pensándolo bien, creo que elegiste En realidad solo porque se ha üasignado a la función perfecta> _>
Erik the Outgolfer
@ programmer5000 Es jelly, actually.
Arjun
8

Python 2 y 3, 44 41 bytes

lambda l:eval(l.replace(' ','-+'[1/2>0]))

Toma números separados por espacios.


-3 bytes gracias a @JonathanAllan

Pruébelo en línea: Python 2 (menos) Python 3 (más)

ovs
fuente
1
Use '-+'[1/2>0]para guardar tres bytes.
Jonathan Allan
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

Pruébalo en línea!

Jalea

(usando UTF-8, no la página de códigos Jelly)

q~:-es el enlace de ayuda. Como no se llama, realmente no importa lo que haga. Scalcula la suma de una matriz.

Pruébalo en línea!

Gato de negocios
fuente
55
Mermelada y gelatina. Tiene sentido usar dos cosas similares juntas.
mbomb007
1
Esto no es valido. Jelly tiene 0x7f para nueva línea, esto tiene 0x0a para nueva línea. En Jelly, esto es realmente lo mismo que q~:-½S. Desafortunadamente, el arreglo ( q~:-e#\x7fS) es más grande. Pruébalo en línea! (CJam) y pruébalo en línea! , cada uno con su propia codificación para probarlo usted mismo.
Erik the Outgolfer
2
Alternativamente, puede usar la codificación UTF-8 para Jelly, lo que hace que esto sea válido como es actualmente, pero especifíquelo.
Erik the Outgolfer
5

JavaScript / Cubix, 36 bytes

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

¡Intentalo!

La función de JavaScript se puede probar usando el fragmento a continuación, el programa Cubix se puede probar aquí .

¿Como funciona esto?

JavaScript

La primera línea es un comentario de línea a JavaScript, ya que comienza con dos barras diagonales, por lo que JavaScript solo ve la línea inferior ( a=>eval(a.join`-`)), que toma una matriz como entrada, la une con signos menos en el medio y luego la ejecuta como código, lo que resulta en La sustracción de todos los elementos de la 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

Cubix ve el siguiente cubo (observe que Cubix ignora todos los espacios en blanco):

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

El principio

La IP comienza en la tercera línea, apuntando hacia el este. Toca el 'I'comando, que toma un número de la entrada y lo empuja a la pila. Luego, se redirige '^'al sum-loop.

Sum-loop

Eliminé todos los caracteres que no forman parte del bucle de suma y los reemplacé por no-ops ( '.'). El IP llega inicialmente a la segunda línea, apuntando hacia el este.

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

Primero, el '!'comando verifica el elemento superior. Si es así 0( es decir, hemos llegado al final de la entrada), 'v'se ejecuta la siguiente instrucción ( ), reflejando la IP fuera del bucle. Si aún no hemos llegado al final de la entrada, sumamos los dos elementos superiores ( '+'el segundo elemento es la suma hasta ese punto, el elemento superior la nueva entrada). Luego, la IP se ajusta a otra cara del cubo, dentro del 'u'carácter, lo que hace que la IP dé un giro en U y ejecute un 'I'comando (lea otro entero de entrada), mientras apunta hacia el norte. La IP vuelve a la cara superior, omite ( '$') la instrucción de eliminación ( ';') y realiza otro cambio de sentido, de vuelta al punto en el que comenzamos.

El fin

Si la IP se refleja fuera del bucle, se ejecutan los siguientes caracteres:

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

Estas instrucciones eliminan el elemento superior (que es cero) y luego generan el elemento superior (la suma) como un entero. Luego '@'se alcanza el comando, por lo que el programa finaliza.

Luke
fuente
4

Python 2 y 3, 33 bytes

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

Toma la entrada como parámetros separados.


Python 2.
Python 3.

Veedrac
fuente
lambda l,*r:l+sum(r)*(1/2-.5)*2para 31 bytes
ovs
@ovs A propósito evité devolver un flotador. Si se le permite, entonces *(1/2*4-1)es un byte menor que el suyo.
Veedrac
Creo que el tipo de retorno realmente no importa siempre que el valor sea correcto
ovs
4

JS (ES6), CGL (lenguaje de golf CGL) , 32 26 bytes

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

JS hace la resta y CGL hace la suma.

JS:

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

Una función anónima que resta cada elemento en la matriz usando Array#reduce.

//-⨥

Un comentario.

CGL

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

Lo que parece un espacio en la primera línea es en realidad un espacio sin interrupciones, un comentario en CGL. La primera línea se ignora.

//-⨥

Los /s no hacen nada. El -decrementa el puntero de pila actual, de modo que está apuntando a la entrada.agrega la pila actual (entrada), la empuja a la siguiente pila e incrementa la pila actual. Se emite implícitamente.

programador 5000
fuente
1
Puede acortar la versión JS usando x=>eval(x.join`-`), guardando 5B
Luke
@ Adám tienes razón. Fijo.
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
'*/

Otra solución con el comentario hack!

JavaScript calcula la suma. Toma una matriz que contiene números como entrada. Salidas como función return. Puedes llamar a la función como alert(f([10,20,30])).

QBasic calcula la diferencia. Repetidamente pide información. Tan pronto como ingrese un valor, generará la diferencia de todos los números que ingresó hasta el momento de golpear Entery nuevamente solicitará la entrada. Sigue haciendo lo mismo hasta el final de todo.


¿Como funciona?

En QBasic (un lenguaje de familia BASIC estructurada; no requiere números de línea), 'marca el comienzo de un comentario que va hasta el final de la línea. Mientras que en JavaScript, marca el inicio de una cadena. Entonces, toda la primera línea está marcada como un comentario en QBasic pero en JavaScript, la línea se ejecuta (y esta línea contiene la parte de JavaScript que agrega los números, así como un/* al final que comienza un comentario para ocultar el resto) del código QBasic del intérprete de JavaScript).

El código de la segunda línea a la penúltima línea contiene el código QBasic para calcular la diferencia de todos los números de entrada (el código se explica por sí mismo).

La última línea contiene '*/. 'hace que el intérprete de QBasic interprete el siguiente código como un comentario, mientras que en JavaScript no tiene ningún efecto ya que es parte de un comentario (que se inició al final de la primera línea). El siguiente código (*/ ) hace que JavaScript finalice el comentario que se inició en la primera línea, pero no se ejecuta en QBasic porque QBasic cree que es parte de un comentario.


Casos de prueba

JavaScript (agrega):

'';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 (restas):

Ve a este sitio web . Copie y pegue el siguiente código en su 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 '*/

La razón por la cual se requieren números de línea es que el sitio web que mencioné solo admite idiomas BASIC no estructurados. Y ese sitio web es el único intérprete BASIC en línea decente que pude encontrar. Sin embargo, ejecutar el código presente en la parte superior de la publicación (el código sin números de línea) debería funcionar bien en cualquier buen intérprete de QBasic que admita BASIC estructurado y 'como iniciador de comentarios (sin embargo, pocos no lo hacen).


Notas

  • Este es mi primer publicación ! ¡Espero que sea buena!
  • ¡La parte QBasic del código no requiere ENDporque el intérprete nunca lo alcanzará! (Siempre estará atascado en el bucle infinito; siempre solicita más información).
Arjun
fuente
3

Brain-Flak / Brain-Flueue , 20 bytes

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

Pruébalo en línea! (Brain-Flak) (más)

Pruébalo en línea! (Flujo cerebral) (menos)

Explicación

La única diferencia entre Brain-Flak y Brain-Flueue es que Brain-Flueue reemplaza las dos pilas (la última en entrar, primero en salir) utilizadas en Brain-Flak con dos colas (primero en entrar, primero en salir). Naturalmente, este programa usa esta diferencia.

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)
0 '
fuente