Информация об изменениях

Сообщение Re: кадровики совсем рехнулись от 21.11.2018 7:11

Изменено 21.11.2018 7:11 Somescout

Re: кадровики совсем рехнулись
Здравствуйте, CodeMonkey, Вы писали:

5 минут включая отладку (powershell, несколько многословно, без проверки на ошибки, но мне лень):

function ReversedPolish-Solver($expr) {
    $tokens = $expr -split '\s+'

    $stack = [System.Collections.Stack]::new()

    $tokens | % { 
        switch -Regex ($_) {
            '^-?[\d]+$' { $stack.Push($_) }
            '^\+$' { 
                    $b = $stack.Pop()
                    $a = $stack.Pop()
                    $stack.Push([float]$a + [float]$b)
                 }
            '^-$' { 
                    $b = $stack.Pop()
                    $a = $stack.Pop()
                    $stack.Push([float]$a - [float]$b)
                 }
            '^\*$' { 
                    $b = $stack.Pop()
                    $a = $stack.Pop()
                    $stack.Push([float]$a * [float]$b)
                 }
            '^/$' { 
                    $b = $stack.Pop()
                    $a = $stack.Pop()
                    $stack.Push([float]$a / [float]$b)
                 }
        }

    }

    return $stack.Pop()
}

ReversedPolish-Solver "1 1 + 2 3 * -"


PS. В примере вместо "-" стоит тире, будте внимательны.
Re: кадровики совсем рехнулись
Здравствуйте, CodeMonkey, Вы писали:

5 минут включая отладку (powershell, несколько многословно, без проверки на ошибки, но мне лень):

function ReversedPolish-Solver($expr) {
    $tokens = $expr -split '\s+'

    $stack = [System.Collections.Stack]::new()

    $tokens | % { 
        switch -Regex ($_) {
            '^-?[\d]+$' { $stack.Push($_) }
            '^\+$' { 
                    $b = $stack.Pop()
                    $a = $stack.Pop()
                    $stack.Push([float]$a + [float]$b)
                 }
            '^-$' { 
                    $b = $stack.Pop()
                    $a = $stack.Pop()
                    $stack.Push([float]$a - [float]$b)
                 }
            '^\*$' { 
                    $b = $stack.Pop()
                    $a = $stack.Pop()
                    $stack.Push([float]$a * [float]$b)
                 }
            '^/$' { 
                    $b = $stack.Pop()
                    $a = $stack.Pop()
                    $stack.Push([float]$a / [float]$b)
                 }
        }

    }

    return $stack.Pop()
}

ReversedPolish-Solver "1 1 + 2 3 * -"


PS. В примере ТС вместо "-" стоит тире, будте внимательны.