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

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!


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].


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


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


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.


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

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)))))

0

C #, 62 bytes

(a,b)=>{var r="";a++;while(b>0){r+=(b%a)+" ";b/=a;}return r;};
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.