To wyzwanie jest trochę trudne, ale raczej proste, biorąc pod uwagę ciąg znaków s
:
meta.codegolf.stackexchange.com
Użyj pozycji znaku w łańcuchu jako x
współrzędnej i wartości ascii jako y
współrzędnej. W przypadku powyższego ciągu wynikowy zestaw współrzędnych wyglądałby następująco:
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
Następnie musisz obliczyć zarówno nachylenie, jak i punkt przecięcia y zestawu, który uzyskałeś za pomocą regresji liniowej , oto zestaw przedstawiony powyżej:
Co daje linię najlepszego dopasowania (indeksowaną 0):
y = 0.014516129032258x + 99.266129032258
Oto linia najlepiej dopasowanych 1-indeksowanych :
y = 0.014516129032258x + 99.251612903226
Twój program zwróci:
f("meta.codegolf.stackexchange.com") = [0.014516129032258, 99.266129032258]
Lub (dowolny inny rozsądny format):
f("meta.codegolf.stackexchange.com") = "0.014516129032258x + 99.266129032258"
Lub (dowolny inny rozsądny format):
f("meta.codegolf.stackexchange.com") = "0.014516129032258\n99.266129032258"
Lub (dowolny inny rozsądny format):
f("meta.codegolf.stackexchange.com") = "0.014516129032258 99.266129032258"
Po prostu wyjaśnij, dlaczego powraca w tym formacie, jeśli nie jest to oczywiste.
Niektóre zasady wyjaśniające:
- 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).
Jest to wygrana z najmniejszą liczbą bajtów w kodzie golfowym .
0.014516129032258x + 99.266129032258
?Odpowiedzi:
MATL , 8 bajtów
Stosowane jest indeksowanie ciągów 1.
Wypróbuj online!
Wyjaśnienie
źródło
Oktawa,
29262420 bajtówWypróbuj online!
Mamy model
Oto
y
wartość ciągu ASCIIs
Aby znaleźć parametry przechwytywania i nachylenia, możemy utworzyć następujące równanie:
więc
!!s
konwertuje ciąg na wektor o takiej samej długości jak ciąg.Wektor jedynek służy do oszacowania przecięcia.
1:nnz(s)
to zakres wartości od 1 do liczby elementów ciągu używanego jakox
.Poprzednia odpowiedź
Do testu wklej następujący kod do Octave Online
Funkcja, która przyjmuje ciąg jako dane wejściowe i stosuje zwykłe oszacowanie modelu metodą najmniejszych kwadratów
y = x*b + e
Pierwszym argumentem ols jest
y
to, że transponujemy ciągs
i dodajemy z liczbą 0, aby uzyskać jego kod ASCII.źródło
/
, świetny pomysł!TI-Basic, 51 (+ 141) bajtów
Ciągi są oparte na 1 w TI-Basic.
Podobnie jak w innym przykładzie, to wyprowadza równanie linii najlepszego dopasowania pod względem X. Ponadto w Str2 musisz mieć ten ciąg, który w TI-Basic ma 141 bajtów:
Powodem, dla którego nie może być częścią programu, jest to, że dwa znaki w TI-Basic nie mogą być automatycznie dodawane do łańcucha. Jedna to
STO->
strzałka, ale to nie jest problem, ponieważ nie jest częścią ASCII. Drugim jest łańcuch literał ("
), który można skreślić tylko przez wpisanie doY=
równania i użycieEqu>String(
.źródło
"
go o wpisanie również przez użytkownika w programie, co nie pomaga ci tutaj, ale chciałem tylko podkreślić ten fakt. 2, nie rozpoznaję niektórych z tych znaków jako istniejących na kalkulatorze. Mogę się mylić, ale na przykład, skąd można dostać@
i~
? Jak również#
,$
i&
.R,
4645 bajtówOdczytuje dane wejściowe ze standardowego wejścia i dla podanych przypadków testowych zwraca (indeksowane jednym):
źródło
lm(utf8ToInt(y<-scan(,""))~1:nchar(y))$co
x
zmienna musi być wstępnie zdefiniowana,lm
aby działała.s
więcx=1:nchar(s);lm(charToRaw(s)~x)$co
oszczędza niektóre bajty. Nie wiem też, czy$co
jest to technicznie konieczne, ponieważ nadal otrzymujesz współczynnik przechwytywania + bez niegoPython,
8280 bajtów-2 bajty dzięki @Mego
Używanie
scipy
:źródło
f=
.numpy.linalg.lstsq
najwyraźniej różni się argumentamiscipy.stats.linregress
i jest bardziej złożony.Mathematica, 31 bajtów
Nienazwana funkcja pobierająca ciąg wejściowy i zwracająca faktyczne równanie najlepiej pasującej linii. Na przykład
f=Fit[ToCharacterCode@#,{1,x},x]&; f["meta.codegolf.stackexchange.com"]
zwraca99.2516 + 0.0145161 x
.ToCharacterCode
konwertuje ciąg ASCII na listę odpowiednich wartości ASCII; w rzeczywistości domyślnie jest to UTF-8 bardziej ogólnie. (Trochę smutne, w tym kontekście, że nazwa jednej funkcji stanowi ponad 48% długości kodu ....) IFit[...,{1,x},x]
jest wbudowana do obliczania regresji liniowej.źródło
Node.js, 84 bajtów
Używanie
regression
:Próbny
źródło
Szałwia, 76 bajtów
Prawie żadna gra w golfa, prawdopodobnie dłuższa niż golfowa odpowiedź Pythona, ale tak ...
źródło
J , 11 bajtów
Korzysta z indeksowania w oparciu o jeden.
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript,
151148 bajtówBardziej czytelny:
Pokaż fragment kodu
źródło
0
zc.charCodeAt(0)
, a kolejne 2 bajty przez przeniesieniek=...
grupy przecinek i umieszczenie go bezpośrednio w pierwszym indeksem od zwróconej tablicy jak[k=...,(d-k*b)/a]
JavaScript (ES6), 112 bajtów
źródło
Haskell,
154142 bajtyJest o wiele za długi dla moich upodobań ze względu na import i długie nazwy funkcji, ale cóż. Nie mogłem wymyślić żadnej innej metody gry w golfa, chociaż nie jestem ekspertem w dziedzinie importu golfa.
Usunięto 12 bajtów, zastępując je
ord
i importującData.Char
przez fromEnum dzięki nim.źródło
ord
zfromEnum
i pozbyćimport Data.Char
.SAS Macro Language, 180 bajtów
Wykorzystuje indeksowanie 1. Rozwiązanie staje się dość niewygodne, gdy wyjście jest tylko nachyleniem i przechwyceniem.
źródło
Clojure, 160 bajtów
Brak wbudowanych, wykorzystuje iteracyjny algorytm opisany w artykule Perceptron . Może nie zbiegać się z innymi danymi wejściowymi, w takim przypadku obniż szybkość uczenia się
2e-4
i może zwiększyć liczbę iteracji1e5
. Nie jestem pewien, czy nie iteracyjny algorytm byłby krótszy do wdrożenia.Przykład:
źródło
Klon, 65 bajtów
Stosowanie:
Zwroty:
Uwagi: Używa polecenia Dopasuj, aby dopasować wielomian formy a * x + b do danych. Wartości ASCII dla ciągu można znaleźć, konwertując na bajty.
źródło