Saltar al contenido

Dibujar la curva de Peano

Basta ya de indagar en internet porque llegaste al espacio indicado, poseemos la solución que necesitas recibir pero sin complicarte.

Solución:

GFA básico 3.51 (Atari ST), 156134 124 bytes

Una lista editada manualmente en formato .LST. Todas las líneas terminan con CRincluido el último.

PRO f(n)
DR "MA0,199"
p(n,90)
RET
PRO p(n,a)
I n
n=n-.5
DR "RT",a
p(n,-a)
DR "FD4"
p(n,a)
DR "FD4"
p(n,-a)
DR "LT",a
EN
RET

Ampliado y comentado

PROCEDURE f(n)      ! main procedure, taking the number 'n' of iterations
  DRAW "MA0,199"    !   move the pen to absolute position (0, 199)
  p(n,90)           !   initial call to 'p' with 'a' = +90
RETURN              ! end of procedure
PROCEDURE p(n,a)    ! recursive procedure taking 'n' and the angle 'a'
  IF n              !   if 'n' is not equal to 0:
    n=n-0.5         !     subtract 0.5 from 'n'
    DRAW "RT",a     !     right turn of 'a' degrees
    p(n,-a)         !     recursive call with '-a'
    DRAW "FD4"      !     move the pen 4 pixels forward
    p(n,a)          !     recursive call with 'a'
    DRAW "FD4"      !     move the pen 4 pixels forward
    p(n,-a)         !     recursive call with '-a'
    DRAW "LT",a     !     left turn of 'a' degrees
  ENDIF             !   end
RETURN              ! end of procedure

Salida de ejemplo

peano-gfa

Perl 6, 117 bytes

map ->ymap (((++$+y)%2+$++)%3**(y+$^v,*/3...*%3)??$^s[$++%2]!!'│')xx$_*3,<┌ ┐>,$_,<└ ┘>,1,^$_o*R**3

¡Pruébelo en línea!

0-indexado. Devuelve un 2D array de caracteres Unicode. La idea básica es que para las filas inferiores, la expresión

(x + (x+y)%2) % (3 ** trailing_zeros_in_base3(3*(y+1)))

produce el patrón

|....||....||....||....||..  % 3
..||....||....||....||....|  % 3
|................||........  % 9
..||....||....||....||....|  % 3
|....||....||....||....||..  % 3
........||................|  % 9
|....||....||....||....||..  % 3
..||....||....||....||....|  % 3
|..........................  % 27

Para las filas superiores, la expresión es

(x + (x+y+1)%2) % (3 ** trailing_zeros_in_base3(3*(y+3**n)))

Explicación

 ... o*R**3  # Feed $_ = 3^n into block

map ->y ... ,^$_  # Map y = 0..3^n-1

|map  ... ,<┌ ┐>,$_,<└ ┘>,1  # Map pairs (('┌','┐'),3^n) for upper rows
                               # and (('└','┘'),1) for lower rows.
                               # Block takes items as s and v

( ... )xx$_*3  # Evaluate 3^(n+1) times, returning a list

 (++$+y)%2  # (x+y+1)%2 for upper rows, (x+y)%2 for lower rows
(         +$++)  # Add x
                   (y+$^v,*/3...*%3)  # Count trailing zeros of 3*(y+v) in base 3
                3**  # nth power of 3
               %  # Modulo
??$^s[$++%2]  # If there's a remainder yield chars in s alternately
!!'│'         # otherwise yield '│'

K (ngn/k), 3727 26 bytes

'y:x,,~>+x),x/1,&2*

¡Pruébelo en línea!

devuelve una matriz booleana

|'y es la sintaxis específica de ngn/k. otros dialectos requieren un : para hacer monádico un verbo each-ed: |:'y

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *