Questa sfida è ispirata a questo fantastico diagramma animato (grazie a Flawr per averlo pubblicato in chat).
Dato un input n
, disegna tutti i suoi fattori primi come poligoni nidificati di punti, come specificato.
Ad esempio, dato il numero 357 = 17x7x3
, disponi 3 punti in un triangolo, 7 versioni di quei triangoli in un ettagono e 17 versioni di quegli eptagoni in un 17 gon. In breve, i poligoni nidificati vanno dal più grande fattore primo all'esterno al più piccolo all'interno. Perché 357
, la tua risposta dovrebbe apparire un po 'così (con o senza colore):
Ogni poligono di ogni numero primo >= 3
non deve essere ruotato attorno al diagramma.
L'unica eccezione è il primo 2
, in particolare per i poteri dispari di 2
. Come puoi vedere nell'esempio che 376 = 47x2x2x2
segue, le 8
s ruotano e non sono singole linee di 2
s, ma sono pile verticali per 4
s in un quadrato. Anche i poteri di 2
, disposti in quadrati, non devono essere ruotati in questo modo.
In effetti, 448 = 7x2x2x2x2x2x2
ha un diagramma che assomiglia a un ettagono di 64
s, ed 64
è organizzato in un quadrato di quadrati di quadrati, ma senza rotazione.
Altri due esempi sono 440 = 11x5x2x2x2
e 432 = 3x3x3x2x2x2x2
. Vediamo che 440
con una potenza dispari di 2, ha ruotato 8
s, ma 432
con una potenza pari a 2
non ruota i suoi 16
s.
E infine, ecco un esempio minimo 10 = 5x2
, senza colore che ho preso in giro con Python e il suo turtle
modulo.
La sfida
- Dato un input in
n
cui1 <= n <= 10000
, output un'immagine dei suoi poligoni fattore nidificato. - Le regole sono:
- L'immagine è composta da poligoni nidificati di punti, da un poligono con (il più grande fattore primo) lati all'esterno al più piccolo fattore primo all'interno.
- Per il fattore 2, i poteri di 2 dovrebbero impilarsi come una linea, quindi un quadrato, quindi una linea di quadrati e così via. Anche i poteri di 2 non devono essere ruotati. Poteri dispari di 2 dovrebbero essere ruotati attorno ai rispettivi poligoni e dovrebbero essere impilati verticalmente prima della rotazione.
- Puoi orientare l'immagine come preferisci (anche se preferisco), ma ogni poligono nidificato dovrebbe essere rivolto nella stessa direzione di qualsiasi altro poligono, con la sola eccezione dei poteri dispari di 2.
- Sono disponibili due opzioni per la dimensione dell'immagine e la dimensione del punto:
- La dimensione dell'immagine è statica e la dimensione del punto diminuisce
n
all'aumentare (come nell'animazione). - La dimensione del punto è statica e la dimensione dell'immagine aumenta
n
all'aumentare.
- La dimensione dell'immagine è statica e la dimensione del punto diminuisce
- I primi tre strati di poligoni dovrebbero essere distinguibili dai poligoni vicini (cioè non toccanti), ma considerando la dimensione delle immagini intorno e intorno
n=10000
, va bene se gli strati dopo iniziano a toccarsi. Preferirei se non lo facessero, ma potrebbe essere inevitabile adattarsi a un'immagine caricabile su Stack Exchange. - Il colore è facoltativo
- La forma dei punti dipende da te. Se i quadrati sono migliori per la tua lingua, usa quelli.
- Nessun bonus, ma vorrei vedere qualcuno animare e colorare i diagrammi come nel post originale.
Grazie a Conor O'Brien, EasterlyIrk, Martin Ender, Kritixi Lithos, Mego, DJ McMayhem e El'endia Starman per il loro aiuto nello scrivere questa domanda.
Questo codice golf, quindi il codice più corto vince. Buona fortuna e buon golf!
n = n //= i
dovrebbe esseren//= i
?