PowerShell/docs/list-anagrams.md
2024-01-03 12:11:22 +01:00

3.1 KiB

list-anagrams.ps1

This PowerShell script lists all anagrams of the given word.

Parameters

PS> ./list-anagrams.ps1 [[-Word] <String>] [[-Columns] <Int32>] [<CommonParameters>]

-Word <String>
    Specifies the word to use
    
    Required?                    false
    Position?                    1
    Default value                
    Accept pipeline input?       false
    Accept wildcard characters?  false

-Columns <Int32>
    Specifies the number of columns
    
    Required?                    false
    Position?                    2
    Default value                8
    Accept pipeline input?       false
    Accept wildcard characters?  false

[<CommonParameters>]
    This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, 
    WarningVariable, OutBuffer, PipelineVariable, and OutVariable.

Example

PS> ./list-anagrams Baby

Notes

Author: Markus Fleschutz | License: CC0

https://github.com/fleschutz/PowerShell

Script Content

<#
.SYNOPSIS
	Lists all anagrams of the given word
.DESCRIPTION
	This PowerShell script lists all anagrams of the given word.
.PARAMETER Word
	Specifies the word to use
.PARAMETER Columns
	Specifies the number of columns
.EXAMPLE
	PS> ./list-anagrams Baby
.LINK
	https://github.com/fleschutz/PowerShell
.NOTES
	Author: Markus Fleschutz | License: CC0
#>

param([string]$Word = "", [int]$Columns = 8)

function GetPermutations {
    [cmdletbinding()]
    Param(
        [parameter(ValueFromPipeline=$True)]
        [string]$String = 'the'
    )
    Begin {
        Function NewAnagram { Param([int]$NewSize)              
            if ($NewSize -eq 1) {
                return
            }
            for ($i=0;$i -lt $NewSize; $i++) { 
                NewAnagram  -NewSize ($NewSize - 1)
                if ($NewSize -eq 2) {
                    New-Object PSObject -Property @{
                        Permutation = $stringBuilder.ToString()                  
                    }
                }
                MoveLeft -NewSize $NewSize
            }
        }
        Function MoveLeft { Param([int]$NewSize)        
            $z = 0
            $position = ($Size - $NewSize)
            [char]$temp = $stringBuilder[$position]           
            for ($z=($position+1);$z -lt $Size; $z++) {
                $stringBuilder[($z-1)] = $stringBuilder[$z]               
            }
            $stringBuilder[($z-1)] = $temp
        }
    }
    Process {
        $size = $String.length
        $stringBuilder = New-Object System.Text.StringBuilder -ArgumentList $String
        NewAnagram -NewSize $Size
    }
    End {}
}

try {
	if ($Word -eq "" ) {
		$Word = read-host "Enter word"
		$Columns = read-host "Enter number of columns"
	}
	GetPermutations -String $Word | Format-Wide -Column $Columns
	exit 0 # success
} catch {
	"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
	exit 1
}

(generated by convert-ps2md.ps1 using the comment-based help of list-anagrams.ps1 as of 01/03/2024 12:10:47)