Narysuj / wykreśl wykres serca


45

Twoim wyzwaniem jest narysowanie / nakreślenie jednego z poniższych serc. Rozmiar musi wynosić co najmniej 50 x 50 pikseli (grafika wektorowa jest w porządku). Możesz wybrać, które z serc chcesz narysować / spiskować. Osie, linie siatki itp. Są akceptowane. Na wykresie musi znajdować się co najmniej 100 różnych współrzędnych / punktów. Serce może być wypełnione kolorem, jeśli chcesz.

wprowadź opis zdjęcia tutaj

Równania są albo:

wprowadź opis zdjęcia tutaj

lub

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

tjest w zasięgu [-1, 1].

lub

wprowadź opis zdjęcia tutaj

lub

wprowadź opis zdjęcia tutaj

To jest więc wygrywa najkrótszy kod (w każdym języku) w bajtach. Proszę podać dane wyjściowe (lub link do tłumacza online).

Odpowiedzi:


66

TI-80 BASIC, 45 43 41 39 bajtów

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

wprowadź opis zdjęcia tutaj

Zajęło to trochę czasu, a moja bateria jest rozładowana, więc nie chciałem iść dalej.

Próbowałem użyć drugiego równania, ale nie mogłem go uruchomić. Okazało się, że jest on dłuższy, więc po prostu dostosowałem drugą odpowiedź.

EDYCJA: Właśnie zauważyłem wymagania 50 x 50 pikseli, niestety ekran ma tylko 47 pikseli wysokości, więc nie jest to możliwe.


1
naprawdę kreatywny!
dalearn

8
Minęło trochę czasu, ale można zastąpić IF (X²+ANS²-1)³-X²ANS³<0z IF (X²+ANS²-1)³<X²ANS³?
wchargin

Nie mogę uwierzyć, że o tym nie pomyślałem! dzięki
12Me21

45

Perl, 86 bajtów

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

Uruchom z perl -E.

Wykreśla wypełnione serce ASCII, korzystając z pierwszego równania. Zauważ, że oś x jest rozciągnięta o współczynnik ~ 1,265: ma to na celu przeciwdziałanie faktowi, że czcionki końcowe są zwykle znacznie większe w pionie niż w poziomie.

Wynik:

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

Objaśnienie (ponieważ OP poprosił o to):

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

To jest po prostu pierwsze równanie, nieco zmienione, aby było krótsze. $ y bezpośrednio reprezentuje y we wzorze. $ _ jest początkowo proporcjonalny do x, ale jest wielokrotnie przypisywany do siebie ( $_*=$_/1e3), co czyni go proporcjonalnym do x². Ponieważ x 2 jest użyte we wzorze dwukrotnie, oszczędza to kilka bajtów.

1e3oznacza 1000 i został wybrany, ponieważ jest krótki, a wynik wygląda dobrze. ** jest operatorem mocy Perla. Używam >0raczej niż ==0dlatego, że chcę pełne serca.

flip_flop := $|--?v60:3

v60 jest nadużyciem archaicznej składni ciągów wersji do oznaczenia znaku kodem ASCII 60: „<”.

$ | jest magiczną zmienną, która może być zawsze równa 0 lub 1. Zmniejszanie, gdy już wynosi 0, ustawia ją na 1. Zmniejszanie, gdy wynosi 1, naturalnie ustawia ją na 0. Zatem $ | - jest często używane jako przerzutnik: za każdym razem jest oceniany, zmienia się na prawdę i fałsz.

Jako całość, to wyrażenie zwraca na przemian „<” i 3.

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

Zagnieżdżone trójskładniki. Jeśli warunek jest fałszywy (→ znajdujemy się poza sercem), zwraca wartość $ „, która jest magiczną zmienną, która domyślnie przyjmuje wartość„ ”(pojedyncza spacja). Jeśli warunek jest prawdziwy (→ jesteśmy w sercu), to ocenia flip_flop.

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

Ocenia wewnętrznie pętlę wielokrotnie, z $ _ („domyślną” zmienną Perla) w zakresie od -40 do 40, w przyrostach co 1. Zbiera wyniki tych ocen na liście tymczasowej, a następnie drukuje je wszystkie, konkatenuje, kończąc na nowej linii .

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

Powoduje to wielokrotne uruchamianie pętli zewnętrznej, przy czym $ y zmienia się z 1,24 (1 - (-6 / 25)) do -1 (1 - 50/25), w odstępach 0,04.

Zauważ, że y jest dzielone przez 25, podczas gdy x² jest dzielone przez 1000, co jest równoznaczne z dzieleniem x przez sqrt (1000). Wspomniany współczynnik ~ 1,265 to sqrt (1000) / 25.


5
Huh, chyba nie narusza to żadnych zasad ... Mój ulubiony do tej pory :) Chciałbym wyjaśnienia :)
Stewie Griffin

1
Jestem z czegoś zmieszany. Po co używać? V60 zamiast powiedz „<”?
Nic Hartley,

Ta sama długość, ale łatwiejsza do wpisania.
Grimmy,

Serce zrobione z serc.
Wędrowiec

34

Mathematica WolframAlpha, 17 15 13 11 bajtów

Ogolono 2 bajty dzięki Martinowi Enderowi (1. krzywa serca -> krzywa serca 1)

Ogolono kolejne 2 bajty dzięki Martinowi Enderowi (krzywa serca 1 -> krzywa serca 1)

Jest to prawdopodobnie oszustwo (oczywiste rozwiązanie), ale proszę bardzo.

heartcurve1

Wypróbuj tutaj!

Jestem pewien, że istnieje sposób na skrócenie pierwszego, serca lub zakrętu, tak aby Wolfram nadal to akceptował. Cóż, teraz jest wolne od przestrzeni, może jakiś skrót od serca?

Czy otrzymam punkty bonusowe za wykreślenie 2 z nich?

heartcurves

Wypróbuj tutaj!


5
heart curve 1
Martin Ender

6
Właściwie heartcurve1działa.
Martin Ender

23
@MartinEnder What in the world
Thunda

1
pierwszy z krzywych serc wygląda jednak bardziej jak tyłek
Michaił V

@MikhailV 0thcurve (cardoid) wygląda jak tyłek.
Thunda

29

Mathematica, 52 bajty

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

wprowadź opis zdjęcia tutaj

Możemy zaoszczędzić jeszcze jeden bajt, ContourPlotale wtedy tło staje się nieco trippy:

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

wprowadź opis zdjęcia tutaj

Dla jednego dodatkowego bajtu moglibyśmy użyć czwartej formuły i PolarPlotzamiast tego:

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

wprowadź opis zdjęcia tutaj


23
„Trochę trippy” to trochę niedopowiedzenie ...
Mego

ContourPlot tak bardzo wyzwala OCD. Aaaaaah! : D
KeyWeeUsr

25

Casio FX-7700GH, 21 bajtów

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

Nienazwana funkcja wykresu, którą należy wprowadzić do jednego ze szczelin funkcji wykresu współrzędnych biegunowych, a następnie robi to, co mówi na puszce.

Zakres wykresu należy ustawić ręcznie (chyba że pasuje do bieżącego zakresu), ustawiłem go na Xmin=-2.75, Xmax=2.75, Ymin=-4, Ymax=1.

Powinien działać również na innych kalkulatorach Casio Power z serii graficznej, a być może później również na kalkulatorach graficznych Casio.

Serce narysowane przez kalkulator Casio FX-7700GH (tak , jestem dość stary i zakurzony)


18

MATLAB / Octave, 31 bajtów

ezplot('(x^2+y^2-1)^3-x^2*y^3')

wprowadź opis zdjęcia tutaj


9

SmileBASIC, 85 81 bajtów

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.

wprowadź opis zdjęcia tutaj


9

Desmos , 20 16 15 bajtów

V 2:

xx) .3 y = xx + rr-1

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

V 1:

xx + rr-1) 3 = xxy 3

V 0:

(x2+y2-1)3=x2y3

możesz użyć xxzamiastx^2
12Me21

@ 12Me21, oh świetnie, dzięki!
Daniel

Twoja liczba bajtów jest nieprawidłowa, masz dodatkowy znak nowej linii.
Rɪᴋᴇʀ

@Riker, nie rozumiem, jak to jest źle. Gdzie jest nowa linia?
Daniel

imgur.com/a/4eTyt V2 ma 14 bajtów
2017 r.


7

Python, 119 116 bajtów

from turtle import*
from math import*
t=1
while-t<1:a=abs(t);c=cos(t);goto(sin(t)*c*log(a)*99,c**.5*a**.3*99);t-=.01

Wypróbuj online

x = sin (t) * cos (t) * log (abs (t))

y = cos (t) **. 5 * abs (t) **. 3


6

SageMath, 66 bajtów

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

Wypróbuj online

Niestety, długie nazwy implicit_ploti parametric_plot(oraz potrzeba zdefiniowania zmiennej innej niż domyślnie zdefiniowana xdla pierwszej) sprawiają, że pierwsze trzy opcje są o wiele za długie, aby je rozważyć.

Dzięki busukxuan i Andrei Lazzarotto za bajt


1
Czy ^.5działa zamiast **.5?
busukxuan

1
@busukxuan Nope. Sage jest zbudowany na Pythonie i ^jest XOR.
Mego

1
Ale substytuty szałwia ^z **. Zastanawiałem się, czy to dlatego, że nie można go właściwie zastąpić, jeśli następuje.
busukxuan

@busukxuan Sage używa notacji mocy Pythona ( **). Jeśli spróbujesz użyć ^, otrzymasz ostrzeżenie i niepoprawny wynik.
Mego

1
@AndreaLazzarotto Wtedy najwyraźniej moja pamięć jest wadliwa. Dzięki.
Mego

6

C, 137 133 bajtów

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

Dzięki @AlbertRenshaw, zmieniłem również 100s na 99s dla 2 dodatkowych bajtów


1
+1; Lubię używać vdo tej funkcji, dobry talent. Można golić dwa bajty zastępując 4000ze 4e3i zastępowanie 0.001z1e-3
Albert Renshaw

6

Galaretka , 31 bajtów

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

Wypróbuj online!

lub 35 bajtów z zamiast *wypełnienia: Zmiana do środkowej linii ²+’*3<ç×9829Ọ»⁶.

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

W jaki sposób?

Implementuje: równanieponad 51 na 51 linii oddzielonych linii znaków.

*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 bajtów

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)

Edycja: Zapisano 4 bajty dzięki @ user2428118. Wersja ES7 dla 143 bajtów:

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)


co powiesz na y**3zamiast y*y*y?
svarog

1
@svarog Tak więc moja notatka „Byłaby nieco krótsza w ES7” ...
Neil

dobrze, działa na chromie 55, więc dlaczego nie dodać wersji es7?
svarog

1
@svarog Ponieważ nie mam pod ręką chromu 55 ...
Neil

1
@ThisSuitIsBlackNot Narzekałem na niezadeklarowane zmienne, kiedy próbowałem.
Neil,

4

BBC BASIC, 80

Jutro zakończę grę w golfa.

Pobierz tłumacza na 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.

Rysuje wypełnione serce za pomocą pierwszego równania, które przestawiamy i pobieramy pierwiastek sześcianowy (istnieją 3 pierwiastki sześcianowe liczby rzeczywistej, jeden rzeczywisty i 2 zespolone, ale interesuje nas tylko prawdziwy pierwiastek.) Następnie przestawiamy ponownie, aby wpaść w kwadrat y

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

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

Używając standardowej formuły kwadratowej do wyrażeń typu ay^2+by+c=0i wykorzystując fakt, że a= 1 otrzymujemy

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

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

gdzie -b/2 = (x^0.66)/2(reprezentowane przez bw programie.)

Po prostu skanujemy wartości xod lewej do prawej, rysując pionową linię między każdą parą prawidłowych wartości, yaby uzyskać solidny kształt.

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.

bez golfa

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

Rubinowy, 80 bajtów

Pokaż Ruby trochę miłości.

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

Wynik:

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

z pewnymi pustymi liniami powyżej i poniżej


2

Processing.js: 123 119 bajtów

bez golfa:

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;
}

grał w golfa:

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;}

ten jest dość oszukiwany, ponieważ wykreśla # 2 od 0 do nieskończoności zamiast od -1 do 1, jak pokazano na rysunku, aby zaoszczędzić na dwóch abs (t). Ale jest to technicznie poprawne, ponieważ jest więcej niż 100 punktów.


130 bajtów „poprawiających” jeden

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;}

spróbuj online

Uwaga: prawdopodobnie istnieje sposób na zdobycie 100 punktów na domyślnym płótnie 100 x 100 i ogolenie konfiguracji.


Żaden z moich fragmentów nic nie robi dla mnie w mojej lokalnej wersji Przetwarzania (z wyjątkiem drugiej, która po prostu rysuje 1 punkt)
Kritixi Lithos

próbowałeś na szkicowniku? („spróbuj online”) kliknij „renderuj szkic”
satibel,

Ale myślę, że zamiast tego nazywa się to „Processing.JS”. Aby fragment kodu zadziałał dla mnie, musisz użyć floatzamiastint
Kritixi Lithos

Ups, zapomniałem .js i dzięki temu zaoszczędziłem 4 bajty, usuwając bezużyteczne int.
satibel

2

TI-84 Basic, 40 38 bajtów

Podobne do odpowiedzi i wyników @ 12Me21, ale zamiast tego dla serii TI-83/84.

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

Czy używanie Ans jest tutaj mniejsze? Myślałem, że Ans ma 2 bajty.
12Me21

@ 12Me21 Nie, ma ten sam rozmiar i jest szybszy. (Przynajmniej dla TI-83/84, nie wiem o TI-80).
Timtech

1

BBC BASIC (BBC Micro) (126 bajtów)

Jest to odmiana poziom rzeki Street odpowiedzi , ale dla iteracji oryginalnego BBC Micro BBC podstawowego.

Możesz skopiować i wkleić dowolny z poniższych elementów do nowej funkcji JSBeeb wklejania na https://bbc.godbolt.org/ (emulator BBC Micro oparty na JavaScript), po wklejeniu naciśnij Enter na ekranie, aby wyświetlić nowy monit, a następnie wpisz RUN, a następnie naciśnij klawisz Enter, aby uruchomić dowolną wersję.

grał w golfa. (126 bajtów)

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.

bez golfa. (176 bajtów)

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

Linia 7 wymaga sprawdzenia X, aby zapobiec błędowi „Log range”, gdy X osiągnie wartość 0 w połowie pętli. Poza tym jest prawie tak samo. Rysowanie na prawdziwej maszynie jest dużo wolniejsze, co JSBeeb dobrze naśladuje.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.