Napisz program, aby wydrukować sumę kodów ascii programu

14

Twoim zadaniem jest napisanie programu, który wydrukuje sumę kodów ASCII znaków samego programu. Nie wolno otwierać żadnego pliku (Wszelkie dane wejściowe, takie jak argumenty wiersza poleceń, standardowe dane wejściowe lub pliki są zabronione).

Program, który drukuje najniższą liczbę (tzn. Ma najniższą sumę kodów ASCII) wygrywa.

Oto przykład (nie najkrótszy) takiego programu napisanego w C:

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

(brak nowej linii po })

Alexandru
źródło
4
Ciekawie byłoby zobaczyć rozwiązanie quine: takie, które produkuje i sumuje własne bajty.
Joey Adams,
1
Niezbyt trudne imho. Może być trywialnie wymuszony, szczególnie w przypadku języków, które po prostu zrzucają tokeny, takich jak PowerShell, Golfscript itp.
Joey
2
Przegłosowałem i komentarz podaje powód, dlaczego. Jak zauważyłem wcześniej, nie uważam liczby odpowiedzi za wskaźnik jakości . To, że można go łatwo rozwiązać, nie czyni z tego interesującego, a nawet trudnego wyzwania. Przynajmniej moja opinia.
Joey,
5
Czekać. Co? Z jednej strony narzekasz, że pytanie jest łatwe i nie interesujące, a potem głosujesz za mną (-2 dla mnie). Z drugiej strony publikujesz 25% odpowiedzi na to pytanie (+70 za ciebie).
Alexandru
4
Widzisz to jako bitwę o reputację? Dobrze, mogę łatwo zmienić swoje odpowiedzi na CW. W pewnym sensie duża liczba odpowiedzi była trochę protestem i pokazaniem, że wyrzucenie wielu odpowiedzi jest banalne. Porównaj to na przykład z zadaniem, które chciało alfabetu cztery razy. Również moje samo odpowiadanie (zgodnie ze specyfikacją zadania) i moje komentowanie (mając nadzieję na poprawę ogólnej jakości witryny) są często dość osobne. W każdym razie szczęśliwszy, że je usunąłem? Jednak wciąż były poprawnymi odpowiedziami.
Joey,

Odpowiedzi:

10

wc, drukuje 0

Ktoś powiedział „języki podobne do kotów”, więc ...

Pusty plik:



Wykonaj za pomocą wc -c file.wc. Przy 0 bajtach myślę, że jest to zwycięzca w kategorii „nie do końca język programowania”.

Również

kot, drukuje 80 (baza 13)

80

Bez kończącej nowej linii, liczba 80 13 jest równa 104 w systemie dziesiętnym. Możesz skrócić z 60 17 (102 dec), ale pomyślałem, że „baza 13” byłaby warta więcej punktów maniaków.

EDYCJA: Nowy wcprzykład, ten można uruchomić jako program.

#!/usr/bin/wc
ÿÿzw17

(Zgodnie z kodowaniem w Latin-1 - ÿ jest bajtem o wartości 255)

Suma bajtów to 2223, dane wyjściowe to:

  2  2 23 ./w
Losowo 832
źródło
Ale wc powinien odczytać plik zawierający 0 bajtów, aby wygenerować liczbę 0, a nie pustą. Pusty nie ma wartości NULL.
użytkownik nieznany
użytkownik: Można argumentować, że suma wartości w pustym zestawie wciąż wynosi 0. Niemniej jednak wc -cw pytaniu jest to zabronione.
Joey
1
Jedyną klauzulą, która wydaje się to robić, jest „Wszelkie dane wejściowe, takie jak argumenty wiersza poleceń ... są zabronione”, więc należy pominąć -c, a następnie drukuje 0 0 0(jeśli plik przekazywany jako plik tego zabrania, to wszystkie języki skryptowe są również zabronione)
Random832
2
+1 za wc, -1 za podstawowe oszukiwanie, +1 za żarty w bazie 13.
Powiedziałbym, że wcto aplikacja, a nie język.
Thomas Eding,
14

PHP, m4 i inne języki podobne do kota: 150

150

Znaleźć to rozwiązanie za pomocą prostego programu Haskell, aby użyć siły:

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
źródło
Myślę, że jest to absolutnie najkrótsza.
Alexandru
2
@Alexandru: Niekoniecznie. Może istnieć program o długości jednego lub dwóch znaków, który poprawnie drukuje sumę przy użyciu niektórych wbudowanych funkcji, powiedzmy jak 5!w J.
mellamokb
@mellamokb Suma znaków ASCII 5!wynosi 86, a nie 125.
Peter Olson
3
@Peter: Rzeczywiście, ja pokazano przykład rodzaju roztworu, który może być mniejszy niż 150, ale nie jest to praktyczne rozwiązanie. Jeszcze go nie znalazłem (a przy okazji 5 to 120, a nie 125) :-)
mellamokb
12

Brainf * ck, 255

-.¤

Nie wypisze to liczby 255, ale 255. znak ASCII.

Można to uznać za oszustwo, ponieważ kompilator BF przeskakuje the.

Peter Olson
źródło
1
Tim: Wygrywa najniższa liczba, a nie najkrótszy program. W każdym razie nie sądzę, że ¤to oszustwo, ponieważ jest to zwykły komentarz.
Joey
Otrzymujesz niższy wynik, odejmując trochę więcej: ----. ␦
Helena
8

JavaScript, drukuje 9432 6902

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

Jest to pierwsze jak dotąd rozwiązanie quine, chyba że nie rozumiem poprawnie rozwiązania Haskell .

Peter Olson
źródło
Ten kod Haskell szuka właśnie najmniejszej liczby, która będzie równa sumie kodów ASCII jego cyfry. Wydaje mi się, że większość odpowiedzi tutaj padła z użyciem brutalnej siły.
Joey,
Można jeszcze bardziej zmniejszyć z 89 do 86 bajtów za pomocą:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest
7

PowerShell

((310))

drukuje 310.

Joey
źródło
6

Perl, 500

say     500

Istnieją dwie zakładki między sayi 500. :)

(Uruchom jako jednowierszowy z perl -E, o ile mogę stwierdzić, że jest to zgodne z zasadami)

Swilliams
źródło
1
Podobają mi się 2 zakładki
Steve P.
5

Rubin, drukuje 380

p (380)

Brak końcowego znaku nowej linii po nawiasie zamykającym.

Ventero
źródło
5

PowerShell

(230)

drukuje 230, oczywiście.

Joey
źródło
5

PowerShell

-(-320)

drukuje 320.

Joey
źródło
5

J, 150

?!6

Z zastrzeżeniem, że będzie to poprawne tylko 1/ 720 czasu.

mellamokb
źródło
3
Losowo na silniku 6? Hmmm, nie sądzę, Tim.
MPelletier
4

Python, drukuje 781

print  781

Dwie spacje.

FogleBird
źródło
1
Szczególnie podoba mi się 2 spacje.
Steve P.,
3

Element, 220

To jest język mojego własnego stworzenia i jest udokumentowany w mojej odpowiedzi na inne pytanie tutaj .

220`!

Oto instrukcja jego działania: 220wypycha tę liczbę na stos. Następnie outputs the top element of the stack. Theznak `` ! '' Wykonuje logiczne działanie na stosie kontrolnym (osobny stos), ustawiając go na 1.

PhiNotPi
źródło
2

PHP, drukuje 4440

<?php
for($x=0;$x<15000;$x++)if($x==4440){printf($x);exit;}
rintaun
źródło
2

PowerShell, drukuje 3902

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

Sprawdza aktualnie uruchomioną linię i sumuje wartości punktów kodowych.

Joey
źródło
2

INTERCAL, 1572

Nie mogę uwierzyć, że nikt jeszcze nie zrobił INTERCAL!

DOREADOUT#1572


DOGIVEUP

(Obejmuje zakończenie nowej linii.) Ten program drukuje MDLXXII.

chlebak
źródło
1

Perl, drukuje 690

die 690 . $/

Lub, jeśli możemy opublikować jedno-linijki ( perl -E)

say(570)

Drukuje 570.

(Brak końcowych znaków nowej linii)

Swilliams
źródło
1

JavaScript, 1750 900 860 790

alert(790)

(Zwrot karetki (CR \rlub \x0D) po lub przed programem)

Programy te można znaleźć poprzez brutalne wymuszanie.

Większe wartości:

alert(860)%0
alert(900)&&6
document.write(1750)
JiminP
źródło
1

Java -128

Wiem, że czytanie standardowego wejścia jest niedozwolone, ale chciałem podać przykład, jak obliczyłem swój wynik.

Mój kod sumuje liczbę ASCII przekazanych przez stdin i wypisuje -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);}}

Brak końcowej nowej linii

Steve P.
źródło
Myślę, że twoja suma się przepełnia.
Alpha
1

Rubin, drukuje 300

p   300

Jest przestrzeń i zakładka pomiędzy pi 300. Brak końca nowej linii.

Lowjacker
źródło
1

Pliki wsadowe, 500

ECHO  500

Zwróć też uwagę na dwie spacje między „ECHO” (celowo wielkie litery) i „500”.

Alfa
źródło
1

C, 1700

Dziwne - nikt jeszcze nie opublikował rozwiązania w języku C (z wyjątkiem przykładu w pytaniu).

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

Brak nowej linii na końcu.

ugoren
źródło
1

K ( 923 796 795 746 513)

Nie jestem pewien, czy to nie pasuje do zasad, czy nie. Nie używa standardowego wejścia, otwiera się jako wektor bajtów i sum.

+/1:.z.f

Stosowanie:

q scriptname.k

edycja 2012.05.08 - nie trzeba hsymować uchwytu pliku 2012.05.09 - zapisano 1 punkt, konwertując na bajty zamiast int

2012.06 - Można zapisać ładunek punktów, czytając plik jako bajt zamiast tekstu:

skeevey
źródło
1

J 198

33*6

i

6*33

Znaleziono go brutalną siłą. W J nie ma 1 lub 2 znaków char, a jedynym rozwiązaniem jest 3-char 150. Poza wszelkimi błędami w moich poszukiwaniach, nie ma też innych rozwiązań 4-char.


Z kanału IRC #jsoftware, mieliśmy również <.%:10!20429, a samo-zliczający quine +/a.i.2#(,{:)'+/a.i.2#(,{:)'''w 1706 roku.

AlliedEnvy
źródło
0

1160 r

Przywołany za pomocą echa i spacji, cały String, w tym 7 echo 1160 | bcspacji , ma bajt 1160.

echo 1160    |  bc

150 działa również dla bc:

echo "150" > 150
bc -q 150
150
nieznany użytkownik
źródło
0

D, 9752

ten faktycznie oblicza to podobnie jak mój 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);
maniak zapadkowy
źródło
0

Biała spacja, 369

Ten 20-znakowy program wypisuje liczbę 369, która jest sumą wartości ascii jego znaków (które są znakami Tab, Space, Linefeed, tutaj symbolizowanymi odpowiednio przez T, S, L):

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10, istnieje 7 tabulatorów, 8 spacji i 5 linii).

res
źródło
0

Haskell, 7518

Mała modyfikacja mojego quine :

main=print.sum.map fromEnum$q++show q;q="main=print.sum.map fromEnum$q++show q;q="
AardvarkSoup
źródło
0

Brainf * ck, 253 (lub 252)

Niewielka poprawa rozwiązania Petera Olsona:

---.H

Pod warunkiem, że nie można drukować, można go jeszcze ulepszyć, dodając a -i zastępując Hgo kodem ASCII 26.

Pontus von Brömssen
źródło
0

Scala 1090

println (1090)

nieznany użytkownik
źródło
0

Python, 5440

Najwyższy wynik wygrywa, prawda?

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

Pomyślałem, że i tak to opublikuję, b / c to rozwiązanie w połowie drogi.

Joel Cornett
źródło