如何查看 Codility(和其他站点)测试的输入值?

Posted

技术标签:

【中文标题】如何查看 Codility(和其他站点)测试的输入值?【英文标题】:How to see the input values for Codility's (and other sites') tests? 【发布时间】:2020-03-06 11:04:59 【问题描述】:

因此,我在codility for programmers 中从lesson 9 编写了MaxProfit 练习(link to the task's description) 的解决方案。我得到了 88% 的最终分数(代码在底部,但请随意阅读整篇文章,我在其中详细解释了我的问题是关于什么的,我相信是不知道如何深入阅读页面代码的问题,但可能无法从客户端访问此类信息,我不知道)。

这是我正在解决的第 25 个练习,之前的所有练习都以 100% 的最终分数完成,当然,我仍然拖着几周前的疑问,关于如何查看实际测试代码正在运行(不仅仅是测试的标题,以及得到/预期的值),因为有时它不会显示,所以你不得不猜测,即使它总是让你知道你可能失败的地方,在测试的标题,以及在需要另一个测试时从您的代码中获得什么值。

当您获得有关失败测试的详细信息时,这是页面向您抛出的非常详细的输出。

分析总结


已检测到以下问题:错误答案。(如果有问题,则始终显示)[0, 2000] expected 2000 got 0 (您不知道) t 总能获得有关 输入 的详细信息,但您总能在底部获得有关失败和成功测试的更多详细信息)

在此之后,您始终可以看到有关测试的以下详细信息(即使一切正常),这很有用但有时还不够。

以下输出是本练习中我的代码的(部分)结果(您实际上可以看到包含完整结果的页面here)

检测到的时间复杂度: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;
    

【问题讨论】:

他们没有分享他们的测试序列输入。在您的代码中,您可以像 var minBuyPrice = Math.Min(A[0], A[1]); 这样初始化最低价格,但最好在此处使用 0 @PavelAnikhouski 为什么?如果我将该行更改为您所说的示例测试未通过,我什至无法进入通过更多测试分析代码的页面。 看看这个解决方案app.codility.com/demo/results/training4EA3T5-U62它的分数是 100%。在您的代码中,您应该最大化切片,而不是绝对值 我不想看答案,因为我想自己编程,但我明白你关于最大化切片的观点。 很棒的代码@PavelAnikhouski 谢谢!好简洁 【参考方案1】:

我摆脱了那个丑陋的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;
    

【讨论】:

以上是关于如何查看 Codility(和其他站点)测试的输入值?的主要内容,如果未能解决你的问题,请参考以下文章

Codility 任务 TapEquilibrium 正确性仅为 33%

如何通过cmd查看IIS站点

关于 Codility 的 HilbertMaze 任务

Pydev 的覆盖率测试python coverage以及其他使用

该脚本如何使用 AJAX 从其他站点刮取 HTML,而不需要这些站点上的 CORS 标头?

Alpha版本测试报告