Herausforderung
Bei einer Zeichenkette wie Hello World!
, brechen sie in ihre Charakterwerte: 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33
.
Dann berechnet die Differenz zwischen jedem aufeinander folgenden Paar von Zeichen: 29, 7, 0, 3, -79, 55, 24, 3, -6, -8, -67
.
Schließlich sie summieren und das Endergebnis drucken: -39
.
Regeln
- Es gelten Standardlücken
- Verwenden Sie keine vorgefertigten Funktionen, die genau diese Aufgabe ausführen
- Kreative Lösungen werden gefördert
- Habe Spaß
- Dies ist als Code-Golf markiert , die kürzeste Antwort in Bytes gewinnt, wird aber nicht ausgewählt.
code-golf
string
number
arithmetic
array-manipulation
dkudriavtsev
quelle
quelle
Antworten:
Python, 29 Bytes
Die Summe der Differenzen bildet eine Teleskopreihe, daher heben sich die meisten Summanden auf und
(s 1 - s 0 ) + (s 2 - s 1 ) +… + (s n-1 - s n-2 ) + (s n - s n-1 ) = s n - s 0 .
Wenn die Eingabe einer Byte-Zeichenfolge zulässig ist
funktioniert auch für 19 Bytes .
Testen Sie beide auf Ideone .
quelle
MATL , 2 Bytes
Probieren Sie es online!
Erläuterung:
d
Ermittelt den Unterschied zwischen aufeinanderfolgenden Zeichen unds
summiert das resultierende Array. Dann wird implizit der Wert oben auf dem Stapel gedruckt. Darüber gibt es sonst nicht viel zu sagen.Interessanterweise wäre die Verwendung in MATL bedeutend länger, obwohl Dennis eine großartige Verknüpfung entdeckt hat.
quelle
Gelee , 3 Bytes
Probieren Sie es online!
Nehmen Sie das
O
rdinals der Zeichen der Eingabezeichenfolge, dann dieI
ncrements dieser Liste, dann ist dieS
um von dieser Liste.quelle
MATLAB, 16 Bytes
Dies schafft eine anonyme Funktion mit dem Namen ,
ans
die wie genannt werden können:ans('Hello world!')
.Hier ist eine Online-Demo in Octave, die ein zusätzliches Byte erfordert
+
, um die Eingabezeichenfolge explizit in ein numerisches Array umzuwandeln, bevor die Element-zu-Element-Differenz berechnet wirdquelle
Python, 63 Bytes
Ideone es!
quelle
Cubix , 13 Bytes
Cubix ist eine zweidimensionale Sprache, die um einen Würfel gewickelt ist.
Online testen! Dies wird dem folgenden Würfelnetz zugeordnet:
Wo der IP (Anweisungszeiger) oben links auf der linken Seite beginnt.
Wie es funktioniert
Zuerst trifft die IP auf den Spiegel,
/
der sie aufi
die Oberseite umleitet . Die Oberseite ist eine Schleife, die kontinuierlich Zeichencodes eingibt, bis EOF erreicht ist. Wenn die Eingabe leer ist, ist das Ergebnis voni
-1; Die IP biegt nach links ab?
, trifft/
ganz rechts auf und führt die folgenden Befehle aus:;
- Pop das oberste Element (-1).#
- Schieben Sie die Länge des Stapels.t
- Pop das oberste Element und erhalten Sie das Element an diesem Index im Stapel. Dies zieht den unteren Gegenstand hoch.-
- Subtrahieren.O
- Ausgabe als Ganzzahl./
- Leitet die IP an die weiter@
, die das Programm beendet.quelle
C #, 22 Bytes
Vollständiger Quellcode mit Testfall:
C # mit LINQ, 17 Bytes
Eine kürzere Version mit LINQ, dank hstde :
Ein zusätzlicher Import ist jedoch erforderlich:
quelle
s=>s.Last()-s[0];
wären nur 17 bytesRuby, 23 Bytes
Zuweisung zu einer Variablen wie
f=->s{s[-1].ord-s[0].ord}
und Aufruf wief["Hello World!"]
Verwendet Dennis 'Beobachtung über Teleskopserien.
quelle
$><<
.netzförmig, 12 Bytes
Probieren Sie es online!
Mit Dennis 'Beobachtung können wir einen iterativen Prozess in einen einfacheren verkürzen.
quelle
Brain-Flak , 51 Bytes
48 Byte Code plus drei Byte für das
-a
Flag, das die ASCII-Eingabe (aber die Dezimalausgabe) ermöglicht. Wie praktisch.: D)Probieren Sie es online!
Diese diejenigen ein wenig etwas härter als meine andere Antwort, haha. Lass uns durchgehen.
quelle
05AB1E , 3 Bytes
Probieren Sie es online!
Verwendet die CP-1252-Codierung.
Erläuterung
quelle
Brachylog , 7 Bytes
Probieren Sie es online!
Erläuterung
Da subtrahieren nur für eine Eingabe von zwei ganzen Zahlen funktioniert, ist dies erfolgreich, sobald das ausgewählte Präfix lautet
[33, 72]
.quelle
Haskell, 32 Bytes
quelle
R,
69 4332 BytesEine sehr konkurrenzlose Antwort, obwohl ich dachte, es würde Spaß machen, eine mögliche Lösung in R zu präsentieren.
Der einzig interessante Aspekt dieser Antwort ist die Verwendung von
sapply
undcharToRaw
. Zuerst teile ich den String in einen Vektor von Zeichen auf, den ich in seine ASCII-Integer-Darstellungen konvertieren möchte. DiecharToRaw
Funktion wird in R nicht vektorisiert und stattdessen über jeden Wert in dem zuvor erwähnten von mir verwendeten Vektor geschleiftsapply
wodurch die Funktion effektiv vektorisiert wird. Anschließend 1. Differenz nehmen und dann summieren.Bearbeiten: Es stellt sich heraus
charToRaw
, dass eine Zeichenfolge in einen Vektor transformiert wird, bei dem jedes Element die Rohdarstellung jedes Zeichens ist und daher nichtstrsplit
und verwendet werden musssapply
Edit2: Es stellt sich heraus, dass es einen noch besseren Weg gibt, die Funktion
utf8ToInt(x)
macht genau das,strtoi(charToRaw(x),16)
was bedeutet, dass wir ein paar weitere Bytes sparen können (Idee aus der Antwort von @ rturnbull auf eine andere Frage):quelle
Perl, 19 Bytes
Beinhaltet +1 für
-p
Geben Sie eine Eingabe für STDIN ohne letzte Zeile ein
slope.pl
:Wenn Sie sicher sind, dass die Eingabezeichenfolge mindestens 2 Zeichen enthält, funktioniert auch diese 17-Byte-Version:
quelle
NodeJS, 82 Bytes
Erläuterung:
JavaScript, 79 Bytes
Dieselbe Idee wie oben mit einer Funktionseingabe anstelle eines Arguments.
quelle
x
es sich um die Eingabe handelt. Sie müssen tatsächlich Eingaben erhalten.f=x=>{...;return t}
um 2 Bytes zu sparen;)JavaScript ES6,
4239 BytesMit @Dennis Beobachtung über Teleskopsummen.
Ich denke in diesem Fall ist die triviale Lösung die kürzeste.3 Bytes gespart, indem die
charCodeAt
von @Neil vorgeschlagene Wiederholung beseitigt wurde.quelle
s=>s.slice(-1).charCodeAt()-s.charCodeAt()
die gleiche Länge.charCodeAt
ist es ziemlich lang, wahrscheinlich gibt es eine Möglichkeit, Bytes zu sparen, indem die Wiederholung vermieden wird.f=s=>(s[1]?-f(s.slice(-1)):0)-s.charCodeAt()
Viertens 28 Bytes
Nimmt eine Liste von Zeichen auf dem Stapel auf (Forths Standardmethode zum Aufnehmen von Parametern). Die Zeichen werden so aufgenommen, dass der Anfang des Stapels das erste Zeichen der Zeichenfolge ist. Ich bewege die Unterseite des Stapels nach oben, tausche, subtrahiere und drucke. Der Müll bleibt auf dem Stapel, und die Ausgabe wird auf stdout gedruckt.
Wenn jedes Zeichen in umgekehrter Reihenfolge in den Stapel geschoben würde, wäre das Programm 2 Byte kürzer. Ich bin mir jedoch nicht sicher, ob dies zulässig ist, da Sie Argumente normalerweise in umgekehrter Reihenfolge übergeben.
Probieren Sie es online aus
So genannt:
quelle
Java, 42
Ungolfed:
Erläuterung:
Dabei wird dasselbe Prinzip wie beim Teleskopieren angewendet:
Verallgemeinert auf eine beliebige Folge von Zeichen mit einer Länge
n
lautet die Antwort,c[n-1] - c[0]
weil das gesamte Zeug in der Mitte gelöscht wird.quelle
PHP 7.1,
3331 BytesVerwendet negative String-Offsets, die in PHP 7.1 implementiert sind.
Laufen Sie wie folgt:
Optimierungen
$argn
quelle
RProgN , 142 Bytes, nicht konkurrierend
Nicht konkurrierend, da der Befehl "tostack" nach der Entdeckung dieser Herausforderung hinzugefügt wurde (obwohl er eine schreckliche Anzahl von Bytes aufweist)
Testfälle
Erläuterung
RProgN ist eine esoterische Sprache, an der ich mit Blick auf die umgekehrte polnische Notation gearbeitet habe. Es ist derzeit ziemlich ausführlich, mit einer variablen Zuweisung von 4 Zeichen, und ich plane jedoch, in Zukunft ein bisschen syntatischen Zucker hinzuzufügen.
Außerdem greift RProgN implizit auf Argumente aus dem Stapel zu und gibt sie auf dieselbe Weise zurück. Alle Zeichenfolgendaten, die nach Beendigung des Programms im Stapel verbleiben, werden implizit gedruckt.
quelle
~{bid☼[+
und das ist ein bisschen bezaubernd.PHP, 36 Bytes
→ Summe der Unterschiede == Unterschied zwischen erstem und letztem Zeichen
ord()
in PHP wird das erste Zeichen eines Strings bearbeitet→ es muss nicht explizit auf ein einzelnes Zeichen reduziert werden
quelle
Brain-Flak ,
3432 + 3 = 35 Bytes+3 wegen des
-a
für den ASCII-Modus erforderlichen Flags.Probieren Sie es online aus
Seltsamerweise ist es effizienter, die in den Spezifikationen verwendete Definition zu verwenden, als den "Trick", zuerst vom letzten zu subtrahieren.
Das funktioniert genau so.
quelle
CJam ,
85 BytesVielen Dank an Dennis für zwei Vorschläge, die 3 Bytes entfernt haben
Probieren Sie es online!
Erläuterung
Berechnet den letzten Wert minus dem ersten Wert.
quelle
)
statt verwendenW=
, brauchen Sie das nicht_
. Auchc
als Abkürzung für0=
.Haskell, 36 Bytes
Verwendung:
Haskell (Lambdabot), 31 Bytes
quelle
sum.(tail>>=zipWith(-)).map fromEnum
zum Beispiel ist eine Funktion.Zsh , 22 Bytes
Probieren Sie es online!
Ruft im arithmetischen Modus
#name
den Zeichencode des ersten Zeichens in abname
. Wir setzenc
auf das letzte Zeichen und nehmen den Unterschied zwischen dem ersten und dem letzten Code.quelle
Haskell , 30 Bytes
Probieren Sie es online!
Subtrahiert den Ordnungswert des letzten Zeichens vom ersten.
quelle
Haskell, 61 Bytes
quelle
Java 7,
10096 BytesUngolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
-39
quelle
Clojure, 31 Bytes
Jemand hat die Aufgabe bereits auf eine einzige Operation reduziert.
quelle