Problem:
Score : 300 points

Problem Statement

You are given three integers A, B and C. Find the minimum number of operations required to make A, B and C all equal by repeatedly performing the following two kinds of operations in any order:

Choose two among A, B and C, then increase both by 1.

Choose one among A, B and C, then increase it by 2.

It can be proved that we can always make A, B and C all equal by repeatedly performing these operations.

Constraints

0 \leq A,B,C \leq 50

All values in input are integers.

Input

Input is given from Standard Input in the following format:

A B C

Output

Print the minimum number of operations required to make A, B and C all equal.

Sample Input 1

2 5 4

Sample Output 1

2

We can make A, B and C all equal by the following operations:

Increase A and C by 1. Now, A, B, C are 3, 5, 5, respectively.

Increase A by 2. Now, A, B, C are 5, 5, 5, respectively.

Sample Input 2

2 6 3

Sample Output 2

5

Sample Input 3

31 41 5

Sample Output 3

23

Solution in Go (1.6) (judge verdict: Accepted)

package main

import "fmt"

func getInput() (int, int, int) {
	a, b, c := 0, 0, 0
	fmt.Scan(&a, &b, &c)
	return a, b, c
}

func sort(c []int) []int {
	if c[0] > c[1] {
		c[0], c[1] = c[1], c[0]
	}
	if c[1] > c[2] {
		c[1], c[2] = c[2], c[1]
	}
	if c[0] > c[1] {
		c[0], c[1] = c[1], c[0]
	}
	return c
}

func C() {
	c := []int{0, 0, 0}
	c[0], c[1], c[2] = getInput()
	c = sort(c)

	diff1 := c[2] - c[1]
	diff2 := c[1] - c[0]

	if diff1%2 == 0 && diff2%2 == 0 {
		count := (diff1*2 + diff2) / 2
		fmt.Println(count)
		return
	}

	if diff1%2 == 1 && diff2%2 == 0 {
		count := diff1 + diff2/2
		fmt.Println(count)
		return
	}

	if diff1%2 == 0 && diff2%2 == 1 {
		count := diff1/2 + (c[2]-c[0]+1)/2 + 1
		fmt.Println(count)
		return
	}

	if diff1%2 == 1 && diff2%2 == 1 {
		count := (diff1+1)/2 + (diff1+diff2)/2 + 1
		fmt.Println(count)
		return
	}
}

func main() {
  C()
}