Disegna / traccia un grafico a cuore


45

La tua sfida è disegnare / tracciare uno dei cuori sottostanti. La dimensione deve essere di almeno 50x50 pixel (la grafica vettoriale è OK). Puoi scegliere quale dei cuori vuoi disegnare / tracciare. Si accettano assi, linee della griglia ecc. Ci devono essere almeno 100 coordinate / punti distinti sul grafico. Il cuore può essere riempito di colore se vuoi.

inserisci qui la descrizione dell'immagine

Le equazioni sono:

inserisci qui la descrizione dell'immagine

o

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

tè nella gamma [-1, 1].

o

inserisci qui la descrizione dell'immagine

o

inserisci qui la descrizione dell'immagine

Questo è quindi vince il codice più breve (in ogni lingua) in byte. Fornire l'output (o il collegamento a un interprete online).

Risposte:


66

TI-80 BASIC, 45 43 41 39 byte

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

inserisci qui la descrizione dell'immagine

Ci è voluto un po 'di tempo e la mia batteria è scarica, quindi non volevo continuare.

Ho provato a usare la seconda equazione, ma non sono riuscito a farlo funzionare , in realtà si è rivelato più lungo, quindi ho semplicemente adattato l'altra risposta che avevo.

EDIT: ho appena notato il requisito di 50x50 pixel, sfortunatamente lo schermo è alto solo 47 pixel, quindi questo non è possibile.


1
davvero creativo!
Dalearn,

8
È passato un po 'di tempo, ma puoi sostituirlo IF (X²+ANS²-1)³-X²ANS³<0con IF (X²+ANS²-1)³<X²ANS³?
mercoledì

Oh, non posso credere di non averci pensato! grazie
12Me21

45

Perl, 86 byte

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

Corri con perl -E.

Traccia un cuore ASCII pieno, usando la prima equazione. Si noti che l'asse x è allungato di un fattore di ~ 1,265: questo per contrastare il fatto che i caratteri terminali sono generalmente molto più grandi in verticale che in orizzontale.

Produzione:

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

Spiegazione (poiché l'OP lo ha richiesto):

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

Questa è semplicemente la prima equazione, leggermente riorganizzata per renderla più breve. $ y rappresenta direttamente y nella formula. $ _ inizialmente è proporzionale a x, ma è assegnato in modo multiplo con se stesso ( $_*=$_/1e3), rendendolo proporzionale a x². Poiché x² viene utilizzato due volte nella formula, ciò consente di risparmiare alcuni byte.

1e3significa 1000, ed è stato scelto perché è corto e il risultato sembra buono. ** è l'operatore di potenza di Perl. Uso >0piuttosto che ==0perché voglio un cuore pieno.

flip_flop := $|--?v60:3

v60 è un abuso della sintassi della stringa di versione arcaica per indicare il carattere con il codice ASCII 60: '<'.

$ | è una variabile magica che può sempre essere solo 0 o 1. Il decremento quando è già 0 lo imposta su 1. Il decremento quando è 1 lo imposta naturalmente su 0. Pertanto, $ | - viene spesso usato come flip-flop: ogni volta viene valutato, si alterna tra vero e falso.

Nel complesso, questa espressione restituisce alternativamente '<' e 3.

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

Ternari nidificati. Se la condizione è falsa (→ siamo fuori dal cuore), restituisce $ ", che è una variabile magica che per impostazione predefinita è" "(un singolo spazio). Se la condizione è vera (→ siamo all'interno del cuore), valuta flip_flop.

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

Valuta ripetutamente inner_loop, con $ _ (la variabile "predefinita" di Perl) che va da -40 a 40, con incrementi di 1. Raccoglie i risultati di tale valutazione in un elenco temporaneo, quindi li stampa tutti, concatenati, terminando con una nuova riga .

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

Questo esegue ripetutamente outer_loop, con $ y che va da 1,24 (1 - (-6 / 25)) a -1 (1 - 50/25), con decrementi di 0,04.

Nota che y è diviso per 25, mentre x² è diviso per 1000, che equivale a dividere x per sqrt (1000). Il fattore ~ ​​1,265 che ho citato è sqrt (1000) / 25.


5
Eh, suppongo che non violi alcuna regola ... Il mio preferito finora :) Mi piacerebbe una spiegazione però :)
Stewie Griffin

1
Sono confuso su qualcosa. Perché usare? V60 over, diciamo "<"?
Nic Hartley,

Stessa lunghezza, ma più facile da digitare.
Grimmy,

Un cuore fatto di cuori.
TheWanderer,

34

Mathematica WolframAlpha, 17 15 13 11 byte

Rasato di 2 byte grazie a Martin Ender (1a curva cardiaca -> curva cardiaca 1)

Rasato di altri 2 byte grazie a Martin Ender (curva del cuore 1 -> heartcurve1)

Questo è probabilmente un imbroglio (la soluzione ovvia), ma qui va.

heartcurve1

Provalo qui!

Sono sicuro che c'è un modo per accorciare 1 °, cuore o curva in modo tale che Wolfram lo accetti ancora. Bene, ora è privo di spazi, forse una sorta di abbreviazione di heart?

Ricevo punti bonus per averne tracciati 2?

heartcurves

Prova qui!


5
heart curve 1
Martin Ender,

6
In realtà, heartcurve1funziona.
Martin Ender,

23
@MartinEnder What in the world
Thunda,

1
la prima delle curve cardiache sembra più simile a un calcio
Mikhail V

@MikhailV 0th heartcurve (cardoid) sembra un calcio.
Thunda,

29

Mathematica, 52 byte

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

inserisci qui la descrizione dell'immagine

Potremmo salvare un altro byte con ContourPlotma poi lo sfondo diventa un po 'instabile:

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

inserisci qui la descrizione dell'immagine

Per un byte aggiuntivo potremmo usare la quarta formula e PolarPlotinvece:

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

inserisci qui la descrizione dell'immagine


23
"A bit trippy" è un po 'un eufemismo ...
Mego

ContourPlot innesca così tanto il DOC. Aaaaaah! : D
KeyWeeUsr

25

Casio fx-7700GH, 21 byte

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

Funzione di grafico senza nome da inserire in uno degli slot della funzione di rappresentazione grafica delle coordinate polari, quindi fa quello che dice sulla latta.

L'intervallo grafico deve essere impostato manualmente (a meno che non corrisponda all'intervallo impostato corrente), l'ho impostato su Xmin=-2.75, Xmax=2.75, Ymin=-4, Ymax=1.

Dovrebbe funzionare anche su altri calcolatori Casio Power Graphic Series e, molto probabilmente, su calcolatori grafici Casio.

Un cuore disegnato da una calcolatrice Casio FX-7700GH (sì, sono piuttosto vecchio e polveroso)


18

MATLAB / Octave, 31 byte

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

inserisci qui la descrizione dell'immagine


9

SmileBASIC, 85 81 byte

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.

inserisci qui la descrizione dell'immagine




7

Python, 119 116 byte

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

Provalo online

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

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


6

SageMath, 66 byte

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

Provalo online

Sfortunatamente, i nomi lunghi di implicit_plote parametric_plot(oltre alla necessità di definire una variabile diversa da quella implicitamente definita xper la prima) rendono le prime tre opzioni troppo lunghe per essere considerate.

Grazie a busukxuan e Andrea Lazzarotto per un byte


1
Funziona ^.5al posto di **.5?
busukxuan,

1
@busukxuan Nope. Sage è basato su Python ed ^è XOR.
Mego

1
Ma la salvia sostituisce ^con **. Mi chiedevo se fosse perché non poteva sostituire correttamente se seguito da un.
busukxuan il

@busukxuan Sage usa la notazione di potenza di Python ( **). Se provassi a usare ^, finiresti con un avvertimento e un risultato errato.
Mego

1
@AndreaLazzarotto Quindi a quanto pare la mia memoria è difettosa. Grazie.
Mego

6

C, 137 133 byte

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

Grazie @AlbertRenshaw, ho anche cambiato i 100s in 99s per altri 2 byte


1
+1; Mi piace l'uso di vper la funzione, buon stile. Puoi radere due byte sostituendo 4000con 4e3e sostituendo 0.001con1e-3
Albert Renshaw,

6

Gelatina , 31 byte

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

Provalo online!

o 35 byte con a , anziché *riempire: cambia la linea mediana in ²+’*3<ç×9829Ọ»⁶.

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

Come?

Strumenti: equazioneoltre una griglia di caratteri separata da 51 per 51 righe.

*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 byte

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)

Modifica: salvato 4 byte grazie a @ user2428118. Versione ES7 per 143 byte:

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)


che ne dici y**3invece di y*y*y?
svarog

1
@svarog Quindi la mia nota "Sarebbe leggermente più breve in ES7" ...
Neil

bene, funziona su cromo 55, quindi perché non aggiungere una versione es7?
svarog

1
@svarog Perché non ho il cromo 55 a portata di mano ...
Neil,

1
@ThisSuitIsBlackNot Si è lamentato delle variabili non dichiarate quando ho provato.
Neil,

4

BBC BASIC, 80

Finirà il golf domani.

Scarica l'interprete su 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.

Disegna un cuore pieno usando la prima equazione, di cui riordiniamo e prendiamo la radice cubica di (ci sono 3 radici cubiche di un numero reale, una reale e 2 complesse, ma qui ci interessa solo la radice reale). ottenere un quadratico in y

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

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

Usando la formula quadratica standard per le espressioni del tipo ay^2+by+c=0e sfruttando il fatto che a= 1 otteniamo

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

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

dove -b/2 = (x^0.66)/2(rappresentato da bnel programma.)

Esploriamo semplicemente i valori di xda sinistra a destra, disegnando una linea verticale tra ogni coppia di valori validi per ycostruire una forma solida.

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

Rubino, 80 byte

Mostra a Ruby un po 'd'amore.

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

Produzione:

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

con alcune righe vuote sopra e sotto


2

Processing.js: 123 119 byte

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

questo è abbastanza economico in quanto traccia n. 2 da 0 a infinito anziché da -1 a 1, come mostrato nell'immagine per risparmiare sui due addominali (t). Ma è tecnicamente corretto in quanto vi sono più di 100 punti.


130 byte "correctier" uno

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

provalo online

nota: probabilmente c'è un modo per ottenere 100 punti sulla tela 100x100 predefinita e radere il setup.


Nessuno dei tuoi snippet fa nulla per me sulla mia versione locale di Processing (tranne che per il secondo che disegna solo 1 punto)
Kritixi Lithos,

hai provato su sketchpad? ("provalo online") devi fare clic su "rendering schizzo"
satibel,

Ma penso che sarebbe invece chiamato "Processing.JS". Perché lo snippet funzioni per me, devi usare floatinvece diint
Kritixi Lithos,

oops, ho dimenticato il .js e grazie a ciò ho salvato 4 byte rimuovendo l'inutile int.
sabato

2

TI-84 Basic, 40 38 byte

Simile alla risposta e all'output di @ 12Me21, ma per la serie TI-83/84.

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

L'uso di Ans in realtà è più piccolo qui? Pensavo che Ans fosse di 2 byte.
Mee,

@ 12Me21 No, ha le stesse dimensioni e anche più veloce. (Almeno per la TI-83/84, non conosco la TI-80).
Timtech,

1

BBC BASIC (BBC Micro) (126 byte)

Questa è una variante della risposta di Level River Street , ma per l'iterazione originale della BBC Micro di BBC BASIC.

Puoi copiare e incollare uno dei seguenti elementi nella nuova funzionalità di incolla di JSBeeb su https://bbc.godbolt.org/ (un emulatore di BBC Micro basato su JavaScript), una volta incollato, premi Invio all'interno dello 'schermo' per mostrare un nuovo prompt, quindi digitare RUN, quindi premere Invio per eseguire una delle versioni.

golfed. (126 byte)

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

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

La riga 7 richiede un controllo per X, per evitare un errore "Intervallo log" quando X diventa 0 a metà del ciclo. Oltre a questo, è praticamente lo stesso. È molto più lento disegnare su una macchina reale, che JSBeeb emula abbastanza bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.