Esse desafio é um pouco complicado, mas bastante simples, dada uma sequência s
:
meta.codegolf.stackexchange.com
Use a posição do caractere na string como x
coordenada e o valor ascii como y
coordenada. Para a sequência acima, o conjunto resultante de coordenadas seria:
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
Em seguida, você deve calcular a inclinação e o intercepto em y do conjunto que você obteve usando a regressão linear , aqui está o conjunto acima plotado:
O que resulta em uma linha de melhor ajuste (indexada 0):
y = 0.014516129032258x + 99.266129032258
Aqui está a linha de melhor ajuste indexada em 1 :
y = 0.014516129032258x + 99.251612903226
Portanto, seu programa retornaria:
f("meta.codegolf.stackexchange.com") = [0.014516129032258, 99.266129032258]
Ou (qualquer outro formato sensível):
f("meta.codegolf.stackexchange.com") = "0.014516129032258x + 99.266129032258"
Ou (qualquer outro formato sensível):
f("meta.codegolf.stackexchange.com") = "0.014516129032258\n99.266129032258"
Ou (qualquer outro formato sensível):
f("meta.codegolf.stackexchange.com") = "0.014516129032258 99.266129032258"
Apenas explique por que está retornando nesse formato, se não for óbvio.
Algumas regras de esclarecimento:
- 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).
São as vitórias mais baixas em contagem de bytes do code-golf .
0.014516129032258x + 99.266129032258
?Respostas:
MATL , 8 bytes
A indexação de string com base em 1 é usada.
Experimente online!
Explicação
fonte
Oitava,
29262420 bytesExperimente Online!
Nós temos o modelo
Aqui
y
está o valor ASCII da strings
Para encontrar parâmetros de interceptação e inclinação, podemos formar a seguinte equação:
então
!!s
converte uma string em um vetor de uns com o mesmo comprimento que a string.O vetor de uns é usado para estimar a interceptação.
1:nnz(s)
é o intervalo de valores de 1 a número de elementos da sequência usada comox
.Resposta anterior
Para teste, cole o seguinte código no Octave Online
Uma função que aceita uma string como entrada e aplica uma estimativa ordinária de mínimos quadrados do modelo
y = x*b + e
O primeiro argumento de ols é
y
que, para isso, transpomos a strings
e adicionamos com o número 0 para obter seu código ASCII.fonte
/
, boa ideia!TI-Basic, 51 (+ 141) bytes
As strings são baseadas em 1 no TI-Basic.
Como no outro exemplo, isso gera a equação da linha de melhor ajuste, em termos de X. Além disso, em Str2, você precisa ter essa sequência, que é de 141 bytes no TI-Basic:
A razão pela qual isso não pode fazer parte do programa é porque dois caracteres no TI-Basic não podem ser adicionados automaticamente a uma sequência. Uma é a
STO->
seta, mas isso não é um problema, porque não faz parte do ASCII. A outra é a string literal ("
), que pode ser modificada apenas digitando em umaY=
equação e usandoEqu>String(
.fonte
"
, solicitando também a entrada do usuário em um programa, o que não ajuda aqui, mas eu só queria apontar esse fato. 2, não reconheço alguns desses caracteres como existentes na calculadora. Eu posso estar errado, mas por exemplo, onde você consegue@
e~
? Bem como#
,$
e&
.R,
4645 bytesLê a entrada de stdin e para os retornos de caso de teste fornecidos (um indexado):
fonte
lm(utf8ToInt(y<-scan(,""))~1:nchar(y))$co
x
variável precisa ser predefinida paralm
funcionar.s
portanto,x=1:nchar(s);lm(charToRaw(s)~x)$co
salva alguns bytes. Eu também não sei se o$co
é tecnicamente necessário, como você ainda obter o coeficiente de intercepção + sem elePython,
8280 bytes-2 bytes graças a @Mego
Usando
scipy
:fonte
f=
.numpy.linalg.lstsq
aparentemente difere em argumentosscipy.stats.linregress
e é mais complexo.Mathematica, 31 bytes
Função sem nome, usando uma string como entrada e retornando a equação real da linha de melhor ajuste em questão. Por exemplo,
f=Fit[ToCharacterCode@#,{1,x},x]&; f["meta.codegolf.stackexchange.com"]
retorna99.2516 + 0.0145161 x
.ToCharacterCode
converte uma string ASCII em uma lista dos valores ASCII correspondentes; na verdade, o padrão é UTF-8 de maneira mais geral. (É meio triste, nesse contexto, que um nome de função represente mais de 48% do comprimento do código ....) EFit[...,{1,x},x]
é o componente interno para calcular a regressão linear.fonte
Node.js, 84 bytes
Usando
regression
:Demo
fonte
Sábio, 76 bytes
Dificilmente qualquer jogador de golfe, provavelmente mais do que uma resposta em Python, mas sim ...
fonte
J , 11 bytes
Isso usa indexação baseada em um.
Experimente online!
Explicação
fonte
JavaScript,
151148 bytesMais legível:
Mostrar snippet de código
fonte
0
dec.charCodeAt(0)
, e mais 2 bytes movendo ok=...
grupo vírgula e colocá-lo diretamente no primeiro índice do array retornado como[k=...,(d-k*b)/a]
Javascript (ES6), 112 bytes
fonte
Haskell,
154142 bytesÉ muito longo para os meus gostos por causa das importações e nomes de funções longos, mas também. Eu não conseguia pensar em nenhum outro método de golfe restante, embora eu não seja especialista na área de importações de golfe.
Retirou 12 bytes substituindo
ord
e importando deData.Char
fromEnum graças a nimi.fonte
ord
comfromEnum
e se livrarimport Data.Char
.Linguagem de Macro SAS, 180 bytes
Usa indexação baseada em 1. A solução fica bastante prolixo quando a saída é apenas a inclinação e a interceptação.
fonte
Clojure, 160 bytes
Sem built-ins, usa o algoritmo iterativo descrito no artigo da Perceptron . Pode não convergir para outras entradas, nesse caso, diminuir a taxa de aprendizado
2e-4
e talvez aumentar a contagem de iterações1e5
. Não tenho certeza se o algoritmo não iterativo teria sido mais curto de implementar.Exemplo:
fonte
Bordo, 65 bytes
Uso:
Devoluções:
Notas: Isso usa o comando Ajustar para ajustar um polinômio do formato a * x + b aos dados. Os valores ASCII para a cadeia são encontrados convertendo para bytes.
fonte