Skip to content

Commit a663121

Browse files
committed
Kotlin
1 parent eb1eb5b commit a663121

4 files changed

Lines changed: 67 additions & 0 deletions

File tree

.travis.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ language: crystal
33
before_install:
44
- sudo apt-get -qq update
55
- sudo apt-get install -y ruby default-jdk haskell-platform python3
6+
- curl -s "https://get.sdkman.io" | bash
7+
- source "$HOME/.sdkman/bin/sdkman-init.sh"
8+
- sdk install kotlin
69

710
install: make clean build
811

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ build:
1515
g++ -O2 main.cpp -o $(BIN_DIR)/cpp
1616
javac -d $(BIN_DIR) Main.java
1717
ghc -O2 main.hs -outputdir=$(BUILD_DIR) -o $(BIN_DIR)/haskell
18+
kotlinc main.kt -include-runtime -d $(BIN_DIR)/kotlin.jar
1819

1920
test:
2021
mkdir $(TMP_DIR)
@@ -32,4 +33,6 @@ test:
3233
@cmp $(TMP_DIR)/crystal.out $(TMP_DIR)/haskell.out || (echo "Failed: Haskell" && exit 1)
3334
python3 main.py < $(TMP_DIR)/test_data.in > $(TMP_DIR)/python3.out
3435
@cmp $(TMP_DIR)/crystal.out $(TMP_DIR)/python3.out || (echo "Failed: Python3" && exit 1)
36+
java -jar $(BIN_DIR)/kotlin.jar < $(TMP_DIR)/test_data.in > $(TMP_DIR)/kotlin.out
37+
@cmp $(TMP_DIR)/crystal.out $(TMP_DIR)/kotlin.out || (echo "Failed: Kotlin" && exit 1)
3538
@echo "Passed"

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,4 @@ Your output should consist of a single line for each test case containing n numb
8080
- [scps940707](https://github.com/scps940707) YyWang - Java
8181
- [sifmelcara](https://github.com/sifmelcara) mingchuan - Haskell
8282
- [chuanchan1116](https://github.com/chuanchan1116) William Tsai - Python 3
83+
- [david50407](https://github.com/david50407) David Kuo - Kotlin

main.kt

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import java.util.Scanner
2+
3+
fun main(args: Array<String>) {
4+
val reader = Scanner(System.`in`)
5+
6+
while (true) {
7+
val n: Int = reader.nextInt()
8+
if (n == 0) break
9+
10+
var ranks = IntArray(n)
11+
var points = ArrayList<Point>()
12+
repeat(n) { i ->
13+
points.add(Point(i, reader.nextInt(), reader.nextInt()))
14+
}
15+
16+
points.sort()
17+
18+
findRank(ranks, points)
19+
20+
println(ranks.joinToString(separator = " "))
21+
}
22+
23+
reader.close()
24+
}
25+
26+
fun findRank(ranks: IntArray, points: List<Point>) : List<Point> {
27+
if (points.size <= 1) return points
28+
29+
val leftPoints = findRank(ranks, points.subList(0, points.size / 2))
30+
val rightPoints = findRank(ranks, points.subList(points.size / 2, points.size))
31+
var resultPoints = ArrayList<Point>()
32+
33+
var l: Int = 0
34+
var r: Int = 0
35+
while (true) {
36+
if (leftPoints[l].y <= rightPoints[r].y) {
37+
resultPoints.add(leftPoints[l++])
38+
if (l == leftPoints.size) {
39+
rightPoints.listIterator(r).forEach {
40+
ranks[it.i] += l
41+
resultPoints.add(it)
42+
}
43+
break
44+
}
45+
} else {
46+
resultPoints.add(rightPoints[r])
47+
ranks[rightPoints[r++].i] += l
48+
if (r == rightPoints.size) {
49+
resultPoints.addAll(leftPoints.subList(l, leftPoints.size))
50+
break
51+
}
52+
}
53+
}
54+
55+
return resultPoints
56+
}
57+
58+
data class Point(val i: Int, val x: Int = 0, val y: Int = 0) : Comparable<Point> {
59+
override fun compareTo(other: Point) : Int = if (this.x == other.x) this.y.compareTo(other.y) else this.x.compareTo(other.x)
60+
}

0 commit comments

Comments
 (0)