forked from charlesfranciscodev/codingame
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cgx-formatter.kt
86 lines (78 loc) · 1.59 KB
/
cgx-formatter.kt
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import java.util.Scanner
const val BASE_INDENT = 4
class CGXFormatter {
var insideString = false
var totalIndent = 0
var newLine = true
fun readLines() {
val input = Scanner(System.`in`)
val n = input.nextInt()
if (input.hasNextLine()) {
input.nextLine()
}
for (i in 0 until n) {
val line = input.nextLine()
for (character in line) {
readChar(character)
}
}
}
fun readChar(character: Char) {
if (insideString) {
if (character == '\'') {
insideString = false
}
printChar(character)
} else {
readCharOutsideString(character)
}
}
fun readCharOutsideString(character: Char) {
if (character == ' ' || character == '\t') {
return
}
when (character) {
'\'' -> {
insideString = true
printChar(character)
}
'(' -> {
if (!newLine) {
printNewLine()
}
printChar(character)
printNewLine()
totalIndent += BASE_INDENT
}
')' -> {
totalIndent -= BASE_INDENT
if (!newLine) {
printNewLine()
}
printChar(character)
}
';' -> {
printChar(character)
printNewLine()
}
else -> printChar(character)
}
}
fun printChar(character: Char) {
if (newLine) {
for (i in 0 until totalIndent) {
print(' ')
}
newLine = false
}
print(character)
}
fun printNewLine() {
println()
newLine = true
}
}
fun main(args : Array<String>) {
val formatter = CGXFormatter()
formatter.readLines()
}