---
# System prepended metadata

title: Учебная практика 2021. Среда 7.07.2021. Федяева Евгения Игоревна.

---

# Учебная практика 2021. Среда 7.07.2021. Федяева Евгения Игоревна.

Присутствовала на онлайн-лекции, решенные задачи защитила.

1. [Playing with digits](https://www.codewars.com/kata/5552101f47fc5178b1000050) 6kyu

Description:
Some numbers have funny properties. For example:
89 --> 8¹ + 9² = 89 * 1
695 --> 6² + 9³ + 5⁴= 1390 = 695 * 2
46288 --> 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
Given a positive integer n written as abcd... (a, b, c, d... being digits) and a positive integer p
we want to find a positive integer k, if it exists, such as the sum of the digits of n taken to the successive powers of p is equal to k * n.
In other words:
Is there an integer k such as : (a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + ...) = n * k
If it is the case we will return k, if not return -1.
Note: n and p will always be given as strictly positive integers.

Описание:
Некоторые числа обладают забавными свойствами. Например:
89 -> 8¹ + 9² = 89 * 1
695 -> 6² + 9³ + 5⁴ = 1390 = 695 * 2
46288 -> 4³ + 6⁴ + 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
Дано положительное целое число n, записанное как abcd ... (a, b, c, d ... цифры) и положительное целое число p
мы хотим найти положительное целое число k, если оно существует, например, сумма цифр n, взятых в последовательные степени p, равна k * n.
Другими словами:
Существует ли целое число k, например: (a ^ p + b ^ (p + 1) + c ^ (p + 2) + d ^ (p + 3) + ...) = n * k
Если это так, мы вернем k, если не вернем -1.
Примечание: n и p всегда будут строго положительными целыми числами.

Решение на С++
```c++=
#include <string>
#include <cmath>
class DigPow
{
public:
  static int digPow(int n, int p)
  {
    std::string tmp = std::to_string(n);
     int l = tmp.length();
    int sum = 0;
      for(int i = 0; i < l; i++)
      {
        int a = tmp[i] - '0';
         sum += pow(a, p++);
      }
    
         if(sum%n == 0) return sum/n;
         else return -1;
  };
};
```

Решение на Java
```java=
public class DigPow 
{
  
  public static long digPow(int n, int p) 
  {
    String tmp = Integer.toString(n);
     int l = tmp.length();
    int sum = 0;
      for(int i = 0; i < l; i++)
      {
        int a = Character.getNumericValue(tmp.charAt(i));
         sum += Math.pow(a, p++);
      }    
          if(sum%n == 0) return sum/n;
          else return -1;
  }
  
}
```

2. [Primorial Of a Number](https://www.codewars.com/kata/5a99a03e4a6b34bb3c000124) 6kyu

Is similar to factorial of a number, In primorial, not all the natural numbers get multiplied, only prime numbers are multiplied to calculate the primorial of a number. It's denoted with P# and it is the product of the first n prime numbers.
Task
Given a number N , calculate its primorial.

Похож на факториал числа. В изначальном порядке умножаются не все натуральные числа, а только простые числа, чтобы вычислить начальное число. Он обозначается P# и является произведением первых n простых чисел.
Задача
Учитывая число N, вычислите его примор.

Решение на С++
```c++=
#include <cmath>
bool Prime(int n) 
  {
    for (int i = 2; i <= sqrt(n); i++) 
        if (n%i == 0) 
            return false;

             return true;
  }

unsigned long long numPrimorial (unsigned short int number )
{
  unsigned long long primorial = 2;
  int count = 1, x = 3;
   while(count < number)
   {
     if(Prime(x))
     {
       primorial *= x;
       count++;
     }
        x += 2;
   }
         return primorial;
}
```

Решение на Java
```java=
import java.math.BigInteger;
public class Primorial 
{
  static boolean Prime(int n) 
  {
    for (int i = 2; i <= Math.sqrt(n); i++) 
        if (n%i == 0) 
            return false;

             return true;
  }
    public static String numPrimorial(int n) 
    {
      BigInteger primorial = BigInteger.valueOf(2);
      int count = 1, x = 3;
        while(count < n)
        {
          if(Prime(x))
          {
            primorial = primorial.multiply(BigInteger.valueOf(x));
            count++;
          }
             x += 2;
        }
              return primorial.toString();
    }
}
```

3. [Two Sum](https://www.codewars.com/kata/52c31f8e6605bcc646000082) 6kyu

Write a function that takes an array of numbers (integers for the tests) and a target number. It should find two different items in the array that, when added together, give the target value. The indices of these items should then be returned in a tuple like so: (index1, index2).
For the purposes of this kata, some tests may have multiple answers; any valid solutions will be accepted.
The input will always be valid (numbers will be an array of length 2 or greater, and all of the items will be numbers; target will always be the sum of two different items from that array).

Напишите функцию, которая принимает массив чисел (целые числа для тестов) и целевое число. Он должен найти два разных элемента в массиве, которые при сложении дают целевое значение. Затем индексы этих элементов должны быть возвращены в виде кортежа: (index1, index2).
Для целей этого ката некоторые тесты могут иметь несколько ответов; любые действующие решения будут приняты.
Ввод всегда будет действительным (числа будут массивом длиной 2 или больше, и все элементы будут числами; цель всегда будет суммой двух разных элементов из этого массива).

Решение на С++
```c++=
std::pair<std::size_t, std::size_t> two_sum(const std::vector<int>& numbers, int target) 
{
  int n = numbers.size();
  for(int i = 0; i < n - 1; i++)
    for(int j = i + 1; j < n; j++)
      if(numbers[i] + numbers[j] == target)
        return {i, j};
}
```

Решение на Java
```java=
public class Solution
{
    public static int[] twoSum(int[] numbers, int target)
    {
        int n = numbers.length;
         for(int i = 0; i < n - 1; i++)
           for(int j = i + 1; j < n; j++)
             if(numbers[i] + numbers[j] == target)
             {
               int[] res = new int[2];
                res[0] = i;
                res[1] = j;
                 return res;
             }     
                  return null;               
    }
}
```
Сложность О(n^2)

4. [The Modulo-3 Sequence](https://www.codewars.com/kata/589d33e4e0bbce5d6300061c) 6kyu

Consider a sequence where the first two numbers are 0 and 1 and the next number of the sequence is the sum of the previous 2 modulo 3. Write a function that finds the nth number of the sequence.

Рассмотрим последовательность, в которой первые два числа равны 0 и 1, а следующее число последовательности является суммой двух предыдущих по модулю 3. Напишите функцию, которая находит n-е число последовательности.

Решение на С++
```c++=
int sequence(int n)
{
  int numbers[8] = {0, 1, 1, 2, 0, 2, 2, 1};
    return numbers[(n-1)%8];  
}
```

Решение на Java
```java=
public class Solution 
{
  public static int sequence(int n) 
  {
    int[] numbers = new int[]{0, 1, 1, 2, 0, 2, 2, 1};
     return numbers[(n-1)%8];    
  }
}
```

5. [Block sequence](https://www.codewars.com/kata/5e1ab1b9fe268c0033680e5f) 4kyu

Пока что решить не удалось.

