Kotlin script: main function does not get called locally, unlike in online judge

311 views Asked by At

I am trying to participate in online Codeforces contests using Kotlin.

My understanding is I should use Kotlin script if my code is contained within a single file.

If I run the following file locally (version 1.6.10):

kotlin just_main.main.kts
// just_main.main.kts
fun main() {
    println("Hello World")
}

Nothing happens. I need to add an explicit call for it to actually execute main:

// top_level_call.main.kts
fun main() {
    println("Hello World")
}

main()

So far, so normal. The problem occurs when I try to submit my solution to the Codeforces online judge. The judge expects no top-level code and runs the main function instead. So just_main runs fine, but top_level_call produces a compilation error:

Can't compile file:
program.kt:43:1: error: expecting a top level declaration

main()

^

This leads to the awkward situation of me having to add the main() call when I want to try my solution locally, but having to remove it every time I upload an attempt.

Is there a way to have my local Kotlin behave the same as the online judge, meaning implicitly running any main functions (meaning just_main would produce output)?

1

There are 1 answers

0
xjcl On BEST ANSWER

I haven't found a way to do this with Kotlin script files, but you can also use normal .kt files without having any classes in the file (my understanding is that Kotlin magically turns them into Java class bytecode/files):

kotlinc a.kt && kotlin AKt < a.in

This "runs" a.kt with standard input from a.in.

(And yes I only found this after I already wrote the question)