Schreiben Sie ein Programm, um die Summe der ASCII-Codes des Programms zu drucken

14

Ihre Aufgabe ist es, ein Programm zu schreiben, um die Summe der ASCII-Codes der Zeichen des Programms selbst zu drucken. Sie dürfen keine Datei öffnen (Eingaben wie Befehlszeilenargumente, Standardeingaben oder Dateien sind nicht zulässig).

Das Programm, das die niedrigste Zahl ausgibt (dh die niedrigste Summe von ASCII-Codes hat), gewinnt.

Hier ist ein Beispiel (nicht das kürzeste) eines solchen in C geschriebenen Programms:

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

(keine neue Zeile danach })

Alexandru
quelle
4
Es wäre interessant, eine quine Lösung zu sehen: eine, die ihre eigenen Bytes erzeugt und summiert.
Joey Adams
1
Nicht sehr herausfordernd imho. Es kann trivial brachial sein, insbesondere für Sprachen, die einfach Token ausgeben, wie PowerShell, Golfscript usw.
Joey
2
Ich habe einen Downvot durchgeführt und der Kommentar gibt den Grund an, warum. Wie ich bereits bemerkt habe, betrachte ich die Anzahl der Antworten nicht als Hinweis auf die Qualität . Nur weil es einfach zu lösen ist, ist dies keine interessante oder sogar herausfordernde Herausforderung. Zumindest meine Meinung.
Joey
5
Warten. Was? Einerseits beschweren Sie sich, dass die Frage einfach und uninteressant ist, und stimmen mich dann ab (-2 für mich). Auf der anderen Seite posten Sie 25% der Antworten auf diese Frage (+70 für Sie).
Alexandru
4
Sie sehen das als einen Reputationskampf? Gut, ich kann meine Antworten leicht auf CW ändern. In gewisser Weise war die große Anzahl der Antworten ein Protest und zu zeigen, dass es trivial ist, viele Antworten zu liefern. Vergleichen Sie dies zum Beispiel mit der Aufgabe, die das Alphabet viermal wollte. Auch mein antwortendes Selbst (gebunden an die Aufgabenspezifikationen) und mein kommentierendes Selbst (in der Hoffnung, die allgemeine Website-Qualität zu verbessern) sind oft ziemlich unterschiedlich. Wie auch immer, glücklicher jetzt, wo ich sie gelöscht habe? Es waren jedoch immer noch gültige Antworten.
Joey

Antworten:

10

wc druckt 0

Jemand sagte "katzenähnliche Sprachen", also ...

Eine leere Datei:



Ausführen mit wc -c file.wc. Bei 0 Bytes denke ich, dass dies der Gewinner in der Kategorie "Nicht wirklich eine Programmiersprache" ist.

Ebenfalls

Katze, druckt 80 (Basis 13)

80

Kein abschließender Zeilenvorschub, die Zahl 80 13 entspricht 104 dezimal. Sie können mit 60 17 (102 Dez) kürzer gehen , aber ich dachte, "Basis 13" wäre mehr Geek-Punkte wert.

EDIT: Neues wcBeispiel, dieses kann als Programm ausgeführt werden.

#!/usr/bin/wc
ÿÿzw17

(Wie in Latin-1 kodiert - das ÿ ist ein Byte mit dem Wert 255)

Die Summe der Bytes ist 2223, die Ausgabe ist:

  2  2 23 ./w
Random832
quelle
Aber wc sollte eine Datei lesen, die ein 0-Byte enthält, um die Nummer 0 zu erzeugen, keine leere. Leer ist nicht Null.
Benutzer unbekannt
user: Man könnte argumentieren, dass die Summe der Werte in einer leeren Menge immer noch 0 ist. Trotzdem wc -cist in der Frage sowieso verboten.
Joey
1
Die einzige Klausel, die dies zu tun scheint, ist "Jegliche Eingabe wie Befehlszeilenargumente ... ist verboten". Lassen Sie also -c weg und drucken Sie es 0 0 0(wenn die Datei, die als Datei übergeben wird, dies verbietet, werden alle Skriptsprachen verwendet) auch verboten)
Random832
2
+1 für wc, -1 für Base Cheating, +1 für Witze in Base 13.
Ich würde sagen, wcist eine Anwendung, keine Sprache.
Thomas Eding
14

PHP, M4 und andere katzenähnliche Sprachen: 150

150

Wir haben diese Lösung mit einem einfachen Haskell-Programm gefunden, um sie zu brachialisieren:

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
quelle
Ich denke, das ist die absolut kürzeste.
Alexandru
2
@ Alexandru: Nicht unbedingt. Möglicherweise gibt es ein oder zwei Zeichen langes Programm, das die Summe mithilfe einiger eingebauter Funktionen korrekt 5!
ausgibt
@ Mellamokb Die Summe der ASCII-Zeichen in 5!ist 86, nicht 125.
Peter Olson
3
@ Peter: In der Tat habe ich ein Beispiel für die Art der Lösung gezeigt, die kleiner als 150 sein könnte, aber keine tatsächliche Lösung. Ich habe noch keinen gefunden (und übrigens ist 5! 120, nicht 125) :-)
mellamokb
12

Brainf * ck, 255

-.¤

Dadurch wird nicht die Nummer 255 gedruckt, sondern das 255. ASCII-Zeichen.

Dies kann als Betrug angesehen werden, da der BF-Compiler die ¤ überspringt.

Peter Olson
quelle
1
Tim: Die niedrigste Zahl gewinnt, nicht das kürzeste Programm. Auf jeden Fall glaube ich nicht, dass das ¤betrügt, da es nur ein normaler Kommentar ist.
Joey
Sie erhalten eine niedrigere Punktzahl, wenn Sie etwas mehr abziehen: ----. ␦
Helena
8

Javascript druckt 9432 6902

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

Dies ist die erste Quine-Lösung, es sei denn, ich verstehe die Haskell- Lösung nicht richtig.

Peter Olson
quelle
Dieser Haskell-Code sucht nur nach der kleinsten Zahl, die der Summe der ASCII-Codes seiner Ziffer entspricht. Ich denke, die meisten Antworten hier wurden mit roher Gewalt gegeben.
Joey
Kann weiter von 89 auf 86 Bytes reduziert werden mit:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest
7

Power Shell

((310))

druckt 310.

Joey
quelle
6

Perl, 500

say     500

Es gibt zwei Tabs zwischen sayund 500. :)

(Laufen Sie als Einzeiler mit perl -E, soweit ich das beurteilen kann, liegt dies innerhalb der Regeln)

Swilliams
quelle
1
Ich mag die 2 Registerkarten
Steve P
5

Rubin, druckt 380

p (380)

Keine nachstehende Zeile nach der schließenden Klammer.

Ventero
quelle
5

Power Shell

(230)

druckt offensichtlich 230.

Joey
quelle
5

Power Shell

-(-320)

druckt 320.

Joey
quelle
5

J 150

?!6

Mit dem Vorbehalt, dass es nur 1/720 der Zeit korrekt sein wird.

mellamokb
quelle
3
Zufall auf Fakultät 6? Hmmm, ich glaube nicht, Tim.
MPelletier
4

Python druckt 781

print  781

Zwei Räume.

FogleBird
quelle
1
Mir gefallen besonders die 2 Felder.
Steve P
3

Element, 220

Dies ist eine Sprache meiner eigenen Schöpfung, und sie ist in meiner Antwort auf eine andere Frage hier dokumentiert .

220`!

Hier ist eine exemplarische Vorgehensweise: Die 220drückt diese Nummer auf den Stapel. Dann führt das `` outputs the top element of the stack. The! `Ein logisches Nicht auf dem Kontrollstapel (ein separater Stapel) durch und setzt ihn auf 1.

PhiNotPi
quelle
2

PHP, druckt 4440

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

PowerShell, druckt 3902

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

Untersucht die aktuell ausgeführte Zeile und summiert die Codepunktwerte.

Joey
quelle
2

INTERCAL, 1572

Ich kann nicht glauben, dass noch niemand INTERCAL gemacht hat!

DOREADOUT#1572


DOGIVEUP

(Beinhaltet das Beenden einer neuen Zeile.) Dieses Programm druckt MDLXXII aus.

Brot-Box
quelle
1

Perl, druckt 690

die 690 . $/

Oder, wenn wir Einzeiler posten können ( perl -E)

say(570)

Druckt 570.

(Keine nachgestellten Zeilenumbrüche)

Swilliams
quelle
1

JavaScript, 1750 900 860 790

alert(790)

(Wagenrücklauf (CR, \roder \x0D) nach oder vor dem Programm)

Diese Programme werden durch Brute-Forcing gefunden.

Größere Werte:

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

Java -128

Ich weiß, dass stdin nicht erlaubt ist, aber ich wollte ein Beispiel dafür geben, wie ich meine Punktzahl berechnet habe.

Mein Code summiert die an stdin übergebene ASCII-Zählung von sich und gibt -128 aus

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

Keine nachgestellte neue Zeile

Steve P
quelle
Ich denke, deine Summe läuft über.
Alpha
1

Rubin, druckt 300

p   300

Zwischen dem pund dem befindet sich ein Leerzeichen und ein Tabulator 300. Keine nachgestellte Newline.

Lowjacker
quelle
1

Batch-Dateien, 500

ECHO  500

Beachten Sie auch die beiden Leerzeichen zwischen "ECHO" (absichtlich in Großbuchstaben) und "500".

Alpha
quelle
1

C 1700

Seltsam - noch hat niemand eine C-Lösung gepostet (mit Ausnahme des Beispiels in der Frage).

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

Keine Newline am Ende.

ugoren
quelle
1

K ( 923 796 795 746) 513)

Ich bin mir nicht sicher, ob dies gegen die Regeln verstößt oder nicht. Es benutzt kein stdin, es öffnet sich als Vektor von Bytes und Summen.

+/1:.z.f

Verwendung:

q scriptname.k

edit 2012.05.08 - keine Notwendigkeit, das Dateihandle zu hsym 2012.05.09 - 1 Punkt durch Konvertieren in Byte anstelle von int gespeichert

2012.05.17 - Kann eine Menge Punkte speichern, indem die Datei als bytestream anstatt als Text gelesen wird:

Skeevey
quelle
1

J, 198

33*6

und

6*33

Fand es mit roher Gewalt. In J gibt es keine 1- oder 2-Zeichen-Lösungen, und die einzige 3-Zeichen-Lösung ist 150. Abgesehen von Fehlern in meiner Suche gibt es auch keine anderen 4-Zeichen-Lösungen.


Aus dem IRC-Kanal #jsoftware hatten wir ebenfalls einen Stand <.%:10!20von 429 und einen selbstzählenden Stand von +/a.i.2#(,{:)'+/a.i.2#(,{:)'''1706.

AlliedEnvy
quelle
0

bc 1160

Aufgerufen mit Echo und Leerzeichen hat der gesamte String, einschließlich 7 Leerzeichen, echo 1160 | bcein Byte von 1160.

echo 1160    |  bc

150 arbeitet auch für bc:

echo "150" > 150
bc -q 150
150
Benutzer unbekannt
quelle
0

D 9752

Dieser berechnet es tatsächlich ähnlich wie mein 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);
Ratschenfreak
quelle
0

Whitespace, 369

Dieses Programm mit 20 Zeichen gibt die Zahl 369 aus, die die Summe der ASCII-Werte seiner Zeichen darstellt (Tab, Leerzeichen, Zeilenvorschubzeichen, hier symbolisiert durch T, S, L):

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10, wobei 7 Tabulatoren, 8 Leerzeichen und 5 Zeilenvorschübe vorhanden sind.)

res
quelle
0

Haskell, 7518

Eine kleine Modifikation meiner Quine :

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

Brainf * ck, 253 (oder 252)

Leichte Verbesserung der Lösung von Peter Olson:

---.H

Sofern nicht druckbare Dateien zulässig sind, können sie durch Hinzufügen eines -und Ersetzen Hdurch ASCII-Code 26 weiter verbessert werden .

Pontus von Brömssen
quelle
0

Scala 1090

Druck (1090)

Benutzer unbekannt
quelle
0

Python, 5440

Die höchste Punktzahl gewinnt, oder?

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

Ich dachte nur, ich würde es trotzdem posten, b / c, es ist eine halbherzige Lösung.

Joel Cornett
quelle