segunda-feira, 9 de outubro de 2017

Invertendo String e Palíndromos

Não há em System.String um método para inverter uma string, mas nem por isso é difícil consegui-lo.

Vamos enumerar 5 maneiras de inverter strings:
  1. $string | %{-join $_[$_.Length..0]}
  2. -join([System.Linq.Enumerable]::Reverse($string))
  3. -join($string).ForEach({[Regex]::Matches($_ , ‘.’ , ‘RightToLeft’)})
  4. $string[-1..-($pal.Length)] -join ""
  5. -join (($pal.Length-1)..0 | ForEach-Object { $pal[$_]})
$pal = "Powershell"
$reverseV1 = $pal | %{-join $_[$_.Length..0]}
Write-Host -ForeGroundColor Yellow $pal":" -NoNewline
Write-Host -ForeGroundcolor Cyan $reverseV1

$pal = "Inverte"
$reverseV2 = -join([System.Linq.Enumerable]::Reverse($pal))
Write-Host -ForeGroundColor Yellow $pal":" -NoNewline
Write-Host -ForeGroundcolor Cyan $reverseV2

$pal = "Strings"
$reverseV3 = -join($pal).ForEach({[Regex]::Matches($_ , ‘.’ , ‘RightToLeft’)})
Write-Host -ForeGroundColor Yellow $pal":" -NoNewline
Write-Host -ForeGroundcolor Cyan $reverseV3

$pal = "Muito"
$reverseV4 = $pal[-1..-($pal.Length)] -join ""
Write-Host -ForeGroundColor Yellow $pal":" -NoNewline
Write-Host -ForeGroundcolor Cyan $reverseV4

$pal = "Facilmente"
$reverseV5 = -join (($pal.Length-1)..0 | ForEach-Object { $pal[$_]})
Write-Host -ForeGroundColor Yellow $pal":" -NoNewline
Write-Host -ForeGroundcolor Cyan $reverseV5


Palíndromos são palavras ou frases que podem ser lidas da esquerda para a direita ou da direita para a esquerda, como por exemplo RODADOR.

Vamos utilizar o Powershell para escrever uma função que receba uma palavra como parâmetro e nos diga se ela é um palíndromo. Para tanto, a lógica que vamos utilizar é a de inverter a string e compará-la com ela mesma.

Function ehPalindromo($pal) {
    $reversePal = -join([System.Linq.Enumerable]::Reverse($pal))
    if ($pal -eq $reversePal) {
        Write-Host -ForegroundColor Green $pal "é palíndromo"
    }
    else {
        Write-Host -ForegroundColor Red $pal "não é palíndromo"
    }
}

$palavras = @("RELER","REVIVER","RADAR","ARARA","AMORA","SALAS",`
"ANILINA","MUSSUM","CASACA","OSSO","RIR","MIRIM")

Write-Host "----------------------------------"
Write-Host "   P A L Í N D R O M O S"
Write-Host "----------------------------------"

ForEach ($pal in $palavras) { ehPalindromo($pal) }

Nenhum comentário:

Postar um comentário