Инновации и инсайты в мире Java из первых уст. Новая конференция Java Fest — 21 марта >>
×Закрыть

А пользовал ли кто либо codility.com ?

Не спрашивайте только как меня туда занесло :)

Вкратце: сделал на днях пару заданий, сделал правильно, с проверкой, с экспешинами там и все такое. Предварительно прогонял в студии и с помощью ихней системы тестирования их тесты. Ну все красиво, все работает, нажал было кнопку сабмит и тут...

Результат превзошел все ожидания: первое задание 0 очков, второе 50 очков. Естественно что после первого вопроса WTF? мне стало жутко интересно как работает их автоматическая система оценивания задач, которая мне такие низкие оценки ставит.

Итак буквально только что сажусь, нахожу какое-то ну совсем элементарное задание, делаю и любуюсь вот на результат.

Итак, задание:

A small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to a position greater than or equal to Y. The small frog always jumps a fixed distance, D.

Count the minimal number of jumps that the small frog must perform to reach its target.

Write a function:

class Solution { public int solution(int X, int Y, int D); }
that, given three integers X, Y and D, returns the minimal number of jumps from position X to a position equal to or greater than Y.

For example, given:

  X = 10
  Y = 85
  D = 30
the function should return 3, because the frog will be positioned as follows:

after the first jump, at position 10 + 30 = 40
after the second jump, at position 10 + 30 + 30 = 70
after the third jump, at position 10 + 30 + 30 + 30 = 100
Assume that:

X, Y and D are integers within the range [1..1,000,000,000];
X ≤ Y.
Complexity:

expected worst-case time complexity is O(1);
expected worst-case space complexity is O(1).

мой вариант решения на C# (согласен что скобочки там явно лишние и проверку входящих параметров надо бы добавить, но судя по результатам тестам системе оценивания на это плевать):

using System;
// you can also use other imports, for example:
// using System.Collections.Generic;

// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");

class Solution {
    public int solution(int X, int Y, int D) {
        int distance = Y-X;
        return (distance / D) + (distance > 0 ? 1 : 0);
    }
}

Оказалось что задачу на три арифметических действия я решил не совсем правильно, набрал всего лишь 55 балов на элементарном решении и имею несколько зафейленных тестов.
Ну в общем я пока что в шоке и не знаю что мне делать.. Вот думаю может кто носом меня потыкает, а? :)

ЗЫ: пробовал переделать с валидацией входящих результатов, результат тот же, похоже что товарищу кодилити на правильность входящих данных просто плевать.

И собственно большой принсткрин с результатами:
www.dropbox.com/...sults Codility.jpg?dl=0

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Время от времени выполняю задачи из бесплатного стека. Первые попытки были 25-50 / 100.
Теперь практически всегда 100/100. Потому что усвоил важную вещь — всегда тщательно проверять поведение у граничных значений, валидировать input; в задачах иногда есть требования по памяти/сложности, а значит надо найти лаконичное решение.

Ситуация была очень знакомая....в XCode все правильно отработало .....по оценке сайта — только одно задание правильное :)))

Единичку нужно прибавлять когда distance не делиться на D, а не когда она больше нуля.

Блин, точно
в варианте

// you can also use imports, for example:
// import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int X, int Y, int D) {
        int distance = Y-X;
        return (distance / D) + (distance % D > 0 ? 1 : 0);
    }
}
выдает все сто очков.....
пошел читать книжки про внимательность к деталям.....

Або коротший варіант — цілочисельне округлення вверх:
return (distance + D — 1) / D;

так оно ж вроде фейлит при y > x, y % x = 0

действительно не туда, (у-х)%d=0

Подписаться на комментарии