Scripting Games: Advanced PowerShell — Event 1

Итак начинаю публиковать свои решения задачек с Scripting Games. Поздновато, но лучше чем через месяц🙂

Текст не точно соответствует отправленному — я буду добавлять комментарии, и возможно какие то косметические изменения. Например по возможности разносить длинные конвейеры на несколько строк (просто добавляя переносов), или вместо псевдонимов писать полные команды.

Итак, первая задачка🙂

Event 1- Could I Get Your Phone Number?

SG1-PhoneNumber.ps1
# Функция для вычисления номера соответствующего слову. function WordToNumber ([string]$Word) { # Блок switch заключен в $() для того чтобы к его результатам (массиву # символов сразу применить оператор -join. $( # Ключ -regex указывает что следует применять сравнение по регулярным # выражениям. В () помещается слово ($Word) преобразованное в массив # символов ([char[]]). Switch отработает для каждого символа отдельно. switch -regex ([char[]]$Word) { # При совпадении символа с одним из регулярных выражений # возвращается соответствующее число. " " {1} "[abc]" {2} "[def]" {3} "[ghi]" {4} "[jkl]" {5} "[mno]" {6} "[pqrs]" {7} "[tuv]" {8} "[wxyz]" {9} "+" {0} } # Оператор -join (PowerShell v2.0) объединяет возвращенный массив символов в # одну строку. В качестве второго аргумента указывается разделитель. ) -join "" } # Запрашиваем телефонный номер и помещаем его в переменную $Number $Number = Read-Host "Please enter a phone number" # Получаем все строки файла wordlist.txt, отбираем только те длинна которых # равна 7, и результат помещаем в переменную $Words $Words = Get-Content "C:scriptswordlist.txt" | where {$_.length -eq 7} # Отбираем только те слова из списка, которые при преобразовании в номер с # помощью функции WordToNumber равны переменной $Number. В случае если таких # будет несколько Select-Object -First 1 оставит только одно первое совпадение. $Words | Where-Object {(WordToNumber $_) -eq $Number} | Select-Object -First 1

Не самый лучший в плане производительности, но с данным списком слов за пару секунд справился🙂

Еще несколько интересных вариантов — MoW, Per Østergaard, Gaurhoth. И пара «официальных»🙂 От Scripting Guys и Richard Siddaway.

 

PS: В продолжение этого поста, еще одно решение для тасования массива — от Bruno Gomes.

function Out-Random { $r = New-Object random $input | sort {$r.next()} } 1..10 | Out-Random

IMHO это самый красивый вариант🙂

комментариев 8 to “Scripting Games: Advanced PowerShell — Event 1”

  1. Mc'key Says:

    А как насчет того что буквы Q и Z не учитываються?

  2. Xaegr Says:

    2 Mc’key:
    Я слишком поздно заметил эту тонкость, а таблицу строил по своему мобильнику еще до обьявления заданий😉 (краткие описания были доступны чуть раньше, и о содержимом этого эвента можно было догадаться🙂 )
    Но засчитали (тем более что результат то не отличается🙂 )

  3. komatozo Says:

    в Games News про QZ написали. =)

  4. Xaegr Says:

    2 komatozo: Угу🙂 Я после новостей только и обратил на это внимание🙂

  5. Mc'key Says:

    В «красивом варианте» перемещивания разве скобки после next не нужны?

  6. Xaegr Says:

    2 Mc’key: Нужны, точно🙂 Сча поправлю🙂

  7. /\/\o\/\/ Says:

    I made a copy/paste mistake on next -> next() corrected it on my blog also.

    Greetings /\/\o\/\/

  8. Xaegr Says:

    2 /\/\o\/\/: Yes🙂 I’m copy/pasted it from your blog🙂


Обсуждение закрыто.

%d такие блоггеры, как: