Skip to content

Instantly share code, notes, and snippets.

@xcvd
Created April 15, 2012 12:03
Show Gist options
  • Save xcvd/2392352 to your computer and use it in GitHub Desktop.
Save xcvd/2392352 to your computer and use it in GitHub Desktop.
Google Code Jam 2012 Qualification
// ProblemA
new File('new.txt').withWriter { file ->
new File('orig.txt').withReader { reader ->
def lines = Integer.parseInt(reader.readLine())
for (int i = 1; i <= lines; i++)
file.writeLine("Case #" + i + ": " + translate(reader.readLine()))
}
}
String translate(String str) {
def alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' ']
def cipher = ['y', 'n', 'f', 'i', 'c', 'w', 'l', 'b', 'k', 'u', 'o', 'm',
'x', 's', 'e', 'v', 'z', 'p', 'd', 'r', 'j', 'g', 't', 'h', 'a', 'q', ' ']
def result = ""
for (char c : str)
result += alphabet[cipher.findIndexOf { l -> l == c }]
result
}
// ProblemB
new File('new.txt').withWriter { file ->
new File('orig.txt').withReader { reader ->
def lines = Integer.parseInt(reader.readLine())
for (int i = 1; i <= lines; i++)
file.writeLine("Case #" + i + ": " + compute(reader.readLine()))
}
}
String compute(String str) {
def numbers = str.split()
def n = Integer.parseInt(numbers[0])
def s = Integer.parseInt(numbers[1])
def p = Integer.parseInt(numbers[2])
def count = 0
for(int i = 0; i < n; i++) {
if(((Integer.parseInt(numbers[3 + i]) + 2) / 3) >= p)
count ++
else if(((Integer.parseInt(numbers[3 + i]) + 4) / 3) >= p && s > 0 && (Integer.parseInt(numbers[3 + i]) > 0)) {
count ++
s--
}
}
count.toString()
}
// ProblemC
new File('new.txt').withWriter { file ->
new File('orig.txt').withReader { reader ->
def lines = Integer.parseInt(reader.readLine())
for (int i = 1; i <= lines; i++)
file.writeLine("Case #" + i + ": " + compute(reader.readLine()))
}
}
String compute(String str) {
def numbers = str.split()
def a = Integer.parseInt(numbers[0])
def b = Integer.parseInt(numbers[1])
count = 0
for(int i = a; i <= b; i++) {
next = shiftLeft(i, 0)
for (int j = 1; next != i; j++){
if(next >= a && next <= b && i < next && sameDigits(next, i))
count++
next = shiftLeft(i, j)
}
}
count.toString()
}
Integer shiftLeft(Integer input, Integer digits) { Integer.parseInt(input.toString().substring(digits + 1) + input.toString()[0..digits]) }
Boolean sameDigits(Integer int1, Integer int2) { int1.toString().length() == int2.toString().length() }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment