Нарисуйте / построите график сердца


45

Ваша задача - нарисовать / построить одно из сердец ниже. Размер должен быть не менее 50x50 пикселей (с векторной графикой все в порядке). Вы можете выбрать, какое из сердец вы хотите нарисовать / построить. Оси, линии сетки и т. Д. Принимаются. На графике должно быть не менее 100 различных координат / точек. Сердце может быть наполнено цветом, если вы хотите.

введите описание изображения здесь

Уравнения являются либо:

введите описание изображения здесь

или же

введите описание изображения здесь

введите описание изображения здесь

tнаходится в диапазоне [-1, 1].

или же

введите описание изображения здесь

или же

введите описание изображения здесь

Это поэтому выигрывает самый короткий код (на каждом языке) в байтах. Пожалуйста, предоставьте вывод (или ссылку на онлайн-переводчика).

Ответы:


66

TI-80 BASIC, 45 43 41 39 байтов

LBL 1
RAND4-2->X
RAND4-2
IF (X²+ANS²-1)³<X²ANS³
PT-ON(X,ANS
GOTO 1

введите описание изображения здесь

Это заняло некоторое время, и моя батарея разряжена, поэтому я не хотел продолжать.

Я пытался использовать второе уравнение, но не смог заставить его работать, оно оказалось длиннее, поэтому я просто адаптировал другой ответ, который у меня был.

РЕДАКТИРОВАТЬ: Я только что заметил требование 50x50 пикселей, к сожалению, экран только 47 пикселей в высоту, так что это невозможно.


1
действительно творческий!
dalearn

8
Это было давно, но вы можете заменить IF (X²+ANS²-1)³-X²ANS³<0на IF (X²+ANS²-1)³<X²ANS³?
wchargin

О, я не могу поверить, что я не думал об этом! спасибо
12Me21

45

Perl, 86 байт

$y=1-$_/25,say+map$y**3*($_*=$_/1e3)-($_+$y**2-1)**3>0?$|--?v60:3:$",-40..40for-6..50

Беги с perl -E.

Графики заполненного сердца ASCII, используя первое уравнение. Обратите внимание, что ось x растянута с коэффициентом ~ 1.265: это должно противодействовать тому факту, что терминальные шрифты обычно намного больше по вертикали, чем по горизонтали.

Выход:

                3<3<3<3<3<3<3<                   3<3<3<3<3<3<3<                 
              3<3<3<3<3<3<3<3<3<3<           3<3<3<3<3<3<3<3<3<3<               
            3<3<3<3<3<3<3<3<3<3<3<3<       3<3<3<3<3<3<3<3<3<3<3<3<             
          3<3<3<3<3<3<3<3<3<3<3<3<3<3<   3<3<3<3<3<3<3<3<3<3<3<3<3<3<           
         3<3<3<3<3<3<3<3<3<3<3<3<3<3<3< 3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<          
        3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3 <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<         
       3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3        
      <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<       
      3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3       
     <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<      
     3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3      
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
   3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3    
   <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<    
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
     <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<      
     3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3      
     <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<      
      3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3       
      <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<       
       3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3        
       <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<        
        3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3         
         <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<          
         3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3          
          <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<           
           3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3            
            <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<             
             3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3              
              <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<               
               3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                
                <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<                 
                 3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                  
                  <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<                   
                   3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                    
                     <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<                      
                      3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                       
                       <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<                        
                         3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                          
                           <3<3<3<3<3<3<3<3<3<3<3<3<                            
                            3<3<3<3<3<3<3<3<3<3<3<3                             
                              <3<3<3<3<3<3<3<3<3<                               
                                3<3<3<3<3<3<3<3                                 
                                  <3<3<3<3<3<                                   
                                    3<3<3<3                                     
                                     <3<3<                                      
                                       3                                        

Объяснение (так как ОП попросил его):

condition := $y**3*($_*=$_/1e3)-($_+$y**2-1)**3>0

Это просто первое уравнение, слегка перестроенное, чтобы сделать его короче. $ y непосредственно представляет y в формуле. $ _ изначально пропорционален x, но присваивается самому себе ( $_*=$_/1e3), что делает его пропорциональным x². Поскольку x² используется в формуле дважды, это экономит несколько байтов.

1e3означает 1000, и был выбран, потому что он короткий, и результат выглядит хорошо. ** является энергетическим оператором Perl. Я использую, >0а не ==0потому, что я хочу заполненное сердце.

flip_flop := $|--?v60:3

v60 является злоупотреблением архаичным синтаксисом строки версии для обозначения символа кодом ASCII 60: «<».

$ | магическая переменная, которая может быть только 0 или 1. Уменьшение, когда оно уже равно 0, устанавливает его в 1. Уменьшение, когда оно 1, естественно устанавливает его в 0. Таким образом, $ | - часто используется как триггер: каждый раз он оценивается, он чередуется между истиной и ложью.

В целом, это выражение возвращает поочередно '<' и 3.

inner_loop := <condition> ? <flip_flop> :$"

Вложенные троицы. Если условие ложно (→ мы за пределами сердца), значение равно $ ", что является магической переменной со значением по умолчанию" "(один пробел). Если условие истинно (→ мы внутри сердца), оно оценивает flip_flop.

outer_loop := say+map <inner_loop> ,-40..40

Повторно оценивает inner_loop, причем $ _ (переменная Perl «по умолчанию») изменяется от -40 до 40 с шагом 1. Он собирает результаты этих вычислений во временный список, затем печатает их все, объединяет их, заканчивая новой строкой ,

$y=1-$_/25, <outer_loop> for-6..50

Он запускает external_loop несколько раз, с $ y, изменяющимся с 0.04 на 1,24 (1 - (-6 / 25)) до -1 (1 - 50/25).

Обратите внимание, что y делится на 25, а x² делится на 1000, что аналогично делению x на sqrt (1000). Коэффициент ~ 1,265, который я упомянул, равен sqrt (1000) / 25.


5
Да, я думаю, что это не нарушает никаких правил ... Мой любимый до сих пор :) Я бы с удовольствием объяснил :)
Stewie Griffin

1
Я запутался в чем-то. Зачем использовать? V60, скажем, "<"?
Ник Хартли,

Та же длина, но легче набирать.
Grimmy

Сердце из сердец.
TheWanderer

34

Mathematica WolframAlpha, 17 15 13 11 байт

Срезано на 2 байта благодаря Мартину Эндеру (1-я кривая сердца -> 1-я кривая сердца)

Срезал еще 2 байта благодаря Мартину Эндеру (кривая сердца 1 -> heartcurve1)

Это, вероятно, обман (очевидное решение), но здесь идет.

heartcurve1

Попробуй это здесь!

Я уверен, что есть способ укоротить 1-й, сердечный или изогнутый, чтобы Вольфрам все еще его принимал. Ну, теперь там нет места, может быть, какое-то сокращение для сердца?

Получу ли я бонусные баллы за построение 2 из них?

heartcurves

Попробуйте это здесь!


5
heart curve 1
Мартин Эндер

6
На самом деле, heartcurve1работает.
Мартин Эндер

23
@MartinEnder Что в мире
Thunda

1
Первая из сердечных кривых выглядит скорее как приклад
Михаил V

@MikhailV 0-ая сердцевина (кардоид) выглядит как задница.
Thunda

29

Mathematica, 52 байта

RegionPlot[(x^2+y^2-1)^3-x^2y^3<0,{x,-2,2},{y,-2,2}]

введите описание изображения здесь

Мы могли бы сохранить еще один байт, ContourPlotно затем фон стал немного триповым:

ContourPlot[(x^2+y^2-1)^3-x^2y^3,{x,-2,2},{y,-2,2}]

введите описание изображения здесь

Для одного дополнительного байта мы могли бы использовать четвертую формулу и PolarPlotвместо этого:

PolarPlot[(x=Sin@t)Abs@Cos@t^.5/(x+7/5)-2x+2,{t,0,7}]

введите описание изображения здесь


23
«Немного триповый» - это немного преуменьшение ...
Mego

ContourPlot так сильно запускает OCD. Aaaaaah! : D
KeyWeeUsr

25

Casio FX-7700GH, 21 байт

sin θ √ Abs cos θ ÷ ( sin θ + 7 ÷ 5 ) - 2 sin θ + 2

Функция безымянного графа должна быть введена в один из слотов функции отображения полярных координат, а затем выполняет то, что говорит на жестяной коробке.

Диапазон построения графика должен быть установлен вручную (если он не соответствует текущему заданному диапазону), я установил его на Xmin=-2.75, Xmax=2.75, Ymin=-4, Ymax=1.

Должен работать и на других калькуляторах Casio Power Graphic Series, и, возможно, позже на графических калькуляторах Casio.

Сердце, нарисованное калькулятором Casio fx-7700GH (да я довольно старый и пыльный)



9

SmileBASIC, 85 81 байт

X=RNDF()*4-2Y=RNDF()*4-2GPSET X*50+99,Y*50+99,-(-X*X*Y*Y*Y>POW(X*X+Y*Y-1,3))EXEC.

введите описание изображения здесь


9

Desmos , 20 16 15 байт

V 2:

хх) .3 у = хх + гг-1

(= xx)^.3y=xx+yy-1)

V 1:

xx + yy-1) 3 = xxy 3

V 0:

(x2+y2-1)3=x2y3

Вы могли бы использовать xxвместоx^2
12Me21

@ 12Me21, о, это отлично, спасибо!
Даниэль

Ваш счетчик байтов неверен, у вас есть дополнительный перевод строки.
R

@ Райкер, я не понимаю, как это неправильно. Где там новая строка?
Даниил

imgur.com/a/4eTyt V2 составляет 14 байтов
Rɪᴋᴇʀ



6

SageMath, 66 байт

polar_plot(sin(x)*abs(cos(x))^.5/(sin(x)+7/5)-2*sin(x)+2,(0,2*pi))

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

К сожалению, длинные имена implicit_plotи parametric_plot(плюс необходимость определения переменной, отличной от неявно определенной xдля первой) делают первые три варианта слишком длинными для рассмотрения.

Спасибо Бусуксуану и Андреа Лаззаротто за байт


1
Работает ли ^.5вместо **.5?
Busukxuan

1
@busukxuan Нет. Sage построен на Python и ^является XOR.
Mego

1
Но шалфей заменители ^с **. Мне было интересно, было ли это потому, что он не мог заменить правильно, если за ним последовал.
busukxuan

@busukxuan Sage использует нотацию Python ( **). Если вы попытаетесь использовать ^, вы получите предупреждение и неверный результат.
Mego

1
@AndreaLazzarotto Тогда, видимо, моя память неисправна. Благодарю.
Mego

6

C, 137 133 байта

p;float x,y,f;v(){for(p=4e3;p;x=(float)(p%99-50)/35,y=(float)(p/40-45)/40,f=x*x+y*y-1)putchar(p--%99?f*f*f-x*x*y*y*y<1e-3?35:32:10);}

http://codepad.org/zqqYUui8

Спасибо @AlbertRenshaw, я также изменил 100 на 99 для еще 2 байта


1
+1; Мне нравится использование vдля функции, хороший талант. Вы можете бриться два байта, заменив 4000с 4e3и заменой 0.001с1e-3
Альберт Реншоу

6

Желе , 31 байт

*3×
²+’*3<çị⁾* 
25µNr÷21µ²ç@þUY

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

или 35 байтов с , а не с *заполнением: изменить среднюю строку на ²+’*3<ç×9829Ọ»⁶.

          ♥♥♥♥♥♥♥♥♥♥           ♥♥♥♥♥♥♥♥♥♥          
        ♥♥♥♥♥♥♥♥♥♥♥♥♥♥       ♥♥♥♥♥♥♥♥♥♥♥♥♥♥        
      ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥      
     ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥     
     ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥     
    ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥    
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
    ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥    
    ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥    
     ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥     
     ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥     
      ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥      
      ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥      
       ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥       
        ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥        
        ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥        
         ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥         
          ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥          
           ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥           
            ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥            
             ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥             
              ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥              
               ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥               
                 ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥                 
                  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥                  
                   ♥♥♥♥♥♥♥♥♥♥♥♥♥                   
                     ♥♥♥♥♥♥♥♥♥                     
                      ♥♥♥♥♥♥♥                      
                        ♥♥♥                        
                         ♥                         

Как?

Реализует: уравнениеболее 51 на 51 перевод строки разделенной сеткой символов.

*3× - Link 1: y, xSquared
*3  - cube y
  × - multiply the result by xSquared

²+’*3<çị⁾*  - Link 2: y, xSquared
²           - square y
 +          - add xSquared to the result
  ’         - subtract one
   *3       - cube the result
     <      - less than? (1 if True, 0 if False)
      ç     -     the result of the last link (1) as a dyad: f(y, xSquared)
       ị    - index into (1-based):
        ⁾*  - the string "* " (there is a trailing space on this line)

       ×9829Ọ»⁶ - alternative ending of link 2
       ×9829    - multiply (vectorises) by 9829
            Ọ   - cast to character (vectorises) (9829 is the ♥, 0 is the null-byte)
             »  - maximum (vectorises) of that and:
              ⁶ -     space character (ordinal of space is 32, greater than the null-byte, less than ♥)

25µNr÷21µ²ç@þUY - Main link: no arguments
25              - 25
  µ             - monadic chain separation call that i
   N            - negate i
    r           - inclusive range(negated i, i) -> [-25, -24, ..., 24, 25]
     ÷21        - divide by 21 (vectorises) -> [-1.1904761904761905, -1.1428571428571428, ..., 1.1428571428571428, 1.1904761904761905]
        µ       - monadic chain separation call that r
         ²      - square r (vectorises) (make the xSquared values, left to right)
             U  - upend r (make the y values, top to bottom)
            þ   - outer product using:
          ç@    -     last link (2) as a dyad with reversed arguments: f(y, xSquared)
              Y - join with line feeds
                - implicit print

5

JavaScript (ES6), 151 147 байт

document.write`<canvas id=c>`;for(i=0;x=2-i/24,i<97;i++)for(j=0;y=2-j/24,z=x*x+y*y-1,j<97;j++)z*z*z-x*x*y*y*y<0&&c.getContext`2d`.fillRect(i,j,1,1)

Редактировать: 4 байта сохранены благодаря @ user2428118. Версия ES7 для 143 байтов:

document.write`<canvas id=c>`;for(i=0;i<97;i++)for(x=2-i/24,j=0;j<97;j++)x*x*(y=2-j/24)**3-(x*x+y*y-1)**3>0&&c.getContext`2d`.fillRect(i,j,1,1)


как насчет y**3вместо y*y*y?
Сварог

1
@svarog Таким образом, моя заметка "Будет немного короче в ES7" ...
Нил

хорошо, это работает на хроме 55, так почему бы не добавить версию es7?
Сварог

1
@svarog Потому что у меня нет хрома 55 под рукой ...
Нил

1
@ThisSuitIsBlackNot Он жаловался на необъявленные переменные, когда я пытался.
Нил

4

BBC BASIC, 80

Завтра закончу играть в гольф.

Скачать переводчик можно по адресу http://www.bbcbasic.co.uk/bbcwin/bbcwin.html.

ORIGIN99,99F.u=-56TO56x=u/50b=x^2^.33/2r=(b^2-x^2+1)^.5*50L.u,b*50-r,u,r+b*50N.

Рисует заполненное сердце, используя первое уравнение, которое мы переставляем и берем кубический корень (есть 3 кубических корня действительного числа, один действительный и 2 комплексных, но здесь нас интересует только действительный корень.) Затем мы снова переставляем в получить квадратичный в y

x^2+y^2-1=(x^0.66)y

y^2-(x^0.66)y+x^2-1=0

Используя стандартную квадратную формулу для выражений типа ay^2+by+c=0, и используя тот факт, что a= 1, мы получаем

y = -b/2 +/- sqrt((b/2)^2-c)

y = -b/2 +/- sqrt((b/2)^2-x^2+1)

где -b/2 = (x^0.66)/2(представлен bв программе.)

Мы просто сканируем значения xслева направо, рисуя вертикальную линию между каждой парой допустимых значений, yчтобы построить сплошную форму.

ORIGIN99,99F.u=-56TO56x=u/50b=x^2^.33/2r=(b^2-x^2+1)^.5*50L.u,b*50-r,u,r+b*50N.

ungolfed

ORIGIN99,99
FORu=-56TO56
  x=u/50
  b=x^2^.33/2
  r=(b^2-x^2+1)^.5*50
  LINEu,b*50+r,u,b*50-r
NEXT

4

Рубин, 80 байтов

Покажите Руби немного любви.

-2.step(2,0.2){|y|-2.step(2,0.1){|x|$><<'. O'[(y*y-1+x*=x)**3+x*y**3<=>0]};puts}

Выход:

         OOOOO     OOOOO             
      .OOOOOOOOO.OOOOOOOOO.          
     OOOOOOOOOOOOOOOOOOOOOOO         
     OOOOOOOOOOOOOOOOOOOOOOO         
     OOOOOOOOOOOOOOOOOOOOOOO         
      OOOOOOOOOOOOOOOOOOOOO          
      .OOOOOOOOOOOOOOOOOOO.          
        OOOOOOOOOOOOOOOOO            
         OOOOOOOOOOOOOOO             
           OOOOOOOOOOO               
              OOOOO                  
                .                    

с некоторыми пустыми строками сверху и снизу


2

Processing.js: 123 119 байт

ungolfed:

t = 0; 

void setup() {
    size(99, 300); 
} 

void draw() {
    point(59+99*sin(t)*cos(t)*log(t),350-400*sqrt(cos(t))*pow(t,0.3));
    t+=0.01;
}

golfed:

t=0;void setup(){size(99,300);}void draw(){point(59+99*sin(t)*cos(t)*log(t),350-400*sqrt(cos(t))*pow(t,0.3));t+=0.01;}

этот довольно обманчив, поскольку он строит # 2 от 0 до бесконечности вместо от -1 до 1, как показано на рисунке, чтобы сэкономить на двух абс (т). Но это технически правильно, так как есть более 100 баллов.


130 байт "правильнее" одного

t=-1;void setup(){size(99,300);}void draw(){point(59+99*sin(t)*cos(t)*log(abs(t)),350-400*sqrt(cos(t))*pow(abs(t),0.3));t+=0.01;}

попробуйте это онлайн

примечание: вероятно, есть способ получить 100 точек на холсте 100x100 по умолчанию и сбрить настройки.


Ни один из ваших фрагментов не поможет мне с моей локальной версией Обработки (за исключением второй, которая просто рисует 1 очко)
Kritixi Lithos

ты пробовал на альбоме? («попробуйте онлайн») вам нужно нажать «сделать эскиз»
satibel

Но я думаю, что это будет называться «Processing.JS». Чтобы фрагмент floatint
кода

К сожалению, забыл .js, и благодаря этому я сэкономил 4 байта, удалив бесполезный int.
satibel

2

TI-84 Basic, 40 38 байт

Аналогично ответу и выводу @ 12Me21, но вместо этого для серии TI-83/84.

While 1:2rand-1→A:2rand-1:If (A²+Ans²-1)³>A²Ans³:Pt-On(A,Ans:End

Использование Ans здесь на самом деле меньше? Я думал, что Ans был 2 байта.
12Me21

@ 12Me21 Нет, он того же размера и тоже быстрее. (По крайней мере, для TI-83/84, я не знаю о TI-80).
Timtech

1

BBC BASIC (BBC Micro) (126 байт)

Это вариант ответа Ривер-стрит , но для оригинальной версии BBC Micro BBC BASIC.

Вы можете скопировать и вставить любое из следующего в новую функцию вставки JSBeeb по адресу https://bbc.godbolt.org/ (эмулятор BBC Micro с поддержкой JavaScript), после его вставки нажмите Enter на «экране», чтобы отобразить новый запрос, затем введите RUN, затем нажмите Enter, чтобы запустить любую версию.

golfed. (126 байт)

1MO.1:V.29,64;64;:MOVE-57,20:GC.0,1:F.U=-56TO56:X=U/50:IFX<>0TH.B=X^2^.33/2
2R=(B^2-X^2+1)^.5*50:DRAWU,B*50+R:DRAW U,B*50-R:N.

ungolfed. (176 байт)

1 MODE 1
2 VDU 29,64;64;
3 MOVE -57,20
4 GCOL 0,1
5 FOR U = -56 TO 56
6 X = U/50
7 IF X <> 0 THEN B = X^2^.33/2
8 R = (B^2-X^2+1)^.5*50
9 DRAW U,B*50+R
10 DRAW U,B*50-R
11 NEXT

В строке 7 требуется проверка X, чтобы предотвратить ошибку «Log range», когда X становится равным 0 в середине цикла. Кроме этого, это в значительной степени то же самое. Рисовать на реальной машине намного медленнее, что JSBeeb очень хорошо эмулирует.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.