Escriba un programa para imprimir la suma de los códigos ascii del programa.

14

Su tarea es escribir un programa para imprimir la suma de los códigos ASCII de los caracteres del programa en sí. No está permitido abrir ningún archivo (está prohibida cualquier entrada, como argumentos de línea de comando, entrada estándar o archivos).

El programa que imprime el número más bajo (es decir, tiene la suma más baja de códigos ASCII) gana.

Aquí hay un ejemplo (no el más corto) de dicho programa escrito en C:

#include <stdio.h>
int main(){
printf("4950");/*i*/
return 0;
}

(sin nueva línea después })

Alexandru
fuente
44
Sería interesante ver una solución quine: una que produzca y sume sus propios bytes.
Joey Adams
1
No es muy desafiante en mi humilde opinión. Puede ser trivialmente bruta forzado, especialmente para los idiomas que simplemente se vierten fichas, como PowerShell, Golfscript, etc.
Joey
2
Voté en contra y el comentario da la razón, por qué. Como he señalado anteriormente, no considero que el número de respuestas sea una indicación de calidad . El hecho de que pueda resolverse fácilmente no lo convierte en un desafío interesante o incluso desafiante. Mi opinión, al menos.
Joey
55
Espere. ¿Qué? Por un lado, te quejas de que la pregunta es fácil y no interesante y luego me rechazas (-2 para mí). Por otro lado, publicas el 25% de las respuestas a esta pregunta (+70 para ti).
Alexandru
44
¿Entonces ves esto como una batalla de reputación? Bien, puedo cambiar fácilmente mis respuestas a CW. En cierto modo, la gran cantidad de respuestas fue una especie de protesta y para mostrar que es trivial producir muchas respuestas. Compare esto, por ejemplo, con la tarea que quería el alfabeto cuatro veces. Además, mi respuesta automática (vinculada a las especificaciones de la tarea) y mi respuesta automática (con la esperanza de mejorar la calidad general del sitio) a menudo están bastante separadas. De todos modos, ¿más feliz ahora que los eliminé? Sin embargo, todavía eran respuestas válidas.
Joey

Respuestas:

10

wc, imprime 0

Alguien dijo "lenguajes felinos", así que ...

Un archivo vacio:



Ejecutar con wc -c file.wc. Con 0 bytes, creo que este es el ganador en la categoría 'no es realmente un lenguaje de programación'.

también

gato, estampados 80 (base 13)

80

Sin nueva línea de terminación, el número 80 13 es equivalente a 104 en decimal. Puedes ir más corto con 60 17 (102 dec), pero pensé que "base 13" valdría más puntos geek.

EDITAR: Nuevo wcejemplo, este se puede ejecutar como un programa.

#!/usr/bin/wc
ÿÿzw17

(Como se codifica en Latin-1, el ÿ es un byte con valor 255)

La suma de bytes es 2223, la salida es:

  2  2 23 ./w
Aleatorio832
fuente
Pero wc debería leer un archivo que contenga un byte 0 para producir el Número 0, no uno vacío. Vacío no es nulo.
usuario desconocido
Usuario: Se podría argumentar que la suma de valores en un conjunto vacío sigue siendo 0. Sin embargo, wc -cestá prohibido en la pregunta de todos modos.
Joey
1
La única cláusula que parece hacerlo es "Cualquier entrada, como los argumentos de la línea de comandos ... está prohibida", así que deje fuera de -c, luego se imprime 0 0 0(si el archivo que se pasa como un archivo lo prohíbe, entonces todos los lenguajes de secuencias de comandos son también prohibido)
Random832
2
+1 para wc, -1 para hacer trampa base, +1 para hacer bromas en base 13.
Yo diría que wces una aplicación, no un idioma.
Thomas Eding
14

PHP, m4 y otros lenguajes tipo gato: 150

150

Encontré esta solución usando un programa simple de Haskell para forzarlo:

f :: String -> Bool
f s = (read s :: Int) == (sum . map fromEnum) s

main = mapM_ print [filter f $ sequence $ replicate n ['0'..'9'] | n <- [1..10]]
Joey Adams
fuente
Supongo que este es el más corto absoluto.
Alexandru
2
@Alexandru: No necesariamente. Puede haber un programa que tenga uno o dos caracteres que imprima correctamente la suma utilizando algunas funciones integradas, por ejemplo, 5!en J.
mellamokb
@mellamokb La suma de los caracteres ASCII 5!es 86, no 125.
Peter Olson
3
@ Peter: De hecho, estaba mostrando un ejemplo del tipo de solución que podría ser menor que 150, pero no una solución real. Todavía no he encontrado uno (y por cierto, 5! Es 120, no 125) :-)
mellamokb
12

Brainf * ck, 255

-.¤

Esto no imprimirá el número 255, sino el 255 ° carácter ASCII.

Esto podría considerarse trampa porque el compilador BF omite el ¤.

Peter Olson
fuente
1
Tim: El número más bajo gana, no el programa más corto. En cualquier caso, no creo que ¤sea ​​una trampa, ya que es solo un comentario normal.
Joey
Obtienes una puntuación más baja restando un poco más: ----. ␦
Helena
8

Javascript, imprime 9432 6902

(function a(){b="("+a+")()";c=0;for(i=0;i<b.length;i++){c+=b.charCodeAt(i-0)}alert(c)})()

Esta es la primera solución quine hasta ahora, a menos que no entienda la solución Haskell correctamente.

Peter Olson
fuente
Ese código de Haskell solo está buscando el número más pequeño que será igual a la suma de los códigos ASCII de su dígito. Supongo que la mayoría de las respuestas aquí fueron hechas por fuerza bruta.
Joey
Se puede reducir aún más de 89 a 86 bytes con:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest
7

Potencia Shell

((310))

impresiones 310.

Joey
fuente
6

Perl, 500

say     500

Hay dos pestañas entre sayy 500. :)

(Corre con una sola línea perl -E, por lo que puedo decir, esto está dentro de las reglas)

swilliams
fuente
1
Me gustan las 2 pestañas
Steve P
5

Ruby, impresiones 380

p (380)

No hay nueva línea final después del paréntesis de cierre.

Ventero
fuente
5

Potencia Shell

(230)

imprime 230, obviamente.

Joey
fuente
5

Potencia Shell

-(-320)

impresiones 320.

Joey
fuente
5

J 150

?!6

Con la advertencia de que será correcto solo 1/720 del tiempo.

mellamokb
fuente
3
Aleatorio en factorial 6? Hmmm, no lo creo, Tim.
MPelletier
4

Python, impresiones 781

print  781

Dos espacios

FogleBird
fuente
1
Me gustan especialmente los 2 espacios.
Steve P
3

Element, 220

Este es un lenguaje de mi propia creación, y está documentado en mi respuesta a otra pregunta aquí .

220`!

Aquí hay un tutorial de cómo funciona: 220empuja ese número a la pila. Luego, `` outputs the top element of the stack. The! 'Realiza una lógica no en la pila de control (una pila separada), configurándola en 1.

PhiNotPi
fuente
2

PHP, imprime 4440

<?php
for($x=0;$x<15000;$x++)if($x==4440){printf($x);exit;}
rintaun
fuente
2

PowerShell, imprime 3902

&{[char[]]$myinvocation.Line|%{$s+=+$_};$s}

Busca en la línea actualmente ejecutada y suma los valores de los puntos de código.

Joey
fuente
2

INTERCAL, 1572

¡No puedo creer que nadie haya hecho INTERCAL todavía!

DOREADOUT#1572


DOGIVEUP

(Incluye nueva línea de terminación). Este programa imprime MDLXXII.

caja de pan
fuente
1

Perl, imprime 690

die 690 . $/

O, si podemos publicar one-liners ( perl -E)

say(570)

Impresiones 570.

(No hay nuevas líneas finales)

swilliams
fuente
1

JavaScript 1750 900 860 790

alert(790)

(Devolución de carro (CR, \ro \x0D) después o antes del programa)

Estos programas se encuentran por fuerza bruta.

Valores más grandes:

alert(860)%0
alert(900)&&6
document.write(1750)
JiminP
fuente
1

Java -128

Sé que leer stdin no está permitido, pero quería proporcionar un ejemplo de cómo calculé mi puntaje.

Mi código resume el recuento ASCII de sí mismo pasado en stdin e imprime -128

class P{public static void main(String[]z)throws Exception{byte v=0;int b=0;while((b=System.in.read())!=-1){v+=(byte)b;}System.out.println(v);}}

Sin nueva línea final

Steve P
fuente
Creo que tu suma se desborda.
Alfa
1

Ruby, imprime 300

p   300

Hay un espacio y una pestaña entre el py el 300. Sin nueva línea final.

Lowjacker
fuente
1

Archivos por lotes, 500

ECHO  500

Además, observe los dos espacios entre "ECHO" (mayúsculas a propósito) y "500".

Alfa
fuente
1

C, 1700

Extraño: nadie ha publicado una solución C todavía (excluyendo el ejemplo en la pregunta).

main(R){puts("1700");}

No hay línea nueva al final.

Ugoren
fuente
1

K ( 923 796 795 746 513)

No estoy seguro de si esto cae en conflicto con las reglas o no. No usa stdin, se abre como un vector de bytes y sumas.

+/1:.z.f

Uso:

q scriptname.k

editar 2012.05.08 - no es necesario hsym el identificador de archivo 2012.05.09 - guardado 1 punto al convertir en byte en lugar de int

2012.05.17 - Puede guardar una carga de puntos leyendo el archivo como bytestream en lugar de texto:

skeevey
fuente
1

J, 198

33*6

y

6*33

Lo encontré por la fuerza bruta. En J no hay soluciones de 1 o 2 caracteres, y la única solución de 3 caracteres es 150. Salvo cualquier error en mi búsqueda, tampoco hay otras soluciones de 4 caracteres.


Desde el canal #jsoftware IRC, también tuvimos <.%:10!20429 y una quine de conteo automático +/a.i.2#(,{:)'+/a.i.2#(,{:)'''en 1706.

AlliedEnvy
fuente
0

aC 1160

invocado con eco y espacios en blanco, toda la cadena, incluidos 7 espacios en blanco, echo 1160 | bctiene un bytes de 1160.

echo 1160    |  bc

150 funciona para bc también:

echo "150" > 150
bc -q 150
150
usuario desconocido
fuente
0

D, 9752

este en realidad lo calcula similar a mi quine

enum c=q{import std.stdio;void main(){int s;foreach(d;"enum c=q{"~c~"};mixin(c);")s+=d;write(s);}};mixin(c);
monstruo de trinquete
fuente
0

Espacio en blanco, 369

Este programa de 20 caracteres imprime el número 369, que es la suma de los valores ascii de sus caracteres (que son caracteres Tab, Space, Linefeed, aquí simbolizados por T, S, L, respectivamente):

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10, habiendo 7 pestañas, 8 espacios y 5 avances de línea).

res
fuente
0

Haskell, 7518

Una pequeña modificación de mi quine :

main=print.sum.map fromEnum$q++show q;q="main=print.sum.map fromEnum$q++show q;q="
AardvarkSoup
fuente
0

Brainf * ck, 253 (o 252)

Ligera mejora en la solución de Peter Olson:

---.H

Siempre que se permitan no imprimibles, se puede mejorar aún más agregando ay -reemplazando Hpor el código 26 ASCII.

Pontus von Brömssen
fuente
0

Scala 1090

println (1090)

usuario desconocido
fuente
0

Python, 5440

La puntuación más alta gana, ¿verdad?

import sys
print sum(ord(i)for i in open(sys.argv[0]).read())

Solo pensé que lo publicaría de todos modos porque es una solución a medias.

Joel Cornett
fuente