-
Notifications
You must be signed in to change notification settings - Fork 61
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 7c2a2e3
Showing
204 changed files
with
22,575 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# naumen.scala.course.2023.spring | ||
|
||
### Лекции | ||
|
||
Располагаются в директории ```/lectures/``` виде html презентации (для оффлайн доступа необходимо скачать всю папку и открывать в браузере конкретную лекцию) | ||
|
||
|
||
### Домашние задания | ||
Распологаются в директории ```/homeworks/``` и будут выкладываться по мере продвижения по курсу. | ||
|
||
#### Предоставление результатов | ||
Результаты предоставлять посредством fork текущего репозитория на github, созданием новой ветки homework_${number}, коммитом всех результатов (подробности описаны в самих заданиях) и пушем в эту ветку в рамках своего fork и созданием pull request в основной репозиторий в ветку master. | ||
|
||
После первоначально форка репозитория необходимо обновлять свой форк с основного репозитория | ||
|
||
Название pull request должно соответсвовать следующему шаблону - "homework_${number} - ${lastName} ${firstName}" | ||
Т.е. для ДЗ №1 и студента "Соколов Артём" было бы следующее - "homework_1 - Соколов Артём" | ||
Это важно, пулреквесты с названием не по шаблону не будут проверяться. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
title: Scala | ||
description: осень 2023 | ||
show_downloads: false | ||
lang: ru-RU | ||
google_analytics: UA-109454524-3 | ||
theme: jekyll-theme-slate |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
# Домашнее задание №1 (курс Scala, Naumen) | ||
|
||
## 0. Перед тем как приступить к заданиям | ||
|
||
### Установка Scala | ||
Инструкция для установки Scala находится тут - https://www.scala-lang.org/download/ | ||
|
||
### Cheatsheet | ||
Для первоначального освоения основных ситнаксических конструкций Scala предлагаем воспользоваться cheatsheet (шпаргалка) - <a>https://alvinalexander.com/downloads/scala/Scala-Cheat-Sheet-devdaily.pdf</a> | ||
|
||
|
||
## 1. Использование REPL | ||
|
||
Для выполнения данного задания вам понадобится использовать REPL. | ||
|
||
У скалы есть как минимум 2 варианта REPL: | ||
- стандартный, который идет вместе самим компилятором - <a>https://downloads.lightbend.com/scala/2.12.10/scala-2.12.10.msi</a> | ||
- Ammonite - разработанный отдельно от комплиятора и имеющий с более мощный функционал, но запускающийся только под Linux/Mac - <a>https://ammonite.io/#Ammonite-REPL</a> | ||
|
||
Используйте REPL и запрограммируйте следующее: | ||
|
||
- Вывести на консоль "Hello Scala! This is ${здесь ваше имя}" | ||
- Затем поменяйте приветственное слово ("Hello") на пару других приветственных слов, например, "Hola" и "Guten tag". Выведите результаты замен на консоль. | ||
- Затем для каждого варианта приветствия замените своё имя на его перевернутое значение (пример: "Artem Sokolov" -> "volokoS metrA"). Результаты таких замен также выведите на консоль. | ||
|
||
*Примечание: Постарайтесь переиспользовать максимальное количество кода (переменных, строковых литералов, функций и т.д). На данном этапе это не является сколько-либо важным для цели выполнения задания, однако позволяет вам лишний раз попрактиковаться. Вообще программирование с помощью REPL подразумевает скорее отсуствие соблюдения принципов чистоты кода (именование переменных, переиспользование одинаковых кусков кода, DRY, YAGNI и прочих) и позволяет в непринужденной и интерактивной манере попрактиковаться в использовании языка или проверить какую-то идею.* | ||
|
||
Результат предоставить в виде текстового файла всего текста из консоли начиная с запуска REPL. Для этого в репозитории создана папка и пустой файл куда необходимо положить результат - ```homeworks/homework_1/task_1/console-output.txt``` | ||
|
||
Пример содержимого файла: | ||
``` | ||
C:\Users\doter>scala Picked up JAVA_TOOL_OPTIONS: -Dorg.lwjgl.opengl.Window.undecorated=true Welcome to Scala 2.13.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_161). Type in expressions for evaluation. Or try :help. scala> val a = "Hello Scala! This is Artem Sokolov" a: String = Hello Scala! This is Artem Sokolov scala> println (a) Hello Scala! This is Artem Sokolov scala> | ||
``` | ||
## 2. Использование Worksheet | ||
|
||
Для целей обучения есть очень удобный способ работы с кодом на Scala - worksheet. Worksheet позволяет иметья интерактивность и наглядность каждой строчки кода, при этом позволяет работать с кодом в рамках целого файла. | ||
|
||
Две наиболее удобных альтернативы для этого: | ||
- Scastie - онлайн компилятор и среда исполнения Scala кода с возможностью работать в режиме worksheet - https://scastie.scala-lang.org/ | ||
- файл worksheet в IntelliJ IDEA - https://www.jetbrains.com/help/idea/work-with-scala-worksheet-and-ammonite.html | ||
|
||
Для выполнения задания необходимо сделать следующее: | ||
- Перенесите весь свой код из п.1 в формат worksheet и добейтесь того, что он точно также комплиируется и выполняется. | ||
- Зарефакторите код (например, выделите одинаковые части строки в переменные, объедините изменяющиеся части в коллекции, выделите в функцию код который выводит строки на консоль и т.д.) | ||
|
||
Результат предоставить в виде ссылки на ваш сниппет кода, сохраненный в https://scastie.scala-lang.org/ (не забудьте проверить что по сгенерированной ссылке лежит именно то что вы хотите предоставить и в дальнейшем не изменяйте данный сниппет). Сылку записать в файл ```homeworks/homework_1/task_2/scastie-url.txt``` | ||
|
||
## 3. Использование SBT | ||
|
||
Для первоначального знакомства с SBT предлагаем работать через IntelliJ IDEA. | ||
|
||
Инструкция по созданию нового SBT проекта в IDEA - https://docs.scala-lang.org/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.html | ||
|
||
Необходимо создать новый проект, проверить что всё работает, запустив его как описано в инструкции (будте готовы к тому что проект прогружается несколько минут, а затем при первоначальном запуске может начать скачивать зависимости из интернета). | ||
|
||
Далее необходимо перенести код из п.2 вместо текущего "Hello world" (в тело объекта ```object Main extends App```) и исполнить его с помощью SBT (команда sbt run в консоли). | ||
|
||
Результат - после всех манипуляций скопировать папку sbt проекта в папку результатов (```homeworks/homework_1/task_3```) и закоммитить в git всю папку проекта со всеми файлами. | ||
|
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
/.idea | ||
/target | ||
project/target |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
name := "Lecture2" | ||
|
||
version := "0.1" | ||
|
||
scalaVersion := "2.12.10" | ||
|
||
libraryDependencies += "com.lihaoyi" %% "utest" % "0.5.3" % "test" | ||
|
||
testFrameworks += new TestFramework("utest.runner.Framework") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Домашнее задание №2 (курс Scala, Naumen) | ||
|
||
|
||
Необходимо выполнить четыре задания, приведённые в файле <a href='https://github.com/naumen-student/naumen.scala.course.2023.spring/tree/master/homeworks/homework_2/src/main/scala'>(src/main/scala/Exercises.scala)</a> | ||
<br> | ||
А также реализовать соответствующие юнит-тесты <a href='https://github.com/naumen-student/naumen.scala.course.2023.spring/tree/master/homeworks/homework_2/src/test/scala'>(src/test/scala/Test.scala)</a> | ||
|
||
|
||
Для выполнения задания рекомендуется использовать <a href='https://github.com/naumen-student/naumen.scala.course.2023.spring/tree/master/homeworks/homework_2'>шаблон sbt проекта</a> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
sbt.version = 1.3.3 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
object Exercises { | ||
|
||
/*ПРИМЕР*/ | ||
/*Реализовать функцию, которая возвращает все целые числа в заданном диапазоне (от iForm до iTo), которые делятся | ||
на 3 или на 7.*/ | ||
/*Реализовать юнит-тесты в src/test/scala для данной функции.*/ | ||
def divBy3Or7(iFrom: Int, iTo: Int): Seq[Int] = { | ||
for {i <- iFrom to iTo | ||
if i % 3 == 0 || i % 7 == 0 | ||
} yield i | ||
} | ||
|
||
|
||
|
||
/*ЗАДАНИЕ I*/ | ||
/*Реализовать функцию, которая возвращает сумму всех целых чисел в заданном диапазоне (от iForm до iTo), которые делятся | ||
на 3 или на 5.*/ | ||
/*Реализовать юнит-тесты в src/test/scala для данной функции.*/ | ||
def sumOfDivBy3Or5(iFrom: Int, iTo: Int): Long = ??? | ||
|
||
|
||
|
||
/*ЗАДАНИЕ II*/ | ||
/*Реализовать функцию, которая вычисляет все различные простые множители целого числа отличные от 1. | ||
Число 80 раскладывается на множители 1 * 2 * 2 * 2 * 2 * 5, результат выполнения функции => Seq(2, 5). | ||
Число 98 можно разложить на множители 1 * 2 * 7 * 7, результат выполнения функции => Seq(2, 7).*/ | ||
/*Реализовать юнит-тесты в src/test/scala для данной функции.*/ | ||
def primeFactor(number: Int): Seq[Int] = ??? | ||
|
||
|
||
|
||
/*ЗАДАНИЕ III*/ | ||
/*Дано: класс двумерного вектора, а также функции вычисления модуля вектора (abs), вычисления скалярного произведения | ||
векторов (scalar) и косинуса угла между векторами (cosBetween). | ||
Необходимо: реализовать функцию sumByFunc таким образом, чтобы можно было раскомментировать функции sumScalars и sumCosines. | ||
Функция sumScalars должна вычислять сумму скалярных произведений для пар векторов scalar(leftVec0, leftVec1) + scalar(rightVec0, rightVec1). | ||
Функция sumCosines должна вычислять сумму косинусов углов между парами векторов cosBetween(leftVec0, leftVec1) + cosBetween(rightVec0, rightVec1).*/ | ||
/*Реализовать юнит-тесты в src/test/scala для функций sumScalars и sumCosines*/ | ||
case class Vector2D(x: Double, y: Double) | ||
def abs(vec: Vector2D): Double = java.lang.Math.sqrt(vec.x * vec.x + vec.y * vec.y) | ||
def scalar(vec0: Vector2D, vec1: Vector2D): Double = vec0.x * vec1.x + vec0.y * vec1.y | ||
def cosBetween(vec0: Vector2D, vec1: Vector2D): Double = scalar(vec0, vec1) / abs(vec0) / abs(vec1) | ||
//def sumByFunc(leftVec0: Vector2D, leftVec1: Vector2D, ???, rightVec0: Vector2D, rightVec1: Vector2D) = ??? | ||
/* | ||
def sumScalars(leftVec0: Vector2D, leftVec1: Vector2D, rightVec0: Vector2D, rightVec1: Vector2D): Double = | ||
sumByFunc(leftVec0, leftVec1, scalar, rightVec0, rightVec1) | ||
*/ | ||
/* | ||
def sumCosines(leftVec0: Vector2D, leftVec1: Vector2D, rightVec0: Vector2D, rightVec1: Vector2D): Double = | ||
sumByFunc(leftVec0, leftVec1, cosBetween, rightVec0, rightVec1) | ||
*/ | ||
|
||
|
||
|
||
/*ЗАДАНИЕ IV*/ | ||
/*Дано: коллекция металлических шариков balls, где каждый элемент представлен в виде (Name: String -> (radius: Int, density: Double). | ||
Здесь radius - радиус шарика [см], а density - плотность материала [г / (см^3)], из которого он изготовлен (например, | ||
для серебра в коллекции представлен шарик "Silver" радиуса 4 см и плотности 4.505 г / (см^3) ) | ||
Необходимо реализовать функцию sortByHeavyweight, которая принимает коллекцию такого формата и возвращает список названий материалов шариков, | ||
упорядоченный в зависимости от массы шариков (первый элемент списка соответствует наиболее "лёгкому" шарику, последний - наиболее "тяжёлому"). | ||
В качестве значения числа "Пи" можно использовать java.lang.Math.PI | ||
*/ | ||
/*Реализовать юнит-тесты в src/test/scala для данной функции.*/ | ||
val balls: Map[String, (Int, Double)] = | ||
Map( | ||
"Aluminum" -> (3, 2.6889), "Tungsten" -> (2, 19.35), "Graphite" -> (12, 2.1), "Iron" -> (3, 7.874), | ||
"Gold" -> (2, 19.32), "Potassium" -> (14, 0.862), "Calcium" -> (8, 1.55), "Cobalt" -> (4, 8.90), | ||
"Lithium" -> (12, 0.534), "Magnesium" -> (10, 1.738), "Copper" -> (3, 8.96), "Sodium" -> (5, 0.971), | ||
"Nickel" -> (2, 8.91), "Tin" -> (1, 7.29), "Platinum" -> (1, 21.45), "Plutonium" -> (3, 19.25), | ||
"Lead" -> (2, 11.336), "Titanium" -> (2, 10.50), "Silver" -> (4, 4.505), "Uranium" -> (2, 19.04), | ||
"Chrome" -> (3, 7.18), "Cesium" -> (7, 1.873), "Zirconium" -> (3, 6.45) | ||
) | ||
|
||
def sortByHeavyweight(ballsArray: Map[String, (Int, Double)] = balls): Seq[String] = ??? | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import utest._ | ||
|
||
object Test extends TestSuite{ | ||
|
||
val tests = Tests{ | ||
'test_divBy3Or7 - { | ||
assert(Exercises.divBy3Or7(1, 3) == Seq(3)) | ||
assert(Exercises.divBy3Or7(5, 9) == Seq(6, 7, 9)) | ||
assert(Exercises.divBy3Or7(0, 100) == Seq(0, 3, 6, 7, 9, 12, 14, 15, 18, 21, 24, 27, 28, 30, 33, 35, 36, 39, 42, 45, 48, 49, 51, 54, 56, 57, 60, 63, 66, 69, 70, 72, 75, 77, 78, 81, 84, 87, 90, 91, 93, 96, 98, 99)) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
/.idea | ||
/target | ||
project/target |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
name := "homework_3" | ||
|
||
version := "0.1" | ||
|
||
scalaVersion := "2.12.10" | ||
|
||
libraryDependencies += "com.lihaoyi" %% "utest" % "0.5.3" % "test" | ||
|
||
testFrameworks += new TestFramework("utest.runner.Framework") |
Oops, something went wrong.