Skip to content

Latest commit

 

History

History
1098 lines (790 loc) · 30.3 KB

02_bases_cs.md

File metadata and controls

1098 lines (790 loc) · 30.3 KB

Bases de C#

1 - Qual o valor hexadecimal da variável a após a execução do seguinte código C#? E o valor em decimal? Justifica a tua resposta.

uint a = 0xFEDE;
a &= 0x0F0F;

Soluções


2 - Qual o valor hexadecimal da variável a após a execução do seguinte código C#? E o valor em binário? Justifica a tua resposta.

ulong a = 0xFEDE;
a |= 0x0F0F;

Soluções


3 - Qual o valor hexadecimal da variável a após a execução do seguinte código C#? E o valor em decimal? Justifica a tua resposta.

byte a = 0b1011_1100;
a ^= 0x0F;

Soluções


4 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

uint n = uint.MaxValue;
Console.WriteLine(n + 1);

Soluções


5 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

int n = -1;
Console.WriteLine(~n);

Soluções


6 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

ulong a = 0xABCD;
Console.WriteLine($"{a & 0x000F}");

Soluções


7 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

short s = 5 / 2;
Console.WriteLine($"*\t{s}\t*");

Soluções


8 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

double x = 3.1223;
Console.WriteLine(@"\\{x}\\:" + x);

Soluções


9 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

char c = '\u00AE';
Console.WriteLine($@"\n{c}\n");

Soluções


10 - Escreve um programa que solicite ao utilizador uma string e a volte a mostrar no ecrã.

Soluções


11 - Escreve um programa que solicite ao utilizador uma string e a volte a mostrar no ecrã de forma invertida (isto é, de trás para a frente).

Soluções


12 - Escreve um programa que solicite ao utilizador dois números inteiros e apresente a sua soma.

Soluções


13 - Escreve um programa que solicite ao utilizador dois números reais de 64 bits e apresente o resultado do primeiro (base) elevado ao segundo (expoente). Sugestão: o método Math.Pow(x, y) realiza a operação de potenciação xy.

Soluções


14 - Escreve um programa que solicite ao utilizador o comprimento, altura e largura de um paralelepípedo retângulo, e apresente de seguida o seu volume.

Soluções


15 - Escreve um programa que mostre no ecrã todos os argumentos passados na linha de comandos.

Soluções


16 - Escreve um programa que solicite ao utilizador três números inteiros e apresente no ecrã a frase É possível :) se for possível adicionar dois dos números para obter o terceiro, ou a frase Impossível :( em caso contrário. Por exemplo, se o utilizador inserir os números 5, 2 e 3 o programa deve mostrar a frase É possível :) pois é possível somar 2 + 3 para obter 5.

Soluções


17 - Escreve um programa que solicite ao utilizador um número inteiro e imprima o número seguido de um ponto de exclamação. Por exemplo, ao ler o número sete, vai mostrar no ecrã 7! . No entanto, se o número for divisível por 3 vai mostrar "Fizz!", se for divisível por 5 vai mostrar Buzz!, e se for divisível por 3 e por 5 mostra FizzBuzz! Sugestão: o operador % permite obter o resto da divisão para calcular se dado número é divisível.

Soluções


18 - Escreve um programa que solicite ao utilizador uma frase. Se a respetiva string tiver mais de 20 caracteres, o programa deve mostrar no ecrã Too long to read. Se a string tiver entre 5 a 20 caracteres, deve mostrar no ecrã Ok, if you say so.. Se a string tiver menos de 5 caracteres, o programa deve mostrar no ecrã That's not very meaningful, is it?.

Soluções


19 - Escreve um programa que solicite ao utilizador dois números reais: o primeiro deve representar o high score atual num jogo, e o segundo deve representar o score que o jogador acabou de conseguir. Se o score do jogador for superior ao high score, o programa deve mostrar a mensagem New high score!, caso contrário deve mostrar Keep trying. Usa o operador ternário para implementar o programa.

Soluções


20 - Indica exatamente o que é mostrado no ecrã pelo seguinte código C#, incluindo espaços. Justifica a tua resposta.

double d = 0.3513;
float f = 12.645f;

Console.WriteLine("d -> {0,5:f2}", d);
Console.WriteLine("f -> {0,5:f2}", f);

Soluções


21 - Indica exatamente o que é mostrado no ecrã pelo seguinte código C#, incluindo espaços. Justifica a tua resposta.

double x = 0.1592;
double y = 1.1231;

Console.WriteLine($"x igual a {x,6:p1}");
Console.WriteLine($"y igual a {y,6:p1}");

Soluções


22 - Indica exatamente o que é mostrado no ecrã pelo seguinte código C#, incluindo espaços. Justifica a tua resposta.

int a = 10;
int b = 100;
int c = 1000;

string s1 = String.Format("{0,4}", a);
string s2 = String.Format("{0,4}", b);
string s3 = String.Format("{0,4}", c);

Console.WriteLine(s1 + "\n" + s2 + "\n" + s3);

Soluções


23 - Escreve um programa que sirva como calculadora de linha de comandos, aceitando três argumentos: 1) a operação a realizar; 2) o primeiro operando; e, 3) o segundo operando. A calculadora deve reconhecer as seguintes operações indicadas no primeiro argumento: +, -, /, x e p (sendo que última representa a operação de potenciação). A calculadora deve realizar a operação entre os dois operandos (que se podem assumir como doubles), mostrar o resultado e terminar a execução. Se não forem indicados três argumentos, ou se a operação não for conhecida, o programa deve terminar com uma mensagem de erro apropriada.

Exemplo de execução: dotnet run -- + 3.2 5, que deverá mostrar 8.2.

Soluções


24 - Implementa o programa anterior de forma interativa e em ciclo. O programa deve solicitar a operação e os dois argumentos ao utilizador, apresentar a o resultado e voltar a fazer novo pedido de operação. O programa deve terminar apenas quando o utilizador escrever END em qualquer uma das solicitações. Se o programa não reconhecer a operação, deve voltar a pedir a mesma ao utilizador. Ao terminar, o programa deve indicar ainda quantas operações realizou.

Pontos extra: Como detetar e recuperar de um valor que não seja possível converter para double?

Soluções


25 - Reescreve o seguinte código sem usar breaks e continues.

const int maxTurns = 20;
int turn = 0;
while (true)
{
    turn++;

    if (turn >= maxTurns)
    {
        break;
    }

    if (turn % 3 == 0)
    {
        continue;
    }

    Console.WriteLine($"Turn number {turn}");
}

Console.WriteLine($"Last turn was {turn}");

Soluções


26 - Implementa um jogo turn-based, com o número máximo de turns dado como argumento na linha de comando. O jogo deve decorrer enquanto o jogador estiver vivo e enquanto o número máximo de turns não tiver sido atingido. Em cada turn o jogador tem uma probabilidade de morrer de 2%. Se o jogador não morrer numa dada turn, deve ser apresentada a mensagem Player has survived turn #3 (substituir 3 pela pela turn atual). Caso contrário, deve ser apresentada a mensagem Player died after 10 turns (substituir 10 pela turn em que o jogador efetivamente morreu).

Nota 1: O "jogo" não é interativo, simplesmente apresenta uma mensagem por turn.

Nota 2: Podem ser obtidos números aleatórios entre 0 e 1 usando o método NextDouble da classe Random (namespace System) da seguinte forma:

// Criar objeto do tipo Random
Random rng = new Random();
// Obter double entre 0 e 1
double probability = rng.NextDouble();

Soluções


27 - Escreve um programa que solicite um número de linhas ao utilizador e imprima um losango com números indicando o número da linha do losango. Por exemplo, se o utilizador inserir o número 4, deve ser impresso o seguinte losango:

   1
  222
 33333
4444444
 33333
  222
   1

Se o utilizador inserir um valor superior a 9 o programa deve terminar com uma mensagem de erro.

Soluções


28 - Escreve um programa que aceite dois ou mais números inteiros como parâmetros na linha de comandos, coloque esses números num array de ints e apresente ao utilizador um menu com as seguintes opções:

  1. Obter média dos valores no array
  2. Obter mediana dos valores no array
  3. Obter moda dos valores no array
  4. Obter máximo dos valores no array
  5. Obter mínimo dos valores no_array
  6. Sair

O programa deve funcionar em ciclo, realizando os pedidos efetuados, terminando apenas quando o utilizador selecionar a opção 6.

Soluções


29 - Escreve um programa que solicite ao utilizador um número de frases, e depois peça ao utilizador para inserir cada uma das frases individualmente. Cada frase deve ser dividida nas palavras que a compõem (removendo espaços e pontuação), sendo as respetivas palavras guardadas num array de strings. Por sua vez, cada array de strings deve ser guardado num array de arrays. Depois, o programa deve percorrer o array de arrays, e para cada array de strings indicar quantas palavras existem na respetiva frase, e qual a maior palavra.

Nota 1: O método Split() dos objectos do tipo string devolve substrings da string original separadas pelos caracteres passados ao método sob a forma de array de chars. Por exemplo:

string s = "A string with several words";
char[] separators = new char[] { ' ', ',', '.', ':', '\t' };
string[] arrayOfStrings = s.Split(separators);

Nota 2: Deve ser usada a keyword foreach sempre que possível.

Exemplo de execução:

Numero de frases: 3
Frase 1: Ola Mundo
Frase 2: Uma frase mais comprida.
Frase 3: Esta e a ultima frase

Frase 1:
    Numero de palavras: 2
    Maior palavra: "Mundo"
Frase 2:
    Numero de palavras: 4
    Maior palavra: "comprida"
Frase 3:
    Numero de palavras: 5
    Maior palavra: "ultima"

Soluções


30 - Cria um jogo tile-based e turn-based no qual o jogador se move numa grelha 2D (não-toroidal, ou seja, com paredes nos limites do mundo). O jogador apenas se move para cima, para baixo e para os lados, usando as teclas WSAD. A tecla Q indica que o jogo terminou. A grelha deve ser representada como um array bidimensional, e após cada turn o mundo de jogo deve ser mostrado no ecrã, com o jogador representado por uma arroba (@) e os espaços vazios representados por um ponto (.).

Soluções


31 - Escreve um programa que realize a multiplicação entre uma matriz n x m e um vetor m x 1. O programa deve começar por solicitar as dimensões n e m, pedindo depois ao utilizador que preencha os valores da matriz e do vetor a multiplicar, e finalmente mostrando o resultado final na forma de um vetor n x 1.

Nota 1: Este exercício deve ser resolvido com recurso a arrays multidimensionais.

Nota 2: A resolução deste exercício depende da matéria de multiplicação de matrizes (disciplina de Introdução à Matemática e Física para Jogos I).

Nota 3: Podes experimentar multiplicar uma matriz por um vetor online em http://matrix.reshish.com/multiplication.php.

Soluções


32 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

byte b = byte.MaxValue - 1;

for (int i = 0; i < 5; i++)
{
    Console.WriteLine($"Iteração {i}: {(byte) (++b - 1)}");
}

Soluções


33 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

int[] someInts = { 11, 8, 6, 3, 9, 104 };

foreach (int v in someInts)
{
    if (v % 2 == 0)
    {
        Console.WriteLine("{0,3}", v);
    }
}

Soluções


34 - Indica o que é mostrado no ecrã pelo seguinte código C#. Justifica a tua resposta.

int n = 0;

string[] frases = {
    "Curta",
    "Uma frase longa",
    "Small",
    "Very large sentence",
    "Petit",
    "How many words do I have?"
};

foreach (string s in frases)
{
    if (s.Length > 6)
    {
        n++;
    }
}

Console.WriteLine(n);

Soluções


35 - Escreve um programa em C# que solicite ao utilizador dois números inteiros sem sinal, e apresente, em hexadecimal, o resultado da operação AND bit a bit do primeiro pela negação bit a bit do segundo.

Soluções


36 - Escreve um programa que: 1) liste todas as classes num jogo RPG; 2) solicite ao utilizador uma das classes (através do valor numérico do respetivo membro da enumeração); e, 3) mostre uma descrição textual sobre essa classe. As classes existentes neste jogo, e as respetivas descrições, são:

  • Warrior: Melee hack-and-slash class.
  • Knight: Heavy armor class.
  • Barbarian: Big guy with an equally big weapon.
  • Monk: Melee class that forgoes weapons for their powerful fists.
  • Archer: Ranged class with bows or guns.
  • Thief: Sneaky bandit with itchy fingers and a nose for treasure.
  • Priest: Class who makes sure the party survives an encounter.
  • Mage: Class with spells to burn, freeze or electrify.
  • Druid: Class capable of summoning minions.

Referência: https://www.giantbomb.com/classes/3015-405/

Nota: Usar switch para selecionar a descrição a mostrar.

Soluções


37 - Escreve um programa que crie aleatoriamente um mundo de jogo tile-based 2D e o mostre no ecrã. O tamanho do mundo, x e y, deve ser indicado sob a forma de argumentos na linha de comandos. Cada célula (quadrado ou posição) do mundo de jogo pode ter, cumulativamente e com a probabilidade indicada, os seguintes items:

  • Comida - 1,0%
  • Armas - 0,5%
  • Inimigo - 0,5%
  • Armadilha - 0,3%

Os items devem ser representados com enumerable flags (opções enumeráveis), assim como as suas combinações. Espaços vazios devem ser representados com um espaço, e as várias combinações de items devem ser representados com o caracter ASCII obtido pela soma do valor ASCII do espaço (0x20) com o valor numérico do item ou combinação de items enumerados. Por exemplo, a comida é representada com o carácter ! (ASCII 0x21), e a combinação de inimigo e armadilha é representada com o carácter , (ASCII 0x2C).

Nota 1: A tabela ASCII pode ser consultada aqui.

Nota 2: Pode facilitar a resolução do problema fazer debugging imprimindo no ecrã os conteúdos detalhados de cada posição do mundo de jogo, por exemplo para a posição (5,3) pode ser impresso (5,3) contem 'Comida, Inimigo', caráter %.

Nota 3: Podem ser obtidos números aleatórios entre 0 e 1 usando o método NextDouble da classe Random (namespace System) da seguinte forma:

// Criar objecto do tipo Random
Random rng = new Random();
// Obter double entre 0 e 1
double probability = rng.NextDouble();

Soluções


38 - Considera o seguinte método Main():

static void Main(string[] args)
{
    // Declaração de variáveis
    int n;
    int[] numbers;

    // Pedir ao utilizador o tamanho do array de inteiros
    Console.Write("Qual o tamanho do array?");
    n = Convert.ToInt32(Console.ReadLine());

    // Gerar números de 1 até n
    numbers = CreateNumbersToN(n);

    // Inverter os conteúdos do array
    Reverse(numbers);

    // Imprimir os conteúdos do array
    PrintNumbers(numbers);
}

Implementa, dentro da classe Program, os métodos CreateNumbersToN(), Reverse() e PrintNumbers() de modo a que façam o que está indicado nos respetivos comentários no método Main().

Soluções


39 - Considera a seguinte declaração do método Next (classe Random, namespace System):

public virtual int Next(int minValue, int maxValue);

Indica:

  1. O nome do método.
  2. O tipo devolvido pelo método.
  3. Os argumentos aceites pelo método.
  4. A assinatura do método.
  5. Outras características indicadas na declaração.
  6. Se existe algum overloading deste método na classe Random, e em caso afirmativo, mostrar as respetivas declarações.

Soluções


40 - Escreve documentação em formato XML para o método RockPaperScissors apresentado em baixo, seguindo as melhores práticas para o efeito. Os valores ROCK, PAPER e SCISSORS devem ser considerados como constantes inteiras.

static int RockPaperScissors(int player1, int player2)
{
    if (player1 == player2)
    {
        return 0; // Draw
    }
    if (((player1 == ROCK) && (player2 == SCISSORS)) ||
        ((player1 == SCISSORS) && (player2 == PAPER)) ||
        ((player1 == PAPER) && (player2 == ROCK)))
    {
        return 1; // Player 1 wins
    }
    else
    {
        return 2; // Player 2 wins
    }
}

Soluções


41 - 1) Reescreve o método RockPaperScissors de modo a que siga as melhores práticas de legibilidade de código, nomeadamente que tenha apenas um único return no fim. 2) Escreve um método Main para testar o método RockPaperScissors, nomeadamente pedindo ao jogador um para selecionar uma opção (ROCK, PAPER ou SCISSORS), ao jogador dois para fazer o mesmo, e apresentando depois o resultado do jogo. 3) Integra os métodos Main e RockPaperScissors numa classe chamada RPSGame, namespace LP1Exercises.

Soluções


42 - Melhora a legibilidade do código do exercício anterior criando duas enumerações, uma para indicar o resultado do jogo, outra para definir as possíveis jogadas. Mostra o código completo das enumerações criadas e da classe RPSGame, todas dentro do namespace LP1Exercises.

Soluções


43 - Considera as seguintes enumerações:

enum Terrain
{
    Rock = 0,
    Plains,
    Forest,
    Jungle
}
enum BonusTerrain
{
    Water = 1,
    Food
}

Escreve dois métodos overloaded chamados Eat(), um que aceite um Terrain e devolva o valor numérico do respetivo membro da enumeração Terrain, e outro que aceite um BonusTerrain e devolva o valor numérico do respetivo membro da enumeração BonusTerrain multiplicado por 10. Coloca os 2 métodos como static numa classe chamada Grazer (namespace LP1Exercises), e escreve um método Main para testar os métodos que criaste.

Soluções


44 - Considera o método Recursao():

static int Recursao(int n1) {
    int n2;
    if (Math.Abs(n1) > 1000) {
        n2 = n1;
    } else {
        n2 = Recursao(-n1 * 10);
    }
    return n2;
}

Considera a seguinte invocação do método Recursao():

int n0 = Recursao(5);

Qual é o valor da variável n0 após a linha de código anterior? Explica o teu raciocínio.

Nota 1: O método Abs da classe Math (namespace System) devolve o valor absoluto (módulo) do valor passado como argumento.

Soluções


45 - Temos um triângulo feito de blocos. A primeira linha do triângulo tem 1 bloco, a segunda linha tem 2 blocos, a terceira linha tem 3 blocos, e por ai fora. Completa o método Triang, que, dado o número de linhas, determina recursivamente (sem ciclos ou multiplicações) o número total de blocos num triângulo deste tipo. Por exemplo, ao receber o valor 4, o método retorna o valor 10 correspondente ao número de blocos, como indicado em baixo:

  • * - 1 bloco
  • ** - 2 blocos
  • *** - 3 blocos
  • **** - 4 blocos

Método devolve 10, pois existem 10 blocos (asteriscos) ao todo.

De modo a testares o método, cria posteriormente um programa que solicite um número inteiro ao utilizador, invoque o método Triang e imprima no ecrã o número devolvido.

static int Triang(int linhas)
{
    // Completar este método
}

Sugerido por João Duarte, adaptado de http://codingbat.com/prob/p194781.

Soluções


46 - Indica o que é impresso no ecrã pelo seguinte código. Justifica a tua resposta.

static void Main(string[] args)
{
    Console.WriteLine(MetodoRecursivo(5));
}

static int MetodoRecursivo(int n)
{
    if (n == 0)
        return 0;
    else if (n % 2 == 0)
        return 3 + MetodoRecursivo(n - 1);
    else
        return 2 + MetodoRecursivo(n - 1);
}

Soluções


47 - Indica o que é impresso no ecrã pelo seguinte código. Justifica a tua resposta, explicando detalhadamente em que consiste a operação efetuada pelo método Fact().

static void Main(string[] args)
{
    uint n = 5;
    Console.WriteLine($"{n}! = {Fact(n)}");
}

static uint Fact(uint i) => i > 1 ? i * Fact(i - 1) : 1;

Soluções


48 - Indica o que é impresso no ecrã pelo seguinte código. Justifica a tua resposta, explicando em que consiste a operação efetuada pelo método GCD().

static void Main(string[] args)
{
    ulong a = Convert.ToUInt64(args[0]);
    ulong b = Convert.ToUInt64(args[1]);
    Console.WriteLine($"GCD between {a} and {b} is {GCD(a, b)}");
}

static ulong GCD(ulong a, ulong b) => b == 0 ? a : GCD(b, a % b);

Soluções


49 - A stack é composta por frames. Cada frame está associada a que unidade de código? Que informação é contida em cada frame?

Soluções


50 - Que tipos de dados podem ser guardados na heap? E que tipos de dados só podem ser guardados na heap?

Soluções


51 - Indica duas responsabilidades do garbage collector.

Soluções


52 - É possível, com o C#, aceder à heap sem gestão automática da memória (isto é, sem intervenção do garbage collector)? Se sim, como?

Soluções


53 - Quais as duas grandes famílias de tipos no C#, e quais as principais diferenças entre elas? Existe ainda uma terceira família, muito menos usada. Indica qual é.

Soluções


54 - Qual é o valor da variável x após as seguintes instruções.

double x = 11.09;
AddOne(x);

Soluções


55 - Indica os conteúdos do array devolvido pelo método Process().

bool[] Process()
{
    bool[] a;
    a = new bool[] { true, true, false, true };
    MisteryOp(a);
    return a;
}

void MisteryOp(bool[] zz)
{
    for (int i = 0; i < zz.Length; i++)
    {
        zz[i] = !zz[i];
    }
}

Soluções


56 - Indica os conteúdos do array devolvido pelo método Process().

char[] Process()
{
    char[] a;
    a = new char[] { 'a', 'b', 'c' };
    MisteryOp(a);
    return a;
}

void MisteryOp(char[] a)
{
    a = new char[] { a[2], a[1], a[0] };
}

Soluções


57 - Indica os conteúdos do array devolvido pelo método Process().

char[] Process()
{
    char[] a;
    a = new char[] { 'a', 'b', 'c' };
    MisteryOp(ref a);
    return a;
}

void MisteryOp(ref char[] a)
{
    a = new char[] { a[2], a[1], a[0] };
}

Soluções


58 - Recebeste uma tarefa para implementar uma função que deteta as classes de um jogo MMORPG que irá ser utilizado para o sistema de “Party Search”. Este MMO tem cerca de 6 classes que incluí: Fighter, Cleric, Druid, Barbarian, Rogue e Wizard. No entanto é preciso ter em conta que este jogo permite ao jogador fazer “multi-class”, ou seja, pode criar personagens que tenham até 3 classes distintas num só personagem (e.g. Druid; Figher + Rogue; ou Cleric + Barbarian + Wizard).

A tua tarefa é implementar o sistema mais eficiente para detetar a classe (ou classes) do personagem do jogador usando exclusivamente operações bit-a-bit - **CheckClass() Para testar o vosso método implementa uma função ReturnRandomClass que retorna uma a tres classes (podes também pensar como implementar este método com bitwise).

You received a task to implement a function capable of detecting classes from an MMORPG hame which will be used for the new "Party Search" Function. This MMO has about 6 classes which includes: Fighter, Cleric, Druid, Barbarian, Rogue and Wizard. However, this game allows players to use a "multi-class" system of up to 3 classes, meaning that players can mix and match of a total of 3 classes (e.g. Druid; Figher + Rogue; ou Cleric + Barbarian + Wizard).

Your task is to implement an efficient system capable of detecting a class (or classes) of a character using exclusively bitwise operations - CheckClass.

const int Fighter = 1;
const int Cleric = 2;
const int Druid = 4;
const int Barbarian = 8;
const int Rogue = 16;
const int Wizard = 32;

public static void CheckClass() { /* Implement */ }

public static int ReturnRandomClass() { /* Implement */ }

Output Example:

  • "-Fighter-"
  • "-Clearic--Druid--"
  • "-Cleric--Barbarian--Wizard-"

59 - Utilizando o código implementado no exercício 58, faz refactor ao código para que este utilize enumeration flags em vez de constantes para referenciar as classes do jogo.

Using your implemented code from exercise 58, refactor it so that it uses enumeration flags instead of constantes to refer to the different classes of the game.


60 - Implementa uma função que recebe como input uma String e um número, e que repete essa String o número de vezes inserido.

Implement a function that receives as input a String and a Number. This function should return the same String repeated by the inputted number.

Output Example:

  • Input: "Banana", 3 => Output: "BananaBananaBanana"
  • Input: "Jar", 1 => Output: "JarJar"
  • Input: "Welcome", 0 => "Welcome"

61 - Um Anagrama consiste em reorganizar as letras de uma palavra para dar origem a outra nova palavra. Implementa uma função que recebe duas strings como input e verifica se uma palavra é anagrama da outra.

An Anagram consists of a word whose letters can be reorganized into a new word. Implement a function that takes two strings as an input and verifies if a word is an anagram of another.

Output Example:

  • Input: "Taste" "State" => Output: TRUE
  • Input: "Dog" "God" => Output: TRUE
  • Input: "Frog" "Rock" => Output: FALSE

62 - Implementa uma função que deteta as vogais de uma string e que retorna um array de inteiros cujo contenha a posição de cada vogal dessa palavra. A contagem deve começar do 1 e não do 0.

Implement a function that detects the vowels of a string and returns an integer array containing the position of each vowel of the inputted string. Counting should start from 1 and not 0.

Output Example:

  • Input: "Hello" => Output: [2, 5]
  • Input: "World" => Output: [2]
  • Input: "Everyday" => Output: [1, 3, 7]

63 - Implementa uma função que recebe um número e retorna a soma de cada dígito desse número.

Implement a function that receives a number and returns the sum of each digit of that number.

Output Example:

  • Input: 12 => Output: 3 (1 + 2)
  • Input: 345 => Output: 12 (3 + 4 + 5)
  • Input: 123456 => Output: 21 (1 + 2 + 3 + 4 + 5 + 6)

64 - Implementa uma função que recebe como input um array de strings, um inteiro e uma string. A função deverá retornar um array com a nova string inserido na posição do inteiro. Nota: Implemente esta função de raíz.

Implement a function that takes as input an array of strings, an integer and a string. The function should return an array with the new string inserted in the position of the integer. Note: Implement this function from scratch.

Output Example:

  • Input: ["abc", "aaa", "ccc"], 2, "bbb" => Output: ["abc", "aaa", "bbb", "ccc"]
  • Input: ["0001", "0010", "0011"], 0 "0000" => Ouput: ["0000", "0001", "0010", "0011"]

65 - Implementa uma função que receba uma string e faça a sua inversão para cada palavra dessa string

Implement a function that receives a string and inverts every word of that string.

Output Example:

  • Input: "Hello World!" => Output: "olleH !dlroW"
  • Input: "Foo Bar" => Output: "ooF raB"
  • Input: "Cool Beans" => Output: "looC snaeB"