Saltar al contenido

Construir un reloj ASCII Fibonacci

Siéntete en la libertad de compartir nuestros post y códigos con otro, ayúdanos a aumentar esta comunidad.

Solución:

pitón 2, 194 182 bytes

from random import*
h=m=H,M=input()
while[h,m]!=[H,M/5]:
 h=m=0;s=[]
 for n in 1,1,2,3,5:c=randint(0,3);h+=c%2*n;m+=c/2*n;s=zip(*(["WRGB"[c]*n]*n+s)[::-1])
for L in s:print"".join(L)

El algoritmo es solo un muestreo de rechazo, por lo que sigue generando relojes hasta que obtiene uno correcto. El reloj se construye comenzando con nada, luego haciendo “agregar un cuadrado arriba y girar en el sentido de las agujas del reloj” 5 veces.

Toma dos números enteros separados por comas a través de STDIN.

>>> ================================ RESTART ================================
>>> 
7,17
BBBWWWWW
BBRWWWWW
RRRWWWWW
RRRWWWWW
RRRWWWWW
>>> ================================ RESTART ================================
>>> 
7,17
GGBRRRRR
GGRRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR

CJam, 61 bytes

l~5/]:A;L[TT][XXYZ5]4mr_2bW%Mf*@.+Ps=M*aM*@+W%zfMA=!gN*

Toma dos números enteros separados por espacios a través de STDIN y usa 3.14 en vez de WRGB respectivamente. Pruébelo en línea.

Aquí está el “cuerdo” RGBW versión para unos pocos bytes adicionales:

l~5/]:A;L[TT][XXYZ5]4mr_2bW%Mf*@.+"WRGB"=M*aM*@+W%zfMA=!gN*

Explicación

El algoritmo es el mismo que mi respuesta de Python: muestreo de rechazo mediante la generación de relojes hasta que obtengamos uno que sea correcto.

l~5/]:A            Read input and make array [ /5]
...g             Do...

  ;                  Pop the only element on the stack
  L                  Push empty array, which will become our clock
  [TT]               Push [0 0] for [h m], to keep track of our sample
  [XXYZ5]...fI     For I in [1 1 2 3 5]...
    4mr                Push random number from [0 1 2 3]
    _2bW%              Copy and get reversed base 2 rep for one of [0] [1] [0 1] [1 1]
    If*                Multiply bit(s) by I
    @.+                Add element-wise to [h m] array
    Ps=               Index the random number into stringified pi for one of "3.14"
    I*aI*              Make into I by I square
    @+W%z             Add above clock and rotate clockwise

  A=!              ... while the resulting clock is incorrect
N*                 Riffle clock with newlines

Python 2, 421 bytes

uf, estoy seguro esto se puede jugar al golf más.

from itertools import*
from random import*
f,r=[1,1,2,3,5],range
c=_:[x for x in chain(*[combinations(f,i)for i in r(6)])if sum(x)==_]for _ in r(13)
k=[[2,1,4],[2,0,4]]+[[3,4]]*3
def b(h,m):
 o=['W']*5;m/=5;h,m=choice(c[h]),choice(c[m])
 l=dict(zip(zip('WWR',[m,h,m]),'GRB'))
 for x in h,m:
    d=1:[0,1],2:[2],3:[3],5:[4]
    for _ in x:j=d[_].pop();o[j]=l[o[j],x]
 print'n'.join([''.join(o[i]*f[i]for i in _)for _ in k])

Caso de prueba:

>>> b(7,20)
WWBRRRRR
WWRRRRRR
GGGRRRRR
GGGRRRRR
GGGRRRRR
>>> b(7,20)
RRBWWWWW
RRRWWWWW
BBBWWWWW
BBBWWWWW
BBBWWWWW

Reseñas y calificaciones de la guía

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