Écrire un programme pour imprimer la somme des codes ascii du programme

14

Votre tâche consiste à écrire un programme pour imprimer la somme des codes ASCII des caractères du programme lui-même. Vous n'êtes pas autorisé à ouvrir un fichier (toute entrée telle que les arguments de ligne de commande, l'entrée standard ou les fichiers est interdite).

Le programme qui imprime le plus petit nombre (c'est-à-dire qui a la plus petite somme de codes ASCII) gagne.

Voici un exemple (pas le plus court) d'un tel programme écrit en C:

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

(pas de nouvelle ligne après })

Alexandru
la source
4
Il serait intéressant de voir une solution quine: une solution qui produit et additionne ses propres octets.
Joey Adams
1
Pas très difficile à mon humble avis. Il peut être brutalement forcé, en particulier pour les langages qui vident simplement des jetons, tels que PowerShell, Golfscript, etc.
Joey
2
J'ai rétrogradé et le commentaire donne la raison, pourquoi. Comme je l'ai noté précédemment, je ne considère pas le nombre de réponses comme une indication de qualité . Ce n'est pas parce qu'il peut être facilement résolu que cela constitue un défi intéressant, voire difficile. Mon avis, au moins.
Joey
5
Attendez. Quelle? D'une part, vous vous plaignez que la question est facile et pas intéressante et ensuite vous me downvote (-2 pour moi). En revanche vous postez 25% des réponses à cette question (+70 pour vous).
Alexandru
4
Donc, vous voyez cela comme une bataille de réputation? Très bien, je peux facilement changer mes réponses en CW. D'une certaine manière, le grand nombre de réponses était un peu une protestation et pour montrer qu'il est trivial de produire beaucoup de réponses. Comparez cela par exemple à la tâche qui voulait quatre fois l'alphabet. De plus, mon auto-réponse (lié aux spécifications de la tâche) et mon auto-commentaire (espérant améliorer la qualité générale du site) sont souvent assez séparés. Quoi qu'il en soit, plus heureux maintenant que je les ai supprimés? C'étaient quand même des réponses valables.
Joey

Réponses:

10

wc, imprime 0

Quelqu'un a dit "des langues de chat", alors ...

Un fichier vide:



Exécutez avec wc -c file.wc. À 0 octet, je pense que c'est le gagnant dans la catégorie «pas vraiment un langage de programmation».

Aussi

chat, imprime 80 (base 13)

80

Pas de fin de ligne, le nombre 80 13 équivaut à 104 en décimal. Vous pouvez aller plus court avec 60 17 (102 déc), mais je pensais que "base 13" valait plus de points geek.

EDIT: Nouvel wcexemple, celui-ci peut être exécuté comme un programme.

#!/usr/bin/wc
ÿÿzw17

(Comme codé en latin-1 - le ÿ est un octet avec la valeur 255)

La somme des octets est 2223, la sortie est:

  2  2 23 ./w
Aléatoire832
la source
Mais wc devrait lire un fichier, contenant un octet 0 pour produire le numéro 0, pas un vide. Vide n'est pas nul.
utilisateur inconnu
utilisateur: On pourrait faire valoir que la somme des valeurs dans un ensemble vide est toujours 0. Néanmoins, wc -cest de toute façon interdit dans la question.
Joey
1
La seule clause qui semble le faire est "Toute entrée telle que les arguments de ligne de commande ... est interdite" alors laissez le -c, puis il s'imprime 0 0 0(si le fichier transmis en tant que fichier l'interdit, alors tous les langages de script sont également interdit)
Random832
2
+1 pour wc, -1 pour la triche de base, +1 pour faire des blagues en base 13.
Je dirais que wcc'est une application, pas une langue.
Thomas Eding
14

PHP, m4 et autres langages de type chat: 150

150

J'ai trouvé cette solution en utilisant un simple programme Haskell pour la forcer brutalement:

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
la source
Je suppose que c'est le plus court absolu.
Alexandru
2
@Alexandru: Pas nécessairement. Il peut y avoir un programme de un ou deux caractères qui imprime correctement la somme à l'aide de certaines fonctions intégrées, comme 5!dans J.
mellamokb
@mellamokb La somme des caractères ASCII 5!est de 86, pas 125.
Peter Olson
3
@Peter: En effet, je montrais un exemple du type de solution qui pourrait être inférieure à 150, mais pas une solution réelle. Je n'en ai pas encore trouvé (et btw, 5! Est 120, pas 125) :-)
mellamokb
12

Brainf * ck, 255

-.¤

Cela n'imprimera pas le nombre 255, mais plutôt le 255e caractère ASCII.

Cela peut être considéré comme de la triche car le compilateur BF ignore le ¤.

Peter Olson
la source
1
Tim: Le nombre le plus bas gagne, pas le programme le plus court. En tout cas, je ne pense pas que ce ¤soit de la triche, car c'est juste un commentaire normal.
Joey
Vous obtenez un score inférieur en soustrayant un peu plus: ----. ␦
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)})()

C'est la première solution quine jusqu'à présent, à moins que je ne comprenne pas correctement celle de Haskell .

Peter Olson
la source
Ce code Haskell recherche simplement le plus petit nombre qui sera égal à la somme des codes ASCII de ses chiffres. Je suppose que la plupart des réponses ici ont été faites par force brute.
Joey
Peut encore être réduit de 89 à 86 octets avec:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest
7

PowerShell

((310))

imprime 310.

Joey
la source
6

Perl, 500

say     500

Il y a deux onglets entre sayet 500. :)

(Exécuter en monoplace avec perl -E, pour autant que je sache, cela est dans les règles)

swilliams
la source
1
J'aime les 2 onglets
Steve P
5

Rubis, imprime 380

p (380)

Pas de retour à la ligne après la parenthèse fermante.

Ventero
la source
5

PowerShell

(230)

imprime 230, évidemment.

Joey
la source
5

PowerShell

-(-320)

imprime 320.

Joey
la source
5

J, 150

?!6

Avec la mise en garde qu'il ne sera correct que 1 / 720ème du temps.

mellamokb
la source
3
Aléatoire sur factoriel 6? Hmmm, je ne pense pas, Tim.
MPelletier
4

Python, estampes 781

print  781

Deux espaces.

FogleBird
la source
1
J'aime particulièrement les 2 espaces.
Steve P
3

Élément, 220

Ceci est un langage de ma propre création, et il est documenté sur ma réponse à une autre question ici .

220`!

Voici une procédure pas à pas sur la façon dont cela fonctionne: Le 220pousse ce nombre sur la pile. Ensuite, le `` outputs the top element of the stack. The! `Exécute alors un pas logique sur la pile de contrôle (une pile séparée), en le mettant à 1.

PhiNotPi
la source
2

PHP, imprime 4440

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

PowerShell, imprime 3902

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

Examine la ligne actuellement exécutée et additionne les valeurs des points de code.

Joey
la source
2

INTERCAL, 1572

Je ne peux pas croire que personne n'ait encore fait INTERCAL!

DOREADOUT#1572


DOGIVEUP

(Inclut la fin de la nouvelle ligne.) Ce programme imprime MDLXXII.

boite à pain
la source
1

Perl, imprime 690

die 690 . $/

Ou, si nous pouvons poster des one-liners ( perl -E)

say(570)

Imprime 570.

(Pas de retour à la ligne)

swilliams
la source
1

JavaScript, 1750 900 860 790

alert(790)

(Retour chariot (CR, \rou \x0D) après ou avant le programme)

Ces programmes sont détectés par forçage brutal.

De plus grandes valeurs:

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

Java -128

Je sais que lire stdin n'est pas autorisé mais je voulais donner un exemple de la façon dont j'ai calculé mon score.

Mon code résume le nombre ASCII de lui-même transmis sur stdin et affiche -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);}}

Pas de nouvelle ligne de fuite

Steve P
la source
Je pense que votre somme déborde.
Alpha
1

Rubis, imprime 300

p   300

Il y a un espace et une tabulation entre le pet le 300. Pas de nouvelle ligne de fin.

Lowjacker
la source
1

Fichiers batch, 500

ECHO  500

Notez également les deux espaces entre "ECHO" (en majuscule exprès) et "500".

Alpha
la source
1

C, 1700

Étrange - personne n'a encore publié de solution C (à l'exception de l'exemple de la question).

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

Pas de nouvelle ligne à la fin.

ugoren
la source
1

K ( 923 796 795 746 513)

Je ne sais pas si cela va à l'encontre des règles ou non. Il n'utilise pas stdin, il s'ouvre comme un vecteur d'octets et de sommes.

+/1:.z.f

Usage:

q scriptname.k

edit 2012.05.08 - pas besoin d'hsymer le descripteur de fichier 2012.05.09 - enregistré 1 point en convertissant en octet au lieu de int

17.05.2012 - Peut enregistrer une charge de points en lisant le fichier comme bytestream plutôt que du texte:

skeevey
la source
1

J, 198

33*6

et

6*33

Je l'ai trouvé par force brute. En J, il n'y a pas de solutions à 1 ou 2 caractères, et la seule solution à 3 caractères est 150. À moins de bogues dans ma recherche, il n'y a pas d'autre solution à 4 caractères.


Du canal IRC #jsoftware, nous avions également <.%:10!20à 429 et une quine d'auto-comptage +/a.i.2#(,{:)'+/a.i.2#(,{:)'''à 1706.

AlliedEnvy
la source
0

bc 1160

invoqué avec écho et blancs, la chaîne entière, y compris 7 blancs, echo 1160 | bca un octet de 1160.

echo 1160    |  bc

150 œuvres pour bc aussi:

echo "150" > 150
bc -q 150
150
Utilisateur inconnu
la source
0

D, 9752

celui-ci le calcule en fait comme mon 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);
monstre à cliquet
la source
0

Espace, 369

Ce programme de 20 caractères imprime le nombre 369, qui est la somme des valeurs ascii de ses caractères (qui sont des caractères Tab, Space, Linefeed, ici symbolisés respectivement par T, S, L):

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10, il y a 7 tabulations, 8 espaces et 5 sauts de ligne.)

res
la source
0

Haskell, 7518

Une petite modification de ma quine :

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

Brainf * ck, 253 (ou 252)

Légère amélioration de la solution de Peter Olson:

---.H

Pourvu que les produits non imprimables soient autorisés, il peut être encore amélioré en ajoutant un -et en le remplaçant Hpar le code ASCII 26.

Pontus von Brömssen
la source
0

Scala 1090

println (1090)

Utilisateur inconnu
la source
0

Python, 5440

Le score le plus élevé l'emporte, non?

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

Je pensais juste que je le publierais de toute façon, car c'est une solution quine à mi-chemin.

Joel Cornett
la source