PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Ответить
 • Просмотры: 43
Аватара пользователя
aVitaliy

PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Сообщение aVitaliy »

Добрый день.

Помогите доработать скрипт.



Мне нужно было сгенерировать все варианты почтового адреса v.i.t.a.l.i.k.an.tr.ak.xi.mo.v@yandex.kz меняя в адресе местами точки и тире с помощью скрипта PowerShell и вывести результат в отдельный файл. Но в нем во первых в самом начале после "v" удаляется "." и самом конце удаляется буква "v".

То есть выводит скрип так:

vi.t.a.l-i-k.an.tr.ak-xi-mo.@yandex.kz

vi.t.a.l-i-k.an.tr.ak-xi-mo-@yandex.kz





Сам скрипт

[spoiler]Код:
[/spoiler]

Код: Выделить всё

# Исходный почтовый адрес
$email = "v.i.t.a.l.i.k.an.tr.ak.xi.mo.v"
$parts = $email -split '\.|-' # Разделяем адрес на части, используя точку и тире как разделители
# Функция для генерации всех комбинаций точек и тире
function Get-Combinations {
    param (
        [int]$index,
        [string]$currentString,
        [string[]]$parts
    )
    if ($index -eq $parts.Length - 1) {
        return $currentString # Возвращаем строку, когда достигли конца
    } else {
        $result = @()
        $result += Get-Combinations -index ($index + 1) -currentString ($currentString + $parts[$index] + ".") -parts $parts # Добавляем точку
        $result += Get-Combinations -index ($index + 1) -currentString ($currentString + $parts[$index] + "-") -parts $parts # Добавляем тире
        return $result
    }
}
# Запускаем генерацию комбинаций, начиная со второго элемента массива parts
$combinations = Get-Combinations -index 1 -currentString $parts[0] -parts $parts
# Добавляем "@yandex.kz" к каждой комбинации и выводим в файл
$combinations | ForEach-Object { $_ + "@yandex.kz" } | Out-File "email_combinations.txt"
Write-Host "Варианты почтовых адресов сохранены в файл email_combinations.txt"
Аватара пользователя
NickM

Re: PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Сообщение NickM »

Цитата aVitaliy:





Код:

Код: Выделить всё

  return $currentString # Возвращаем строку, когда достигли конца

PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка






Код:

Код: Выделить всё

return $currentString + $parts[$parts.Length-1] # Возвращаем строку, когда достигли конца

А, ещё же ., сейчас найдём и её, но скорее всего сам алгоритм не оптимальный, но сходу рабочий.



Код:

Код: Выделить всё

# Запускаем генерацию комбинаций, начиная со второго элемента массива parts
$combinations = Get-Combinations -index 0 -currentString "" -parts $parts
Аватара пользователя
aVitaliy

Re: PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Сообщение aVitaliy »

NickM, сработало спасибо.

Еще не понятно почему при выводе в файл удаляется точка после буквы "v"

Вместо

v.i.t.a.l.i.k.an.tr.ak.xi.mo.v@yandex.kz

Выводит слитно без точки после 2-й буквы

vi.t.a.l.i.k.an.tr.ak.xi.mo.v@yandex.kz
Аватара пользователя
aVitaliy

Re: PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Сообщение aVitaliy »

Цитата aVitaliy:



Еще не понятно почему при выводе в файл удаляется точка после буквы "v"
PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка




Добавил в ответ выше.
Аватара пользователя
aVitaliy

Re: PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Сообщение aVitaliy »

NickM, Да только увидел, когда отправил.

Все работает теперь отлично.

Большое спасибо за помощь!
Аватара пользователя
DJ Mogarych

Re: PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Сообщение DJ Mogarych »

Код:

Код: Выделить всё

0..4095 |% {
    $i = ([Convert]::ToString($_,2).PadLeft(12,'0') -replace '0','-' -replace '1','.' ).ToCharArray()
    "v"+$i[0]+"i"+$i[1]+"t"+$i[2]+"a"+$i[3]+"l"+$i[4]+"i"+$i[5]+"k"+$i[6]+"an"+$i[7]+"tr"+$i[8]+"ak"+$i[9]+"xi"+$i[10]+"mo"+$i[11]+"v@yandex.kz"
} > C:\temp\email_combinations.txt
Аватара пользователя
Sham

Re: PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Сообщение Sham »

Идея с представлением набора символов в виде числа с соответствующим основанием и разрядностью неплоха. Максимальное число будет и количеством вариантов. В этом случае основание будет 2 (два символа), а разрядность = количество позиций этих символов в строке. Имеем 111111111111(двоичное) == 4095(десятичное). Но это всё можно вычислить и сделать "покрасивше".

Код:

Код: Выделить всё

$user = "v.i.t.a.l.i.k.an.tr.ak.xi.mo.v"
$domain = "@yandex.kz"
$chars = '.', '-'
$regexp = '[{0}]' -f ([regex]::Escape($chars -join ''))
$parts = $user -split $regexp
# v{0}i{1}t{2}a{3}l{4}i{5}k{6}an{7}tr{8}ak{9}xi{10}mo{11}v
$format_str = [regex]::Replace($user, $regexp, {"{$([int]($global:c++))}"})
$max_variants = [Math]::Pow($chars.length, $parts.length - 1) - 1
0..$max_variants | % {
  $num = [Convert]::ToString($_, $chars.length).PadLeft($parts.length - 1, '0')
  0..($chars.length - 1) | % { $num = $num -replace "$_", $chars[$_] }
  ($format_str -f @($num.ToCharArray())) + $domain
} > 'email_combinations.txt'
Аватара пользователя
YuS_2

Re: PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Сообщение YuS_2 »

Ну и ещё вариант:

Порылся в загашниках, нашел функцию перестановок символов...

permutationwithrepetition.ps1



Код:

Код: Выделить всё

[cmdletbinding()]
Param (
	[string]$arr = '.-',
	[int]$count = 12
)
function perm ($values,$size,$offset){
	$count = $values.length
	$array = new-object object[] $size
	for ($i = 0; $i -lt $size; $i++) {
		$selector = [math]::truncate($offset / [math]::pow($count,$i)) % $count
		$array[$i] = $values[$selector]
	}
	return $array
}
function permutations ($values, $size) {
	$Ar = [math]::pow($values.length, $size)
	$a = new-object object[] $Ar
	for ($i = 0; $i -lt $Ar; $i++) {
		$a[$i] = perm $values $size $i
	}
	return $a
}
$charr = $arr.tochararray()
$out = permutations $charr $count
foreach ($item in $out){$item -join ' '}
$out.count

- запуск скрипта без параметров выведет все варианты перестановок символов точка-тире на 12 знакомест и количество вариантов.

Адаптировать под задачу несложно, если что...
Ответить

Вернуться в «Скриптовые языки администрирования Windows»