Advertisement
Derrrrol

Untitled

Feb 11th, 2024
1,098
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.43 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "os"
  7. )
  8.  
  9. func main() {
  10.     var in *bufio.Reader
  11.     var out *bufio.Writer
  12.  
  13.     in = bufio.NewReader(os.Stdin)
  14.     out = bufio.NewWriter(os.Stdout)
  15.  
  16.     defer out.Flush()
  17.     Solution(in, out)
  18. }
  19.  
  20. func Solution(in *bufio.Reader, out *bufio.Writer) {
  21.     slice_of_slices := make([][]string, 501)
  22.     var n int
  23.     fmt.Fscan(in, &n)
  24.  
  25.     for i := 0; i < n; i++ {
  26.         var login string
  27.         fmt.Fscan(in, &login)
  28.         sliceLogin := slice_of_slices[len(login)]
  29.         slice_of_slices[len(login)] = append(sliceLogin, login)
  30.     }
  31.  
  32.     var m int
  33.     fmt.Fscan(in, &m)
  34.  
  35.     for i := 0; i < m; i++ {
  36.         var login string
  37.         fmt.Fscan(in, &login)
  38.  
  39.         slice := slice_of_slices[len(login)]
  40.  
  41.         res := false
  42.         for _, v := range slice {
  43.             if areAlmostEqual(v, login) {
  44.                 res = true
  45.                 break
  46.             }
  47.         }
  48.         if res {
  49.             fmt.Fprintln(out, 1)
  50.         } else {
  51.             fmt.Fprintln(out, 0)
  52.         }
  53.     }
  54. }
  55. func areAlmostEqual(str1, str2 string) bool {
  56.     if str1 == str2 {
  57.         return true
  58.     }
  59.     v, f := hamming(str1, str2)
  60.     if v == 2 && f {
  61.         return true
  62.     }
  63.     return false
  64. }
  65.  
  66. func hamming(s1 string, s2 string) (int, bool) {
  67.     r1 := []rune(s1)
  68.     r2 := []rune(s2)
  69.     distance := 0
  70.     distanceUpdatedLast := false
  71.     swappable := false
  72.     for i, v := range r1 {
  73.         if r2[i] != v {
  74.             distance += 1
  75.             if distanceUpdatedLast {
  76.                 swappable = true
  77.             }
  78.             distanceUpdatedLast = true
  79.         } else {
  80.             distanceUpdatedLast = false
  81.         }
  82.     }
  83.     return distance, swappable
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement