Diese Herausforderung ist etwas knifflig, aber angesichts einer Zeichenfolge ziemlich einfach s
:
meta.codegolf.stackexchange.com
Verwenden Sie die Position des Zeichens in der Zeichenfolge als x
Koordinate und den ASCII-Wert als y
Koordinate. Für die obige Zeichenfolge wäre der resultierende Satz von Koordinaten:
0, 109
1, 101
2, 116
3, 97
4, 46
5, 99
6, 111
7, 100
8, 101
9, 103
10,111
11,108
12,102
13,46
14,115
15,116
16,97
17,99
18,107
19,101
20,120
21,99
22,104
23,97
24,110
25,103
26,101
27,46
28,99
29,111
30,109
Als nächstes müssen Sie sowohl die Steigung als auch den y-Achsenabschnitt der Menge berechnen, die Sie mit der linearen Regression erhalten haben.
Was zu einer Best-Fit-Linie von (0-indexiert) führt:
y = 0.014516129032258x + 99.266129032258
Hier ist die 1-indizierte Best-Fit-Linie:
y = 0.014516129032258x + 99.251612903226
So würde Ihr Programm zurückkehren:
f("meta.codegolf.stackexchange.com") = [0.014516129032258, 99.266129032258]
Oder (jedes andere sinnvolle Format):
f("meta.codegolf.stackexchange.com") = "0.014516129032258x + 99.266129032258"
Oder (jedes andere sinnvolle Format):
f("meta.codegolf.stackexchange.com") = "0.014516129032258\n99.266129032258"
Oder (jedes andere sinnvolle Format):
f("meta.codegolf.stackexchange.com") = "0.014516129032258 99.266129032258"
Erklären Sie einfach, warum es in diesem Format zurückgegeben wird, wenn es nicht offensichtlich ist.
Einige klärende Regeln:
- Strings are 0-indexed or 1 indexed both are acceptable.
- Output may be on new lines, as a tuple, as an array or any other format.
- Precision of the output is arbitrary but should be enough to verify validity (min 5).
Dies ist Code-Golf mit der niedrigsten Anzahl an Bytes.
0.014516129032258x + 99.266129032258
.Antworten:
MATL , 8 Bytes
1-basierte Zeichenfolgenindizierung wird verwendet.
Probieren Sie es online!
Erläuterung
quelle
Oktave,
29262420 BytesProbieren Sie es online!
Wir haben das Modell
Hier
y
ist der ASCII-Wert von strings
Um die Parameter Schnittpunkt und Steigung zu finden, können wir die folgende Gleichung bilden:
so
!!s
wandelt eine Zeichenkette in einen Vektor mit der gleichen Länge wie die Zeichenkette um.Der Vektor von Einsen wird zur Abschätzung des Abschnitts verwendet.
1:nnz(s)
Der Wertebereich von 1 bis zur Anzahl der Elemente der Zeichenfolge, die als verwendet wirdx
.Vorherige Antwort
Fügen Sie zum Testen den folgenden Code in Octave Online ein
Eine Funktion, die eine Zeichenfolge als Eingabe akzeptiert und die gewöhnliche Schätzung der kleinsten Quadrate des Modells anwendet
y = x*b + e
Das erste Argument von ols ist,
y
dass wir dafür den String transponierens
und mit der Zahl 0 addieren, um seinen ASCII-Code zu erhalten.quelle
/
, großartige Idee!TI-Basic, 51 (+ 141) Bytes
Strings sind in TI-Basic 1-basiert.
Wie im anderen Beispiel wird hiermit die Gleichung der Best-Fit-Linie in Bezug auf X ausgegeben. Außerdem muss in Str2 diese Zeichenfolge vorhanden sein, die in TI-Basic 141 Byte beträgt:
Der Grund, warum dies nicht Teil des Programms sein kann, ist, dass zwei Zeichen in TI-Basic nicht automatisch zu einer Zeichenfolge hinzugefügt werden können. Einer ist der
STO->
Pfeil, aber dies ist kein Problem, da er nicht Teil von ASCII ist. Das andere ist das Zeichenfolgenliteral ("
), das nur durch EingebenY=
und Verwenden einer Gleichung angegeben werden kannEqu>String(
.quelle
"
indem Sie sie auch als Benutzereingabe in einem Programm eingeben. Dies hilft Ihnen hier nicht weiter, aber ich wollte nur darauf hinweisen. 2, ich erkenne einige dieser Zeichen nicht als auf dem Taschenrechner vorhanden. Ich könnte mich irren, aber woher bekommst du zum Beispiel@
und~
? Sowie#
,$
und&
.R
4645 BytesLiest die Eingabe von stdin und gibt für den angegebenen Testfall Folgendes zurück (einsindiziert):
quelle
lm(utf8ToInt(y<-scan(,""))~1:nchar(y))$co
x
Variable vordefiniert sein muss, damitlm
sie funktioniert.s
also einx=1:nchar(s);lm(charToRaw(s)~x)$co
paar Bytes gespart. Ich weiß auch nicht, ob das$co
technisch notwendig ist, da Sie immer noch den Achsenabschnitt + Koeffizienten ohne ihn erhaltenPython,
82 bis80 Bytes-2 Bytes dank @Mego
Verwenden von
scipy
:quelle
f=
.numpy.linalg.lstsq
unterscheidet sich anscheinend in Argumentenscipy.stats.linregress
und ist komplexer.Mathematica, 31 Bytes
Unbenannte Funktion, die eine Zeichenfolge als Eingabe verwendet und die tatsächliche Gleichung der betreffenden Best-Fit-Linie zurückgibt. Zum Beispiel
f=Fit[ToCharacterCode@#,{1,x},x]&; f["meta.codegolf.stackexchange.com"]
kehrt zurück99.2516 + 0.0145161 x
.ToCharacterCode
konvertiert eine ASCII-Zeichenfolge in eine Liste der entsprechenden ASCII-Werte; In der Tat ist UTF-8 der Standard. (In diesem Zusammenhang ist es ein bisschen traurig, dass ein Funktionsname mehr als 48% der Codelänge ausmacht ....) UndFit[...,{1,x},x]
ist die integrierte Funktion zur Berechnung der linearen Regression.quelle
Node.js, 84 Bytes
Verwenden von
regression
:Demo
quelle
Salbei, 76 Bytes
Kaum ein Golfspiel, wahrscheinlich länger als eine Python-Antwort, aber ja ...
quelle
J , 11 Bytes
Dies verwendet eine einseitige Indizierung.
Probieren Sie es online!
Erläuterung
quelle
JavaScript,
151.148BytesBesser lesbar:
Code-Snippet anzeigen
quelle
0
aus entfernenc.charCodeAt(0)
, und weitere 2 Bytes, indem Sie diek=...
Kommagruppe verschieben und sie direkt in den ersten Index des zurückgegebenen Arrays einfügen, z. B.[k=...,(d-k*b)/a]
Javascript (ES6), 112 Bytes
quelle
Haskell,
154142 BytesEs ist viel zu lang für meinen Geschmack wegen der Importe und langen Funktionsnamen, aber gut. Ich konnte mir keine andere Golfmethode vorstellen, obwohl ich kein Experte auf dem Gebiet der Golfimporte bin.
12 Bytes entfernt durch Ersetzen
ord
und den Import vonData.Char
von Enum dank Nimi.quelle
ord
mitfromEnum
und loszuwerdenimport Data.Char
.SAS-Makrosprache, 180 Byte
Verwendet 1-basierte Indizierung. Die Lösung wird ziemlich wortreich, wenn es sich bei der Ausgabe nur um die Steigung und den Achsenabschnitt handelt.
quelle
Clojure, 160 Bytes
Keine integrierten Funktionen, verwendet den im Artikel von Perceptron beschriebenen iterativen Algorithmus . Konvergieren Sie
2e-4
möglicherweise nicht mit anderen Eingaben. Verringern Sie in diesem Fall die Lernrate und erhöhen Sie möglicherweise die Iterationszahl1e5
. Ich bin nicht sicher, ob die Implementierung des nicht-iterativen Algorithmus kürzer gewesen wäre.Beispiel:
quelle
Ahorn, 65 Bytes
Verwendung:
Kehrt zurück:
Hinweise: Diese verwendet das Fit - Befehl ein Polynom der Form a * x + b auf die Daten passen. Die ASCII-Werte für den String werden durch Konvertieren in Bytes ermittelt.
quelle