-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paths0858_mirror_reflection.go
More file actions
51 lines (42 loc) · 969 Bytes
/
s0858_mirror_reflection.go
File metadata and controls
51 lines (42 loc) · 969 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
https://leetcode.com/problems/mirror-reflection/
There is a special square room with mirrors on each of the four walls. Except
for the
southwest corner, there are receptors on each of the remaining corners,
numbered 0, 1, and 2.
The square room has walls of length p and a laser ray from the southwest corner
first meets
the east wall at a distance q from the 0th receptor.
Given the two integers p and q, return the number of the receptor that the ray
meets first.
The test cases are guaranteed so that the ray will meet a receptor eventually.
*/
//nolint:revive // it's ok
package solutions
func mirrorReflection(p, q int) int {
lcm := LCM(p, q)
h := lcm / p
w := lcm / q
if isOdd(h) {
if isOdd(w) {
return 1
}
return 2
}
return 0
}
func GCD(p, q int) int {
for q != 0 {
r := p % q
p = q
q = r
}
return p
}
func LCM(p, q int) int {
gcd := GCD(p, q)
return p * q / gcd
}
func isOdd(n int) bool {
return n%2 == 1
}