Ocena kodu powershell

0

Napisałem szyfrowanie cezara w PowerShell'u oceńcie.

[string]$alphabet = "aąbcćdeęfghijklłmnńoópqrsśtuvwxyzźż0123456789"
$ciphertext = @()
$decrypttext = @()
Write-Host "PROGRAM SZYFRUJACY SZYFREM CEZARA"

Function Encrypt ( )
{
    $plaintext = Read-Host "PODAJ TEKST DO ZASZYFROWANIA"
    [int]$shift = Read-Host "PODAJ PRZESUNIECIE"
    for([int]$x = 0; $x -le $plaintext.Length-1; $x++)
    {
       for([int]$d = 0; $d -le $alphabet.Length-1; $d++)
       {
            if($plaintext[$x] -match $alphabet[$d])
            {
                if($d -ge $alphabetL-$shift)
                {
                    $global:ciphertext += $alphabet[$d-($alphabet.Length-$shift)]
                }
                else 
                {
                    $global:ciphertext += $alphabet[$d+$shift]
                }
            }
        }
    }
}
Function Decrypt ( )
{
    $secrettext = Read-Host "PODAJ TEKST DO ODSZYFROWANIA"
    [int]$shift = Read-Host "PODAJ PRZESUNIECIE"
    for([int]$x = 0; $x -le $secrettext.Length-1; $x++)
    {
       for([int]$d = 0; $d -le $alphabet.Length-1; $d++)
       {
            if($secrettext[$x] -match $alphabet[$d])
            {
                if($d -le $alphabetL-$shift)
                {
                    $global:decrypttext += $alphabet[$d+($alphabet.Length+$shift)]
                }
                else 
                {
                    $global:decrypttext += $alphabet[$d-$shift]
                }
            }
        }
    }
}

Encrypt
Decrypt
Write-Host "WYNIK <<< " $ciphertext " >>>"
Write-Host "WYNIK <<< " $decrypttext " >>>"

Podpowiedzcie jakiej funkcji użyć by rozróżniać duże i małe litery.
Bo trochę szukałem i nie znalazłem :/

0
Function Encrypt
{
    param([string]$plaintext, [int]$shift, [string]$alphabet)
    $result = ""
    for([int]$x = 0; $x -le $plaintext.Length-1; $x++)
    {
        $i = $alphabet.indexOf($plaintext[$x])
        $i = ($i + $shift) % $alphabet.Length
        $result += $alphabet[$i]
    }
    $result
}

Function Encrypt2
{
    param([string]$plaintext, [int]$shift, [string]$alphabet)
    $result = ""
    $plaintext2 = $plaintext[0..$plaintext.Length]
    foreach($letter in $plaintext2)
    {        
        $i = $alphabet.indexOf($letter)
        $i = ($i + $shift) % $alphabet.Length
        $result += $alphabet[$i]
    }
    $result
}

[string]$alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"
#$res = Encrypt2 (Read-Host "PODAJ TEKST DO ZASZYFROWANIA") (Read-Host "PODAJ PRZESUNIECIE") $alphabet
$res = Encrypt "abcdef" 1 $alphabet
write-host $res
$res = Encrypt2 "abcdef" 1 $alphabet
write-host $res

kod po mauej refaktoryzacii
o so chodzi z tym "rozróżniać duże i małe litery"?
Prawdopodobnie powinieneś dodać durze litery do alfabetu

0

Chodziło mi o to że funkcja -match nie rozróżnia wielkości liter przy porównywaniu (tak mi się wydaje), nie wydaje mi się że dodanie dużych liter do alfabetu rozwiąże sprawę.

alfabet AaBbCcDd
tekst aB
przesunięcie 1
wyjście (szyfr) Bb

Taki efekt chciałbym osiągnąć.

1
[string]$alphabet = "AaBbCcDd"
$res = Encrypt2 "aB" 1 $alphabet
write-host $res

Zamierzony efekt osiongasz z funkcjom Encrypt2

0

Przejrzałem funkcje Encrypt2.
Nie jasna jest dla mnie ta linijka:

$plaintext2 = $plaintext[0..$plaintext.Length]
Chodzi o to by plainttext2 przejęło ilość elementów plaintext by pętla foreach mogła przejść odpowiednią ilość razy?
Dobrze myślę?

0

Jak sprawdzić czy dana wartość jest liczbą?
$wartość = "a12" -> FALSE
$wartość = "12" ->TRUE

0
$wartosc1 = "a12"
$wartosc2 = "12"
$r = [int]::TryParse($wartosc1,[ref]$rtn)
write-host $r, $rtn
$r = [int]::TryParse($wartosc2,[ref]$rtn)
write-host $r, $rtn

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.