hamkaran system
Status
📜📞🔧❌
Go Developer
Interview Process
flowchart LR sr(Send Resume) --> hr(HR Call) --> ti("Technical Interview (live code)") --rejected--x hri(HR Interview) -.-> o(Offer)
Apply Way
Jobinja
Interview Date
- Sent Resume
2025/07/21 - HR Call
2025/07/28 - Technical Interview
2025/08/02 - Rejection Email
2025/08/04
Interview Duration
- Technical Interview
1 hour & 30 minutes
Interview Platform
Google Meet
Technical Interview
- Tell us about yourself.
Live code
رشته ای از پرانتز باز و پرانتز بسته را در نظر بگیرید. در این رشتهها هر پرانتز باز با یک پرانتز بسته جفت می باشد. مانند:
(())
()()
(())()
ارزیابی هر رشتهای از پرانتز باز و بسته را با قواعد زیر تعریف می کنیم:
۱. اگر رشته فقط و فقط شامل () باشد آنگاه مقدار ارزیابی آن معادل ۱ خواهد بود.
۲. فرض کنید که A , B خود رشته ایی از پرانتز باز و بسته باشد آنگاه مقدار ارزیابی رشته ایی از اتصال آنها در کنار هم معادل مجموع ارزیابی هر دوی آنها خواهد بود. به عنوان مثال:
A = () => Eval(A) = 1
B = () => Eval(B) = 1
AB = ()() => Eval(AB) = Eval(A)+Eval(B) = 1+ 1 = 2
۳. فرض کنید A رشته ای از پرانتز باز و پرانتز بسته باشد آنگاه مقدار رشتهی (A) برابر است با 2 به توان مقدار ارزیابی A. به عنوان مثال:
A = ()()() => Eval(A) = 3
B = (A) => Eval(B) = 2 ^ Eval(A) = 2 ^ 3 = 8
سوال: تابعی بنویسید که به عنوان ورودی رشته ایی از پرانتز باز و پرانتز بسته دریافت می کند و به عنوان خروجی مقدار ارزیابی آن را بر می گرداند.
مثال:
() => 1
()() => 2
(()) => 2
(()()) => 4
()(())() =>4
این سوال رو نتونستم حل کنم.
Answer (GPT):
Also in playground.
package main
import (
"fmt"
"log"
"math"
)
// Eval computes the value of a balanced parentheses string based on rules:
// 1. "()" evaluates to 1
// 2. Concatenation AB evaluates to Eval(A) + Eval(B)
// 3. Wrapping (A) evaluates to 2^Eval(A)
func Eval(s string) int {
// stack of ints; use -1 as marker for '('
stack := []int{}
for _, ch := range s {
switch ch {
case '(':
// push marker
stack = append(stack, -1)
case ')':
// check top of stack
top := stack[len(stack)-1]
if top == -1 {
// it's "()": pop marker and push 1
stack = stack[:len(stack)-1]
stack = append(stack, 1)
} else {
// sum all values until marker
sum := 0
for len(stack) > 0 && stack[len(stack)-1] != -1 {
sum += stack[len(stack)-1]
stack = stack[:len(stack)-1]
}
// pop the marker
if len(stack) == 0 {
log.Fatal("invalid parentheses string")
}
stack = stack[:len(stack)-1]
// compute 2^sum and push
val := int(math.Pow(2, float64(sum)))
stack = append(stack, val)
}
}
}
// final result is sum of stack
result := 0
for _, v := range stack {
result += v
}
return result
}
func main() {
tests := []string{"()", "()()", "(())", "(()())", "()(())()"}
for _, t := range tests {
fmt.Printf("%s => %d\n", t, Eval(t))
}
}
Score
4/10
مثل دفعه قبل (که چند سال پیش بود) حال نکردم با داستان. اسنپ اینطوری نیست سوالاش (که اگه شرکت خوب در نظر بگیریمش) ادای تک دارن، اما در واقعیت سنتی، کارمندی، دست چندم و مناطق محروم استایل. طبق معمول صحبتی در مورد تجربیات نبود و در طول مصاحبه سوال میکردم یا راهنمایی میخواستم، کابل رو میگرفتن. نه من خوب بودم نه اونا.