Skip to content
This repository was archived by the owner on Sep 6, 2018. It is now read-only.

Conversation

ElenaLaufeyson
Copy link

Решила первый урок.

@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson1.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 11 / 12

Example: 4 / 4
Trivial: 3 / 4
Easy: 4 / 4

Succeeded:

  • [Trivial] lesson1.task1/seconds
  • [Easy] lesson1.task1/travelMinutes
  • [Trivial] lesson1.task1/lengthInMeters
  • [Example] lesson1.task1/sqr
  • [Example] lesson1.task1/discriminant
  • [Example] lesson1.task1/sqRoot
  • [Trivial] lesson1.task1/trackLength
  • [Easy] lesson1.task1/thirdDigit
  • [Easy] lesson1.task1/numberRevert
  • [Example] lesson1.task1/quadraticRootProduct
  • [Easy] lesson1.task1/accountInThreeYears

Failed:

  • [Trivial] lesson1.task1/angleInRadian
    • org.opentest4j.AssertionFailedError : expected: <0.63256> but was: <0.6283185307179586>
  • [Trivial] lesson1.task1/angleInRadian
    • Expected: 2.2343123307624513
    • Actual: 2.234021442552742
    • Inputs:
      • grad -> 128
      • min -> 1
      • sec -> 0
    • Exception: null

Seed: -2615085513165313255

owner

ElenaLaufeyson []

@mglukhikh mglukhikh self-assigned this Sep 15, 2016
* Вывести значение того же угла в радианах (например, 0.63256).
*/
fun angleInRadian(grad: Int, min: Int, sec: Int): Double = TODO()
fun angleInRadian(grad: Int, min: Int, sec: Int): Double = (Math.PI / 180)*(grad + min/60 + sec/3600)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

min/60 и sec/3600 -- это целочисленное деление (нацело). А поскольку в примерах минут и секунд не больше 59, результат этого деления будет всегда равен 0. Чтобы операция деления имела вещественный результат, один из её аргументом должен быть вещественным. Проще всего этого добиться, добавив дробную часть константе.

*/
fun travelMinutes(hoursDepart: Int, minutesDepart: Int, hoursArrive: Int, minutesArrive: Int): Int = TODO()
fun travelMinutes(hoursDepart: Int, minutesDepart: Int, hoursArrive: Int, minutesArrive: Int):
Int = (minutesArrive + 60*hoursArrive) - (minutesDepart + 60*hoursDepart)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обычно здесь перенос делается так:

fun travelMinutes(hoursDepart: Int, minutesDepart: Int, hoursArrive: Int, minutesArrive: Int): Int = 
        (minutesArrive + 60*hoursArrive) - (minutesDepart + 60*hoursDepart)

Тогда заголовок функции у вас весь в одной строчке, а тело в другой -- лучше читается.

fun angleInRadian() {
assertEquals(0.63256, angleInRadian(36, 14, 35), 1e-5)
assertEquals(0.63256, angleInRadian(36, 14, 35), 1e-2)
assertEquals(Math.PI / 2.0, angleInRadian(90, 0, 0), 1e-5)
Copy link
Contributor

@mglukhikh mglukhikh Sep 15, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь неспроста была указана допустимая погрешность именно 1e-5. Вы её увеличили, и как результат не видите собственную ошибку (см. выше).

…кцию angleInRadian), а также сделала 3 задания из второго урока.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson1.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 12 / 12

Example: 4 / 4
Trivial: 4 / 4
Easy: 4 / 4

Succeeded:

  • [Trivial] lesson1.task1/seconds
  • [Example] lesson1.task1/sqRoot
  • [Trivial] lesson1.task1/trackLength
  • [Trivial] lesson1.task1/angleInRadian
  • [Easy] lesson1.task1/travelMinutes
  • [Easy] lesson1.task1/numberRevert
  • [Example] lesson1.task1/sqr
  • [Example] lesson1.task1/discriminant
  • [Trivial] lesson1.task1/lengthInMeters
  • [Easy] lesson1.task1/thirdDigit
  • [Easy] lesson1.task1/accountInThreeYears
  • [Example] lesson1.task1/quadraticRootProduct

Seed: 4722322226857675651

lesson2.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 2 / 7

Example: 1 / 1
Easy: 1 / 5
Normal: 0 / 1

Succeeded:

  • [Example] lesson2.task1/minBiRoot
  • [Easy] lesson2.task1/whichRookThreatens

Failed:

  • [Easy] lesson2.task1/ageDescription
    • Expected: 111 лет
    • Actual: 111 год
    • Inputs:
      • age -> 111
    • Exception: null
  • [Easy] lesson2.task1/timeForHalfWay
    • Expected: NaN
    • Actual: 2.066666666666667
    • Inputs:
      • t1 -> 2.066666666666667
      • v1 -> 0.0
      • t2 -> 0.0
      • v2 -> 9.0
      • t3 -> 1.0666666666666667
      • v3 -> 0.0
    • Exception: null

Seed: 4722322226857675651

owner

ElenaLaufeyson []

@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson2.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 2 / 7

Example: 1 / 1
Easy: 1 / 5
Normal: 0 / 1

Succeeded:

  • [Example] lesson2.task1/minBiRoot
  • [Easy] lesson2.task1/whichRookThreatens

Failed:

  • [Easy] lesson2.task1/ageDescription
    • Expected: 112 лет
    • Actual: 112 года
    • Inputs:
      • age -> 112
    • Exception: null
  • [Easy] lesson2.task1/timeForHalfWay
    • Expected: NaN
    • Actual: 0.0
    • Inputs:
      • t1 -> 0.0
      • v1 -> 0.0
      • t2 -> 0.0
      • v2 -> 1.0
      • t3 -> 3.6666666666666665
      • v3 -> 0.0
    • Exception: null

Seed: -1546190477764130964

owner

ElenaLaufeyson []

@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson2.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 3 / 7

Example: 1 / 1
Easy: 2 / 5
Normal: 0 / 1

Succeeded:

  • [Easy] lesson2.task1/ageDescription
  • [Example] lesson2.task1/minBiRoot
  • [Easy] lesson2.task1/whichRookThreatens

Failed:

  • [Easy] lesson2.task1/timeForHalfWay
    • Expected: 0.0
    • Actual: NaN
    • Inputs:
      • t1 -> 0.0
      • v1 -> 1.0
      • t2 -> 1.0666666666666667
      • v2 -> 0.0
      • t3 -> 7.9
      • v3 -> 0.0
    • Exception: null

Seed: 5745979226007047722

owner

ElenaLaufeyson []

@mglukhikh
Copy link
Contributor

Хорошо, первый урок засчитан.

val s1 = t1*v1
val s2 = t2*v2
val s3 = t3*v3
val HalfS = (s1 + s2 + s3)/2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переменные не следует называть с большой буквы

rookX1: Int, rookY1: Int,
rookX2: Int, rookY2: Int): Int = TODO()
rookX2: Int, rookY2: Int): Int {
return when {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это решение можно записать существенно короче

if (HalfS == 0.0) return Double.NaN
return when {
HalfS == s1 -> t1
HalfS == s2 -> t2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это условие неверное

val s2 = t2*v2
val s3 = t3*v3
val HalfS = (s1 + s2 + s3)/2
if (HalfS == 0.0) return Double.NaN
Copy link
Contributor

@mglukhikh mglukhikh Sep 21, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В задании явно не написано, каким должен быть результат, если весь пройденный путь равен нулю. Строго говоря, в подобной ситуации должен подходить любой ответ в интервале от 0 до t1 + t2 + t3, Double.NaN как признак неопределённости ответа тоже подходит. Поэтому, заявление бота о том, что ваш ответ в этой ситуации неверен -- неправильно.

return when {
HalfS == s1 -> t1
HalfS == s2 -> t2
(HalfS < s1) && (v1 != 0.0) -> HalfS/v1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А бывает так, что Halfs < s1 && v1 == 0.0? Если да, придумайте тест на эту ситуацию и добавьте его в тестовую функцию.

@mglukhikh
Copy link
Contributor

По второму уроку незначительные замечания по коду. Вы можете также, если чувствуете в себе силы, порешать более сложные задачи из второго урока

Исправлены ошибки в функциях timeForHalfWay и whichRookThreatens и решена функция rookOrBishopThreatens
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson2.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 3 / 7

Example: 1 / 1
Easy: 2 / 5
Normal: 0 / 1

Succeeded:

  • [Easy] lesson2.task1/timeForHalfWay
  • [Example] lesson2.task1/minBiRoot
  • [Easy] lesson2.task1/ageDescription

Failed:

  • [Easy] lesson2.task1/whichRookThreatens
    • Expected: 3
    • Actual: 2
    • Inputs:
      • kingX -> 2
      • kingY -> 1
      • rookX1 -> 5
      • rookY1 -> 1
      • rookX2 -> 2
      • rookY2 -> 1
    • Exception: null
  • [Easy] lesson2.task1/rookOrBishopThreatens
    • Expected: 1
    • Actual: 0
    • Inputs:
      • kingX -> 1
      • kingY -> 1
      • rookX -> 7
      • rookY -> 1
      • bishopX -> 2
      • bishopY -> 1
    • Exception: null

Seed: 7538209373031074599

owner

ElenaLaufeyson []

@mglukhikh
Copy link
Contributor

Ваши ответы в задаче про ладью и слона верные, сообщение бота ошибочно.

{
if (rookX in min(bishopX, kingX)..max(bishopX, kingX) &&
rookY in min(bishopY, kingY)..max(bishopY, kingY))
dangerbishop = false
Copy link
Contributor

@mglukhikh mglukhikh Sep 22, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Правильный способ выравнивания здесь такой:

if (rookX in ... &&
    rookY in ...) {
    dangerBishop = false
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Несмотря на то, что в if выполняется один оператор, рекомендуется всё равно ставить фигурные скобки

// => король под угрозой слона
if (abs(bishopX - kingX) == abs(bishopY - kingY))
{
dangerbishop = true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Название переменной состоит из двух слов: danger + bishop. Такие имена по Code Style следует записывать так называемой camelCase нотацией: dangerBishop.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

То же с dangerRook

dangerrook = true
//если между ладьей и королем стоит слон
if (bishopY == kingY && bishopX in min(kingX,rookX)..max(kingX,rookX))
dangerrook = false
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь тоже немножко неаккуратно выравнивание

}
/////////////////
return when {
dangerbishop == true && dangerrook == true -> 3 //угроза и от слона, и от ладьи
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Такие условия записываются просто как dangerBishop && dangerRook, запись == true здесь избыточна

@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson2.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 6 / 7

Example: 1 / 1
Easy: 5 / 5
Normal: 0 / 1

Succeeded:

  • [Easy] lesson2.task1/ageDescription
  • [Easy] lesson2.task1/timeForHalfWay
  • [Example] lesson2.task1/minBiRoot
  • [Easy] lesson2.task1/rookOrBishopThreatens
  • [Easy] lesson2.task1/triangleKind
  • [Easy] lesson2.task1/whichRookThreatens

Seed: -3386947621547262434

owner

ElenaLaufeyson []

Сделана функция isNumberHappy.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson2.task2

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 2 / 5

Example: 1 / 1
Easy: 1 / 2
Normal: 0 / 2

Succeeded:

  • [Easy] lesson2.task2/isNumberHappy
  • [Example] lesson2.task2/pointInsideCircle

Seed: 3188460160754680153

owner

ElenaLaufeyson []

* Если такой треугольник не существует, вернуть -1.
*/
fun triangleKind(a: Double, b: Double, c: Double): Int = TODO()
fun triangleKind(a: Double, b: Double, c: Double): Int
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь и далее -- по правилам форматирования кода, принятым в Котлине и Джаве, открывающая фигурная скобка ставится в конце предыдущей строки:

fun triangleKind(...): Int {
    ...
}

{
val sum1 = (number/1000 + (number/100)%10)
val sum2 = ((number/10)%10 + number%10)
if (sum1 == sum2) return true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше просто return sum1 == sum2

Доделан полностью.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson2.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 7 / 7

Example: 1 / 1
Easy: 5 / 5
Normal: 1 / 1

Succeeded:

  • [Example] lesson2.task1/minBiRoot
  • [Easy] lesson2.task1/ageDescription
  • [Easy] lesson2.task1/timeForHalfWay
  • [Easy] lesson2.task1/triangleKind
  • [Normal] lesson2.task1/segmentLength
  • [Easy] lesson2.task1/whichRookThreatens
  • [Easy] lesson2.task1/rookOrBishopThreatens

Seed: 4952497240925688625

owner

ElenaLaufeyson []

Доделала полностью.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson2.task2

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 5 / 5

Example: 1 / 1
Easy: 2 / 2
Normal: 2 / 2

Succeeded:

  • [Normal] lesson2.task2/circleInside
  • [Easy] lesson2.task2/isNumberHappy
  • [Easy] lesson2.task2/queenThreatens
  • [Normal] lesson2.task2/brickPasses
  • [Example] lesson2.task2/pointInsideCircle

Seed: 3433128578214087946

owner

ElenaLaufeyson []

Решила, но еще не полностью задания 3 урока.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson3.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 11 / 18

Example: 4 / 4
Trivial: 0 / 1
Easy: 6 / 8
Normal: 1 / 3
Hard: 0 / 2

Succeeded:

  • [Easy] lesson3.task1/fib
  • [Example] lesson3.task1/isPrime
  • [Example] lesson3.task1/factorial
  • [Example] lesson3.task1/isPerfect
  • [Easy] lesson3.task1/maxDivisor
  • [Easy] lesson3.task1/isCoPrime
  • [Easy] lesson3.task1/lcm
  • [Easy] lesson3.task1/minDivisor
  • [Normal] lesson3.task1/revert
  • [Example] lesson3.task1/digitCountInNumber
  • [Easy] lesson3.task1/squareBetweenExists

Failed:

  • [Trivial] lesson3.task1/digitNumber
    • Expected:
      8
    • Actual:
      0
    • Inputs:
      • n ->
        -79487588
    • Exception: null
  • [Easy] lesson3.task1/sin
    • Expected:
      -0.6560590289750895
    • Actual:
      -0.6560590291865792
    • Inputs:
      • x ->
        18.133970928221082
      • eps ->
        1.0000022204460493E-10
    • Exception: null

Seed: -7984670626923526759

owner

ElenaLaufeyson []

Исправлена функция fun digitNumber.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson3.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 11 / 18

Example: 4 / 4
Trivial: 0 / 1
Easy: 6 / 8
Normal: 1 / 3
Hard: 0 / 2

Succeeded:

  • [Easy] lesson3.task1/fib
  • [Easy] lesson3.task1/lcm
  • [Easy] lesson3.task1/isCoPrime
  • [Easy] lesson3.task1/maxDivisor
  • [Example] lesson3.task1/isPrime
  • [Example] lesson3.task1/factorial
  • [Example] lesson3.task1/isPerfect
  • [Normal] lesson3.task1/revert
  • [Easy] lesson3.task1/minDivisor
  • [Example] lesson3.task1/digitCountInNumber
  • [Easy] lesson3.task1/squareBetweenExists

Failed:

  • [Trivial] lesson3.task1/digitNumber
    • Expected:
      10
    • Actual:
      0
    • Inputs:
      • n ->
        -2147483648
    • Exception: null
  • [Easy] lesson3.task1/sin
    • Expected:
      -0.12186934341792294
    • Actual:
      -0.1218693473920035
    • Inputs:
      • x ->
        18.727382873899156
      • eps ->
        1.0E-10
    • Exception: null

Seed: -3236048993605126349

owner

ElenaLaufeyson []

Исправлена тривиальная задача.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson3.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 12 / 18

Example: 4 / 4
Trivial: 1 / 1
Easy: 6 / 8
Normal: 1 / 3
Hard: 0 / 2

Succeeded:

  • [Easy] lesson3.task1/maxDivisor
  • [Normal] lesson3.task1/revert
  • [Easy] lesson3.task1/fib
  • [Example] lesson3.task1/isPrime
  • [Example] lesson3.task1/isPerfect
  • [Example] lesson3.task1/factorial
  • [Trivial] lesson3.task1/digitNumber
  • [Easy] lesson3.task1/lcm
  • [Easy] lesson3.task1/minDivisor
  • [Easy] lesson3.task1/isCoPrime
  • [Example] lesson3.task1/digitCountInNumber
  • [Easy] lesson3.task1/squareBetweenExists

Failed:

  • [Easy] lesson3.task1/sin
    • Expected:
      -0.7986355100447593
    • Actual:
      -0.7986355096684238
    • Inputs:
      • x ->
        16.63298777150596
      • eps ->
        1.0E-10
    • Exception: null

Seed: -6487337881386781300

owner

ElenaLaufeyson []

var cur = 0.0
var sinx = 0.0
var n = 1
while (true) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Весь цикл while нужно сдвинуть на 4 пробела назад

n += 2
}
return sinx
}
Copy link
Contributor

@mglukhikh mglukhikh Sep 25, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подумайте, как поведёт себя это решение, если x = 20.0? А при x = 100.0? А при x = 1000.0? Сколько членов ряда потребуется, чтобы достичь требуемой точности? Как будет вести себя погрешность вычислений (помним, что она всегда присутствует при работе с Double)? Можно ли как-то избежать этих неприятных эффектов? Придумайте решение, и добавьте в тестовую функцию один или несколько тестов для подобных ситуаций (сравнивая результат вашей функции с результатом Math,sin с помощью assertEquals).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Про то, как пишутся тестовые функции -- см. раздел chapter01 в tutorial.

@mglukhikh
Copy link
Contributor

Второй урок засчитан. Обратите внимание на замечание к функции sin в третьем уроке.

Решила одну сложную задачу.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson3.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 13 / 18

Example: 4 / 4
Trivial: 1 / 1
Easy: 6 / 8
Normal: 1 / 3
Hard: 1 / 2

Succeeded:

  • [Easy] lesson3.task1/fib
  • [Trivial] lesson3.task1/digitNumber
  • [Easy] lesson3.task1/maxDivisor
  • [Hard] lesson3.task1/fibSequenceDigit
  • [Example] lesson3.task1/isPrime
  • [Example] lesson3.task1/isPerfect
  • [Example] lesson3.task1/factorial
  • [Easy] lesson3.task1/lcm
  • [Easy] lesson3.task1/isCoPrime
  • [Easy] lesson3.task1/minDivisor
  • [Normal] lesson3.task1/revert
  • [Easy] lesson3.task1/squareBetweenExists
  • [Example] lesson3.task1/digitCountInNumber

Failed:

  • [Easy] lesson3.task1/sin
    • Expected:
      0.017452406459518247
    • Actual:
      0.017452403307423047
    • Inputs:
      • x ->
        -18.832102629018816
      • eps ->
        1.0000022204460493E-10
    • Exception: null

Seed: 4691404823435061465

owner

ElenaLaufeyson []

Исправлена проблема с функцией sin и добавлена тестовая функция.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson3.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 13 / 18

Example: 4 / 4
Trivial: 1 / 1
Easy: 6 / 8
Normal: 1 / 3
Hard: 1 / 2

Succeeded:

  • [Easy] lesson3.task1/lcm
  • [Easy] lesson3.task1/minDivisor
  • [Trivial] lesson3.task1/digitNumber
  • [Easy] lesson3.task1/isCoPrime
  • [Easy] lesson3.task1/maxDivisor
  • [Example] lesson3.task1/isPerfect
  • [Example] lesson3.task1/factorial
  • [Normal] lesson3.task1/revert
  • [Example] lesson3.task1/isPrime
  • [Easy] lesson3.task1/fib
  • [Example] lesson3.task1/digitCountInNumber
  • [Easy] lesson3.task1/squareBetweenExists
  • [Hard] lesson3.task1/fibSequenceDigit

Failed:

  • [Easy] lesson3.task1/sin
    • Expected:
      0.017452406459518247
    • Actual:
      0.01745240423827672
    • Inputs:
      • x ->
        -18.832102629018816
      • eps ->
        1.0E-10
    • Exception: null

Seed: -2503733154380961846

owner

ElenaLaufeyson []

cur = next
}
return when {
str[n-1] == '0' -> 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Всё проще -- str[n - 1] - '0'. Символы тоже можно вычитать (при этом вычитаются их коды), а цифровые символы идут в любой таблице кодировки по порядку от '0' до '9'.

assertEquals(1.0, sin(Math.PI / 2.0, 1e-5), 1e-5)
assertEquals(0.0, sin(Math.PI, 1e-5), 1e-5)
assertEquals(-1.0, sin(3.0 * Math.PI / 2.0, 1e-5), 1e-5)
assertEquals(Math.sin(20.0), sin(20.0, 1e-5), 1e-5)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А что будет, если точность повысить хотя бы до 1e-10? Double, вообще-то, имеет точность в 13-14 десятичных знаков.

var next = 0
if (n == 1 || n == 2) return 1
while (str.length <= n) {
str += cur.toString()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь задам ещё такой вопрос (бонусный). Как поведёт себя ваша функция при достаточно больших значениях n? Какие факторы могут мешать ей работать правильно? Можно ли что-то сделать с этими факторами, и если можно -- как? Подумайте на эту тему, ответьте мне здесь в комментарии

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

При достаточно больших значениях n число Фибоначчи может выйти за границы типа Int и придется использовать тип Long.
Также можно столкнуться с проблемой переполнения строки или использование большого объема памяти, поэтому лучше рассматривать не всю последовательность целиком, а каждое отдельное число этой последовательности. При данном решении можно даже не использовать строки.

fun fibSequenceDigit(n: Int): Int {

  var call = 0 //общая длина всех "проверенных" цифр
  var ccur =0 //длина текущего числа
  var cur = 0 //текущее число
  var i=1 //номер текущего числа
  var ab=0 //какая цифра(по счету) из текущего числа (при заходе числа за границу n) 

//понадобится
var k=0 //последняя цифра текущего числа
while(true) {
cur = fib(i) //приравниваем текущему число число последовательности Фиб. с
//номером i
ccur = digitNumber(cur) //считаем длину текущего числа(сколько в нем цифр?)
call+=ccur //увеличиваем длину обработанной пос-ти на длину текущего числа
if(call==n) return cur%10 //если длина обраб. пос-ти равна n, то
// возвращаем последнюю цифру текущего числа
if(call > n) { //если обработанная длина "вышла за" n
ab=n-(call-ccur) //какая цифра данного числа под номером n?
while(cur>0) { //поиск нужной цифры текущего числа
k=cur%10
if(ccur==ab) return k
cur/=10
ccur--
}
}
i++
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, ответ верный

@mglukhikh
Copy link
Contributor

В целом с третьим уроком всё в порядке. Только вот решение проблемы с синусом вы так и не придумали. Плюс есть ещё бонусный вопрос про fibSequenceDigit.

Доделала весь третий урок.
@kotlin-polytech-bot
Copy link

author

Sidorina_Test1 [elena_petrova98@mail.ru]

lesson3.task1

Author: Sidorina_Test1 [elena_petrova98@mail.ru]

Owner: ElenaLaufeyson []

Total: 15 / 18

Example: 4 / 4
Trivial: 1 / 1
Easy: 6 / 8
Normal: 3 / 3
Hard: 1 / 2

Succeeded:

  • [Example] lesson3.task1/isPrime
  • [Easy] lesson3.task1/maxDivisor
  • [Example] lesson3.task1/isPerfect
  • [Normal] lesson3.task1/revert
  • [Normal] lesson3.task1/isPalindrome
  • [Example] lesson3.task1/factorial
  • [Easy] lesson3.task1/lcm
  • [Easy] lesson3.task1/minDivisor
  • [Hard] lesson3.task1/fibSequenceDigit
  • [Trivial] lesson3.task1/digitNumber
  • [Easy] lesson3.task1/fib
  • [Easy] lesson3.task1/squareBetweenExists
  • [Easy] lesson3.task1/isCoPrime
  • [Normal] lesson3.task1/hasDifferentDigits
  • [Example] lesson3.task1/digitCountInNumber

Failed:

  • [Easy] lesson3.task1/sin
    • Expected:
      0.0
    • Actual:
      -1.4478248097800665E-9
    • Inputs:
      • x ->
        -18.84955592153876
      • eps ->
        1.0E-10
    • Exception: null
  • [Easy] lesson3.task1/cos
    • Expected:
      0.9063077870238162
    • Actual:
      0.9063077880065364
    • Inputs:
      • x ->
        -18.413223608540175
      • eps ->
        1.0E-10
    • Exception: null

Seed: 4968718745040624060

owner

ElenaLaufeyson []

@mglukhikh
Copy link
Contributor

Елена, я сейчас этот Pull Request закрою, а проблему с sin / cos оставлю вам на подумать. Всё остальное решено верно.

@mglukhikh mglukhikh closed this Sep 29, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants