Rechner, der Zeichenwerte hinzufügt

18

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 gewinnt bekommt 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 :(

Knerd
quelle
3
Ich bekomme 1085 für die Hello World!Verwendung von zwei verschiedenen Sprachen für ASCII-Werte auf meinem Computer.
Kyle Kanos
1
Er hat wahrscheinlich vergessen, das '!' Hinzuzufügen. Bearbeiten Sie waren 3 Sekunden schneller ...
Gxtaillon
1
Könnte man bitte die Abstimmungen erklären?
Knerd
3
Meine Vermutung ist, dass die Abstimmungen anzeigen, dass es nicht wirklich ein gutes Problem ist.
Kyle Kanos
5
@Knerd vor allem, weil es in den meisten Sprachen ein bisschen zu trivial ist (wie Sie an der Länge der Einreichungen sehen können, die Sie bereits erhalten haben)
Martin Ender

Antworten:

10

GolfScript, 4 Zeichen

{+}*

Verwenden Sie einfach den Fold-Operator ( *), um alle Zeichen zu addieren.

Wenn es mit der leeren Zeichenfolge funktionieren muss, 9 Zeichen:

{{+}*}0if

Vielen Dank an @PeterTaylor für die Bereitstellung einer alternativen 6-Zeichen-Version, die mit einer leeren Zeichenfolge funktioniert:

0\{+}/
Türknauf
quelle
Funktioniert nicht mit der leeren Zeichenfolge.
Howard
@ Howard Guter Punkt; bearbeitet.
Türklinke
0\{+}/unterstützt leere Zeichenfolge
Peter Taylor
1
@Doorknob sorry für die blöde frage, wie ich daten eingebe? Ich benutze golfscript.apphb.com
Knerd
2
@immibid Ein Zyklop mit einem seltsam geformten Auge. :-P (oder, in GolfScript, das "Swap-and-Add-Each" -Gesicht!)
Türklinke
7

APL (8)

+/⎕UCS⍞

Erläuterung:

  • +/ die Summe von
  • ⎕UCS Unicode-Werte von
  • Zeicheneingabe
Marinus
quelle
Wofür wäre das Ergebnis Hello World!?
Knerd
@Knerd: 1085. Es wäre nicht korrekt, wenn es eine andere Ausgabe gäbe. Es summiert die Werte der Unicode-Codepunkte der Zeichen.
Marinus
ok, ich habe nicht verstanden, was das bedeutet;)
Knerd
1
@knerd: Lesemittel eine Linie von der Tastatur
marinus
Kennen Sie einen kostenlosen APL-Interpreter?
Knerd
6

Haskell 36

main=interact$show.sum.map fromEnum
Gxtaillon
quelle
Woher liest es den Text?
Knerd
stdin. $ printf "Hello World!" | ./charsum
Gxtaillon
ok, ich konnte es nicht auf meinem Windows-Rechner laufen lassen, ich werde es auf dem
RPI
Wenn ich Ihren Code ausführe, erhalte ich nur die Zeichenfolge "Hallo Welt!" als Ausgabe. Dies ist meine Kommandozeile:ECHO "Hello World! | ghci charsum.hs
Knerd
1
Verwenden Sie interactund showanstelle von getContents>>=print:main=interact$show.sum.map fromEnum
Flonk
6

Shell + GNU-Tools, 29 Byte

echo `od -An -tuC`|tr \  +|bc

Übernimmt die Eingabe von stdin:

$ printf "%s" 'Hello World!' | ./addchars.sh 
1085
$ 

Eigene Punktzahl: 2385


c, 52 Bytes

c;main(p){while(~(p=getchar()))c+=p;printf("%d",c);}

Kompilieren Sie mit (einige Warnungen erzeugt):

gcc addchars.c -o addchars

Übernimmt die Eingabe von stdin:

$ printf "%s" 'Hello World!' | ./addchars 
1085 $ 

Eigene Punktzahl: 4354

Digitales Trauma
quelle
Das ist eine großartige Antwort. CodeBlocks mit GNU-Compiler beklagen sich immer, wenn Variablen keinen Typ haben, zB int c, main (int p). Deshalb denke ich, dass diese in Ihrer Antwort enthalten sein sollten.
Bacchusbeale
@bacchusbeale Ich habe einen Hinweis zu Zusammenstellungswarnungen hinzugefügt, aber ich denke, dies ist im Allgemeinen die Regel, wenn man in c Golf spielt. Solange der Code wie erwartet kompiliert und ausgeführt wird, können Warnungen ignoriert werden. Siehe codegolf.stackexchange.com/a/2230/11259 und codegolf.stackexchange.com/a/2204/11259 . Natürlich ist der Produktionscode eine ganz andere Sache.
Digital Trauma
@DigitalTrauma sind all diese Räume eigentlich nötig? Kann die Shell das Leerzeichen nicht ignorieren und mit - neue Parameter markieren?
Ashwin Gupta
@AshwinGupta Sprechen Sie über den odBefehl? od -AntuCtut nicht dasselbe wie od -An -tuC.
Digitales Trauma
@ DigitalTrauma ja ich war. Ich meinte, Sie könnten es nicht tun od-An-tuCoderod -An-tuC
Ashwin Gupta
6

Javascript ( ES6 ) 51

alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
nderscore
quelle
@nderscore Kannst du erklären was das ...vorher promptmacht? Ist das ein neues ES6-Ding oder ist es vor ES6?
WallyWest
1
@WallyWest Wird als Spread-Operator bezeichnet und ist Teil des ES6-Entwurfs.
nderscore
@nderscore Wenn ich die Spread-Operator-Syntax verstehe, hat Ihre Verwendung von [...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 wie prompt(x=0).split(""), oder?
WallyWest
1
@WallyWest prompt(x=0)bedeutet "setze x auf 0, rufe promptmit dem Wert von setze x auf 0 ", das heißt 0. Es wäre äquivalent zu "write(x=0,prompt(x))
Cyoce
6

gs2 , 1 byte

d

d( 0x64/ sum) fasst natürlich alle Bytes in der Standardeingabe zusammen.

Lynn
quelle
5

Python 3 - 28 Bytes

print(sum(map(ord,input())))

Beispiellauf:

$ ./sum_string.py <<< 'Hello World!'
1085

Ruft die Eingabe von stdin ab, maps die ordFunktion, um den ASCII-Wert jedes Zeichens abzurufen, sums it und prints.

untergrundbahn
quelle
Ninja'd, ich hatte genau die gleiche Idee. +1 dafür.
Siehe auch
@TheRare Ich auch, obwohl meine länger war, weil ich Python 2.7 verwendet habe. Ich werde rostig;)
Junıɐɔuʇǝɥʇs
@Synthetica Ich verwende immer Python 2.7, auf dem die Antwort print sum(map(ord,raw_input()))
lautete
1
@TheRare Welches war meine genaue Antwort;)
ɐɔıɐɔuʇǝɥʇs
Erbsenzählerei hier, aber man kann es besser ausführen , indem Sie map(ord,input())auf input().encode(). Bytes-Objekte können weiterhin summiert werden und es bleibt die gleiche Länge.
cjfaure
5

8086 Assembly (16 Bit) - 47 41 Byte

Der Inhalt der test.comDatei ist:

98 01 c3 b4 01 cd 21 3c 0d 75 f5 89 c7 c6 05 24
89 d8 b1 0a 4f 31 d2 f7 f1 80 ca 30 88 15 09 c0
75 f2 89 fa b4 09 cd 21 c3

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

a
; input the string; count the sum
    cbw
    add bx, ax
    mov ah, 1
    int 21
    cmp al, d
    jne 100
; Prepare for output: stuff an end-of-line marker
    mov di, ax
    mov [di], byte 24
    mov ax, bx
    mov cl, a
; 114
; Divide by 10; write digits to buffer
    dec di
    xor dx, dx
    div cx
    or  dl, 30
    mov [di], dl
    or  ax, ax
    jne 114
; Print the string
    mov dx, di
    mov ah, 9
    int 21
    ret

rcx 29
n test.com
w
q

Einige Anmerkungen zum Code:

  • Behandelt nur eine Zeile (bis zum Zeilenendezeichen 13); hängt, wenn kein Zeilenende vorhanden ist
  • Es werden nur 7-Bit-Zeichen unterstützt (sonst sind die Ergebnisse falsch)
  • Gibt 0 für leere Eingabe aus
  • Kann keine Ausgabe verarbeiten, die größer als 64 KB ist
  • Anweisung an Adresse 0x10d überschreibt sich selbst (reiner Zufall)
  • Sie müssen DOS-Emulatoren wie DosBox verwenden , um dieses Programm zusammenzustellen und auszuführen
anatolyg
quelle
Wie kannst du das verstehen? oO
Knerd
5

CJam, 3 Bytes (Summe 260)

q1b

Sie können es online ausprobieren .
Danke jimmy23013, dass du dabei hilfst, 2 Charaktere abzuhacken :)

Erläuterung:

q     read the input into a string  
1b    convert from base 1, treating each character as its numeric value
aditsu
quelle
1
q1bist kürzer.
Jimmy23013
4

Befunge98, 6 Bytes, Summe: 445

2j@.~+

Jeder Dolmetscher sollte in Ordnung sein. Ich benutze CCBI .

Verwenden Sie wie folgt:

printf 'Hello World!' | ccbi calc.fg

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
  • Wenn er ~auf ein EOF trifft, kehrt er die Richtung des Zeigers um und die beiden "versteckten" Anweisungen werden ausgeführt:
  • . - die Summe ausdrucken
  • @ - Ausfahrt
har-wradim
quelle
4

Ruby, 13 bis 12 Bytes

p~9+gets.sum

sumist eine integrierte Funktion, die die Zeichen einer Zeichenfolge summiert. Subtrahiert 10, um den Zeilenumbruch am Ende des getsRückgabewerts zu berücksichtigen .

(Edited 4 Jahre später zu ändern , x-10um ~9+x... den Wert ~9heißt -10, aber es lässt uns den Raum zwischen entfernen pund seinem Argument, ein Byte zu speichern.)

Türknauf
quelle
Ich kenne Ruby überhaupt nicht. Könnten Sie bitte Ihren Code erklären?
Knerd
1
gets ist eine Funktion, die eine Zeichenkette vom Standard einliest, bis eine neue Zeile eingelesen wird. Sie gibt eine Zeichenkette zurück. String # sum addiert die Werte jedes Zeichens, wodurch ein Fixnum zurückgegeben wird. Fixnum # - ist nur Subtraktion. pist eine Methode zum Ausgeben des Debug-Werts von etwas in einer Zeile.
Kyle Smith
2

PowerShell - 27

[char[]]$args[0]|measure -s

Beispiel

> SumChars.ps1 'Hello World!'

Count    : 12
Average  : 
Sum      : 1085
Maximum  : 
Minimum  : 
Property : 
Rynant
quelle
26 wenn Sie verwenden [char[]]"$args"|measure -s, solange es nur einen $ arg-Eintrag gibt.
TessellatingHeckler
2

Julia - 11 7 Zeichen, resultierende Summe = 943 536

Da die Frage zulässt, dass die Eingabe von einer beliebigen Quelle stammt, wähle ich eine vorhandene Variable. Angenommen, diese Aenthält den String, den wir auswerten möchten.

sum(A)1

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:

sum(A.data)

Wird in hexadezimaler Schreibweise ausgegeben (wenn die Summe kleiner als 256 ist, ist dies der Fall 0x??, andernfalls sind es 8 Byte 0x????????). 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 ein int(sum(A.data)).

Für alle, die Julia nicht kennen, weisen Sie sie Agenau so zu, wie Sie andere Zuweisungen für Variablen vornehmen. Also, A="Hello World!"oder A="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) ist A=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, \naber ich glaube nicht, dass Sie das mit readline () verwenden können.

Glen O
quelle
+1 für die verdammt clevere Lösung ^^ Könntest du posten, wie man den Testwert der Variablen zuordnet n? Ich kenne Julia überhaupt nicht;)
Knerd
@Knerd - Ich habe es in bearbeitet. Hoffe, das hilft.
Glen O
Grosses Dankeschön. Ich versuche es später zu testen :)
Knerd
Kleinere Änderung - Variable von nauf umgeschaltet A, um die resultierende Summe von 988 auf 943 zu reduzieren.
Glen O
OK, viel größere Änderung - ich erkannte, dass Sie die Zeichenfolge direkt summieren können, anstatt die Zeichen mit zu extrahieren .data; Da es sich jedoch um Zeichen handelt, wird ein Zeichenergebnis für eine ungerade Anzahl von Zeichen erstellt. Multiplikation mit 1 korrigiert das.
Glen O
2

K5, 2 Bytes (Funktion), 5 Bytes (Programm)

Funktion

+/

Programm

+/0:`

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

kirbyfan64sos
quelle
2

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.

@sum
fehlerhaft
quelle
Bei der gs2Antwort bin ich mir nicht sicher , aber zumindest mit der gleichen Herangehensweise wie bei der Julia-Antwort sollte ich trotzdem schreiben sum(A). Ich denke, sumallein ist nicht in Ordnung (wäre nicht einmal ein gültiger Code =).
Fehler
2

Go (59 Zeichen)

func d(s string)(t int){for _,x:=range s{t+=int(x)};return}

Alles in Go ist standardmäßig utf8. Codetext in Delimetern, der durch sich selbst läuft, ergibt eine Ausgabe von: 5399.

Voutasaurus
quelle
Ich muss sagen, dass ich ziemlich überrascht bin, dass es kein math.Summap
Katze
2

Jolf, 2 Bytes (nicht konkurrierend)

Probieren Sie es hier aus!

ui
u  sum of
 i  the input string

Ähm ... Ich weiß nicht, was ich sonst sagen soll.

Conor O'Brien
quelle
2

Gol> <> , 4 Bytes (nicht konkurrierend)

Hinweis: Diese Sprache ist neuer als die Herausforderung.

iEh+
randomra
quelle
Wird es wie "Golfish" ausgesprochen?
Katze
@cat Ja, es ist golfen.
Randomra
@randomra ist das "Gol • Fish" oder "Golf • Ish"? Wie in einem Fisch mit Gol oder so ähnlich wie Golf?
Cyoce
2

Javascript ES6, 41 Bytes

_=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x

Danke an @ETHproductions für 2 Bytes gespart!

Mama Fun Roll
quelle
1
Wie wäre es _=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x?
ETHproductions
2

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.

lambda x:sum(x.encode())

Probieren Sie es online!

Zuerst x.encode()wandelt es in ein bytesObjekt. Dann sumfü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.

FlipTack
quelle
2

SML, 42 36

Füge einfach eine weitere Sprache hinzu.

fun$x=foldl op+0(map ord(explode x))

Konvertiert String in char-Array, berechnet die ASCII-Nummer jedes Werts und berechnet die Summe aller ASCII-Nummern.

jemand
quelle
1
Sie können einige Leerzeichen und das führende löschen ;. 36 Bytes: tio.run/##DcpBCoAgEAXQq0zRQomiC7ivdYuWEWgRfB2xKby9uXzwHo/…
Laikoni
1

C 32

f(char*s){return*s?*s+f(s+1):0;}
bebe
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 $?.
Die Regeln waren ein bisschen weit gefasst, deshalb habe ich main nicht benutzt. Ich werde kürzer vielleicht auf etwas arbeiten
bebe
@bebe Ich habe die Regeln ein wenig geändert, um zu verdeutlichen, was benötigt wird;)
Knerd
1

D (Funktion: 60)

Auf jeden Fall nicht drin, um es zu gewinnen.

Vorausgesetzt, es muss kein vollständiges Programm sein

int c(string i){int s;foreach(e;i){s+=cast(int)e;}return s;}

Genannt wie so

void main ()
{
    import std.stdio;
    auto hw = "Hello World!";
    writefln("%s = %d", hw, c(hw));
}

Ausgabe:

Hello World! = 1085

D (Programm: 133)

Zählt keine Zeilenumbrüche.

void main(){import std.algorithm,std.stdio;stdin.byLine.map!((a){int s;foreach(e;a){s+=cast(int)e;}return s;}).reduce!"a+b".writeln;}

Mit mehr Leerzeichen und längeren Variablennamen zur besseren Lesbarkeit

void main () {
    import std.algorithm, std.stdio;

    stdin.byLine
        .map!((line) {
                int sum;
                foreach (ch; line) {
                    sum += cast(int)ch;
                }
                return sum;
            })
        .reduce!"a+b"
        .writeln;
}

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.

Hugo Dubé
quelle
+1 für die Veröffentlichung, auch wenn Sie wissen, dass Sie nicht gewinnen werden
Knerd
1

JavaScript (ES6) 54 58

alert([].reduce.call(prompt(),(v,c)=>v+c.charCodeAt(0),0))

54 Bytes dank nderscore :

alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
core1024
quelle
Funktioniert gut, ich habe es mittlerweile in es6fiddle.net
Knerd
Du
könntest
1
Ich war also auf der Arbeit: D
Knerd
1
54:alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
nderscore
1
alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
Habe
1

Delphi ( 87 83)

function x(s:string):int64;var c:char;begin x:=0;for c in s do x:=result+ord(c)end;

Ungolfed

function x(s:string):int64;
var
  c:char;
begin
  x:=0;
  for c in s do
    x:=result+ord(c)
end;

Schleifen durch S Addition orddes Zeichenwerts zum Ergebnis. Wobei x == Ergebnis

Bearbeitungen:

4 Zeichen durch Umschalten auf int64 und Ändern der Addition zur Summe gespeichert.

Teun Pronk
quelle
Haben Sie eine kostenlose Version von Delphi (geben Sie Ihre Version hier ein)?
Knerd
Hm .. Tut mir nicht wirklich leid. Aber ich kann ungegolft erklären, was wo passiert und ein paar Testfälle machen, wenn Sie wollen. Free Pascal hat mehr oder weniger die gleiche Syntax, so dass Sie das tun können.
Teun Pronk
Ok, ich werde das überprüfen.
Knerd
1

k (8 Zeichen)

+/6h$0:0

Q Übersetzung

sum `int$read0 0

Bonuswert:

k)+/6h$0:0
+/6h$0:0
438i
Skeevey
quelle
1

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)

+/a.i.b

Erläuterung:

a.

┌┬┐├┼┤└┴┘│─ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������

a. enthält alle ASCII-Zeichen.

   'people' i. 'pow'
0 2 6

x i. yist ähnlich wie Python [x.index(i) for i in y].

   a. i. 'Hello World!'
72 101 108 108 111 32 87 111 114 108 100 33

Hierfür, a. i. ywandelt yin ein Array von Werten seiner ASCII

   +/1 2 3 4 5 6
21

+/ist wie sum: +/1 2 3 4 5 6bedeutet1+2+3+4+5+6

   +/ a. i. 'Hello World!'
1085

Das Ganze in Aktion

Für den Bonus:

   b=:'+/a.i.b'
   +/a.i.b
482

Nicht schlecht, denke ich.

   b=:'0\{+}/'
   +/a.i.b
478

Na verdammt.

   A=:'+/a.i.A'
   +/a.i.A
449

Vielen Dank, @algorithmshark

    A=:'+/3 u:A'
    +/3 u:A
413

Vielen Dank @marinus

ɐɔıɐɔuʇǝɥʇs
quelle
+1 für die gute Erklärung. Eine kleine Frage, wo kann ich J am besten ausführen?
Knerd
1
@Knerd Von den Machern ( jsoftware.com ) Ich kenne wohl keine Online-Dolmetscher. ( Unterhaltsame
ɐɔıɐɔuʇǝɥʇs
@Synthectica Das ist cool: D Jetzt brauche ich ein Android-Smartphone: P
Knerd
Das Umbenennen bin Aergibt eine Punktzahl von 449.
algorithmshark
@algorithmshark Oh, richtig! Ich werde diesen Stern fürs
Erste
1

R, 35 Zeichen (Summe von 3086) 26 Bytes (Summe von 2305)

sum(utf8ToInt(readline()))

readline()ist ein Zeichen länger als scan(,""), scanteilt die Eingabe jedoch standardmäßig in Leerzeichen auf.

Verwendung:

> sum(utf8ToInt(readline()))
Hello World!
[1] 1085
> sum(utf8ToInt(readline()))
sum(utf8ToInt(readline()))
[1] 2305
> sum(utf8ToInt(readline()))
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!(
[1] 14835
Plannapus
quelle
1

Japt , 6 Bytes (nicht konkurrierend)

Diese Antwort ist nicht konkurrierend, da Japt erstellt wurde, nachdem diese Herausforderung veröffentlicht wurde.

U¬mc x

Ziemlich einfach. Probieren Sie es online!

Wie es funktioniert

U¬mc x  // Implicit: U = input string
U¬      // Split U into chars.
  mc    // Map each item to its char code.
     x  // Sum.
        // Implicit: output last expression
ETHproductions
quelle
Warum hast du dich aus Neugier nicht ¬auf irgendeine Art von Negation festgelegt?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Weil ich es eilig hatte und sie nur nach Bedarf zugewiesen habe, ohne vorher zu planen. Ich habe ein Set, das sinnvoller ist, um es durch Ändern einer Codezeile einzuführen, aber ich bin darüber misstrauisch, weil es fast jede vorhandene Antwort ungültig machen würde.
ETHproductions
Das ist eine einfache Lösung. Fügen Sie dem Header eine Bedingung hinzu (z. B. url/interpreter.html#new=1). Alles, was nicht vorhanden ist, verwendet den alten Zeichensatz, und alles, was vorhanden ist, verwendet den neuen Zeichensatz.
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Danke, das überlege ich mir.
ETHproductions
1

PlatyPar , 2 Bytes (nicht konkurrierend)

us

Probieren Sie es online !

ugeneriert ein Array aller Zeichencodewerte in der Eingabezeichenfolge und ermittelt sderen 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).

Cyoce
quelle