Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,5 @@
|
|||
Function Test-Palindrome( [String] $Text ){
|
||||
$CharArray = $Text.ToCharArray()
|
||||
[Array]::Reverse($CharArray)
|
||||
$Text -eq [string]::join('', $CharArray)
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
function Test-Palindrome
|
||||
{
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Tests if a string is a palindrome.
|
||||
.DESCRIPTION
|
||||
Tests if a string is a true palindrome or, optionally, an inexact palindrome.
|
||||
.EXAMPLE
|
||||
Test-Palindrome -Text "racecar"
|
||||
.EXAMPLE
|
||||
Test-Palindrome -Text '"Deliver desserts," demanded Nemesis, "emended, named, stressed, reviled."' -Inexact
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
[OutputType([bool])]
|
||||
Param
|
||||
(
|
||||
# The string to test for palindrominity.
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]
|
||||
$Text,
|
||||
|
||||
# When specified, detects an inexact palindrome.
|
||||
[switch]
|
||||
$Inexact
|
||||
)
|
||||
|
||||
if ($Inexact)
|
||||
{
|
||||
# Strip all punctuation and spaces
|
||||
$Text = [Regex]::Replace("$Text($7&","[^1-9a-zA-Z]","")
|
||||
}
|
||||
|
||||
$Text -match "^(?'char'[a-z])+[a-z]?(?:\k'char'(?'-char'))+(?(char)(?!))$"
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
Test-Palindrome -Text 'radar'
|
||||
|
|
@ -0,0 +1 @@
|
|||
Test-Palindrome -Text "In girum imus nocte et consumimur igni."
|
||||
|
|
@ -0,0 +1 @@
|
|||
Test-Palindrome -Text "In girum imus nocte et consumimur igni." -Inexact
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
Function Test-Palindrome {
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
[Parameter(ValueFromPipeline)]
|
||||
[string[]]$Text
|
||||
)
|
||||
|
||||
process {
|
||||
:stringLoop foreach ($T in $Text)
|
||||
{
|
||||
# Normalize Unicode combining characters,
|
||||
# so character á compares the same as (a+combining accent)
|
||||
$T = $T.Normalize([Text.NormalizationForm]::FormC)
|
||||
|
||||
# Remove anything from outside the Unicode category
|
||||
# "Letter from any language"
|
||||
$T = $T -replace '\P{L}', ''
|
||||
|
||||
# Walk from each end of the string inwards,
|
||||
# comparing a char at a time.
|
||||
# Avoids string copy / reverse overheads.
|
||||
$Left, $Right = 0, [math]::Max(0, ($T.Length - 1))
|
||||
while ($Left -lt $Right)
|
||||
{
|
||||
if ($T[$Left] -ne $T[$Right])
|
||||
{
|
||||
# return early if string is not a palindrome
|
||||
[PSCustomObject]@{
|
||||
Text = $T
|
||||
IsPalindrome = $False
|
||||
}
|
||||
continue stringLoop
|
||||
}
|
||||
else
|
||||
{
|
||||
$Left++
|
||||
$Right--
|
||||
}
|
||||
}
|
||||
|
||||
# made it to here, then string is a palindrome
|
||||
[PSCustomObject]@{
|
||||
Text = $T
|
||||
IsPalindrome = $True
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
'ánu-ná', 'nowt' | Test-Palindrome
|
||||
Loading…
Add table
Add a link
Reference in a new issue