为了训练我的编码foo,我决定在CodeEval平台上注册。我偶然发现了一个我觉得非常简单的练习,但是有些原因,很久以前就有一个我无法解决的错误。 这是情况(我只从文本中提出了更重要的内容):
“参与者计算了他们为每幅画收到的投票,并将其插入表格中。但是,他们无法确定哪一项运动获胜,哪些作品得分最高,所以他们请求你帮忙。 您需要确定并打印表格中每个类别的最高分。“ 更多关于以下链接的练习: https://www.codeeval.com/open_challenges/208/这是平台用来验证我的算法是否正常的示例输入:
333 967 860 -742 -279 -905 |
-922 380 -127 630 38 -548 |
258 -522 157 -580 357 -502 |
963 486 909 -416 -936 -239 |
517 571 107 -676 531 -782 |
542 265 -171 251 -93 -638
以下是此示例的输出: 967 630 357 963 571
起初,我无法理解出了什么问题。但似乎在最后一次之后 “|”,我的代码在我正在阅读的文件的第二行冻结并“跳”。我的代码对我正在做的事情看起来很不错。
以下是示例代码:
//Sample code to read in test cases:
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System;
class Program
{
static void Main(string[] args)
{
using (StreamReader reader = File.OpenText(args[0]))
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (null == line)
continue;
List<int> highestScores = new List<int>();
var temporaryNumbers = new List<int>();
string[] splittedLine = line.Split(' ');
foreach (var s in splittedLine)
{
if (s == "|")
{
highestScores.Add(temporaryNumbers.Max());
temporaryNumbers.Clear();
continue;
}
int value;
if (int.TryParse(s, out value))
{
temporaryNumbers.Add(value);
continue;
}
continue;
}
if(highestScores.Count == 0)
continue;
var newLine = highestScores.Aggregate(string.Empty, (current, value)=> current + (value + " "));
Console.Out.WriteLine(newLine);
}
}
}
我想我的问题是如何修复这样的情况?它不是从他们使用的输入跳过一行,而是每一行。在最后一个|,代码跳转到下一行,如果有的话。
答案 0 :(得分:1)
总的来说,这就是我要处理这个问题的方法:
首先使用Split("|")
将字符串拆分为行(让我们调用生成的数组rows
)。现在创建一个名为List<int>
的{{1}}。现在循环遍历columnMax
,对于每一行,我们将rows
(让我们称之为Split(" ")
)。现在我们知道(从原始分配)我们可以假设行的长度都相同,因此我们将使用cells
循环遍历cells
并检查:
for
现在在循环结束时,var value = int.Parse(cells[i]); // leaving out error checking for now
// but you could use TryParse to catch bad data
if (columnMax.Count <= i)
{
columnMax.Add(value);
}
else if (columnMax[i] < value)
{
columnMax[i] = value;
}
应包含每列的所有最大值(即类别)。
只是为了踢,这是一个Linq解决方案:
columnMax
答案 1 :(得分:1)
我打算发布整个解决方案,但我认为这是一场你参与的比赛。
所以这是我的帮助:
尝试将问题分解为小问题并一次解决一件事。实际上你的代码有点混乱。
首先创建一个方法来加载所有文件条目,并返回一个字符串集合,其中包含文件中每行的人员分数。这需要更多的方法来将string []转换为int [],就像这一样。
self.routes['/portfolio'] = function(req, res) {
// Website you wish to allow to connect
res.jsonp({ "my": "object" });
};
然后,对于每个int集合,调用一个方法,该方法能够将每个类别得分分组到不同的int数组中,并且您可以返回每个类别得分的最大数量。