È stato divertente! Tuttavia, con solo tre cifre, il divertimento era finito troppo presto. Questa sfida è simile, ma continueremo il divertimento.
La sfida
Stampa quante più cifre della sezione aurea φ possibile. Il rapporto aureo è definito come il numero che soddisfa φ = (φ + 1) / φ e le prime 100 cifre sono date da:
1,6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Questa sfida non riguarda il calcolo φ! Si tratta di stampare quante più cifre possibili senza usare alcun metodo per farlo due volte. Quindi trova quanti più modi creativi per ottenere le tue cifre!
restrizioni
Di per sé, stampare le cifre di φ sarebbe un po 'troppo semplice, quindi ecco le regole:
- Devi costruire il numero in ordine da sinistra a destra , stampandolo pezzo per pezzo o costruendo una stringa da sinistra a destra e stampandolo alla fine - potresti persino generare un array di caratteri numerici e quindi unirlo e stampalo, finché lo fai in ordine. Nelle seguenti regole "stampa" e "output" possono riferirsi a uno di quei processi (ad esempio se si sta costruendo una stringa e la stringa contiene
1.6
che conta1.6
già come stampata). - Per il tuo codice ottieni un budget di 15 caratteri per cifra . Il periodo non conta per quel budget, ma deve anche essere stampato. Si noti che la restrizione riguarda solo la dimensione del codice totale: è possibile utilizzare più di 15 caratteri per qualsiasi cifra purché non si utilizzino più in media. In effetti, potresti accumulare un "debito" nei personaggi e "ripagarlo" in seguito. Ad esempio per stampare
1.618
hai 60 caratteri. - Le librerie / importazioni standard non contano per le dimensioni del codice. Ma non puoi dare gratuitamente questi alias abbreviati inclusi!
- Non è necessario utilizzare la cifra che si sta generando al momento, né alcuna cifra già stampata. Ad esempio,
1
potrebbe non apparire da nessuna parte nel codice sorgente, poiché è la prima cifra. Il codice che genera8
in1.618
può utilizzare una o tutte le cifre[0234579]
, ma nessuna[168]
. A tale scopo, tutti i letterali equivalenti a una singola cifra vengono trattati come tale cifra . Quindi, se la tua lingua può rappresentare in9
quanto non'\t'
ti è permesso usarla da nessuna parte, dove invece non potresti usare una9
. - Non è necessario produrre più cifre contemporaneamente. Dovrebbe essere possibile dividere chiaramente il codice in blocchi che generano una cifra alla volta.
Non si deve fare riferimento a qualsiasi built-in funzione, l'operatore / string matematico / booleano / bit-saggio, variabile o costante, che è stato utilizzato nel codice che ha generato una cifra precedente. Le eccezioni sono la conversione da numero intero a stringa, la concatenazione di stringhe e le funzioni di stampa che potrebbero essere necessarie per ogni singola cifra. Nota che non importa con quale nome ti riferisci a qualsiasi built-in: solo perché alias un built-in
PI
per entrambip
eq
non significa che devi usarep
una volta eq
una volta. Allo stesso modo, ti è permesso usare un nome due volte se si riferisce a due diversi built-in, come stringalength
e matricelength
.Se il tuo linguaggio di programmazione non ha funzioni, usa il tuo miglior giudizio su ciò che sarebbe equivalente - ad esempio per lo script bash, invocare altri programmi dovrebbe seguire le regole imposte alle funzioni
- La tua richiesta deve essere scritta in una sola lingua. Pertanto, non è possibile eseguire l'interprete di un'altra lingua per accedere anche ai built-in di quella lingua.
implicazioni
I seguenti punti sono tutti sottintesi dalle regole precedenti, ma le aggiungo qui per evitare domande che sono già emerse nella sandbox:
- Non è consentito sovrascrivere parti dell'output stampando alcuni backspaces (di solito
'\b'
) in mezzo. - Sono vietati i loop che generano / producono più cifre. (Tuttavia, i loop che calcolano una singola cifra vanno bene.)
(1 + √5)/2
È vietato utilizzare una versione offuscata o dividere i numeri di Fibonacci per ottenere più di una singola cifra.- Non è possibile precalcolare le 10 cifre e memorizzarle in 10 variabili, quindi fare riferimento a quelle, perché quei riferimenti alle variabili non generano la cifra - il codice che riempie la variabile lo fa, quindi questa è una violazione della regola 6.
- In effetti, non è possibile riutilizzare alcun risultato precedente (o intermedio), perché ciò significherebbe che due cifre condividono il codice per essere generato .
- Altrimenti, puoi usare qualsiasi mezzo (che non deve essere puramente matematico) per generare le cifre. (E dovresti!)
- In realtà non è necessario calcolare nulla, se è possibile estrarre le cifre corrette da molti luoghi diversi utilizzando la libreria standard.
- È possibile utilizzare più volte un operatore durante la generazione di una sola cifra, quindi
2+2+2
è giusto creare il primo6
(anche se è improbabile il più breve). - È possibile utilizzare qualsiasi letterale tutte le volte che si vuole, perché non sono costanti predefinite. Quindi, purché non sia necessario stampare
5
, è possibile inserire5
nel codice tutte le s che si desidera. - Non è possibile codificare l'output, poiché ciò implicherebbe l'utilizzo delle cifre che si stanno trasmettendo.
In breve: non usare alcun metodo per generare cifre due volte e non usare la cifra che stai producendo o che hai già stampato.
Se trovi una scappatoia che ti consente di ottenere un punteggio (quasi) infinito, per favore non rovinare la sfida sfruttandola, ma fammi sapere così posso vedere se la scappatoia può essere risolta senza rompere nulla.
punteggio
Il programma che stampa il numero più alto di cifre vince correttamente. In caso di pareggio il codice più corto rompe il pareggio.
Aggiungi una versione non commentata commentata che identifichi quale parte del codice genera quale cifra.
PS: Se qualcuno batte le 100 cifre sopra, eccone alcune .
x = (x+1)/x
(o x^2 = x+1
) (o x^2-x+1
).