Encuentra el polinomio

20

Sabemos que f es un polinomio con coeficientes enteros no negativos.

Dada f (1) y f (1 + f (1)) de retorno f . Puede generar f como una lista de coeficientes, un polinomio con formato ASCII o similar.

Ejemplos:

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
orlp
fuente
1
Pregunta aleatoria: estoy demasiado cansado para intentar probar / refutar esto en este momento, pero ¿está garantizado que siempre podremos obtener una respuesta de f(1)y f(1+f(1))?
HyperNeutrino
44
@HyperNeutrino No habría hecho este desafío de otra manera.
orlp
Bien, ese es un buen punto. Hm. Interesante, buscaré probar eso mañana porque eso es muy interesante. ¡Gracias por el interesante desafío!
HyperNeutrino
1
¿Se supone que la etiqueta de conversión de base es una pista?
Thunda
99
Por mucho que sea un lindo rompecabezas, creo que el código es básicamente una conversión de base. Posiblemente engañado?
xnor

Respuestas:

27

Jalea , 3 bytes

‘b@

Pruébalo en línea!

Devuelve el polinomio como una lista de coeficientes.

Como sabemos que el polinomio tiene coeficientes enteros no negativos, f (b) puede interpretarse como "los coeficientes del polinomio, tomados como dígitos de base b ", por la definición de una base. Esto está sujeto a la condición de que ninguno de los coeficientes exceda o sea igual a b , pero lo sabemos, porque b es uno mayor que la suma de los coeficientes (que es f (1) ).

El programa simplemente incrementa el primer argumento ( ) para obtener 1 + f (1) , luego llama al átomo de conversión de base ( b) con el primer argumento como base y el segundo argumento como número (usando @para intercambiar el orden de los argumentos, ya que bgeneralmente toma el número primero y la segunda base).

Este fue un desafío bastante inteligente; gracias orlp!

Pomo de la puerta
fuente
13
¿Cómo es esto posible?
Thunda
Necesito aprender gelatina ...
sagiksp
Dennis tiene que ver este seguro.
Erik the Outgolfer
6

Mathematica, 29 28 bytes

¡Gracias a JungHwan Min por guardar 1 byte! (irónicamente, con a Max)

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

Función pura que toma dos enteros no negativos y devuelve una lista de coeficientes (enteros no negativos). #2~IntegerDigits~(#+1)sería el mismo algoritmo que en la respuesta Jelly de Doorknob ; desafortunadamente, Mathematica se IntegerDigitsahoga cuando la base es igual a 1, de ahí la necesidad de bytes adicionales Max[...,2].

Greg Martin
fuente
2
Jaja, linda.
JungHwan Min
4

Python 2 , 38 bytes

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

Pruébalo en línea!


produce coeficientes separados por nueva línea

Ejemplo de salida para 30, 3904800:

9
8
2
7
4

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

ovs
fuente
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

Cuando se formatea automáticamente, se ve así:

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

El \operador es una división de piso

Tostadas de ingeniero
fuente
1

AHK , 63 bytes

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

AutoHotkey asigna los números 1-n como nombres de variables para los parámetros entrantes. Causa algunos problemas cuando intenta usarlos en funciones porque cree que se refiere al número literal 1 en lugar de la variable llamada 1. La mejor solución que puedo encontrar es asignarlos a diferentes variables.

Tostadas de ingeniero
fuente
1

Java, 53 bytes

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

Emite una lista de coeficientes. Gracias a los ovs por las matemáticas.

La expresión debe asignarse a a Function<Integer, IntConsumer>y llamarse primero applycon la función, luego acceptcon el int. No se necesitan importaciones con 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
David Conrad
fuente
1

Lisp común, 87 bytes

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

Sin golf:

(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)))))
zelcon
fuente
0

C #, 62 bytes

(a,b)=>{var r="";a++;while(b>0){r+=(b%a)+" ";b/=a;}return r;};
CHENGLIANG YE
fuente