GoDasturchi
Short Code Generation

Short Code Generation

Qisqa kod yaratish

Avtomobil raqamlari nima uchun harflar VA raqamlarni birga ishlatadi? Chunki faqat raqamlar bilan ko'p noyob kombinatsiya hosil qilish uchun juda uzun raqam kerak bo'lardi, harflar qo'shilsa esa QISQAROQ raqam bilan yanada ko'proq noyob kombinatsiya olish mumkin. Qisqa havola kodlarini yaratishda ham xuddi shu g'oya — base62 kodlash (0-9, a-z, A-Z — jami 62 ta belgi) ishlatiladi.

example.go
package main

import "fmt"

const base62Chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

// encodeBase62 — sonni base62 satrga aylantiradi (masalan 12345 -> "3D7")
func encodeBase62(n int64) string {
	if n == 0 {
		return string(base62Chars[0])
	}
	var result []byte
	base := int64(len(base62Chars))
	for n > 0 {
		remainder := n % base
		result = append([]byte{base62Chars[remainder]}, result...)
		n /= base
	}
	return string(result)
}

func main() {
	fmt.Println(encodeBase62(0))
	fmt.Println(encodeBase62(61))
	fmt.Println(encodeBase62(12345))
}

Bu algoritm — "Number Systems & Bitwise" darsida ko'rgan pozitsion sanoq sistemasi g'oyasining umumiyroq ko'rinishi (o'nlik sistema 10 ta, ikkilik 2 ta belgidan foydalansa, bu yerda 62 ta belgi ishlatiladi): son 62'ga bo'linib, QOLDIQ har safar mos belgiga aylantiriladi, natija esa TESKARI tartibda (oxiridan boshigacha) qurib boriladi — shuning uchun append([]byte{...}, result...) orqali har safar belgi RO'YXAT BOSHIGA qo'shiladi.

Bizning URL Shortener'da har bir yangi havola uchun bitta O'SIB BORUVCHI hisoblagich (counter) ishlatiladi (1, 2, 3, ...), va shu son encodeBase62 orqali qisqa kodga aylantiriladi. Bu yondashuv — tasodifiy kod yaratishga (math/rand) qaraganda ODDIYROQ va TAKRORLANMAYDIGAN kodlarni AVTOMATIK kafolatlaydi (har bir son faqat bitta marta ishlatiladi), garchi production tizimlarda ko'pincha xavfsizlik uchun tasodifiylik ham qo'shilsa-da.

>_ Exercise

Hisoblagich asosida ketma-ket kod yaratuvchi generator yozing.

  • CodeGenerator struct'ini yozing: counter int64 maydoni bilan
  • Next() string metodini yozing: g.counter++ qiling, so'ng encodeBase62(g.counter) natijasini qaytaring
  • generator yaratib, Next()ni 3 marta chaqiring va har birining natijasini chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Base62 kodlash — o'sib boruvchi sonni qisqa, takrorlanmaydigan matn kodiga aylantirish orqali, uzun raqamlar o'rniga ixcham, o'qish oson havola kodlari yaratadi.

NEXT UP

Shorten Endpoint

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Short Code Generation

Qisqa kod yaratish

Avtomobil raqamlari nima uchun harflar VA raqamlarni birga ishlatadi? Chunki faqat raqamlar bilan ko'p noyob kombinatsiya hosil qilish uchun juda uzun raqam kerak bo'lardi, harflar qo'shilsa esa QISQAROQ raqam bilan yanada ko'proq noyob kombinatsiya olish mumkin. Qisqa havola kodlarini yaratishda ham xuddi shu g'oya — base62 kodlash (0-9, a-z, A-Z — jami 62 ta belgi) ishlatiladi.

example.go
package main

import "fmt"

const base62Chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

// encodeBase62 — sonni base62 satrga aylantiradi (masalan 12345 -> "3D7")
func encodeBase62(n int64) string {
	if n == 0 {
		return string(base62Chars[0])
	}
	var result []byte
	base := int64(len(base62Chars))
	for n > 0 {
		remainder := n % base
		result = append([]byte{base62Chars[remainder]}, result...)
		n /= base
	}
	return string(result)
}

func main() {
	fmt.Println(encodeBase62(0))
	fmt.Println(encodeBase62(61))
	fmt.Println(encodeBase62(12345))
}

Bu algoritm — "Number Systems & Bitwise" darsida ko'rgan pozitsion sanoq sistemasi g'oyasining umumiyroq ko'rinishi (o'nlik sistema 10 ta, ikkilik 2 ta belgidan foydalansa, bu yerda 62 ta belgi ishlatiladi): son 62'ga bo'linib, QOLDIQ har safar mos belgiga aylantiriladi, natija esa TESKARI tartibda (oxiridan boshigacha) qurib boriladi — shuning uchun append([]byte{...}, result...) orqali har safar belgi RO'YXAT BOSHIGA qo'shiladi.

Bizning URL Shortener'da har bir yangi havola uchun bitta O'SIB BORUVCHI hisoblagich (counter) ishlatiladi (1, 2, 3, ...), va shu son encodeBase62 orqali qisqa kodga aylantiriladi. Bu yondashuv — tasodifiy kod yaratishga (math/rand) qaraganda ODDIYROQ va TAKRORLANMAYDIGAN kodlarni AVTOMATIK kafolatlaydi (har bir son faqat bitta marta ishlatiladi), garchi production tizimlarda ko'pincha xavfsizlik uchun tasodifiylik ham qo'shilsa-da.

>_ Exercise

Hisoblagich asosida ketma-ket kod yaratuvchi generator yozing.

  • CodeGenerator struct'ini yozing: counter int64 maydoni bilan
  • Next() string metodini yozing: g.counter++ qiling, so'ng encodeBase62(g.counter) natijasini qaytaring
  • generator yaratib, Next()ni 3 marta chaqiring va har birining natijasini chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Base62 kodlash — o'sib boruvchi sonni qisqa, takrorlanmaydigan matn kodiga aylantirish orqali, uzun raqamlar o'rniga ixcham, o'qish oson havola kodlari yaratadi.

NEXT UP

Shorten Endpoint