Desafio - problema de entrevistas

68 views
Skip to first unread message

Thiago Adams

unread,
Jan 7, 2025, 9:48:02 AMJan 7
to ccppbrasil
Dado uma lista de períodos, aonde  cada período tem um inicio fim, faça um algoritmo que junte os períodos em que ocorre intersecção.



Augusto Rodrigues

unread,
Jan 7, 2025, 11:22:42 AMJan 7
to ccppb...@googlegroups.com
Thiago, 

Alguma restrição ? C puro, C++ ? Pode ou não usar recursividade ? 

Fui (ou não)...

Em ter., 7 de jan. de 2025 às 11:48, Thiago Adams <thiago...@gmail.com> escreveu:
Dado uma lista de períodos, aonde  cada período tem um inicio fim, faça um algoritmo que junte os períodos em que ocorre intersecção.



--
http://ccppbrasil.github.io/
https://twitter.com/ccppbrasil
 
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/6abebaba-7f48-43a0-a17f-d43f3a123b63n%40googlegroups.com.

Thiago Adams

unread,
Jan 7, 2025, 11:46:19 AMJan 7
to ccppb...@googlegroups.com


On Tue, 7 Jan 2025 at 13:22, Augusto Rodrigues <guto.rodr...@gmail.com> wrote:
Thiago, 

Alguma restrição ? C puro, C++ ? Pode ou não usar recursividade ? 


Está em aberto. A linguagem vai ser de acordo com a vaga. :D
No caso deste grupo C/C++.

Muitas vezes quem aplica um teste deixa em aberto justamente para simular
a realidade.







Augusto Rodrigues

unread,
Jan 7, 2025, 2:18:55 PMJan 7
to ccppb...@googlegroups.com
Sim.. mas as vezes colocar a restrição é colocar a realidade também. Por exemplo, evitar usar float pois os sistemas embutidos que você irá mexer costumam não vir com processador de ponto flutuante. 

É apenas um exemplo real. :-) 

Hoje em dia os terminais de pagamento de conta estão aceitando sistemas operacionais mais robustos como Linux e Android, e agora está cada vez mais raro um terminal não ter um processador de ponto flutuante.

Fora que existem bibliotecas que podem ser utilizadas por compiladores para executar operações de ponto flutuante utilizando estruturas de dados próprias (ou até mesmo usando inteiros), conhecido como soft-float.

Fiz o código mas o mesmo ficou grande. Vou publicar o link e depois vou ver se consigo refatorar o mesmo.

Segue o link:

Esse tipo de desafio é interessante Thiago, mas tem um escopo bem diferente dos desafios como troca de valor de duas variaveis sem usar uma auxiliar. 

Ainda mais que com o chat gpt e IA, não é tão difícil montar um código desses. 

Enfim.. é isso.

Fui





--
http://ccppbrasil.github.io/
https://twitter.com/ccppbrasil
 
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.

Thiago Adams

unread,
Jan 8, 2025, 7:27:57 AMJan 8
to ccppbrasil
On Tuesday, January 7, 2025 at 4:18:55 PM UTC-3 guto.rodr...@gmail.com wrote:
Sim.. mas as vezes colocar a restrição é colocar a realidade também. Por exemplo, evitar usar float pois os sistemas embutidos que você irá mexer costumam não vir com processador de ponto flutuante. 

É apenas um exemplo real. :-) 

Hoje em dia os terminais de pagamento de conta estão aceitando sistemas operacionais mais robustos como Linux e Android, e agora está cada vez mais raro um terminal não ter um processador de ponto flutuante.

Fora que existem bibliotecas que podem ser utilizadas por compiladores para executar operações de ponto flutuante utilizando estruturas de dados próprias (ou até mesmo usando inteiros), conhecido como soft-float.

Fiz o código mas o mesmo ficou grande. Vou publicar o link e depois vou ver se consigo refatorar o mesmo.

Segue o link:

Esse tipo de desafio é interessante Thiago, mas tem um escopo bem diferente dos desafios como troca de valor de duas variaveis sem usar uma auxiliar. 

Ainda mais que com o chat gpt e IA, não é tão difícil montar um código desses. 



O bom seria ter uns exemplos e unit tests. 
Não me parece que esta fazendo o proposto, mas não tive tempo para ver.

Eu tinha resolvido este problema em 2018 em C++. (E dai lembrei para postar aqui)
https://thradams.com/periods.html





Augusto Rodrigues

unread,
Jan 8, 2025, 7:59:15 AMJan 8
to ccppb...@googlegroups.com
Thiago,

Por isso que os desafios têm que ser explicados e definidos. :-)

Ao ler o desafio, entendi que era para agrupar períodos de tempo limitados com início e fim (onde inicio e fim são períodos de tempo também).

O código elaborado por mim (a versão em C foi elaborada por mim mesmo) difere totalmente da sua versão, o que demonstra outra interpretação do desafio.

Este é bom exemplo de que é necessário mais do que programação para atender um determinado desafio :-D

Nesse caso faltou mais explicações ou solicitações de explicações do contexto do desafio do que ir sair programando. 

Enfim... faz parte. 

Fui


--
http://ccppbrasil.github.io/
https://twitter.com/ccppbrasil
 
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.

MAURÍCIO BAINY CURI

unread,
Jan 16, 2025, 7:28:01 AMJan 16
to ccppbrasil
Bom dia, não compreendi o enunciado. Intersecção entre períodos? Qual a delimitação do período (2, 3, 4 dias...)? (5, 6, 7, 8, 10, 12); (5, 9, 10, 12 , 13), ou Lista[ (5, 6, 7, 8, 10, 12); (5, 9, 10, 12 , 13); (11, 14, 17)] = (5, 6, 7, 8, 9, 10, 12, 13). Há elementos idênticos - 5, 10 e 12 - entre os dois primeiros períodos de L. Seria essa a ideia do enunciado?

Thiago Adams

unread,
Jan 16, 2025, 7:31:59 AMJan 16
to ccppbrasil
Período é por exemplo, dia 1 ao dia 3.
Dia 2 ao dia 2. (somente 1 dia)

Exemplo
Período
2-5 e 3-6
Existe uma sobreposição entre estes períodos

A reposta deveria ser
2-6

angelo

unread,
Jan 16, 2025, 9:05:48 AMJan 16
to ccppb...@googlegroups.com

mesmo com sobreposição são 2 períodos.

Um exemplo prático, sistemas de agenda ( sala de reunião, eventos ) podem ocorrer em paralelo e locais (salas ) diferentes.

Fato que, num cenário desses, se não estiver definido que não poderia sobrepor.. o certo seria nem alocar o período 
aí seria certo 2 -6 se não permite nada em paralelo ( nesse contexto do exemplo)



Augusto Rodrigues

unread,
Jan 16, 2025, 8:57:05 PMJan 16
to ccppb...@googlegroups.com
Angelo, o desafio de entrevista descreve:

" Dado uma lista de períodos, onde  cada período tem um início E fim, faça um algoritmo que junte os períodos em que ocorre intersecção."

Logo é exigido que o seu algoritmo:

1. colete os períodos (ou pode ser períodos sejam 'chumbados' no código, já que o desafio não impos uma forma de entrada de dados)
* Aqui a única exigência é que cada período seja delimitado por início e fim. 
* Ou seja, deve existir o conceito de intervalo entre o início e o fim. Caso voce suponha que o desafio esteja falando de intervalos numéricos, temos as seguintes possibilidades:
--> [início .. inicio+N], onde N deve ser maior que 0 

NOTA: É importante CONSTAR QUE o desafio não deixa claro se é válido períodos nulos, onde o início é exatamente igual ao fim. 
Logo, assumindo intervalos numéricos, também é válido a seguinte notação matemática:
--> [início .. inicio+N], onde N deve ser igual ou maior que 0

2. detecte quais períodos fornecidos existe sobreposição entre si e JUNTE esses periodos:
Nesse caso você deve verificar se um determinado período fornecido como entrada está PARCIALMENTE ou COMPLETAMENTE dentro do espaço delimitado de outro período.
Caso seja possível encontrar uma sobreposição entre dois ou mais períodos, você deve juntar os períodos. Só que ao juntar 2 ou mais períodos que se sobrepõem, você DEVE 
GERAR como resultado UM só período fruto do resultado dessa sobreposição. 
Exemplo:
* 4 Períodos de entrada: (0,100), (2-30), (3-5), (89-100)
* 1 Período de saída: (0,100)
Outro exemplo:
* 5 Períodos de entrada: (0,100), (2-30), (3-5), (89-100), (3800, 5000)
* 2 Períodos de saída: (0,100),  (3800, 5000)

Nota 1:
Não foi definido no enunciado do desafio se o início e fim são valores inteiros POSITIVOS, logo temos como válidos os
seguintes períodos de entrada:
( - 234, - 10 ), (-80, -50), (-1.0000.000, 0), (30, 40)

Que como resultado geraria os seguintes períodos de saída:
(-1.0000.000, 0), (30, 40)

Nota 2:
Também não foi definido e explicitado no enunciado do desafio a possibilidade de períodos nulos, onde inicio é exatamente igual ao fim (assumindo
que início e fim possuem valores numéricos). Logo podemos ter como períodos de entrada:
( 3, 3), (-9.999.999.999, -9.999.999.999  ) , ( - 234, - 10 ), (-80, -50), (-1.0000.000, 0), (30, 40)

Que como resultado geraria os seguintes períodos de saída:
(-9.999.999.999,  -9.999.999.999  ) , (-1.0000.000, 0), (3,3), (30, 40)

3. liste os períodos resultantes (conforme já ilustrado acima).

Podemos até questionar outras coisas sobre o enunciado do desafio, conforme ilustrado no texto acima, mas realmente o enunciado deixa claro que 
deseja agrupar (juntar) períodos CASO seja detectado sobreposição dos intervalos desses períodos.

Fui!!


André Tupinambá

unread,
Jan 17, 2025, 5:54:18 AMJan 17
to ccppb...@googlegroups.com
Olá.

Só um comentário não relativo à solução em si.
Eu já recebi exatamente essa questão numa entrevista para uma Big Tech (FAANG, mas não a minha atual).
A descrição foi bem parecida com a original, bem ambígua. Coube a mim definir os parâmetros e limites, é esperado que você faça isso.

Abs,
André

Fabio A Mazzarino

unread,
Jan 17, 2025, 7:17:09 AMJan 17
to ccppb...@googlegroups.com

Muitas vezes a declaração ambígua ou com lacunas, é entregue para verificar se o candidato conhece uma solução pronta, ou se ele raciocina uma solução própria.

Veja o exemplo que dei há algumas semanas, de trocar dígitos de um número. Se você procurar a solução na internet, vai encontrar sempre uma solução numérica, eu propus converter pra string e fazer o replace. Um avaliador bem treinado vai saber quais são as respostas que se encontra na internet.

Em outros casos ajuda a entender se o candidato consegue entregar alguma coisa de qualidade mesmo com especificações falhas, o que convenhamos é relativamente comum.


--
Lab C++ - Código, Dicas e Snippets


angelo

unread,
Jan 17, 2025, 2:19:07 PMJan 17
to ccppb...@googlegroups.com
Boa tarde Augusto

Eu confesso que nem li esse enunciado, fui na mensagem do Thiago diretamente e  foi naquele modo "debug".. por isso uma ideia totalmente diferente, uma visão diferente  (sem ler o enunciado, só poderia dar ruim mesmo)

mas agora eu vou tentar resolver também ( lendo o enunciado correto.. kkkk ) 


Augusto Rodrigues

unread,
Jan 17, 2025, 6:22:21 PMJan 17
to ccppb...@googlegroups.com
Angelo,

Sem problemas! E conforme explicado pelo pessoal, o desafio é ambíguo para que o recrutador possa analisar a sua capacidade de raciocínio, argumentação,
compreensão do escopo (ou da falta do escopo) do que é solicitado pelo desafio e etc etc etc.

Mas coloco um contraponto nesse lance de colocar desafios ambíguos. Existem alguns sites que são utilizados para confrontar os usuários (devs) com desafios de programação utilizados 
tanto em competições de programação como tambem em entrevistas técnicas. E esses sites delimitam bem o desafio ao invés de deixá-los ambíguos demais.

Dentre esses sites, eu tenho conta nos sites abaixo:

Por ter  Comunidade beecrowd brasileira e versão do site em portugues, acabo utilizando o beecrowd com mais frequência, entretanto o site  leetcode também é excelente. 

NOTA 1: A comunidade beecrowd não ajuda a fazer os desafios de forma explícita. E a movimentação do canal é baixa. Mas de vez em quando surge conversas de como 
resolver o algoritmo e ou sanar dúvidas referente a submissão de algoritmos ao site e assuntos relacionados ao site.

NOTA 2: O site beecrowd permite recrutadores ofertarem empregos em sua plataforma, mas somente usuários cadastrados podem visualizar as ofertas.
Isso não é um empecilho, mas aviso que o site mantém gravado a performance do usuário na resolução dos desafios. E essa informação pode ser usada
pelos recrutadores uma vez que a mesma é visível para todos usuários do site.

NOTA 3: Utilizo o site para fins de estudo, principalmente ao tentar resolver os desafios mais complexos que envolvem uso de grafos, busca em profundidade
 e etc. Mas quem pretende usar o site para se destacar na comunidade, melhor pensar bem antes de submeter o seu algoritmo para responder a um desafio.

NOTA 4: As vezes da uns bugs muito loucos quando o site tenta executar o seu algoritmo, por isso vale a pena se inscrever na comunidade 
do discord do beecrowd para saber como evitar esses bugs.

NOTA 5: Comunidade beecrowd no discord para brasileiros e estrangeiros : https://discord.com/channels/963492896206651412/@home

É isso aí.. fui




Reply all
Reply to author
Forward
0 new messages