Abbiamo avuto un paio di sfide sulla spirale di Ulam. Ma questo non è abbastanza.
In questa sfida tracciamo una spirale triangolare di Ulam (al contrario della solita spirale quadrata di Ulam). Ecco uno schizzo di come appare la spirale.
Come sappiamo, la spirale di Ulam dispone tutti i numeri naturali in una spirale esterna e segna solo quelli che sono primi. Quindi nello schizzo sopra sarebbero mostrati solo i numeri che appaiono in nero (i numeri primi).
La sfida
Accetta un numero N come input e visualizza la spirale triangolare Ulam fino a quel numero.
- L'input può essere stdin o argomento della funzione.
- La spirale dovrebbe girare nella direzione positiva (cioè in senso antiorario), come nella figura sopra.
- Qualsiasi giro di 120 gradi della figura sopra sarebbe valido e il giro potrebbe essere diverso per ingressi diversi. Ma il lato più basso dei triangoli impliciti dovrebbe essere orizzontale, poiché le uniche svolte consentite sono (multipli di) 120 gradi.
- Il codice dovrebbe essere eseguito teoricamente (con tempo e memoria sufficienti) per qualsiasi N fino a quanto consentito da qualsiasi calcolo intermedio che si esegue con il tipo di dati predefinito.
double
è abbastanza; non sono necessari tipi interi di grandi dimensioni. - Sono ammesse tutte le funzioni integrate.
- Non accetterò la mia risposta (non che penso che sarebbe la più breve comunque ...).
Formati di output
Scegli una delle seguenti opzioni.
Visualizza un grafico con un marcatore (punto, cerchio, croce, qualunque cosa tu preferisca) ai numeri primi e nulla ai numeri non primi. La scala non deve necessariamente essere la stessa per i due assi. Cioè, i triangoli impliciti non devono essere equilateri. Gli assi, le linee della griglia e le etichette degli assi sono opzionali. Sono richiesti solo i marcatori ai numeri primi.
Un esempio di output per N = 12 sarebbe il seguente (confronta con lo schizzo sopra). Il secondo diagramma è un esempio più interessante, corrispondente a N = 10000.
- Produci un file di immagine con quanto sopra, in qualsiasi formato di immagine ben noto (come png, tiff, bmp).
Mostra la spirale come arte ASCII , usando un singolo carattere a tua scelta per i numeri primi e uno spazio vuoto per i non primi, con uno spazio vuoto per separare le posizioni numeriche nella stessa riga. Sono consentiti spazi iniziali o finali o newline. Ad esempio, il caso N = 12 usando
o
come carattere sarebbeo · · · o · o · · · o · o
dove ovviamente
o
sarebbe effettivamente visualizzato solo il segno ai numeri primi. Il·
non-primes è mostrato qui solo come riferimento.
Criterio vincente
La vera ricompensa è vedere da soli quei fantastici schemi di Code golf, il codice più corto vince.