Encontre o polinômio


20

Sabemos que f é um polinômio com coeficientes inteiros não negativos.

Dado f (1) e F (1 + f (1)) de retorno f . Você pode gerar f como uma lista de coeficientes, um polinômio no formato ASCII ou semelhante.

Exemplos:

f(1)  f(1+f(1))  f
0     0          0
1     1          1
5     75         2x^2 + 3
30    3904800    4x^4 + 7x^3 + 2x^2 + 8x + 9
1     1073741824 x^30

1
Pergunta aleatória: Estou cansado demais para tentar provar / refutar isso agora, mas é garantido que sempre seremos capazes de obter uma resposta f(1)e f(1+f(1))?
HyperNeutrino

4
@HyperNeutrino Eu não teria feito esse desafio de outra maneira.
precisa saber é

Certo, esse é um bom ponto. Hum. Interessante, vou tentar provar isso amanhã, porque isso é muito interessante. Obrigado pelo desafio interessante!
HyperNeutrino

1
A tag de conversão de base deve ser uma dica?
Thunda 30/03

9
Por mais que este seja um quebra-cabeça fofo, acho que o código é basicamente uma conversão básica. Possivelmente enganar?
Xnor

Respostas:


27

Gelatina , 3 bytes

‘b@

Experimente online!

Retorna o polinômio como uma lista de coeficientes.

Como sabemos que o polinômio possui coeficientes inteiros não negativos, f (b) pode ser interpretado como "os coeficientes do polinômio, tomados como dígitos da base b ", pela definição de uma base. Isso está sujeito à condição de que nenhum dos coeficientes exceda ou seja igual a b , mas sabemos que, porque b é um maior que a soma dos coeficientes (que é f (1) ).

O programa simplesmente incrementa o primeiro argumento ( ) para obter 1 + f (1) , depois chama o átomo de conversão base ( b) com o primeiro argumento como base e o segundo argumento como o número (usando @para trocar a ordem dos argumentos, porque bnormalmente leva o número primeiro e a base segundo)

Esse foi o desafio mais inteligente; obrigado orlp!


13
Como no mundo isso é possível
Thunda

Eu preciso aprender geléia ...
sagiksp

Dennis tem que ver este com certeza.
Erik the Outgolfer

6

Mathematica, 29 28 bytes

Agradecemos a JungHwan Min por economizar 1 byte! (ironicamente, com a Max)

#2~IntegerDigits~Max[#+1,2]&

Função pura, recebendo dois números inteiros não negativos e retornando uma lista de coeficientes (número inteiro não negativo). #2~IntegerDigits~(#+1)seria o mesmo algoritmo da resposta Jelly da maçaneta da porta ; infelizmente, o Mathematica IntegerDigitsengasga quando a base é igual a 1, daí a necessidade de bytes extras Max[...,2].


2
Haha, legal.
JungHwan Min

4

Python 2 , 38 bytes

a,b=input()
while b:print b%-~a;b/=a+1

Experimente online!


produz coeficientes separados por nova linha

Exemplo de saída para 30, 3904800:

9
8
2
7
4

=> 9*x^0 + 8*x^1 + 2*x^2 + 7*x^3 + 4*x^4


3

VBA, 75 bytes

Sub f(b,n)
b=b+1
Do While n>0
s=n Mod b &" " &s
n=n\b
Loop
Debug.?s
End Sub

Quando formata automaticamente, fica assim:

Sub f(b, n)
    b = b + 1
    Do While n > 0
        s = n Mod b & " " & s
        n = n \ b
    Loop
    Debug.Print s
End Sub

O \operador é uma divisão de piso


1

AHK , 63 bytes

a=%1%
b=%2%
a+=1
While b>0
{s:=Mod(b,a) " "s
b:=b//a
}
Send,%s%

A AutoHotkey atribui os números 1-n como nomes de variáveis ​​para os parâmetros recebidos. Isso causa alguns problemas quando você tenta usá-los em funções porque pensa que você quer dizer o número literal 1 em vez da variável denominada 1. A melhor solução alternativa que posso encontrar é atribuí-los a diferentes variáveis.


1

Java, 53 bytes

a->b->{while(b>0){System.out.println(b%-~a);b/=a+1;}}

Mostra uma lista de coeficientes. Graças a ovs para a matemática.

A expressão deve ser atribuída a Function<Integer, IntConsumer>e chamada primeiro applypela função e depois acceptpor int. Nenhuma importação é necessária no Java 9 jshell:

C:\Users\daico>jshell
|  Welcome to JShell -- Version 9-ea
|  For an introduction type: /help intro

jshell> Function<Integer, IntConsumer> golf =
        a->b->{while(b>0){System.out.println(b%-~a);b/=a+1;}}
golf ==> $Lambda$14/13326370@4b9e13df

jshell> golf.apply(30).accept(3904800)
9
8
2
7
4

1

Lisp comum, 87 bytes

(defun p(x y)(multiple-value-bind(q m)(floor y (1+ x))(if(= 0 q)`(,m)`(,m ,@(p x q)))))

Ungolfed:

(defun find-polynomial (f<1> f<1+f<1>>)
  (multiple-value-bind (q m)
      (floor f<1+f<1>> (1+ f<1>))
    (if (zerop q) `(,m)
      (cons m (find-polynomial f<1> q)))))

0

C #, 62 bytes

(a,b)=>{var r="";a++;while(b>0){r+=(b%a)+" ";b/=a;}return r;};
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.