Codegolf — Ascii-Постройте Уравнение

  • Автор темы Semen.potapov20
  • Обновлено
  • 21, Oct 2024
  • #1

Вам дана полиномиальная функция в следующем формате:

\$x = (c_0 * y^0) + (c_1 * y^1) + (c_2 * y^2) + ... + (c_n * y^n)\$

где \$c_n\$ обозначает коэффициент при \$n^{th}\$ степени \$y\$

Вам нужно построить уравнение на матрице \$10 * 10\$ ASCII. Значение должно быть пол в целое число перед построением графика. Если \$y < 0\$ или \$y > 9\$, не стройте график. Для простоты мы предполагаем, что верхний левый угол равен \$(0,0)\$.

А

 Input -> x = (1 * y^1)
Output ->
*.........
.*........
..*.......
...*......
....*.....
.....*....
......*...
.......*..
........*.
.........*

Input -> x = (9 * y^0) + (-1 * y^1)
Output ->
.........*
........*.
.......*..
......*...
.....*....
....*.....
...*......
..*.......
.*........
*.........

Input -> x = (0.10 * y^2)
Output ->
*.........
*.........
*.........
*.........
.*........
..*.......
...*......
....*.....
......*...
........*.

Input -> x = (3 * y^1)
*.........
...*......
......*...
.........*
..........
..........
..........
..........
..........
..........
 
represents an empty space, and * представляет собой точку на графике. Вы можете выбрать любые символы для обозначения обеих вещей по вашему усмотрению, но обязательно укажите, что вы используете в своем ответе.

Вы можете принять входные данные в виде списка/массива коэффициентов или в виде строки в указанном выше формате.

Примеры:

.

Подсказка: eval может быть здесь полезен.

Вдохновленный проблемой столкновения кода из https://www.codingame.com/

#код-гольф #математика #ascii-art #полиномы

Semen.potapov20


Рег
13 Nov, 2012

Тем
79

Постов
214

Баллов
639
  • 26, Oct 2024
  • #2

APL (Диалог Юникод), 15 байт

Полная программа. Принимает список коэффициентов в порядке убывания. Возвращает Двоичную матрицу. Требуется индексация с отсчетом от 0 (

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 p->matrix(10,,y,x,y--;floor(eval(p))==x--)
 
).

->c{(a=0..9).map{|y|a.map{|x|z=1;x==c.reduce{|s,x|s+x*z*=y}.to_i}}}

Попробуйте онлайн!

->c{(a=0..9).map{|y|a.map{|x|z=1;x==c.reduce{|s,x|s+x*z*=y}.to_i ? ?*:?.}*''}} яиндексы 0…9

0<=#<1&/@(#-r)&/@FromDigits[#,r=0~Range~9]&  store as ⁵Ḷɓ Let [0 .. 9] be the right argument to the following dyadic link: ḅ evaluate the polynomial at each y in [0 .. 9], Ḟ and floor each result. € For each result, = is it equal to each x in [0 .. 9]?

⁵ḶɓḅḞ=€  make into column vector

def f(l,*m): for x in range(10): try:m=[*m,[0]*10];m[x][int(sum(y*x**z for y,z in l))]=1 except:1 return m  prompt for coefficients and evaluate the them as digits in base each-element-of- x = + (0.0 * y^0) + (0.0 * y^1) + (0.1 * y^2) ⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢱⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠘⢄⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠈⠢⡀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄

q  floor

p[]x=0;p(s:r)x=x*p r x+s q f=[[b$map(subtract y.p f)[x,x+1/4..x+3/4]|y<-n]|x<-n] b=(['⠀'..]!!).a.map c n=[0..9] c x|x<0=[0,0]|x<0.5=[1,0]|x<1=[0,1]|x>0=[0,0] a[[l,r]]=l*8+r*16 a([l,r]:s)=2*a s+l+r*8  equality table with * горизонтально

 

Натаната777


Рег
14 May, 2015

Тем
72

Постов
194

Баллов
574
  • 26, Oct 2024
  • #3

Фактор + y;i;f(l,n,x)float*l,x;{for(y=-1;x=y++<9;i=x>=1&x<11?x:0,puts(" *"+10-i))for(i=n;i--;)x+=l[i]*pow(y,i);} , 73 bytes

lambda l,r=range(10):[[i==sum(c*x**n for n,c in enumerate(l))//1for i in r]for x in r]

Попробуйте онлайн!

Принимает последовательность коэффициентов от младшего к старшему. floor handles the actual evaluation of the polynomial; the rest is just data plumbing and output.

éR▒Å╗←û%╞.A◄→⌐‼²GÑd, is to convert from a float to integer, as it is shorter than a => ( // a[] = input array of coefficients g = x => // g is a recursive function taking x y > 9 ? // if this is the end of the graph: '' // stop the recursion : // else: `\n*.`[ // lookup string: 0 = '\n', 1 = '*', 2 = '.' x > 9 ? // if this is the end of the row: x = ++y - y // increment y, set x to 0, yield 0 : // else: a.reduce( // compute P(y) (p, c, i) => // which is the sum of all p + c * y ** i // a[i] * y ** i ) ^ x++ // test whether floor(P(y)) = x ? 2 // and yield 2 if it's not : 1 // or 1 if it is ] + // g(x) // do a recursive call )(y = 0) // initial call with x = y = 0 a=>(g=x=>y>9?'':` *.`[x>9?x=++y-y:a.reduce((p,c,i)=>p+c*y**i)^x++?2:1]+g(x))(y=0) doesn't produce an integer in Factor [AND =/ короче, чем i.@10 by 1 byte]). I found a locals solution that was the same length, but couldn't save any bytes. You can save 2 bytes by using a modern version of Factor with i.@10 , но хм.

Принты <.@p. for a point on the graph and 0 1 2 … 9 для пустого места.

 

Gymninfof90


Рег
17 Jul, 2020

Тем
80

Постов
230

Баллов
640
  • 26, Oct 2024
  • #4

Древесный уголь, 10 байт

i.@10

Попробуйте онлайн! Принимает входные данные в виде списка коэффициентов (в порядке наибольшей степени y до 1) и выводит двоичную матрицу. Объяснение:

(<.@p.=/])i.@10 ||answer||

Дж, 15 байт

-2 спасибо Ионе!

χ Predefined variable 10 E Map over implicit range χ Predefined variable 10 ? Map over implicit range and join θ Input coefficients ι Outer index ↨ Evaluate polynomial ⌊ Floor λ Inner index ⁼ Do they equal? Implicitly print

Попробуйте онлайн!

Выполните левую функцию с помощью Eχэχ⁼λ⌊↨ιθ ( f ) как правильный аргумент. t apply polynomial (thanks J for the built-in!) to each tuck , пол и сравните каждый результат с number= with 1 /i = .

 

Pviidb


Рег
21 Apr, 2020

Тем
67

Постов
213

Баллов
578
  • 26, Oct 2024
  • #5

JavaScript (ES7), 87 85 83 81 байт

Ожидается массив коэффициентов, от самого низкого до самого высокого.

floor

Попробуйте онлайн!

Прокомментировал

>integer ||answer||

Стакс, 20 байты

1 /i

Запустите и отладьте его

Очень долго, отчасти из-за polyval not working on integers.

использует 1 и 0 в качестве отображаемых символов.

 

KonSerg


Рег
22 Aug, 2007

Тем
56

Постов
213

Баллов
523
  • 26, Oct 2024
  • #6

Питон 3, 86 байт

[ 10 iota dup -rot '[ _ polyval 1 /i _ [ = pprint ] with each nl ] each ]

Попробуйте онлайн!

Принимает список коэффициентов в возрастающей степени. Выводит список списков логических значений.

 

BAR_CYK


Рег
20 May, 2024

Тем
66

Постов
218

Баллов
578
  • 26, Oct 2024
  • #9

Желе, 10 8 7 байт

Попробуйте онлайн!

-2 байта, потому что формат вывода был разболтан, потом по ходу написания объяснения заметил еще один гольф

-1 байт, потому что, какого черта я еще этого не попробовал?

Введите как коэффициенты в порядке убывания мощности, выведите как двоичную матрицу.

a ||answer||

Язык Wolfram (Математика), 46 43 байта

a←

Попробуйте онлайн!

Входные коэффициенты в порядке убывания. Возвращает логическую матрицу 10x10.

 

Danverona1


Рег
04 Mar, 2007

Тем
81

Постов
194

Баллов
659
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно