Giter Site home page Giter Site logo

summer-internship-exercise-2024's Introduction

Teknonymy - Summer Internship Exercise

O Problema

Teknonymy = tecnónimo

Em algumas sociedades, recebemos um nome próprio no nosso nascimento e as pessoas usam-no para se referir a nós enquanto não temos filhos. Depois de termos pelo menos um filho, as pessoas colocam-nos um tecnónimo. Um tecnónimo é uma forma de se referir a alguém de acordo com os seus descendentes, como 'Catarina mãe de João' ou 'Pedro bisavô de Joana”, etc.

Neste exercício receberás uma espécie de árvore genealógica de uma família e a tua tarefa será dar o tecnónimo correto, de acordo com as regras especificadas na próxima seção.

Regras

  • Se X não tem descendentes diretos, então X não têm tecnónimo (isto é, o retorno é "").
  • Um descendente direto de X é qualquer membro, exceto X, da subárvore com raiz em X.
  • Se X tem alguns descendentes diretos: o tecnónimo é construído de acordo com o sexo de X ('M' -> male , 'F' -> female) e de acordo o nome do mais velho entre os seus descendentes diretos da geração mais distante de X.
  • A “distância de geração” entre X e um dos seus descendentes, digamos Y, é o número de níveis entre X e Y.
  • Os tecnónimos possíveis são (todos em minúsculas): 'mother of Y', 'grandfather of Y', 'great-grandmother of Y', 'great-great-grandmother of Y', e assim por diante.
  • Garantimos que não haverá ambiguidade para determinar quem é o mais velho entre dois descendentes diretos de alguém.

Exemplo

alt text

Para A: a última geração, e a mais distante de A, é a terceira geração, o mais velho dessa geração é F e há duas gerações entre A e F, então o tecnónimo de A é 'grandfather of F';

para B: B tem apenas um descendente direto, E, na terceira geração, e há uma geração entre B e E, então o tecnónimo de B é 'father of E';

para D: D tem três descendentes diretos na terceira geração, F, G e H, sendo F o mais velho, então o tecnónimo de D é 'mother of F';

C, H, E, F e G não têm descendente, portanto não possuem tecnónimo.

O que é preciso fazer?

  • Implementar o método getTeknonymy em TeknonymyService.
  • Implementar mais testes em TeknonymyServiceTest

Vai ser valorizado a performance tanto para árvores geneológicas grandes como para pequenas, assim como o facto do código estar escrito de forma perceptível e organizada.

Como correr os testes

Dúvidas

Quaisquer dúvidas que tenhas, cria um issue aqui no github :)

summer-internship-exercise-2024's People

Contributors

filipe-varela avatar amadoandre avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.