问题描述: 我正在尝试执行此处提到的任务 - https://codereview.stackexchange.com/questions/182483/advent-of-code-2017-day-1-sum-of-digits-matching-the-next-digit-circular-list
但在Windows Power Shell中使用简单的循环逻辑(因为我是Power Shell的新手)
该任务需要检查一系列数字,并找到与列表中下一个数字匹配的所有数字的总和。列表是循环的,因此最后一位数字后面的数字是列表中的第一个数字。例如:
1122产生3(1 + 2)的和,因为第一个数字1与第二个数字匹配,第三个数字2与第四个数字匹配; 1111 产生4因为每个数字(全1)与下一个数字相匹配; 1234产生0,因为下一个数字不匹配; 91212129产生9,因为与下一个匹配的唯一数字是最后一个数字9
我编码了这个:
foreach($line in [System.IO.File]::ReadLines("./task1.txt"))
{
$data = ($line)
}
$i=0
Do
{
if ($data[$i] -eq $data[$i+1]) {
$final += $data[$i]
}
$i++
}
While ($i -le $data.Length)
($final | Measure-Object -Sum).sum
我的" task1.txt"包含值 - " 1122"
$ final存储值" 12"这些数字是预期的,但我无法总结它们以获得所需的答案 - " 3"
当我尝试使用时:
foreach($line in [System.IO.File]::ReadLines("./task1.txt"))
{
[int[]]$data = [int[]]$line.split('')
}
我的" $ data"获得整个" 1122"作为一个值
请帮忙!
答案 0 :(得分:3)
var $ i遍历长度,
修改简化版本感谢来自BenH
的提示## Q:\Test\2018\05\17\SO_50397884.ps1
function CodeAdvent2017-1 {
param ([string]$data)
$res = 0
for ($i=0;$i -le $data.Length-1;$i++){
if ($data[$i] -eq $data[$i-1]){
$res+=[int]$data.substring($i,1)
}
#"`$i={0}, `$pnt={1} `$data[`$i]={2} `$res={3}" -f $i,$pnt,$data[$i],$res
}
return "Result: {0} of {1}" -f $res, $data
}
CodeAdvent2017-1 1122 #produces 3
CodeAdvent2017-1 1111 #produces 4
CodeAdvent2017-1 1234 #produces 0
CodeAdvent2017-1 91212129 #produces 9
示例输出:
> Q:\Test\2018\05\17\SO_50397884.ps1
Result: 3 of 1122
Result: 4 of 1111
Result: 0 of 1234
Result: 9 of 91212129
答案 1 :(得分:0)
foreach($line in (gc ".\task1")) {
[string]$data = $line
}
$i=0
$final = 0
Do {
if ($data[$i] -eq $data[$i -1]) {
$final += [int]$data.substring($i,1)
}
$i++
} While ($i -le $data.Length-1)
$final