Tarea
Construya una calculadora, que tome cualquier cadena, de un archivo, stdin o lo que sea, y sume todos los valores de los caracteres.
Ejemplo
Input
Hello World!
Output
1085
Reglas
La calculadora debe aceptar solo la codificación ASCII.
El código más corto gana.
Notas
En cuanto al comentario de m.buettner, debo decir que no pensé en la parte multibyte.
Así que también lo dejo como algo extra.
La calculadora debe ejecutarse como está escrita, por lo que no es necesario modificarla antes de compilarla o interpretarla.
Prima
Gracias a Synthetica , aquí hay una ventaja más,
El programa que tiene la salida más baja cuando usa su código como su entrada
ganaobtiene una estrella.
No quiero modificarlo por completo.
Si lo escribe adicionalmente para generar el valor (derecho) en UTF-8, obtendrá una estrella.
El código que se ejecuta más rápido en mi computadora portátil (Lenovo Yoga 13 Intel Core i5 3317U 1.7Ghz, 8GB RAM, 128GB SSD, Intel HD 4000, Windows 8) se convierte en una estrella.
Los códigos web se ejecutarán primero en IE11 con chakra y luego en FireFox 29.0.1 con SpiderMonkey
El código de Linux se ejecutará en una Raspberry Pi con Raspbian.
La cadena de prueba es esta:
q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(
Diviértete codificando :)
Bonusscoring
Planeo hacer la puntuación este sábado, así que el 07.06.14, todas las respuestas después de esa fecha no obtendrán puntos de bonificación;)
Puede descargar el código que usaré para probar aquí, no dude en bifurcarlo y mejorarlo :)
Pequeña actualización debido a la bonificación, mi computadora portátil está parcialmente rota, así que lo haré probablemente el próximo fin de semana, lo siento mucho :(
Hello World!
usar dos idiomas diferentes para valores ASCII en mi computadora.Respuestas:
GolfScript, 4 caracteres
Simplemente usa el operador de plegado (
*
) para sumar todos los caracteres.Si tiene que trabajar con la cadena vacía, 9 caracteres:
Gracias a @PeterTaylor por proporcionar una versión alternativa de 6 caracteres que funciona con una cadena vacía:
fuente
0\{+}/
admite cadena vacíaAPL (8)
Explicación:
+/
la suma de⎕UCS
valores unicode de⍞
entrada de caracteresfuente
Hello World!
?1085
. No sería correcto si proporcionara otra salida. Suma los valores de los puntos de código Unicode de los caracteres.⍞
⍞
significa leer una línea desde el tecladoHaskell 36
fuente
$ printf "Hello World!" | ./charsum
ECHO "Hello World! | ghci charsum.hs
interact
y enshow
lugar degetContents>>=print
:main=interact$show.sum.map fromEnum
Herramientas de Shell + GNU, 29 bytes
Toma entrada de stdin:
Puntaje propio: 2385
c, 52 bytes
Compilar con (algunas advertencias producidas):
Toma entrada de stdin:
Puntaje propio: 4354
fuente
od
comando?od -AntuC
no hace lo mismo queod -An -tuC
.od-An-tuC
ood -An-tuC
Javascript ( ES6 ) 51
fuente
...
antesprompt
? ¿Es esto algo nuevo de ES6 o es anterior a ES6?[...prompt(x=0)]
ha tomado la solicitud con un valor predeterminado de 0 (que luego se usará en la suma), y aplica esa entrada como una matriz de caracteres ... ? Que técnicamente sería lo mismo queprompt(x=0).split("")
, ¿verdad?prompt(x=0)
significa "establecer x en 0, llamarprompt
con el valor de establecer x en 0", es decir, 0. Sería equivalente a escribir(x=0,prompt(x))
gs2 , 1 byte
d
(0x64
/sum
), por supuesto, resume todos los bytes en la entrada estándar.fuente
Python 3 - 28 bytes
Ejemplo de ejecución:
Obtiene la entrada de stdin,
map
s laord
función para obtener el valor ASCII de cada carácter,sum
s it yprint
s.fuente
print sum(map(ord,raw_input()))
map(ord,input())
ainput().encode()
. Los objetos de bytes aún se pueden sumar, y se mantiene la misma longitud.Conjunto 8086 (16 bits) -
4741 bytesLos contenidos del
test.com
archivo son:El trabajo real se realiza en los primeros 11 bytes; Necesito el resto para imprimir el resultado en notación decimal.
Código fuente (dar como entrada al
debug.com
ensamblador de DOS ):Algunas notas sobre el código:
fuente
CJam, 3 bytes (suma 260)
Puedes probarlo en línea .
Gracias jimmy23013 por ayudar a cortar 2 caracteres :)
Explicación:
fuente
q1b
Es más corto.Befunge98, 6 bytes, suma: 445
Cualquier intérprete debería estar bien. Yo uso CCBI .
Use de la siguiente manera:
Funciona para caracteres multibyte y cadenas vacías.
Explicación
2j
- saltar sobre las siguientes dos instrucciones (@
y.
- ver más abajo)~
- poner el siguiente personaje en la pila+
- Agregar el valor del código del nuevo carácter a la suma actual. El puntero de instrucción se ajusta al principio y el ciclo se repite.~
encuentra un EOF, invierte la dirección del puntero y se ejecutan las dos instrucciones "ocultas":.
- imprimir la suma@
- salidafuente
Ruby,
1312 bytessum
es una función incorporada que suma los caracteres de una cadena. Resta 10 para dar cuenta de la nueva línea al final degets
valor de retorno '.(Editado 4 años después para cambiar
x-10
a~9+x
... el valor de~9
es-10
, pero nos permite eliminar el espacio entrep
y su argumento, guardando un byte).fuente
p
es un método para generar el valor de depuración de algo en una línea.PowerShell - 27
Ejemplo
fuente
[char[]]"$args"|measure -s
siempre que solo haya una entrada $ arg.Julia -
117 caracteres, suma resultante =943536Como la pregunta permite que la entrada provenga de la fuente que desee, elijo una variable existente. Suponga que
A
contiene la cadena que deseamos evaluar.Como resultado, puede sumar la cadena directamente, y evaluará ... sin embargo, debido a la forma en que se maneja la suma de caracteres, si hay un número impar de caracteres en la cadena, generará un carácter, en lugar de un entero de cualquier tipo. Como tal, lo forzamos a lanzar a int multiplicando por 1.
Versión antigua:
Saldrá en una notación hexadecimal (si la suma es menor que 256, será
0x??
, de lo contrario será 8 byte como0x????????
). Si se usa en el código donde se usa el resultado, funcionará como cualquier otro número (así es como Julia muestra las entradas sin firmar).Para ver el valor del resultado en decimal, encierre lo anterior en
int()
, como enint(sum(A.data))
.Para cualquiera que no conozca a Julia, usted asigna
A
exactamente de la misma manera que hace otras asignaciones a las variables. Entonces,A="Hello World!"
oA="sum(n.data)"
. En el caso de que usted necesita para poner en"
o'
caracteres, hay múltiples opciones, el más fácil de los cuales (ya que evita la necesidad de conocimiento de los matices de los literales de cadena Julia) estáA=readline()
, siguieron simplemente escribiendo en la cadena en STDIN (won' t manejar nuevas líneas, sin embargo). La secuencia de escape para nueva línea es, como de costumbre,\n
pero no creo que pueda usar eso con readline ().fuente
n
? No conozco a Julia en absoluto;)n
aA
para reducir la suma resultante de 988 a 943..data
; pero como son personajes, producen un resultado de personaje para un número impar de caracteres. La multiplicación por 1 corrige eso.K5, 2 bytes (función), 5 bytes (programa)
Función
Programa
No estoy seguro de si K5 se creó antes o después de publicar este desafío. Independientemente ... ¡ESTO ES IMPRESIONANTE!
En K5, si realiza operaciones aritméticas en cadenas, convierte los caracteres a sus códigos ASCII. Entonces, esto solo usa el operador de suma
+/
(en realidad, es más + más).fuente
Matlab / Octave 4 bytes (bonificación: 405)
Este código es una función anónima, que hace el trabajo, tomará una cadena y devolverá el número requerido.
fuente
gs2
respuesta, pero al menos con el mismo enfoque que la respuesta de Julia, aún debería escribirsum(A)
. Creo quesum
solo no está bien (ni siquiera sería un código válido =).Ir (59 caracteres)
Todo en Go es utf8 por defecto. El texto de código en `delímetros ejecutados a través de sí mismo da una salida de: 5399.
fuente
math.Sum
usar conmap
o similarJolf, 2 bytes (no competidor)
Pruébalo aquí!
Umm ... no sé qué más decir.
fuente
Gol> <> , 4 bytes (no competitivos)
Nota: este lenguaje es más nuevo que el desafío.
fuente
Javascript ES6, 41 bytes
¡Gracias a @ETHproductions por 2 bytes guardados!
fuente
_=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x
?Python, 24 bytes
Esto es más corto que cualquier solución de Python hasta ahora: una función anónima sin nombre, que toma la cadena como argumento y devuelve la suma.
Pruébalo en línea!
Primero, lo
x.encode()
transforma en unbytes
objeto. Luego,sum
agrega los valores del código de caracteres. Como se trata de una función lambda, el valor es implícitamente devuelto.Además, uno podría tener
lambda x:sum(map(ord,x))
el mismo número de bytes.fuente
SML
4236Solo agrego otro idioma.
Convierte String en una matriz de caracteres, calcula el número ASCII de cada valor y calcula la suma de todos los números ASCII.
fuente
;
. 36 bytes: tio.run/##DcpBCoAgEAXQq0zRQomiC7ivdYuWEWgRfB2xKby9uXzwHo/…C 32
fuente
main(int argc,char **argv){return(argc?main(0,&(argv[1])):(**argv?**argv+main(0,argv)+((*argv)++?0:0):0));}
(107 caracteres) aunque ignora el primer personaje por alguna razón. Además, los códigos de salida POSIX son solo de 8 bits; en bash,echo $?
.D (función: 60)
Definitivamente no en él para ganarlo.
Asumiendo que no necesita ser un programa completo
Llamado así
Salida:
D (programa: 133)
No cuenta saltos de línea.
Con más espacios en blanco y nombres de variables más largos para facilitar la lectura.
Para admitir saltos de línea en la entrada, podría usar
byLine(KeepTerminator.yes)
, de la manera correcta, para 20 caracteres, o agregar un'\n'
a mi línea, que rompe la entrada de una sola línea y puede dar la suma incorrecta en Windows debido a CRLF, para 18 caracteres.fuente
JavaScript (ES6) 54
5854 bytes gracias a nderscore :fuente
alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
Delfos (
8783)Sin golf
Recorre
S
agregando elord
valor del carácter al resultado. donde x == resultadoEdiciones:
Guardado 4 caracteres cambiando a int64 y cambiando la suma a la suma.
fuente
k (8 caracteres)
Q traducción
Valor de bonificación:
fuente
J (7)
Tan cerca, pero tan lejos ... Oh, bueno, supongo que 7 es lo suficientemente decente, ya que esta respuesta también acepta cadenas vacías. (Estoy basando mi uso de una variable como entrada en la frase
from a file, stdin or whatever
)Explicación:
a.
contiene todos los caracteres ASCII.x i. y
es similar al de pitón[x.index(i) for i in y]
.Por lo tanto, se
a. i. y
conviertey
en una matriz de sus valores ASCII+/
es comosum
:+/1 2 3 4 5 6
significa1+2+3+4+5+6
Todo en acción
Por el bono:
No está mal, supongo.
Bueno, maldita sea.
Gracias @algorithmshark
Gracias @marinus
fuente
b
aA
los resultados en una puntuación de 449.R,
35 caracteres (suma de 3086)26 bytes (suma de 2305)readline()
es un carácter más largo que,scan(,"")
peroscan
divide la entrada en espacios de forma predeterminada.Uso:
fuente
Japt , 6 bytes (no competitivos)
Esta respuesta no es competitiva porque Japt se creó después de publicar este desafío.
Bastante simple. Pruébalo en línea!
Cómo funciona
fuente
¬
una negación de algún tipo?url/interpreter.html#new=1
); todo lo que no use el antiguo juego de caracteres, y todo lo que use usará el nuevo juego de caracteres.PlatyPar , 2 bytes (no competitivos)
Pruébalo en línea !
u
genera una matriz de todos los valores de código de char en la cadena de entrada ys
encuentra su suma.Cuando se ejecuta sobre sí mismo, vuelve
232
.Esto es similar a la respuesta Jolf de Conor , excepto que uso un byte para convertir la cadena en una matriz de códigos de caracteres (que está implícito en Jolf), mientras que usa un byte para recuperar la entrada (que está implícito en PlatyPar).
fuente