Как увидеть входные значения для тестов Codility (и других сайтов)? - PullRequest
0 голосов
/ 10 ноября 2019

Итак, я написал решение для упражнения MaxProfit ( ссылка на описание задачи ) из урока 9 , в коде для программистов . Я набрал 88% итогового результата (код внизу, но не стесняйтесь читать весь пост, где я подробно объясняю, о чем мой вопрос, я полагаю, что я не знаю, как правильно читать код страницы), но, возможно, такую ​​информацию нельзя получить со стороны клиента, я не знаю).

Это 25-е упражнение, которое я решаю, все предыдущие были решены со 100% окончательным результатом. Я, конечно, и я все еще тащу это сомнение от многих недель назад о том, как увидеть фактическую работоспособность тестов (не только название теста и полученное / ожидаемое значение), потому что иногда это не показываетТаким образом, вам, скорее всего, нужно угадать, хотя это всегда дает вам представление о том, где вы можете потерпеть неудачу, в названии теста и какое значение получите из вашего кода, когда ожидается другой.

Когда выполучить подробную информацию о неудачном тесте, это вывод, довольно подробный вывод, который выдает вам страница.

Сводка анализа


обнаружены следующие проблемы: неправильные ответы. (это всегда отображается при наличии проблем)
[0, 2000] expected 2000 got 0 (Вы не всегда получаете подробную информацию о input , но вы всегда получите более подробную информацию о неудачных и успешных тестах внизу)

После этого вы всегда можете увидеть следующие подробности о тестах (дажеесли все в порядке), что полезно, но иногда недостаточно.

Следующий результат (часть) является результатом для моего кода в этом упражнении (вы можете увидеть страницу с полными результатами здесь)

Обнаруженная временная сложность: O (N)
▶ пример длины = 6✔OK
▶ simple_1 V-pattern> последовательность, длина = 7✔OK
▶ simple_desc длина нисходящей и восходящей последовательности = 5✔OK
▶ simple_empty пусто и [0,200000] последовательность✔OK
▶ two_hills две возрастающие подпоследовательности✘ НЕПРАВИЛЬНЫЙ ОТВЕТ
получено 3000 ожидаемых 99000-> 1.0.020 НЕПРАВИЛЬНЫЙ ОТВЕТ, получил3000 ожидается 99000


Как вы можете видеть в последнем тесте, я получил неправильный ответ. Но я не вижу подробностей о входных данных, и я не вижу, как он может не сработать в моем коде. В нем только сказано:

two_hills две увеличивающиеся подпоследовательности и получено 3000 ожидаемых 99000

Но этого недостаточно! Я протестировал [2,3,7,22, 1, 22, 51] в качестве ввода, которое возвращает 50, а также [1, 22, 51, 2, 3, 7, 22], также возвращающее 50, и это две увеличивающиеся подпоследовательности, я прав? так что я не совсем понимаю. Но опять же, вопрос заключается в том, как определить, какие значения тестирует страница для two_hills и вообще для всех других тестов (как я уже говорил ранее, иногда показывает ввод при неудачном тестировании, не всегда , но никогда показывает ввод для успешных тестов).

Можно ли увидеть этот ввод в консоли браузера? Я не смог его найти.

Наконец, это мой код.


using System;

class Solution {
    public int solution(int[] A) {
        var maxProfit = 0;
        if ( A.Length > 2)
        {
            var minBuyPrice = Math.Min(A[0], A[1]);
            var maxSellPrice = minBuyPrice;
            for (int i = 2; i < A.Length; i++)
            {
                if ( minBuyPrice > A[i])
                {
                    minBuyPrice = A[i];
                    maxSellPrice = A[i];
                }
                maxSellPrice = Math.Max(maxSellPrice, A[i]);
                maxProfit = Math.Max(maxProfit, maxSellPrice - minBuyPrice);
            }
        }
        else if ( A.Length == 2)
        {
            return Math.Max(0, A[1] - A[0]);
        }
        return maxProfit;
    }
}

1 Ответ

0 голосов
/ 10 ноября 2019

Я избавился от этого уродливого else if заявления и получил 100%, это мой окончательный код.

using System;

class Solution {
    public int solution(int[] A) {
        var maxProfit = 0;
        if (A.Length >= 2)
        {
            var minBuyPrice = Math.Min(A[0], A[1]);
            var maxSellPrice = Math.Max(0, A[1] - A[0]);
            maxProfit = maxSellPrice;   

            for (int i = 2; i < A.Length; i++)
            {
                if (minBuyPrice > A[i])
                {
                    minBuyPrice = A[i];
                    maxSellPrice = A[i];
                }
                maxSellPrice = Math.Max(maxSellPrice, A[i]);
                maxProfit = Math.Max(maxProfit, maxSellPrice - minBuyPrice);
            }
        }
        return maxProfit;
    }
}
...