Skip to content

Instantly share code, notes, and snippets.

@maythiago
Last active August 15, 2019 03:37
Show Gist options
  • Select an option

  • Save maythiago/6bd029b16af91cbcb282553371214fb5 to your computer and use it in GitHub Desktop.

Select an option

Save maythiago/6bd029b16af91cbcb282553371214fb5 to your computer and use it in GitHub Desktop.

String Calculator

  • Tente não ler as próximas etapas.
  • Faça uma tarefa por vez. O truque é aprender a trabalhar incrementalmente.
  • Certifique-se de testar apenas as entradas corretas. Não há necessidade de testar entradas inválidas para este kata.

alt text

Step 1

Crie uma calculadora de strings com a assinatura de metódo:

int Add(string numbers)

O metodo pode levar até dois números separados por vírgulas, e retornará sua soma.

Por exemplo "", "1" ou "1,2". (Para uma string vazia, ele retornará 0).

Dicas:

  • Comece com o caso mais simples de uma string vazia e mova para um e dois números.
  • Lembre-se de resolver as coisas da maneira mais simples possível, para que você se obrigue a escrever testes que você não pensou.
  • Lembre-se de refatorar após cada teste.

Step 2

Permita o metodo Add adicionar uma quantidade desconhecida de números.

Step 3

Permita o metodo Add manipular novas linhas entre os numeros. (No lugar de vírgulas)

  • A seguinte entrada é ok: "1\n2,3" (será igual a 6).

Step 4

Suporte diferentes delimitadores

  • Para mudar o delimitador, o começo da string deve conter uma linha separada que deve parecer com isso: //[delimitador]\n[numeros]. Por exemplo: "//;\n1;2" deverá retornar três, onde o delimitador padrão é ";".
  • A troca de delimitador é opcional. Todos os cenários existentes devem ainda passarem.

Step 5

Chamar o método Add com numeros negativos deve lançar uma exceção "Numeros negativos não são permitidos"

  • Se existirem multiplos numeros negativos, mostre eles na mensagem da exceção.

Step 6

Números maiores que 1000 devem ser ignorados.

  • 2 + 1001 = 2

Step 7

Delimitadores podem ter qualquer tamanho com o seguinte formato: "//[delimiter]\n".

  • "//[***]\n1***2***3" deve retornar 6

Step 8

Permitir multiplos delimitadores no seguinte formato: "//[delimitador1][delimitador2]\n"

  • "//[*][%]\n2*4%8" deve retornar 12

Step 9

Garanta que você consegue manipular multiplos delimitadores com mais de um caracter.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment