Знайдіть многочлен


20

Ми знаємо, що f - многочлен з невід’ємними цілими коефіцієнтами.

Дано f (1) і f (1 + f (1)) повернення f . Ви можете вивести f у вигляді списку коефіцієнтів, поліномію, відформатованого ASCII, або подібного.

Приклади:

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
Випадкове запитання: Я занадто втомився, щоб зараз намагатися довести / спростувати це, але чи гарантується, що ми завжди зможемо отримати відповідь f(1)і f(1+f(1))?
HyperNeutrino

4
@HyperNeutrino я б не робив цього виклику інакше.
orlp

Правильно, це хороший момент. Гм. Цікаво, я розберуся, щоб довести це завтра, тому що це дуже цікаво. Дякуємо за цікавий виклик!
HyperNeutrino

1
Базове перетворення тег повинен бути натяком?
Thunda

9
Наскільки це симпатична головоломка, я думаю, що код в основному є базовим перетворенням. Можливо, дуп?
xnor

Відповіді:


27

Желе , 3 байти

‘b@

Спробуйте в Інтернеті!

Повертає многочлен як список коефіцієнтів.

Оскільки нам відомо, що многочлен має невід’ємні цілочисельні коефіцієнти, f (b) можна інтерпретувати як «коефіцієнти многочлена, прийняті за базові цифри b », за визначенням бази. Це за умови, що жоден з коефіцієнтів не перевищує або дорівнює b , але ми знаємо це, оскільки b є на одиницю більшим, ніж сума коефіцієнтів (яка f (1) ).

Програма просто збільшує перший аргумент ( ), щоб отримати 1 + f (1) , потім викликає атом перетворення бази ( b), перший аргумент - як базовий, а другий аргумент - як число (використовуючи @для заміни порядку аргументів, оскільки bзазвичай приймає число перше і базове друге).

Це був досить розумний виклик; дякую орл!


13
Як у світі це можливо
Thunda

Мені потрібно вивчити желе ...
sagiksp

Денніс повинен бачити це точно.
Ерік Аутгольфер

6

Математика, 29 28 байт

Дякуємо JungHwan Min за економію 1 байта! (іронічно, з а Max)

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

Чиста функція, що приймає два невід’ємних цілих числа і повертає список коефіцієнтів (невід’ємних цілих чисел). #2~IntegerDigits~(#+1)був би той самий алгоритм, що і у відповіді Джурноба на Желе ; на жаль, IntegerDigitsдроселі Mathematica, коли база дорівнює 1, отже, потреба в додаткових байтах Max[...,2].


2
Ха-ха, приємний.
JungHwan Min


3

VBA, 75 байт

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

Коли він автоматично форматується, це виглядає приблизно так:

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

\Оператор підлогу розділяй


1

AHK , 63 байти

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

AutoHotkey призначає числа 1-n як імена змінних для вхідних параметрів. Це викликає деякі проблеми, коли ви намагаєтесь використовувати їх у функціях, оскільки він вважає, що ви маєте на увазі буквальне число 1 замість змінної з назвою 1. Найкращий спосіб, який я можу знайти, - це призначити їх різним змінним.


1

Java, 53 байти

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

Виводить список коефіцієнтів. Дякую овам за математику.

Вираз потрібно призначити a Function<Integer, IntConsumer>і викликати спочатку applyфункцією, потім accepting int. Імпорт з 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

Лист звичайний, 87 байт

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

Безголівки:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.