استفاده از Golang در سایت کوئرا

سایت کوئرا یک سایت تقویت مهارت‌های برنامه‌نویسی بر اساس حل سوالات می‌باشد. در این سایت شما می‌بایست برنامه‌هایی بنویسید که بتوانند ساختار ورودی مشخص شده را دریافت و خروجی مناسب را تولید کنند. این سایت از زبان‌های برنامه‌نویسی مختلفی پشتیبانی می‌کند که یکی از آن‌ها زبان Go می‌باشد. این زبان شباهت زیادی به زبان C دارد.

برخی از این سوالات ورودی‌ها و خروجی‌ها بزرگی دارند تا برنامه‌ی شما را از نظر زمانی نیز مورد آزمایش قرار دهند. در یکی از این سوالات برنامه شما می‌بایست مجموعه‌ای اعداد را به صورت زیر دریافت کند:

5 s
1 2 3 4 5

خط اول نمایش دهنده‌ی تعداد اعداد و خط دوم اعداد می‌باشند. برای این منظور در زبان Go از روند زیر استفاده می‌کنیم:

var n int
fmt.Scanf(&quot%d&quot, &n)

a := make([]int, n)

for i := 0; i < n; i++ {
     fmt.Scanf(&quot%d&quot, &a[i])
}

اما در کمال ناباوری این کد زمانی که اندازه‌ی ورودی بزرگ می‌باشد خطای Runtime تولید می‌کند. برای حل این موضوع این کد را به شکل زیر تغییر می‌دهیم:

var n int
fmt.Scanf(&quot%d&quot, &n)

 a := make([]int, n)

reader := bufio.NewReader(os.Stdin)

aMembers, _ := reader.ReadString('\n')
 aMembers = strings.TrimSuffix(aMembers, &quot\n&quot)

aNumbers := strings.Split(aMembers, &quot &quot)

for i := 0; i < n; i++ {
    ne, _ := strconv.Atoi(aNumbers[i])
    a = append(a, ne)
}

به این ترتیب مساله حل می‌شود.