windows - Sådan tilføjes værdier i en streng af typen System.String in PowerShell

Indlæg af Hanne Mølgaard Plasc

Problem



Problem Beskrivelse:
Jeg forsøger at udføre den opgave, der er nævnt her - https://codereview.stackexchange.com/questions/182483/advent-of-code-2017-day-1-sum-of-digits-matching-the-next-digit- cirkulær-liste [6]


Men i Windows Power Shell bruger du simpel loop logik (som jeg er ny til Power Shell)


Opgaven kræver at gennemgå en sekvens af cifre og finde summen af ​​alle cifre, der svarer til det næste ciffer i listen. Listen er cirkulær, så cifferet efter det sidste ciffer er det første ciffer på listen. For eksempel:



  1122 producerer en sum på 3 (1 + 2), fordi det første ciffer 1 matcher det andet ciffer, og det tredje ciffer 2 matcher det fjerde ciffer; 1111
  producerer 4 fordi hvert ciffer (alle 1) matcher det næste;
  1234 producerer 0, fordi ingen ciffer matcher det næste;
  91212129 producerer 9, fordi det eneste ciffer, der matcher det næste, er det sidste ciffer, 9



Jeg har kodet dette:


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


Min 'task1.txt' indeholder værdien - '1122'


$ Final'en lagrer værdien '12' disse tal forventes, men jeg kan ikke opsummere dem for at få det ønskede svar - '3'


Når jeg forsøger at bruge:


foreach($line in [System.IO.File]::ReadLines("./task1.txt"))
{
    [int[]]$data = [int[]]$line.split('')


}


Mine '$ data' får hele '1122' som en værdi


Hjælp venligst!

Bedste reference


Varen $ itererer gennem længden,


Rediger strømlinet version takket være et tip fra BenH


## Q:Test2018517SO\_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


Prøveudgang:


> Q:Test2018517SO\_50397884.ps1
Result: 3 of 1122
Result: 4 of 1111
Result: 0 of 1234
Result: 9 of 91212129

Andre referencer 1


foreach($line in (gc ".	ask1")) {
    [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