vanderleipinto / TT3

TT3
0 stars 0 forks source link

TT3 Questao 3 String para Hash usando yaml #6

Closed vanderleipinto closed 5 months ago

vanderleipinto commented 5 months ago

Questão 3

O objetivo desta questão é implementar a operação inversa da questão 2. Isto é: escreva um método que recebe como argumento um string e retorna um hash. A forma como ele deve ler o string para extrair os valores é dada por um arquivo yaml como os da questão 2.

Por exemplo, se seguirmos o arquivo “format-1.yaml”.

# format-1.yaml
cpf:
  length: 11
  align: left
  padding: spaces
name:
  length: 14
  align: left
  padding: spaces
value:
  length: 8
  align: right
  padding: zeroes

Um método corretamente implementado deve se comportar da seguinte forma:

solucao("97905796671Maria Neusa de00001234") == { cpf: '97905796671', name: 'Maria Neusa de', value: '1234' }
solucao("44010762900Ricardo Fontes00000567") == { cpf: '44010762900', name: 'Ricardo Fontes', value: '567' }
vanderleipinto commented 5 months ago

3

require "yaml"

def solucao(string)
  config = YAML.load_file("format-1.yaml")
  ret = {}

  ret[:cpf] = string.slice!(0, config["cpf"]["length"])
  ret[:name] = string.slice!(0, config["name"]["length"])
  ret[:value] = string.slice!(0, config["value"]["length"]).sub(/\A0+/, "")

  ret
end

p solucao("97905796671Maria Neusa de00001234")
p solucao("44010762900Ricardo Fontes00000567")

Destrinchando o código

Aqui fazemos o require para usar a biblioteca yaml. Criamos um método que recebe a string a ser separada. Separamos de acordo com o tamanho indicado no arquivo yaml importado para variável config. Criamos uma Hash vazia para comportar os dados. Fazemos o slice! passando o tamanho do campo que desejamos retirar da string e colocando nas chaves correspondentes.

Retornamos a hash.