如何在Powershell

时间:2018-05-17 18:04:11

标签: windows powershell window

问题描述: 我正在尝试执行此处提到的任务 - 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"作为一个值

请帮忙!

2 个答案:

答案 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