Desafío
Dada una cadena tales como Hello World!
, descomponerlo en sus valores de caracteres: 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33
.
A continuación, se calcula la diferencia entre cada par consecutivo de caracteres: 29, 7, 0, 3, -79, 55, 24, 3, -6, -8, -67
.
Por último, sumarlos e imprimir el resultado final: -39
.
Reglas
- Se aplican lagunas estándar
- No usar funciones prefabricadas que realicen esta tarea exacta
- Soluciones creativas alentadas
- Que te diviertas
- Esto está marcado como code-golf , la respuesta más corta en bytes gana pero no se seleccionará.
code-golf
string
number
arithmetic
array-manipulation
dkudriavtsev
fuente
fuente
Respuestas:
Python, 29 bytes
La suma de las diferencias forma una serie telescópica, por lo que la mayoría de los sumandos se cancelan y
(s 1 - s 0 ) + (s 2 - s 1 ) +… + (s n-1 - s n-2 ) + (s n - s n-1 ) = s n - s 0 .
Si tomar una cadena de bytes como entrada está permitida
funcionará también para 19 bytes .
Prueba ambos en Ideone .
fuente
MATL , 2 bytes
Pruébalo en línea!
Explicación:
d
obtiene la diferencia entre caracteres consecutivos ys
suma la matriz resultante. Luego, el valor en la parte superior de la pila se imprime implícitamente. No hay mucho más que decir al respecto.Curiosamente, a pesar de que Dennis descubrió un atajo increíble, usarlo sería significativamente más largo en MATL.
fuente
Jalea , 3 bytes
Pruébalo en línea!
Tome los
O
rdinales de los caracteres de la cadena de entrada, luego losI
elementos de esa lista, luego elS
um de esa lista.fuente
MATLAB, 16 bytes
Esto crea una función anónima llamada
ans
que puede ser llamado como:ans('Hello world!')
.Aquí hay una demostración en línea en Octave que requiere un byte adicional
+
para convertir explícitamente la cadena de entrada en una matriz numérica antes de calcular la diferencia de elemento a elementofuente
Python, 63 bytes
Ideone it!
fuente
Cubix , 13 bytes
Cubix es un lenguaje bidimensional envuelto alrededor de un cubo.
¡Pruébalo en línea! Esto se asigna a la siguiente red de cubos:
Donde el IP (puntero de instrucción) comienza en la parte superior izquierda de la cara del extremo izquierdo.
Cómo funciona
Primero, la IP golpea el espejo
/
que lo redirige a lai
cara superior. La cara superior es un bucle que ingresa continuamente códigos de caracteres hasta que se alcanza EOF. Cuando la entrada está vacía, el resultadoi
es -1; el IP gira a la izquierda desde el?
, golpeando/
el extremo derecho y pasando por los siguientes comandos:;
- Pop el elemento superior (-1).#
- Empuje la longitud de la pila.t
- Pop el elemento superior y obtener el elemento en ese índice en la pila. Esto levanta el elemento inferior.-
- RestarO
- Salida como un entero./
- Desvía la IP hacia@
, que finaliza el programa.fuente
C #, 22 bytes
Código fuente completo con caso de prueba:
C # con LINQ, 17 bytes
Una versión más corta, usando LINQ, gracias a hstde :
Sin embargo, es necesaria una importación adicional:
fuente
s=>s.Last()-s[0];
sería solo 17 bytesRuby, 23 bytes
Asignar a una variable como
f=->s{s[-1].ord-s[0].ord}
y llamar comof["Hello World!"]
Utiliza la observación de Dennis sobre series telescópicas.
fuente
$><<
.reticular, 12 bytes
Pruébalo en línea!
Usando la observación de Dennis , podemos acortar un proceso iterativo en uno más simple.
fuente
Brain-Flak , 51 bytes
48 bytes de código más tres bytes para el
-a
indicador, que permite la entrada ASCII (pero la salida decimal. Qué conveniente.: D)Pruébalo en línea!
Estas son un poco más difíciles que mi otra respuesta, jaja. Pasemos por él.
fuente
05AB1E , 3 bytes
Pruébalo en línea!
Utiliza la codificación CP-1252.
Explicación
fuente
Brachylog , 7 bytes
Pruébalo en línea!
Explicación
Como restar solo funciona para una entrada de dos enteros, tendrá éxito una vez que el prefijo seleccionado sea
[33, 72]
.fuente
Haskell, 32 bytes
fuente
R,
69 4332 bytesUna respuesta muy poco competitiva, aunque pensé que sería divertido mostrar una posible solución en R.
El único aspecto interesante de esta respuesta es el uso de
sapply
ycharToRaw
. Primero dividí la cadena en un vector de caracteres que quiero convertir en sus representaciones enteras ASCII. LacharToRaw
función no está vectorizada en R y en lugar de recorrer cada valor en el vector antes mencionado que uso,sapply
que efectivamente vectoriza la función. Posteriormente tome la primera diferencia y luego la suma.Editar: resulta
charToRaw
transformar una cadena en un vector donde cada elemento es la representación en bruto de cada carácter, por lo tanto, no es necesario usarstrsplit
ysapply
Edit2: Resulta que hay una forma aún mejor, la función
utf8ToInt(x)
hace exactamente lostrtoi(charToRaw(x),16)
que significa que podemos guardar algunos bytes más (Idea tomada de la respuesta de @ rturnbull a otra pregunta):fuente
Perl, 19 bytes
Incluye +1 para
-p
Dar entrada en STDIN sin nueva línea final
slope.pl
:Si está seguro de que la cadena de entrada tiene al menos 2 caracteres, esta versión de 17 bytes también funciona:
fuente
NodoJS, 82 bytes
Explicación:
JavaScript, 79 bytes
La misma idea que la anterior con una entrada de función en lugar de un argumento.
fuente
x
es la entrada. Necesitas realmente obtener información.f=x=>{...;return t}
para guardar 2 bytes;)JavaScript ES6,
4239 bytesUsando la observación de @Dennis sobre sumas de telescopios.
Creo que en este caso la solución trivial es la más corta.Ahorró 3 bytes al deshacerse de la
charCodeAt
repetición como lo sugiere @Neil.fuente
s=>s.slice(-1).charCodeAt()-s.charCodeAt()
que resulta ser de la misma longitud.charCodeAt
es bastante largo, probablemente haya una forma de guardar bytes evitando la repetición.f=s=>(s[1]?-f(s.slice(-1)):0)-s.charCodeAt()
Adelante, 28 bytes
Toma una lista de caracteres en la pila (el método estándar de Forth para tomar parámetros). Los caracteres se toman de tal manera que la parte superior de la pila es el primer carácter de la cadena. Muevo la parte inferior de la pila a la parte superior, cambio, luego resta e imprimo. Se deja basura en la pila y la salida se imprime en stdout.
Si cada carácter fuera empujado a la pila en orden en lugar de en orden inverso, el programa sería 2 bytes más corto. Sin embargo, no estoy seguro de si eso está permitido, porque normalmente empujas los argumentos en orden inverso.
Pruébalo en línea
Llamado así:
fuente
Java, 42
Sin golf:
Explicación:
Esto utiliza el mismo principio que el telescopio:
Generalizado para cualquier secuencia de caracteres de longitud
n
, la respuesta esc[n-1] - c[0]
porque todas las cosas en el medio se cancelan.fuente
PHP 7.1,
3331 bytesUtiliza compensaciones de cadena negativas implementadas en PHP 7.1.
Corre así:
Ajustes
$argn
fuente
RProgN , 142 Bytes, No competidor
No compite, ya que el comando 'tostack' se agregó después del descubrimiento de este desafío (a pesar de que tiene un recuento de bytes terrible)
Casos de prueba
Explicación
RProgN es un lenguaje esotérico en el que he estado trabajando teniendo en cuenta la notación polaca inversa. Actualmente es bastante detallado, con una asignación variable de 4 caracteres y, sin embargo, planeo agregar en el futuro un poco de azúcar sintética.
Además, RProgN accede implícitamente a los argumentos de la pila y los devuelve de la misma manera. Cualquier dato de cadena que quede en la pila después de que el programa haya finalizado, se imprime implícitamente.
fuente
~{bid☼[+
y eso es un poco adorable.PHP, 36 bytes
→ suma de diferencias == diferencia entre el primer y el último carácter
ord()
en PHP opera en el primer carácter de una cadena→ no es necesario reducirlo explícitamente a un solo carácter
fuente
Brain-Flak ,
3432 + 3 = 35 bytes+3 debido a la
-a
bandera requerida para el modo ASCII.Pruébalo en línea
Curiosamente, es más eficiente usar la definición utilizada en las especificaciones en lugar del "truco" de restar primero de último.
Esto funciona haciendo exactamente eso.
fuente
CJam ,
85 bytesMuchas gracias a Dennis por dos sugerencias que eliminaron 3 bytes
Pruébalo en línea!
Explicación
Calcula el último valor menos el primer valor.
fuente
)
lugar deW=
, no necesita el_
. Además,c
como atajo para0=
.Haskell, 36 bytes
uso:
Haskell (Lambdabot), 31 bytes
fuente
sum.(tail>>=zipWith(-)).map fromEnum
Por ejemplo es una función.Zsh , 22 bytes
Pruébalo en línea!
En modo aritmético,
#name
obtiene el código de carácter del primer caráctername
. Establecemosc
el último carácter y tomamos la diferencia entre el primer y el último código.fuente
Haskell , 30 bytes
Pruébalo en línea!
Resta el valor ordinal del último carácter del primero.
fuente
Haskell, 61 bytes
fuente
Java 7,
10096 bytesUngolfed y código de prueba:
Pruébalo aquí.
Salida:
-39
fuente
Clojure, 31 bytes
Alguien redujo la tarea a una sola operación.
fuente