Quick actions

cmd+k|ctrl+k

Navigation

Languages

Problem 52

Snippet info

Language

Go

Visibility

public

Author

mrsimb

Created

2017-07-25T22:08:08Z

Updated

2017-07-26T09:44:13Z

package main

import (
  "fmt"
  "strings"
  "sort"
)

func sameDigits(a uint64, b uint64) bool {
  // просто печатаем число в строку и возвращает эту строку
  // %v это value
  aConverted := fmt.Sprintf("%v", a)
  bConverted := fmt.Sprintf("%v", b)

  // разделяем строку на куски (символы)
  aSplitted := strings.Split(aConverted, "")
  bSplitted := strings.Split(bConverted, "")

  // сортируем
  sort.Strings(aSplitted)
  sort.Strings(bSplitted)

  // соединяем в целую строку обратно
  aJoined := strings.Join(aSplitted, "")
  bJoined := strings.Join(bSplitted, "")

  // тупо сравниваем результат
  return aJoined == bJoined
}

func main() {
  limit := ^uint64(0)  // ^ это битовая операция отрицания. ^00000000 == 11111111, т.е. макс. число.

  limit = 142858 // хотя лучше лимит поменьше поставить))

  for number := uint64(1); number < limit; number += 1 {
    result := fmt.Sprintf("%v", number)

    for multiplier := uint64(6); multiplier >= 2; multiplier -= 1 {
      multipled := number * multiplier

      if !sameDigits(number, multipled) {
        break
      }

      result += fmt.Sprintf(" %v", multipled)

      if multiplier == 2 {
        fmt.Println(result)
      }
    }
  }
}
INFO