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 })


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

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]]

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 ¤.


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 .


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


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)


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.


5

PowerShell

(230)

imprime 230, obviamente.



5

J, 150

?!6

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


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


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.


2

PHP, impressões 4440

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

2

PowerShell, imprime 3902

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

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


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.


1

Perl, impressões 690

die 690 . $/

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

say(570)

Imprime 570.

(Sem novas linhas à direita)


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)

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


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.


1

Arquivos em lote, 500

ECHO  500

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


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.


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:


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.


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

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);

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.)


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="

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.



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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.