Clojure - A Base 10 U36688


Statement
 

pdf   zip

thehtml

Feu una funció transforma_a_base_10 que, donada una base b (2 b 9), retorna una altra funció (anomenem-la fret): (def fret (transforma_a_base_10 b)).

Aquesta funció fret retornada ha de ser tal que espera rebre un dígit d en base b (0 d < b) que forma part del nombre, en base b, que volem expressar en base 10. La crida (fret d) retorna una altra funció que fa el mateix procés. Tot plegat acaba en cridar aquesta funció retornada amb -1, aleshores es retornarà el nombre format pels dígits que hem anat passant successivament a les funcions retornades (el primer és considerat el dígit de més pes), però expressat en base 10.

Exemple: Volem passar 101011 (en base 2) a base 10 (on 1010112 = 4310).

Cal fer (def h2 (transforma_a_base_10 2)), i després només cal cridar successivament les funcions retornades per les crides a h2 amb els dígits de 101011, acabant amb -1: (((((((h2 1) 0) 1) 0) 1) 1) -1) retorna 43.

Observacions

  • No podeu fer servir cap mena d’estructura de dades, ni cap mena de seqüència. Només nombres i funcions.
Public test cases
  • Input

    (let [fret (transforma_a_base_10 2)] (((((((fret 1) 0) 1) 0) 1) 1) -1))
    

    Output

    43
    
  • Input

    (let [fret (transforma_a_base_10 3)] ((((((fret 2) 2) 1) 0) 2) -1))
    

    Output

    227
    
  • Input

    (let [fret (transforma_a_base_10 5)] (((((((((fret 4) 3) 2) 0) 1) 4) 3) 3) -1))
    
    

    Output

    365868
    
    
  • Input

    (let [fret (transforma_a_base_10 9)] (((((((fret 8) 7) 1) 0) 3) 5) -1))
    

    Output

    519080
    
  • Information
    Author
    Jordi Delgado
    Language
    Catalan
    Official solutions
    Clojure
    User solutions
    Clojure