CodeKata #1: Encontre a sequência

Tempo de leitura: menos de 1 minuto

Chuck Norris

Olá pessoal, um grande amigo meu, Adriano Sacardo, um dia desses, conversando sobre o blog, me sugeriu uma nova sessão no blog. Ele disse: “Cara, que tal criar uma sessão de Code Kata no blog?”. Disse, “Não faço ideia o que é isso!” Aí ele explicou que Kata é um termo muito usado em artes marciais, consiste em repetir várias vezes um movimento, afim de obter a perfeição. Em desenvolvimento, usa-se o nome Code Kata, que é basicamente treinar o cérebro a resolver problemas de lógica de programação.

Fiquei com isso na cabeça e hoje resolvi testar. Vamos ver como será a aceitação.

Regras

As regras são as seguintes:

  • O desafio será dado, e qualquer leitor poderá participar.
  • O participante terá uma semana (7 dias) para dar uma solução para o problema.
  • A solução deverá ser escrita em Java ou Groovy.
  • A solução deve ser enviada através do formulário no fim do post.
  • As melhores soluções e seus autores serão divulgadas em um post no dia previamente fixado.

Desafio: Encontre a sequência

Divulgação do resultado dia: 08/02/2016

Escreva um programa capaz de procurar ocorrências de uma pequena cadeia de caracteres (chamaremos de p) em uma outra cadeia de caracteres (chamaremos de t). As cadeias serão compostas pelos seguintes caracteres: A, B, X, Y.

Exemplo: AXYBABYXAAABXBBYX

Deve ser procurado dois tipo de ocorrência:

  • Direta: é quando a cadeia de p aparece como subcadeia dentro de t.
    Por Exemplo:
    p = BYX
    t = AXYBABYXAAABXBBYX
    então p ocorre na forma direta na posição 6 e na posição 15 de t.
  • Reversa: é quando a cadeia de p aparece como subcadeia dentro de t, mas de forma reversa.
    Por Exemplo:
    p = BYX
    t = AXYBABYXAAABXBBYX
    então p ocorre na forma reversa na posição 2 de t.

Premissas

  1. O comprimento da cadeia p (chamaremos de I) é menor igual ao comprimento da cadeia t  (chamaremos de J): I ≤ J;
  2. Limites de I: 1 ≤ I ≤ 5000
  3. Limites de J: 1 ≤ J ≤ 5000

Interface a ser implementada e TO de retorno

Implemente a interface:

[code language=”java”]
public interface IEncontrarSequencia{
public PosicaoTO encontrar(final String p, final String t);
}
[/code]

Esse deve ser o objeto de retorno:

[code language=”java”]
public class PosicaoTO{
public List<Integer> listaPosicoesDireta = new ArrayList<Integer>();
public List<Integer> listaPosicoesReversa = new ArrayList<Integer>();

public void addPosicaoDireta(Integer pPosicao){
listaPosicoesDireta.add(pPosicao);
}

public void addPosicaoReversa(Integer pPosicao){
listaPosicoesReversa.add(pPosicao);
}

List<Integer> getListaPosicoesDireta() {
return listaPosicoesDireta;
}

List<Integer> getListaPosicoesReversa() {
return listaPosicoesReversa;
}
}
[/code]

Espero que gostem!!

Período para envio esgotado.

Abraços

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *