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


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

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

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.


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.


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


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)


1
Ich mag die 2 Registerkarten
Steve P

5

Rubin, druckt 380

p (380)

Keine nachstehende Zeile nach der schließenden Klammer.


5

Power Shell

(230)

druckt offensichtlich 230.



5

J 150

?!6

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


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


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.


2

PHP, druckt 4440

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

2

PowerShell, druckt 3902

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

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


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.


1

Perl, druckt 690

die 690 . $/

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

say(570)

Druckt 570.

(Keine nachgestellten Zeilenumbrüche)


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)

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


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.


1

Batch-Dateien, 500

ECHO  500

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


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.


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:


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.


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

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

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


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

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 .



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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.