Desafios

Conceitos essenciais para começar

Por vezes, algumas pessoas acabam encontrando dificuldades para iniciar na programação e encontram-se um pouco perdidas em meio à quantidade de recursos e opções disponíveis. Aqui nos programadores, buscamos ajudar a todos da melhor forma possível.

Continue lendo

#14: Expressões Numéricas

Expressões Numéricas

Introdução

Expressões numéricas são sequências de duas ou mais operações que devem ser realizadas respeitando determinada ordem. Para encontrar sempre um mesmo valor quando calculamos uma expressão numérica, usamos regras que definem a ordem que as operações serão feitas.

  • 12 + 3 * 5 = 27
  • 2 * ( 5 - 1 ) = 8
  • 2^2 + 8 / 2 = 8
  • 2^( 3 - 1) = 4

E assim por diante.

Continue lendo

#13: Passeio do Cavalo

Passeio do Cavalo

Introdução

O problema do cavalo, ou passeio do cavalo, é um problema matemático envolvendo o movimento da peça do cavalo no tabuleiro de xadrez. O cavalo é colocado no tabuleiro vazio e, seguindo as regras do jogo, precisa passar por todas as casas exatamente uma vez em movimentos consecutivos.

Instruções

Este desafio consiste em:

  • Criar um programa que encontre uma solução para o passeio do cavalo.
  • O programa deve receber, via linha de comando, uma casa em notação algébrica de xadrez que será a posição inicial do cavalo.
  • O programa deverá retornar uma seguência de posições (uma por linha) em notação algébrica de xadrez indicando o caminho percorrido pelo cavalo a fim de preencher todo o tabuleiro sem faltar nenhuma casa e sem repetir nenhuma.

Exemplo

Considere a seguinte entrada:

Continue lendo

#12: Potências de 2

Potências de 2

Introdução

A base 2 é uma das bases mais usadas em computação. Números nessa base são representados pela equação 2^n. Exemplo:

  • 2^0 = 1
  • 2^1 = 2
  • 2^2 = 4
  • 2^3 = 8

E assim por diante.

Instruções

Este desafio consiste em:

  • Ler um arquivo de números (abaixo), contendo um número por linha.
  • Se o número for uma potência de 2, imprimir o número seguido de true e o expoente ao qual se deve elevar 2 para obter o número.
  • Se o número não for uma potência de 2, imprimir o número seguido de false.

Exemplo

Considere a lista de números:

Continue lendo

#11: Primos em Pi

Primos em Pi

Introdução

O número pi (π) é uma das mais famosas e mais facilmente reconhecidas constantes matemáticas. Originalmente definido como o resultado da divisão da circunferência de um círculo pelo seu diâmetro, π é um número irracional e a sua representação decimal é infinita e não se repete.

Instruções

Este desafio consiste em encontrar a sequência mais longa de números primos (entre 2 e 9973) no primeiro 1 milhão de casas decimais de π.

Continue lendo

#10: Turing Machine

Turing Machine

Introdução

Uma Máquina de Turing é um modelo computacional matemático que define uma máquina abstrata. Essa máquina manipula símbolos numa fita de papel de acordo com uma tabela de regras simples. Apesar da simplicidade do modelo, é possível construir uma Máquina de Turing capaz de simular qualquer algoritmo computacional.

Funcionamento

Uma máquina de Turing lê os dados de uma “fita” infinita, caracter por caracter (também conhecidos como “símbolos” na terminologia original) A máquina está sempre em um determinado “estado” (estado inicial == string “0”). As regras contém instruções para “casar” um determinado par estado/símbolo e executar determinadas ações.

Continue lendo

#9: Big base!

Big base!

Descrição

Escreva um programa que leia um arquivo texto contendo uma lista de três numeros por linha: base_entrada, base_saida e numero_entrada e imprima o número fornecido (já na base de entrada) convertido para a base de saída.

O formato exato da entrada é:

base_entrada base_saida numero_entrada

Exemplo:

10 16 1500
36 10 GOODBYE
36 16 HELLOWORLD
10 2 32452867
2 10 1234

Exemplo de saida para a entrada acima:

Continue lendo

#8: Frações simples

Frações simples

Descrição

Escreva um programa que leia um arquivo texto contendo uma lista de frações em ASCII (uma por linha) e produza na saída a versão simplificada de cada fração. Números simples assumem denominador 1 (apenas imprima o número). Divisões inteiras como 81/9 devem imprimir o número inteiro 9. Em caso de erros na entrada (como divisão por zero), imprima “ERR” em maíusculas.

Por exemplo, data a entrada abaixo:

Continue lendo

#7: Unix tac

TAC!

Em Unix (e Linux), o comando cat mostra o conteúdo de um arquivo texto na saída padrão. Um comando similar (e menos conhecido) é o tac, que exibe um arquivo texto invertendo as linhas (da última para a primeira).

O problema

Implemente o comando tac na sua linguagem e bibliotecas preferidas. Condições de funcionamento:

  • O programa deve ler um arquivo do disco especificado na linha de comando e imprimir o arquivo linha a linha, começando pela última linha e terminando na primeira. Ex:

    Continue lendo

#6: Anagramas

Anagramas!

Um anagrama é uma palavra ou frase formada com o re-arranjo de todas as letras de uma outra palavra ou frase (sem sobra ou falta). Exemplos:

  • A palavra barco é um anagrama da palavra cobra (todas as letras de “cobra” usadas em “barco).
  • A palavra mar não é um anagrama da palavra roma (a letra “o” em “roma” não foi usada).
  • A palavra sal não é um anagrama da palavra mal (a letra “s” de “sal” não existe em “mal”).

O problema

Escreva um programa na sua linguagem e bibliotecas preferidas que:

Continue lendo

#5: OBSOLETO

Atenção

Este desafio foi marcado como OBSOLETO. O texto original permanecerá abaixo para efeitos de referência, mas os admins não aceitarão novas contribuições para este desafio.

Processando as informações da empresa:

Considere, como exemplo, o seguinte arquivo funcionarios.json, com o seguinte conteúdo:

{
    "funcionarios":[
        {
            "id":0,
            "nome":"Marcelo",
            "sobrenome":"Silva",
            "salario":3200.00,
            "area":"SM"
        },
        {
            "id":1,
            "nome":"Washington",
            "sobrenome":"Ramos",
            "salario":2700.00,
            "area":"UD"
        },
        {
            "id":2,
            "nome":"Sergio",
            "sobrenome":"Pinheiro",
            "salario":2450.00,
            "area":"SD"
        },
        {
            "id":3,
            "nome":"Bernardo",
            "sobrenome":"Costa",
            "salario":3700.00,
            "area":"SM"
        },
        {
            "id":4,
            "nome":"Cleverton",
            "sobrenome":"Farias",
            "salario":2750.00,
            "area":"SD"
        },
        {
            "id":5,
            "nome":"Abraão",
            "sobrenome":"Campos",
            "salario":2550.00,
            "area":"SD"
        },
        {
            "id":6,
            "nome":"Letícia",
            "sobrenome":"Farias",
            "salario":2450.00,
            "area":"UD"
        },
        {
            "id":7,
            "nome":"Fernando",
            "sobrenome":"Ramos",
            "salario":2450.00,
            "area":"SD"
        },
        {
            "id":8,
            "nome":"Marcelo",
            "sobrenome":"Farias",
            "salario":2550.00,
            "area":"UD"
        },
        {
            "id":9,
            "nome":"Fabio",
            "sobrenome":"Souza",
            "salario":2750.00,
            "area":"SD"
        },
        {
            "id":10,
            "nome":"Clederson",
            "sobrenome":"Oliveira",
            "salario":2500.00,
            "area":"SD"
        }
    ],
    "areas":[
        {
            "codigo":"SD",
            "nome":"Desenvolvimento de Software"
        },
        {
            "codigo":"SM",
            "nome":"Gerenciamento de Software"
        },
        {
            "codigo":"UD",
            "nome":"Designer de UI/UX"
        }
    ]
}

Utilize a linguagem de programação de sua preferência (e quaisquer bibliotecas que sejam necessárias) e escreva um programa que leia o nome de um arquivo JSON como parâmetro – que seguirá os mesmos moldes do arquivo funcionarios.json listado acima – e imprima as informações solicitadas a seguir, baseado no conteúdo do arquivo lido.

Continue lendo

#4: OBSOLETO

Atenção

Este desafio foi marcado como OBSOLETO. O texto original permanecerá abaixo para efeitos de referência, mas os admins não aceitarão novas contribuições para este desafio.

Contabilizar Peças de Xadrez.

O xadrez é um jogo de tabuleiro estratégico, disputado por dois jogadores e que consiste em um tabuleiro com um arranjo de 8 linhas e colunas formando 64 posições diferentes como uma matriz [8 x 8]. Existem 6 diferentes tipos de peças no xadrez e cada tipo possui uma quantidade para cada um dos jogadores (destacada por parênteses):

Continue lendo