Trouver le polynôme


20

Nous savons que f est un polynôme à coefficients entiers non négatifs.

Étant donné f (1) et f (1 + f (1)), renvoyer f . Vous pouvez afficher f sous la forme d'une liste de coefficients, d'un polynôme au format ASCII ou similaire.

Exemples:

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
Question aléatoire: je suis trop fatigué pour essayer de prouver / réfuter cela en ce moment, mais est-il garanti que nous serons toujours en mesure d'obtenir une réponse de f(1)et f(1+f(1))?
— HyperNeutrino

4
@HyperNeutrino Je n'aurais pas fait ce défi autrement.
— orlp

Bon, c'est un bon point. Hm. Intéressant, je vais essayer de le prouver demain parce que c'est très intéressant. Merci pour le défi intéressant!
— HyperNeutrino

1
La balise de conversion de base est censée être un indice?
— Thunda

9
Autant que c'est un joli puzzle, je pense que le code est essentiellement une conversion de base. Peut-être dupe?
— 2017

Réponses:


27

Gelée , 3 octets

‘b@

Essayez-le en ligne!

Renvoie le polynôme sous forme de liste de coefficients.

Puisque nous savons que le polynôme a des coefficients entiers non négatifs, f (b) peut être interprété comme «les coefficients du polynôme, pris comme chiffres de base b », par la définition d'une base. Ceci est soumis à la condition qu'aucun des coefficients ne dépasse ou n'est égal à b , mais nous savons que, parce que b est supérieur à la somme des coefficients (qui est f (1) ).

Le programme incrémente simplement le premier argument ( ‘) pour obtenir 1 + f (1) , puis appelle l'atome de conversion de base ( b) avec le premier argument comme base et le deuxième argument comme nombre (en utilisant @pour permuter l'ordre des arguments, car bprend généralement le numéro en premier et la seconde en base).

C'était un défi assez intelligent; merci orlp!


13
Comment est-ce possible dans le monde
— Thunda

J'ai besoin d'apprendre la gelée ...
— sagiksp

Dennis doit voir celui-ci à coup sûr.
— Erik the Outgolfer

6

Mathematica, 29 28 octets

Merci à JungHwan Min pour avoir économisé 1 octet! (ironiquement, avec un Max)

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

Fonction pure prenant deux entiers non négatifs et renvoyant une liste de coefficients (entiers non négatifs). #2~IntegerDigits~(#+1)serait le même algorithme que dans la réponse Jelly de Doorknob ; malheureusement, Mathematica IntegerDigitss'étouffe lorsque la base est égale à 1, d'où le besoin d'octets supplémentaires Max[...,2].


2
Haha, chouette.
— JungHwan Min

4

Python 2 , 38 octets

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

Essayez-le en ligne!


affiche des coefficients séparés par une nouvelle ligne

Exemple de sortie pour 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 octets

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

Lorsqu'il formate automatiquement, il ressemble à ceci:

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

L' \opérateur est une division au sol


1

AHK , 63 octets

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

AutoHotkey attribue les nombres 1-n comme noms de variables pour les paramètres entrants. Cela provoque des problèmes lorsque vous essayez d'utiliser ces fonctions, car il pense que vous voulez dire le nombre littéral 1 au lieu de la variable nommée 1. La meilleure solution de contournement que je puisse trouver est de les affecter à différentes variables.


1

Java, 53 octets

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

Produit une liste de coefficients. Merci aux ovs pour les maths.

L'expression doit être affecté à un Function<Integer, IntConsumer>et a appelé d'abord applying la fonction, accepting la int. Aucune importation n'est nécessaire avec 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 commun, 87 octets

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

Non 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 octets

(a,b)=>{var r="";a++;while(b>0){r+=(b%a)+" ";b/=a;}return r;};
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.