Как добавить значения в строку типа System.String в Powershell - PullRequest
0 голосов
/ 17 мая 2018

Описание проблемы: я пытаюсь выполнить задачу, упомянутую здесь - 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 голосов
/ 18 мая 2018
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 
0 голосов
/ 17 мая 2018

Переменная $ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...