Skip to content

Instantly share code, notes, and snippets.

@vmesel
Created January 9, 2020 18:48
Show Gist options
  • Save vmesel/7842cfa03a4e6e720251fecff06d47f7 to your computer and use it in GitHub Desktop.
Save vmesel/7842cfa03a4e6e720251fecff06d47f7 to your computer and use it in GitHub Desktop.

Desafio - IP Válido

Escreva uma função para checar se uma string é um IPv4 ou IPv6 válidos.

Os endereços IPv4 são canonicamente representados na notação decimal com pontos, que consiste em quatro números decimais, cada um variando de 0 a 255, separados por pontos ("."), Por exemplo, 172.16.254.1;

Além disso, zeros à esquerda no IPv4 são inválidos. Por exemplo, o endereço 172.16.254.01 é inválido.

Os endereços IPv6 são representados como oito grupos de quatro dígitos hexadecimais, cada grupo representando 16 bits. Os grupos são separados por dois pontos (":"). Por exemplo, o endereço 2001: 0db8: 85a3: 0000: 0000: 8a2e: 0370: 7334 é válido. Além disso, poderíamos omitir alguns zeros à esquerda entre quatro dígitos hexadecimais e alguns caracteres minúsculos no endereço para maiúsculas, portanto, 2001: db8: 85a3: 0: 0: 8A2E: 0370: 7334 também é um endereço IPv6 válido ( Omita os zeros à esquerda e use maiúsculas).

No entanto, não substituímos um grupo consecutivo de valor zero por um único grupo vazio usando dois dois pontos consecutivos (: :) para buscar a simplicidade. Por exemplo, 2001: 0db8: 85a3 :: 8A2E: 0370: 7334 é um endereço IPv6 inválido.

Nota: Você pode assumir que não há espaço extra ou caracteres especiais na sequência de entrada.

Exemplo 1:

Input: "172.16.254.1"

Output: "IPv4"

Explanation: This is a valid IPv4 address, return "IPv4".

Exemplo 2:

Input: "2001:0db8:85a3:0:0:8A2E:0370:7334"

Output: "IPv6"

Explanation: This is a valid IPv6 address, return "IPv6".

Exemplo 3:

Input: "256.256.256.256"

Output: "Neither"

Explanation: This is neither a IPv4 address nor a IPv6 address.

Como enviar sua sua solução

Para participar você deverá fazer um fork deste repositório e submeter as alterações apenas para a sua cópia. Não faça um PR para este repositório, apenas envie um link para o avaliador que está em contato com você.

O que queremos:

  • Python 3.
  • Testes bem escritos e com uma boa cobertura.
  • Legibilidade e manutenibilidade de código.
  • Código em inglês.
  • Tratamento de erros.
  • Organização e instruções de como executar o projeto.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment