Last active
November 21, 2017 13:07
-
-
Save antedeguemon/e8bdc5f3cf72c82b1c73ca91a9ab14e9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#lang racket | |
(require test-engine/racket-tests) | |
; Armazena uma tupla (caracter, contagem) que representa | |
; uma sequência. | |
; | |
; ch : elemento, normalmente string de tamanho 1 | |
; count : inteiro | |
(struct chtuple (ch count)) | |
; Dado uma lista de iteráveis e comparáveis, define qual | |
; o elemento que mais aparece consecutivamente na lista. | |
; | |
; Entrada: | |
; maior : chtuple com informações do maior elemento | |
; atual : chtuple do elemento da sequência atual | |
; | |
; Saída: chtuple com a maior sequência | |
(define (maior-sequencia lst maior atual) | |
(if (empty? lst) | |
(if (> (chtuple-count atual) (chtuple-count maior)) | |
atual | |
maior) | |
(if (eq? (car lst) (chtuple-ch atual)) | |
(maior-sequencia (cdr lst) | |
maior | |
(chtuple (chtuple-ch atual) | |
(+ | |
(chtuple-count atual) | |
1))) | |
(maior-sequencia (cdr lst) | |
(if (> (chtuple-count atual) | |
(chtuple-count maior)) | |
atual | |
maior) | |
(chtuple (car lst) 1))))) | |
; Wrapper para a função maior-sequencia que elimina a | |
; chamada com estruturas maior e atual vazias. | |
; | |
; Entrada: | |
; str : lista de elementos comparáveis e iteráveis | |
; | |
; Saída: retorno da função maior-sequencia | |
(define (sequencia str) | |
(maior-sequencia | |
(string->list (string-append str "\0")) | |
(chtuple 0 0) | |
(chtuple 0 0))) | |
; Alguns testes de funcionamento | |
(check-expect (chtuple-count (sequencia "Pressaaao")) 3) | |
(check-expect (chtuple-ch (sequencia "Pressaaao")) #\a) | |
(check-expect (chtuple-count (sequencia "Pressaaaao")) 4) | |
(check-expect (chtuple-ch (sequencia "Pressaaa")) #\a) | |
(check-expect (chtuple-ch (sequencia "oooooooo")) #\o) | |
(check-expect (chtuple-count (sequencia "oooooooo")) 8) | |
(test) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment