Percursos
/
SQLite
SQLite
/
Exercícios
/
All Your Base
All Your Base

All Your Base

Difícil

Introdução

Acabaste de ser contratado como professor de matemática. A tua primeira semana correu bem, mas há algo de estranho na segunda. O problema é que todas as respostas dadas pelos teus alunos estão erradas! Felizmente, os teus conhecimentos de matemática permitiram-te identificar o problema: as respostas dos alunos estão corretas, mas estão todas na base 2 (binário)! Curiosamente, verifica-se que, a cada semana, os alunos usam uma base diferente. Para te ajudar a verificar rapidamente as respostas dos alunos, vais construir uma ferramenta que converte entre bases.

Instruções

Converte uma sequência de algarismos numa base, que representa um número, numa sequência de algarismos noutra base, que representa o mesmo número.

Note

Tenta ser tu a implementar a conversão. Não uses outra coisa para fazer a conversão por ti.

Sobre a Notação Posicional

Na notação posicional, um número na base b pode ser entendido como uma combinação linear de potências de b.

O número 42, na base 10, significa:

(4 × 10¹) + (2 × 10⁰)

O número 101010, na base 2, significa:

(1 × 2⁵) + (0 × 2⁴) + (1 × 2³) + (0 × 2²) + (1 × 2¹) + (0 × 2⁰)

O número 1120, na base 3, significa:

(1 × 3³) + (1 × 3²) + (2 × 3¹) + (0 × 3⁰)

Sim. Aqueles três números acima são exatamente o mesmo número. Parabéns!

  • A coluna digits contém uma lista de números inteiros codificada em JSON. Exemplo:
    [1,0,1,0,1,0]
    
  • A coluna result deve conter dados codificados em JSON: um objeto com os algarismos como números inteiros ou uma descrição de eventuais erros. Exemplos:
    {"digits":[1,0,1,0,1,0]}
    
    ou
    {"error":"some error description"}
    

Esquema da tabela

CREATE TABLE IF NOT EXISTS "all-your-base" (
  input_base  INTEGER NOT NULL,
  digits      TEXT    NOT NULL, -- json array
  output_base INTEGER NOT NULL,
  result      TEXT              -- json object
);

Documentação do JSON

Funções e operadores JSON

Editar via GitHub A ligação abre numa nova janela ou separador
SQLite Exercism

Estás pronto para começar All Your Base?

Inscreve-te no Exercism para aprenderes e dominares SQLite com 81 exercícios, e mentoria humana real, tudo grátis.