Escreva um programa para imprimir a soma dos códigos ascii do programa

14

Sua tarefa é escrever um programa para imprimir a soma dos códigos ASCII dos caracteres do próprio programa. Você não tem permissão para abrir nenhum arquivo (qualquer entrada como argumentos de linha de comando, entrada ou arquivos padrão é proibida).

O programa que imprime o número mais baixo (ou seja, possui a menor soma de códigos ASCII) vence.

Aqui está um exemplo (não o mais curto) de um programa escrito em C:

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

(nenhuma nova linha depois })

Alexandru
fonte
4
Seria interessante ver uma solução quine: uma que produz e soma seus próprios bytes.
Joey Adams
1
Imho não muito desafiador. Pode ser trivialmente forçado, especialmente para idiomas que simplesmente despejam tokens, como PowerShell, Golfscript etc.
Joey
2
Fiz voto negativo e o comentário explica o motivo. Como observei antes, não considero o número de respostas uma indicação de qualidade . Só porque ele pode ser facilmente resolvido, não faz deste um desafio interessante ou até desafiador. Minha opinião, pelo menos.
Joey
5
Esperar. O que? Por um lado, você se queixa de que a pergunta é fácil e não é interessante e depois me rebate (-2 para mim). Por outro lado, você publica 25% das respostas nesta pergunta (+70 para você).
Alexandru
4
Então você vê isso como uma batalha de reputação? Tudo bem, eu posso facilmente mudar minhas respostas para a CW. De certa forma, o grande número de respostas foi um protesto e mostrar que é trivial produzir muitas respostas. Compare isso, por exemplo, com a tarefa que queria o alfabeto quatro vezes. Além disso, meu eu de resposta (vinculado às especificações da tarefa) e meu eu de comentário (na esperança de melhorar a qualidade geral do site) geralmente são bastante separados. Enfim, mais feliz agora que eu os apaguei? Ainda eram respostas válidas.
Joey

Respostas:

10

wc, imprime 0

Alguém disse "línguas de gato", então ...

Um arquivo vazio:



Execute com wc -c file.wc. Com 0 bytes, acho que esse é o vencedor na categoria 'não é realmente uma linguagem de programação'.

Além disso

gato, imprime 80 (base 13)

80

Sem nova linha final, o número 80 13 é equivalente a 104 em decimal. Você pode ir mais baixo com 60 17 (102 dec), mas imaginei que "base 13" valeria mais pontos de nerd.

EDIT: Novo wcexemplo, este pode ser executado como um programa.

#!/usr/bin/wc
ÿÿzw17

(Conforme codificado em latim-1 - o ÿ é um byte com o valor 255)

A soma dos bytes é 2223, a saída é:

  2  2 23 ./w
Random832
fonte
Mas o wc deve ler um arquivo, contendo um byte 0 para produzir o número 0, e não um vazio. Vazio não é nulo.
usuário desconhecido
usuário: Pode-se argumentar que a soma dos valores em um conjunto vazio ainda é 0. No entanto, wc -cé proibido na pergunta de qualquer maneira.
Joey
1
A única cláusula que parece fazer isso é "Qualquer entrada, como argumentos de linha de comando ... é proibida", então deixe de lado -c e ela será impressa 0 0 0(se o arquivo que está sendo passado como arquivo o proíbe, todas as linguagens de script são também proibido)
Random832
2
1 por wc, -1 para o engano de base, um para fazer piadas da base 13.
Eu diria que wcé uma aplicação, não uma linguagem.
Thomas Eding
14

PHP, m4 e outras linguagens semelhantes a gatos: 150

150

Encontrei esta solução usando um programa simples de Haskell para forçá-la a força bruta:

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
fonte
Eu acho que esse é o mais curto possível.
Alexandru
2
@Alexandru: Não necessariamente. Pode haver um programa com um ou dois caracteres que imprima corretamente a soma usando algumas funções 5!
internas
@mellamokb A soma dos caracteres ASCII em 5!é 86, não 125.
Peter Olson
3
@ Peter: Na verdade, eu estava mostrando um exemplo do tipo de solução que pode ser menor que 150, mas não uma solução real. Eu não encontrei um ainda :-) (e btw, 5 é 120, não 125!)
mellamokb
12

Brainf * ck, 255

-.¤

Isso não imprimirá o número 255, mas o 255º caractere ASCII.

Isso pode ser considerado trapaça porque o compilador BF pula sobre ¤.

Peter Olson
fonte
1
Tim: O número mais baixo vence, não o programa mais curto. De qualquer forma, não acho que isso ¤seja trapaça, pois é apenas um comentário normal.
Joey
Você ganha uma pontuação mais baixa subtraindo um pouco mais: ---- ␦.
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 é a primeira solução de quine até agora, a menos que eu não esteja entendendo corretamente a de Haskell .

Peter Olson
fonte
Esse código Haskell está apenas procurando o menor número que será igual à soma dos códigos ASCII do seu dígito. Eu acho que a maioria das respostas aqui foram feitas por força bruta.
Joey
Pode ser reduzido ainda mais de 89 para 86 bytes com:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest 9/14
7

PowerShell

((310))

imprime 310.

Joey
fonte
6

Perl, 500

say     500

Existem duas guias entre saye 500. :)

(Execute como uma linha com perl -E, até onde eu sei, isso está dentro das regras)

Swilliams
fonte
1
Eu gosto das 2 abas
Steve P
5

Ruby, impressões 380

p (380)

Sem nova linha após o parêntese de fechamento.

Ventero
fonte
5

PowerShell

(230)

imprime 230, obviamente.

Joey
fonte
5

PowerShell

-(-320)

imprime 320.

Joey
fonte
5

J, 150

?!6

Com a ressalva de que estará correto apenas 1/720 das vezes.

mellamokb
fonte
3
Aleatório no fatorial 6? Hum, acho que não, Tim.
MPelletier
4

Python, imprime 781

print  781

Dois espaços.

FogleBird
fonte
1
Eu gosto especialmente dos 2 espaços.
Steve P
3

Element, 220

Esta é uma linguagem de minha própria criação e está documentada na minha resposta a outra pergunta aqui .

220`!

Aqui está uma explicação passo a passo de como ele funciona: O 220número é colocado na pilha. Em seguida, o `` outputs the top element of the stack. The! `Executa uma lógica que não está na pilha de controle (uma pilha separada), configurando-a como 1.

PhiNotPi
fonte
2

PHP, impressões 4440

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

PowerShell, imprime 3902

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

Examina a linha atualmente executada e soma os valores do ponto de código.

Joey
fonte
2

INTERCAL, 1572

Ainda não acredito que ninguém fez INTERCAL!

DOREADOUT#1572


DOGIVEUP

(Inclui o encerramento da nova linha.) Este programa imprime o MDLXXII.

caixa de pão
fonte
1

Perl, impressões 690

die 690 . $/

Ou, se podemos publicar one-liners ( perl -E)

say(570)

Imprime 570.

(Sem novas linhas à direita)

Swilliams
fonte
1

JavaScript, 1750 900 860 790

alert(790)

(Retorno de carro (CR \rou \x0D) após ou antes do programa)

Esses programas são encontrados por força bruta.

Valores maiores:

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

Java -128

Sei que ler stdin não é permitido, mas queria fornecer um exemplo de como calculei minha pontuação.

Meu código resume a contagem ASCII de si mesma passada em 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);}}

Nenhuma nova linha à direita

Steve P
fonte
Eu acho que sua soma está transbordando.
Alpha
1

Ruby, impressões 300

p   300

Há um espaço e uma guia entre o pe o 300. Nenhuma nova linha à direita.

Lowjacker
fonte
1

Arquivos em lote, 500

ECHO  500

Além disso, observe os dois espaços entre "ECHO" (maiúscula de propósito) e "500".

Alfa
fonte
1

C, 1700

Estranho - ninguém postou uma solução C ainda (excluindo o exemplo na pergunta).

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

Nenhuma nova linha no final.

Ugoren
fonte
1

K ( 923 796 795 746 513)

Não tenho certeza se isso entra em conflito com as regras ou não. Ele não usa stdin, ele se abre como um vetor de bytes e somas.

+/1:.z.f

Uso:

q scriptname.k

editar 2012.05.08 - não é necessário hsym o identificador de arquivo 2012.05.09 - salvou 1 ponto convertendo para byte em vez de int

17/05/2012 - Pode salvar uma carga de pontos lendo o arquivo como bytestream em vez de texto:

skeevey
fonte
1

J, 198

33*6

e

6*33

Encontrei por força bruta. Em J, não existem soluções de 1 ou 2 caracteres, e a única solução de 3 caracteres é 150. Com exceção de erros na minha pesquisa, também não há outras soluções de 4 caracteres.


No canal #jsoftware IRC, também tínhamos <.%:10!20429 e uma solução de contagem automática +/a.i.2#(,{:)'+/a.i.2#(,{:)'''em 1706.

AlliedEnvy
fonte
0

bc 1160

invocada com eco e espaços em branco, toda a String, incluindo 7 espaços em branco, echo 1160 | bcpossui um soma de bytes de 1160.

echo 1160    |  bc

150 também funcionam para bc:

echo "150" > 150
bc -q 150
150
Usuário desconhecido
fonte
0

D, 9752

este realmente calcula semelhante ao meu 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);
catraca arrepiante
fonte
0

Espaço em branco, 369

Este programa de 20 caracteres imprime o número 369, que é a soma dos valores ascii de seus caracteres (que são caracteres de tabulação, espaço e avanço de linha, aqui simbolizados por T, S, L, respectivamente):

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10, sendo 7 Tabs, 8 Spaces e 5 Linefeeds.)

res
fonte
0

Haskell, 7518

Uma pequena modificação do meu quine :

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

Brainf * ck, 253 (ou 252)

Ligeira melhoria na solução de Peter Olson:

---.H

Desde que não imprimíveis sejam permitidos, ele pode ser aprimorado ainda mais adicionando um -e substituindo Hpelo código ASCII 26.

Pontus von Brömssen
fonte
0

Scala 1090

impressão (1090)

Usuário desconhecido
fonte
0

Python, 5440

Maior pontuação ganha, certo?

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

Eu apenas pensei em publicá-lo de qualquer maneira b / c é uma solução quinine a meio caminho.

Joel Cornett
fonte