Disegna la sequenza di Recamán con ASCII


12

La sequenza di Recamán ( A005132 ) è una sequenza matematica, definita come tale:

A(n)={0if n=0A(n1)nif A(n1)n is positive and not already in the sequenceA(n1)+notherwise

Una spiegazione verbale alternativa e più semplice è la seguente:

Sottrai a meno che non sia possibile (il numero è negativo o è stato usato in precedenza), nel qual caso aggiungi.

I primi termini sono 0,1,3,6,2,7,13,20,12,21,11

Ora, c'è già questa sfida che ti chiede di generare il ntermine della sequenza. Questo è leggermente diverso.

Sfida

Dato un numero n, disegna i primi ntermini della sequenza. Cosa intendo per "disegnare"? Lasciami dimostrare:

  1. max([A(y) for y<=n])nA(1)=0A(2)=1A(3)=3A(4)=6A(5)=26

______

  1. Inizia con la transizione tra il primo e il secondo termine: ovvero 0 e 1. Usa |e -per disegnare un quadrato (uguale lunghezza e altezza), andando verso l'alto. In questo caso, dovremo perdere il -perché la distanza è solo 1.
||
______
  1. A(2)=1A(3)=3
||
______
 | |
 |-|

Come puoi vedere, questa linea ha anche un'altezza di 2, poiché l'altezza deve essere uguale alla distanza tra i due termini.

Se continuiamo, alla fine arriveremo a:

   |--|
   |  |
|| |  |
______
 |||  |
 |||  |
  |   |
  |---|

Regole

  • Se c'è un -e si |scontrano, quello successivo ha la priorità.
  • Potrebbero esserci spazi precedenti / successivi prima / dopo l'immagine, ma non sono consentiti _secondi o precedenti -(l'eccezione è 0- o 1- indicizzazione)
  • Puoi scegliere di impostare il punto 0 appena prima del primo _sulla riga del numero o subito dopo.
  • Nessun carattere alternativi per il -, |o _possono essere utilizzati.
  • Questo è , quindi vince la risposta più breve in byte.

Caso di prova

Ecco un altro caso di test, con n=10

            |-------|
            ||-----||
            ||     ||
  |----|    ||     ||
  |    |    ||     ||
  ||--||    ||     ||
  ||  ||    ||     ||
||||  ||    ||     ||
_____________________
 |||  ||   |||     ||
 |||  ||   |||     ||
  |   ||   |||     ||
  |---||   |||     ||
       |   |||     ||
       |---|||     ||
           ||------||
           |--------|

Non è chiaro dove posizionare il bordo sinistro del quadrato.
Daniil Tutubalin,

@DaniilTutubalin Non sono sicuro di capire cosa intendi.
Geza Kerecsenyi,

in sostanza, l'istruzione specifica solo che dobbiamo disegnare dei quadrati (larghezza = altezza) e che dovrebbero alternarsi tra su e giù. Non ci sono istruzioni sulla dimensione e sulla posizione dei quadrati. Nel caso del test vedo che 2 quadrati possono avere la stessa posizione del bordo sinistro.
Daniil Tutubalin,

Penso As you can see, this line also has a height of 2, since the height must be equal to the distance between the two terms., oltre a You can choose to set the 0 point just before the first _ on the number line, or just after it.concludere abbastanza bene.
Geza Kerecsenyi,

Penso che il test case per n = 10 sia sbagliato da 13-> 20 in poi.
Nick Kennedy,

Risposte:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.