Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

مثل دفعه قبل (که چند سال پیش بود) حال نکردم با داستان. اسنپ اینطوری نیست سوالاش (که اگه شرکت خوب در نظر بگیریمش) ادای تک دارن، اما در واقعیت سنتی، کارمندی، دست چندم و مناطق محروم استایل. طبق معمول صحبتی در مورد تجربیات نبود و در طول مصاحبه سوال می‌کردم یا راهنمایی می‌خواستم، کابل رو می‌گرفتن. نه من خوب بودم نه اونا.