Aufgabe
Erstellen Sie einen Taschenrechner, der eine beliebige Zeichenfolge aus einer Datei, stdin oder was auch immer nimmt und alle Werte der Zeichen addiert.
Beispiel
Input
Hello World!
Output
1085
Regeln
Der Rechner muss nur ASCII-Codierung akzeptieren.
Der kürzeste Code gewinnt.
Anmerkungen
Zu dem Kommentar von m.buettner muss ich sagen, ich habe nicht an den Multibyte-Teil gedacht.
Also lasse ich es auch als Bonus.
Der Taschenrechner sollte so ausgeführt werden, wie er geschrieben wurde, sodass vor dem Kompilieren oder Interpretieren keine Änderungen erforderlich sind.
Bonus
Dank Synthetica gibt es hier noch einen Bonus,
Das Programm , das die niedrigste Ausgang hat , wenn Sie seinen Code als seine Eingabe verwenden
gewinntbekommt einen Stern.
Ich möchte es nicht komplett modifizieren.
Wenn Sie es zusätzlich schreiben, um den (rechten) Wert in UTF-8 auszugeben, erhalten Sie einen Stern.
Der Code, der auf meinem Laptop am schnellsten ausgeführt wird (Lenovo Yoga 13 Intel Core i5 3317U 1,7 GHz, 8 GB RAM, 128 GB SSD, Intel HD 4000, Windows 8), erhält einen Stern.
Webcodes werden zuerst unter IE11 mit Chakra und dann in FireFox 29.0.1 mit SpiderMonkey ausgeführt
Linux-Code läuft auf einem Raspberry Pi mit Raspbian.
Der Teststring lautet wie folgt:
q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(
Viel Spaß beim Programmieren :)
Bonusscoring
Ich plane, die Wertung an diesem Samstag zu machen, damit am 07.06.14 alle Antworten nach diesem Datum keine Bonuspunkte mehr bekommen;)
Sie können den Code, den ich zum Testen verwenden werde, hier herunterladen. Fühlen Sie sich frei, ihn zu teilen und zu verbessern :)
Kleines Update wegen des Bonus, mein Laptop ist teilweise kaputt, also werde ich es wahrscheinlich nächstes Wochenende machen, das tut mir wirklich leid :(
Hello World!
Verwendung von zwei verschiedenen Sprachen für ASCII-Werte auf meinem Computer.Antworten:
GolfScript, 4 Zeichen
Verwenden Sie einfach den Fold-Operator (
*
), um alle Zeichen zu addieren.Wenn es mit der leeren Zeichenfolge funktionieren muss, 9 Zeichen:
Vielen Dank an @PeterTaylor für die Bereitstellung einer alternativen 6-Zeichen-Version, die mit einer leeren Zeichenfolge funktioniert:
quelle
0\{+}/
unterstützt leere ZeichenfolgeAPL (8)
Erläuterung:
+/
die Summe von⎕UCS
Unicode-Werte von⍞
Zeicheneingabequelle
Hello World!
?1085
. Es wäre nicht korrekt, wenn es eine andere Ausgabe gäbe. Es summiert die Werte der Unicode-Codepunkte der Zeichen.⍞
bedeutet;)⍞
Lesemittel eine Linie von der TastaturHaskell 36
quelle
$ printf "Hello World!" | ./charsum
ECHO "Hello World! | ghci charsum.hs
interact
undshow
anstelle vongetContents>>=print
:main=interact$show.sum.map fromEnum
Shell + GNU-Tools, 29 Byte
Übernimmt die Eingabe von stdin:
Eigene Punktzahl: 2385
c, 52 Bytes
Kompilieren Sie mit (einige Warnungen erzeugt):
Übernimmt die Eingabe von stdin:
Eigene Punktzahl: 4354
quelle
od
Befehl?od -AntuC
tut nicht dasselbe wieod -An -tuC
.od-An-tuC
oderod -An-tuC
Javascript ( ES6 ) 51
quelle
...
vorherprompt
macht? Ist das ein neues ES6-Ding oder ist es vor ES6?[...prompt(x=0)]
die Eingabeaufforderung mit einem Standardwert von 0 (der später in der Summe verwendet wird) übernommen und wendet diese Eingabe als Array von Zeichen an. ? Welches wäre technisch das gleiche wieprompt(x=0).split("")
, oder?prompt(x=0)
bedeutet "setze x auf 0, rufeprompt
mit dem Wert von setze x auf 0 ", das heißt 0. Es wäre äquivalent zu "write(x=0,prompt(x))
gs2 , 1 byte
d
(0x64
/sum
) fasst natürlich alle Bytes in der Standardeingabe zusammen.quelle
Python 3 - 28 Bytes
Beispiellauf:
Ruft die Eingabe von stdin ab,
map
s dieord
Funktion, um den ASCII-Wert jedes Zeichens abzurufen,sum
s it undprint
s.quelle
print sum(map(ord,raw_input()))
map(ord,input())
aufinput().encode()
. Bytes-Objekte können weiterhin summiert werden und es bleibt die gleiche Länge.8086 Assembly (16 Bit) -
4741 ByteDer Inhalt der
test.com
Datei ist:Die eigentliche Arbeit wird in den ersten 11 Bytes erledigt; Ich brauche den Rest, um das Ergebnis in Dezimalschreibweise auszudrucken.
Quellcode (als Eingabe für den DOS-
debug.com
Assembler):Einige Anmerkungen zum Code:
quelle
CJam, 3 Bytes (Summe 260)
Sie können es online ausprobieren .
Danke jimmy23013, dass du dabei hilfst, 2 Charaktere abzuhacken :)
Erläuterung:
quelle
q1b
ist kürzer.Befunge98, 6 Bytes, Summe: 445
Jeder Dolmetscher sollte in Ordnung sein. Ich benutze CCBI .
Verwenden Sie wie folgt:
Funktioniert für Multibyte-Zeichen und leere Zeichenfolgen.
Erläuterung
2j
- die nächsten beiden Anweisungen überspringen (@
und.
- siehe unten)~
- den nächsten char auf den stapel legen+
- Addiere den Code-Wert des neuen Zeichens zur aktuellen Summe. Der Befehlszeiger springt an den Anfang und der Zyklus wiederholt sich~
auf ein EOF trifft, kehrt er die Richtung des Zeigers um und die beiden "versteckten" Anweisungen werden ausgeführt:.
- die Summe ausdrucken@
- Ausfahrtquelle
Ruby,
13 bis12 Bytessum
ist eine integrierte Funktion, die die Zeichen einer Zeichenfolge summiert. Subtrahiert 10, um den Zeilenumbruch am Ende desgets
Rückgabewerts zu berücksichtigen .(Edited 4 Jahre später zu ändern ,
x-10
um~9+x
... den Wert~9
heißt-10
, aber es lässt uns den Raum zwischen entfernenp
und seinem Argument, ein Byte zu speichern.)quelle
p
ist eine Methode zum Ausgeben des Debug-Werts von etwas in einer Zeile.PowerShell - 27
Beispiel
quelle
[char[]]"$args"|measure -s
, solange es nur einen $ arg-Eintrag gibt.Julia -
117 Zeichen, resultierende Summe =943536Da die Frage zulässt, dass die Eingabe von einer beliebigen Quelle stammt, wähle ich eine vorhandene Variable. Angenommen, diese
A
enthält den String, den wir auswerten möchten.Wie sich herausstellt, können Sie die Zeichenfolge direkt summieren, und sie wird ausgewertet. Aufgrund der Art und Weise, wie Zeichen summiert werden, wird jedoch ein Zeichen ausgegeben, wenn die Zeichenfolge eine ungerade Anzahl von Zeichen enthält. eher als eine ganze Zahl jeglicher Art. Als solches erzwingen wir die Umwandlung auf int, indem wir mit 1 multiplizieren.
Alte Version:
Wird in hexadezimaler Schreibweise ausgegeben (wenn die Summe kleiner als 256 ist, ist dies der Fall
0x??
, andernfalls sind es 8 Byte0x????????
). Wenn es in Code verwendet wird, in dem das Ergebnis verwendet wird, funktioniert es wie jede andere Zahl (Julia zeigt nur nicht signierte Ints an).Um den Wert des Ergebnisses als Dezimalzahl anzuzeigen, schließen Sie das Obige in
int()
wie in einint(sum(A.data))
.Für alle, die Julia nicht kennen, weisen Sie sie
A
genau so zu, wie Sie andere Zuweisungen für Variablen vornehmen. Also,A="Hello World!"
oderA="sum(n.data)"
. In dem Fall, dass Sie in setzen müssen"
oder'
Zeichen gibt es mehrere Optionen, die einfachste davon (weil es Bedürfnis nach Kenntnis der Nuancen von Julia Stringliterale vermeidet) istA=readline()
, gefolgt von der einfach in der Zeichenfolge in STDIN eingeben (won‘ nicht mit Zeilenumbrüchen umgehen). Die Escape-Sequenz für newline ist wie üblich,\n
aber ich glaube nicht, dass Sie das mit readline () verwenden können.quelle
n
? Ich kenne Julia überhaupt nicht;)n
auf umgeschaltetA
, um die resultierende Summe von 988 auf 943 zu reduzieren..data
; Da es sich jedoch um Zeichen handelt, wird ein Zeichenergebnis für eine ungerade Anzahl von Zeichen erstellt. Multiplikation mit 1 korrigiert das.K5, 2 Bytes (Funktion), 5 Bytes (Programm)
Funktion
Programm
Ich bin mir nicht sicher, ob K5 vor oder nach dem Posten dieser Herausforderung erstellt wurde. Egal ... DAS IST FANTASTISCH !!
Wenn Sie in K5 arithmetische Operationen für Zeichenfolgen ausführen, werden die Zeichen in ihre ASCII-Codes konvertiert. Hier wird nur der Summenoperator verwendet
+/
(eigentlich ist das Plus + vorbei).quelle
Matlab / Octave 4 Bytes (Bonus: 405)
Dieser Code ist eine anonyme Funktion, die den Job erledigt, eine Zeichenfolge akzeptiert und die erforderliche Nummer zurückgibt.
quelle
gs2
Antwort bin ich mir nicht sicher , aber zumindest mit der gleichen Herangehensweise wie bei der Julia-Antwort sollte ich trotzdem schreibensum(A)
. Ich denke,sum
allein ist nicht in Ordnung (wäre nicht einmal ein gültiger Code =).Go (59 Zeichen)
Alles in Go ist standardmäßig utf8. Codetext in Delimetern, der durch sich selbst läuft, ergibt eine Ausgabe von: 5399.
quelle
math.Sum
map
Jolf, 2 Bytes (nicht konkurrierend)
Probieren Sie es hier aus!
Ähm ... Ich weiß nicht, was ich sonst sagen soll.
quelle
Gol> <> , 4 Bytes (nicht konkurrierend)
Hinweis: Diese Sprache ist neuer als die Herausforderung.
quelle
Javascript ES6, 41 Bytes
Danke an @ETHproductions für 2 Bytes gespart!
quelle
_=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x
?Python, 24 Bytes
Dies ist kürzer als jede andere Python-Lösung: Eine unbenannte anonyme Funktion, die die Zeichenfolge als Argument verwendet und die Summe zurückgibt.
Probieren Sie es online!
Zuerst
x.encode()
wandelt es in einbytes
Objekt. Dannsum
fügt die Zeichen-Code - Werte. Da dies eine Lambda-Funktion ist, wird der Wert implizit zurückgegeben.Zusätzlich könnte man
lambda x:sum(map(ord,x))
für die gleiche Byteanzahl haben.quelle
SML,
4236Füge einfach eine weitere Sprache hinzu.
Konvertiert String in char-Array, berechnet die ASCII-Nummer jedes Werts und berechnet die Summe aller ASCII-Nummern.
quelle
;
. 36 Bytes: tio.run/##DcpBCoAgEAXQq0zRQomiC7ivdYuWEWgRfB2xKby9uXzwHo/…C 32
quelle
main(int argc,char **argv){return(argc?main(0,&(argv[1])):(**argv?**argv+main(0,argv)+((*argv)++?0:0):0));}
(107 Zeichen), obwohl es das erste Zeichen aus irgendeinem Grund ignoriert. POSIX-Exit-Codes haben nur 8 Bit. in bash,echo $?
.D (Funktion: 60)
Auf jeden Fall nicht drin, um es zu gewinnen.
Vorausgesetzt, es muss kein vollständiges Programm sein
Genannt wie so
Ausgabe:
D (Programm: 133)
Zählt keine Zeilenumbrüche.
Mit mehr Leerzeichen und längeren Variablennamen zur besseren Lesbarkeit
Um Zeilenumbrüche in der Eingabe zu unterstützen, könnte ich entweder
byLine(KeepTerminator.yes)
die richtige Methode für 20 Zeichen verwenden oder ein'\n'
an meine Zeile anhängen , wodurch die Eingabe in einer Zeile unterbrochen wird und unter Windows aufgrund von CRLF möglicherweise die falsche Summe für 18 Zeichen angegeben wird.quelle
JavaScript (ES6) 54
5854 Bytes dank nderscore :quelle
alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
Delphi (
8783)Ungolfed
Schleifen durch
S
Additionord
des Zeichenwerts zum Ergebnis. Wobei x == ErgebnisBearbeitungen:
4 Zeichen durch Umschalten auf int64 und Ändern der Addition zur Summe gespeichert.
quelle
k (8 Zeichen)
Q Übersetzung
Bonuswert:
quelle
J (7)
So nah und doch so fern ... Naja, ich denke 7 ist anständig genug, da diese Antwort auch leere Zeichenketten akzeptiert. (Ich verwende eine Variable als Eingabe für die Phrase.
from a file, stdin or whatever
)Erläuterung:
a.
enthält alle ASCII-Zeichen.x i. y
ist ähnlich wie Python[x.index(i) for i in y]
.Hierfür,
a. i. y
wandelty
in ein Array von Werten seiner ASCII+/
ist wiesum
:+/1 2 3 4 5 6
bedeutet1+2+3+4+5+6
Das Ganze in Aktion
Für den Bonus:
Nicht schlecht, denke ich.
Na verdammt.
Vielen Dank, @algorithmshark
Vielen Dank @marinus
quelle
b
inA
ergibt eine Punktzahl von 449.R,
35 Zeichen (Summe von 3086)26 Bytes (Summe von 2305)readline()
ist ein Zeichen länger alsscan(,"")
,scan
teilt die Eingabe jedoch standardmäßig in Leerzeichen auf.Verwendung:
quelle
Japt , 6 Bytes (nicht konkurrierend)
Diese Antwort ist nicht konkurrierend, da Japt erstellt wurde, nachdem diese Herausforderung veröffentlicht wurde.
Ziemlich einfach. Probieren Sie es online!
Wie es funktioniert
quelle
¬
auf irgendeine Art von Negation festgelegt?url/interpreter.html#new=1
). Alles, was nicht vorhanden ist, verwendet den alten Zeichensatz, und alles, was vorhanden ist, verwendet den neuen Zeichensatz.PlatyPar , 2 Bytes (nicht konkurrierend)
Probieren Sie es online !
u
generiert ein Array aller Zeichencodewerte in der Eingabezeichenfolge und ermittelts
deren Summe.Wenn es auf sich selbst läuft, kehrt es zurück
232
.Dies ähnelt Conors Jolf-Antwort , außer dass ich ein Byte verwende, um die Zeichenfolge in ein Array von Zeichencodes zu konvertieren (was in Jolf impliziert ist), während er ein Byte verwendet, um die Eingabe abzurufen (was in PlatyPar impliziert ist).
quelle