Informazioni sulla serie
Prima di tutto, puoi trattarlo come qualsiasi altra sfida di golf del codice e rispondere senza preoccuparti della serie. Tuttavia, esiste una classifica in tutte le sfide. Puoi trovare la classifica insieme ad alcune ulteriori informazioni sulla serie nel primo post .
Anche se ho un sacco di idee in programma per la serie, le sfide future non sono ancora state messe sulla pietra. Se hai qualche suggerimento, per favore fatemelo sapere sul post sandbox pertinente .
Hole 4: The Bertrand Paradox
Il paradosso di Bertrand è un problema interessante, che mostra come metodi diversi per scegliere accordi casuali in un cerchio possano produrre diverse distribuzioni di accordi, i loro punti medi e le loro lunghezze.
In questa sfida dovresti generare accordi casuali del cerchio unitario, usando il metodo "giusto", cioè uno che produce una distribuzione di accordi invariante in scala e traduzione. Nell'articolo di Wikipedia collegato, "Metodo 2" è un tale metodo.
Ecco le regole esatte:
- Dovresti prendere un numero intero positivo
N
che specifica quanti accordi dovrebbero essere restituiti. L'output dovrebbe essere un elenco diN
accordi, ognuno specificato come due punti sul cerchio unitario, dato dal loro angolo polare in radianti. - Il tuo codice dovrebbe essere in grado di restituire almeno 2 20 valori diversi per ciascuno dei due angoli . Se il tuo RNG disponibile ha un intervallo più piccolo, devi prima costruire un RNG con un intervallo sufficientemente ampio sopra quello incorporato oppure devi implementare il tuo RNG adatto . Questa pagina può essere utile per questo.
- La distribuzione degli accordi deve essere indistinguibile da quella prodotta dal "Metodo 2" nell'articolo Wikipedia collegato. Se si implementa un algoritmo diverso per scegliere gli accordi, si prega di includere una prova di correttezza. Qualunque algoritmo si scelga di implementare, deve teoricamente essere in grado di generare qualsiasi accordo valido nel cerchio unitario (salvo le limitazioni del PRNG sottostante o tipi di dati a precisione limitata).
- L'implementazione dovrebbe utilizzare e restituire numeri in virgola mobile (almeno 32 bit di larghezza) o numeri in virgola fissa (almeno 24 bit di larghezza) e tutte le operazioni aritmetiche devono essere accurate entro un massimo di 16 ulp .
È possibile scrivere un programma completo o una funzione e accettare input tramite STDIN (o alternativa più vicina), argomento della riga di comando o argomento della funzione e produrre output tramite STDOUT (o alternativa più vicina), valore di ritorno della funzione o parametro di funzione (out).
L'output può essere in qualsiasi elenco o formato stringa conveniente, purché i singoli numeri siano chiaramente distinguibili e il loro numero totale sia sempre uniforme.
Questo è il golf del codice, quindi vince l'invio più breve (in byte). E, naturalmente, la presentazione più breve per utente entrerà anche nella classifica generale della serie.
visualizzazione
È possibile utilizzare il frammento seguente per eseguire il rendering delle linee generate e controllarne la distribuzione. Basta incollare un elenco di coppie di angoli nell'area di testo. Lo snippet dovrebbe essere in grado di gestire quasi tutti i formati di elenco, purché i numeri siano semplici numeri decimali (nessuna notazione scientifica). Ti consiglio di usare almeno 1000 righe per avere una buona idea della distribuzione. Ho anche fornito alcuni dati di esempio per i diversi metodi presentati nell'articolo di seguito.
Dati di esempio generati con il metodo 1.
Dati di esempio generati con il metodo 2.
Dati di esempio generati con il metodo 3.
Classifica
Il primo post della serie genera una classifica.
Per assicurarti che le tue risposte vengano visualizzate, inizia ogni risposta con un titolo, utilizzando il seguente modello Markdown:
# Language Name, N bytes
dov'è N
la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(La lingua non è attualmente visualizzata, ma lo snippet richiede e analizza, e in futuro potrei aggiungere una classifica linguistica).