Este desafío es un poco complicado, pero bastante simple, dada una cadena s
:
meta.codegolf.stackexchange.com
Use la posición del carácter en la cadena como x
coordenada y el valor ascii como y
coordenada. Para la cadena anterior, el conjunto resultante de coordenadas sería:
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
A continuación, debe calcular tanto la pendiente como la intersección con el eje y del conjunto que ha obtenido utilizando Regresión lineal , aquí está el conjunto anterior trazado:
Lo que da como resultado una línea de mejor ajuste de (índice 0):
y = 0.014516129032258x + 99.266129032258
Aquí está la línea de mejor ajuste indexada 1 :
y = 0.014516129032258x + 99.251612903226
Entonces su programa volvería:
f("meta.codegolf.stackexchange.com") = [0.014516129032258, 99.266129032258]
O (cualquier otro formato sensible):
f("meta.codegolf.stackexchange.com") = "0.014516129032258x + 99.266129032258"
O (cualquier otro formato sensible):
f("meta.codegolf.stackexchange.com") = "0.014516129032258\n99.266129032258"
O (cualquier otro formato sensible):
f("meta.codegolf.stackexchange.com") = "0.014516129032258 99.266129032258"
Simplemente explique por qué está volviendo en ese formato si no es obvio.
Algunas reglas aclaratorias:
- 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).
Este es el código de golf más bajo de conteo de bytes gana.
0.014516129032258x + 99.266129032258
?Respuestas:
MATL , 8 bytes
Se utiliza la indexación de cadenas basada en 1.
Pruébalo en línea!
Explicación
fuente
Octava,
29262420 bytesPruébalo en línea!
Tenemos el modelo
Aquí
y
está el valor ASCII de cadenas
Para encontrar los parámetros de intercepción y pendiente podemos formar la siguiente ecuación:
asi que
!!s
convierte una cadena en un vector de unos con la misma longitud que la cadena.El vector de unos se usa para estimar la intersección.
1:nnz(s)
es un rango de valores desde 1 hasta el número de elementos de la cadena utilizada comox
.Respuesta anterior
Para la prueba, pegue el siguiente código en Octave Online
Una función que acepta una cadena como entrada y aplica la estimación ordinaria de mínimos cuadrados del modelo
y = x*b + e
El primer argumento de ols es
y
que para ello transponemos la cadenas
y agregamos con el número 0 para obtener su código ASCII.fuente
/
, ¡gran idea!TI-Basic, 51 (+ 141) bytes
Las cadenas están basadas en 1 en TI-Basic.
Al igual que el otro ejemplo, esto genera la ecuación de la línea de mejor ajuste, en términos de X. Además, en Str2 necesita tener esta cadena, que es 141 bytes en TI-Basic:
La razón por la que esto no puede ser parte del programa es porque dos caracteres en TI-Basic no se pueden agregar automáticamente a una cadena. Una es la
STO->
flecha, pero esto no es un problema porque no es parte de ASCII. El otro es el literal de cadena ("
), que solo se puede stringificar escribiendo unaY=
ecuación y usandoEqu>String(
.fuente
"
de caracteres solicitándolo también como entrada del usuario en un programa, lo que no lo ayuda aquí, pero solo quería señalar ese hecho. 2, no reconozco algunos de esos caracteres como existentes en la calculadora. Podría estar equivocado, pero por ejemplo, ¿de dónde sacas@
y~
? Así como#
,$
, y&
.R,
4645 bytesLee la entrada de stdin y para el caso de prueba dado devuelve (un índice):
fuente
lm(utf8ToInt(y<-scan(,""))~1:nchar(y))$co
x
variable tiene que estar predefinida paralm
que funcione.s
así quex=1:nchar(s);lm(charToRaw(s)~x)$co
guarda algunos bytes. Tampoco sé si$co
es técnicamente necesario, ya que todavía obtienes el intercepto + coeficiente sin élPython,
8280 bytes-2 bytes gracias a @Mego
Utilizando
scipy
:fuente
f=
.numpy.linalg.lstsq
aparentemente difiere en argumentosscipy.stats.linregress
y es más complejo.Mathematica, 31 bytes
Función sin nombre que toma una cadena como entrada y devuelve la ecuación real de la línea de mejor ajuste en cuestión. Por ejemplo,
f=Fit[ToCharacterCode@#,{1,x},x]&; f["meta.codegolf.stackexchange.com"]
vuelve99.2516 + 0.0145161 x
.ToCharacterCode
convierte una cadena ASCII en una lista de los valores ASCII correspondientes; de hecho, por defecto es UTF-8 de manera más general. (Un poco triste, en este contexto, que el nombre de una función comprende más del 48% de la longitud del código ...) YFit[...,{1,x},x]
es el incorporado para calcular la regresión lineal.fuente
Node.js, 84 bytes
Utilizando
regression
:Manifestación
fuente
Sabio, 76 bytes
Casi ningún juego de golf, probablemente más que una respuesta de Python, pero sí ...
fuente
J , 11 bytes
Esto usa indexación basada en uno.
Pruébalo en línea!
Explicación
fuente
JavaScript,
151148bytesMás legible:
Mostrar fragmento de código
fuente
0
dec.charCodeAt(0)
, y otros 2 bytes moviendo elk=...
grupo de coma y ponerlo directamente en el primer índice de la matriz devuelta como[k=...,(d-k*b)/a]
Javascript (ES6), 112 bytes
fuente
Haskell,
154142 bytesEs demasiado largo para mi gusto debido a las importaciones y nombres largos de funciones, pero bueno. No se me ocurrió ningún otro método de golf, aunque no soy un experto en el área de las importaciones de golf.
Se eliminaron 12 bytes al reemplazarlos
ord
y la importación deData.Char
fromEnum gracias a nimi.fuente
ord
confromEnum
y deshacerse de élimport Data.Char
.Lenguaje de macros SAS, 180 bytes
Utiliza indexación basada en 1. La solución se vuelve bastante prolija cuando la salida es solo la pendiente y la intersección.
fuente
Clojure, 160 bytes
Sin elementos integrados, utiliza el algoritmo iterativo descrito en el artículo de Perceptron . Es posible que no converja en otras entradas, en ese caso, reduzca la tasa de aprendizaje
2e-4
y quizás aumente el recuento de iteraciones1e5
. No estoy seguro si el algoritmo no iterativo hubiera sido más corto de implementar.Ejemplo:
fuente
Arce, 65 bytes
Uso:
Devoluciones:
Notas: Utiliza el comando Ajustar para ajustar un polinomio de la forma a * x + b a los datos. Los valores ASCII para la cadena se encuentran convirtiendo a bytes.
fuente