tozangezan's diary

勝手にソースコードをコピペして利用しないでください。

Interview with Top-Level Competitive Programmers World-Wide

For Japanese readers: さすがにこれ全部和訳するのは大変すぎるのでこのままでゆるしてください。最近Google翻訳が大幅に改善しましたし。

This is the 20th article of Competitive Programming Advent Calendar 2016. I interviewed some coders from several countries. I asked about from how they practice problem solving to their daily life. Hope you enjoy it.

Introduction

Last month, the first world-wide programming contest in Japan*1, named "CODE FESTIVAL 2016". Also, I'm interested in how different competitive programmers in country A is from those in country B (where A != B). Besides, I can easily guess that it also depends on their age. So I gathered several top-level competitive programmers to ask these questions and write this article for sharing information among programmers worldwide.

However, this does not show the entire "competitive programming" world. You can know more about it by making friends and talking about programming contest life. I also would like to encourage programmers communicating with each other, no matter where they are from.

Interview Participants

tozangezan 🐺 (Japan)
Who planned this interview and wrote this blog. I like wolves.

polequoll 🍇 (South Korea)
I didn't know much about him until CODE FESTIVAL, but it turned out that I and he had won the same prize (3rd-8th awards) in the 2nd Samsung Collegiate Programming Contest.

dnk 🐝 (Viet Nam)
He's currently studying at Tokyo Institute of Technology in Japan, so I've met him several times before, (especially during the World Finals 2016; he was a team member from VNU University of Engineering in Viet Nam).

KAN 🐱 (Russia)
Perhaps very few coders don't know about him; He won 3rd place in IOI 2013, and still has very high Codeforces rating.

yutaka1999 (Japan)
He's still a high school student, even though he's already won three Gold Medals in IOI. I hope for him winning IOI on 2017, that is the last chance of IOI.

General Questions

Self introduction (user name, school, country, contest result, favorite problem genres, etc...)

tozangezan: I'm tozangezan from Japan, studying at the University of Tokyo. One of the most biggest achievement in programming contest is Silver medal in ICPC World Finals 2014. I like combinatorics problem, as well as implementation!

polequoll: Hello, I'm polequoll from Seoul National University in Korea. My favorite problem genre is data structures, as well as some tree problems. However, I'm not good at constructive algorithms and some optimal game problems.

dnk: I'm dnk from Vietnam, studying at Tokyo Institute of Technology. Maybe my biggest achievement is ACM ICPC Hanoi Regional 2015 champion with my team (from VNU University of Engineering). I like combinatoric and dynamic programming

KAN: Hi, I'm KAN from Russia, I study at the Nizhny Novgorod State University. I think the biggest achievements are two gold medals at IOI (2013 and 2014), and bronze medal at ACM ICPC Finals 2016

yutaka1999: I'm yutaka1999 from Japan. I'm a high school student and I like participating in contests like IOI.

When, and why did you start competitive programming?

tozangezan: As far as I know, my first contest experience was the preliminary round of national OI in 2008 (when I didn't even know how to read integers). I was in math club of my junior high school then, and I and my friends (including semiexp) started thanks to the elder student, who's a former IOI gold medalist.

polqeuoll: I started competitive programming quite early (from 13 years old), but actually the time I intensively focus on competitive programming was after high school graduation. For me, ACM-ICPC was the biggest momentum.
tozangezan: So early!

dnk: I officially started competitive programming when I was a high school first year student because I thought I can do programming and getting a good place in national OI could help me enter a university without taking entrance examination.

KAN: I started programming when I was about 10 because my older brother participated in programming competitions as well.

What was your first goal of programming contest?

tozangezan: My first goal was to go to final round of domestic OI contest, and being selected as national team for IOI was my big dream when I was in high school.

polequoll: In my case, my first goal was to be awarded in National ACM-ICPC regional (and to get an WF ticket) with my friends.

dnk: I don't remember my first goal clearly but I think it was something like to get high rating in Codeforces (probably to division 1). The big dream was to get a slot in the IOI team but I could not achieve that dream.

KAN: Well, I don't know what was my first goal, probably to win some local contest
tozangezan: Always our dream ;)

How did you choose your handle name for contest websites?

tozangezan: "tozan" means "climing mountain" and "gezan" means "going down mountain", but we don't have the term for "climing then going down mountain". "tozangezan" is my answer for the question. But I don't know why I use for contests. I didn't climb mountains at that time, nor did I know hill-climbing algorithm. (Now I usually go to mountains because I'm ecology major).

polequoll: I like alphabet P and Q, and I want to make my unique handle name (I want Google don't have a search result of my (new) handle name before I create it.). That's why I choose 'polequoll' as my handle name.

dnk: At first, my handle was not dnk. When Codeforces allowed users to change handle in New Year, I changed my first handle to my second handle which is my full name + birth year. In the second time I changed it to dnk (first letters of my full name) to make it shorter (from 15 -> 3 characters).

KAN: There was a tradition in Nizhny Novgorod to make handles with the first two letters of surname and the first letter of given name. That's why I'm KAN. And I chose KalininN as my second handle because it wasn't possible to register "KAN" at topcoder
tozangezan: Is that a common way to make handle name in Russia?
KAN: No, only in Nizhny Novgorod

About Competitions

Where do you usually practice?

tozangezan: It varies a lot. Sometimes I use Japanese contest website such as Aizu Online Judge or AtCoder, but I like TopCoder's mathematical problems so sometimes I concentrate on TopCoder. I don't like to practice on Codeforces though ;(

polequoll: I mainly practice with past Codeforces problems (I had practiced with the problems (excepting Div2AB and Div1E) from #201 to #382) as well as Baekjoon Online Judge (which is most famous online judge in Korea).

dnk: At first I was doing very simple problems in UVA Online Judge. After that I did problems in the Vietnam site of Sphere Online Judge. I did participated in Codeforces and TopCoder contests too but not so often, possibly due to the fact that those contests were often very late in my local time. I also solved problems that older students or my teachers gave me (I don't know the source of many problems)
tozangezan: I feel the same about contest time ...

KAN: I don't like upsolving so when I used to practice a lot, I simply wrote as many contests as I could: codeforces, topcoder, some more specific contests like USACO or COCI. Also, there are several on-site camps in Russia for studying competitive programming.

Do you study algorithms from books? If so, which book helped you the most?

tozangezan: here's a popular textbook for competitive programming in Japan, named Programming Contest Challenge Book, which is written by iwiwi, wata, and kita_masa. It's called "Ant Book" in Japan (because an ant is drawn on the top) It has some advanced techniques and red coders can learn some from it.

polequoll: I study algorithms from contest editorials and posts rather than books.
tozangezan: oh you don't have the book popular in Korea? I've heard some of it
polqeuoll: There is a textbook called Jongman Book which is most popular in Korea, but actually I don't have that book. :$

dnk: I did read a famous Vietnamese (e-)book written by Le Minh Hoang for understanding the logics of algorithms but for coding, most of the times I searched for codes from the internet. We called it DSAP (Data Structure + Algorithm = Program).
tozangezan: Sounds like PPAP
dnk: PPAP is relatively new

KAN: I didn't study books a lot, instead, I tried a lot to ask more experienced coders about some techniques or algorithms (or read some articles about them). However, probably the most popular book in Russia is Introduction to Algorithms, many people find it really helpful.

yutaka1999: At first I study from the Japanese book Programming Contest Challenge Book , but nowdays I don't read it.

When you started programming contest, how was the practicing environment different from now?

tozangezan: At that time, there're few online judges, and Codeforces was not born yet. I practiced on POJ (Peking University Online Judge) but the environment was so terrible. They don't use -O2 option for C++ source. Actually I used Windows Me for the first participation

polequoll: It's almost same except for the version of Visual Studio. (6.0 -> 2012)

dnk: Basically the same

Which language do you use for contests?

tozangezan: C++. definitely.

polequoll: I use only C++ for competitive programming.

dnk: C++

KAN: Regarding programming language, now I use C++ and a bit Python

yutaka1999: C++

Which editor do you use for contests?

tozangezan: Recently I use Mac for contests and I use Sublime Text on that. Notepad++ if Windows.

polequoll: Visual Studio only. Recently, I tried to use Code::Blocks due to the ACM-ICPC environment, but I threw away it from my computer after the contest, because it's so so buggy. :$
tozangezan: I wonder if many Korean coders use Visual Studio because I could use only VC++ compiler at SCPC. *2
polequoll: Yes, Korean coders usually use Visual Studio. I think it is due to the past KOI environment.

dnk: vim, at the beginning of some onsite contest like ACM, maybe I will use other editor because I might not have enough time to config vim.
dnk: by the way, in Vietnam, ACM ICPC is called ACM instead of ICPC even though it seems to be incorrect

KAN: I use Kate as a part of Kubuntu, however, editor doesn't really matter if it has console and/or compiler integrated.

yutaka1999: I usually use Sakura Editor , which is a Japanese editor.

Which regular (weekly-monthly) contest is your favorite?

tozangezan: I hate weekly contests

polequoll: I like Codeforces, but actually I rarely parcitipate it due to the timezone.

dnk: Actually, I am not taking part in regular contests for years

yutaka1999: I like Topcoder because problems are interesting to me.

Is there any other favorite contest? (annual, irregular, etc...)

tozangezan: I wish I could take part in World Finals once more...! Besides I like GCJ

polequoll: I like COCI and Latin America Regionals problems.

dnk: Onsite contests in Japan are good (tenkaichi, codefes, etc)

KAN: I like codeforces and topcoder (however, the fact that the Topcoder Arena is not working sometimes is really annoying). Also, I forgot to mention codefights, I find it really good and fun both for beginners and experienced coders. I really enjoy many things they have (head2head, marathons and arcade), however, I don't have much time to compete there

yutaka1999: I like USACO, JOI and IOI. This is Bessie. [There was a cow emoticon here]

Community

Do you have friends to discuss after contests? How do you contact with those friends? (which social media?)

tozangezan: Japanese coders discuss problems after (almost every) contest on Twitter. Sometimes we use Slack but it's less popular.

polequoll: Yes, I mainly discuss the problems with my ACM-ICPC team members. In Korea, we use a messenger called 'KakaoTalk'.

dnk: I occasionally discuss with my friends after contests (face-to-face meeting or Facebook Messenger)

KAN: On onsite events, we usually discuss problems face-to-face after a contest. It is also a place where you can learn a new technique or algorithm to solve some of the contest's problems, everyone is happy to explain his solution to someone and to chat about some difficulties. Regarding online contests, it's more difficult but sometimes I discuss problems via messengers, and sometimes we talk about recent contest when I meet with someone face-to-face.

How often, and when do you meet with competitive programming friends face to face?

tozangezan: Recently there're many onsite contests in Japan, but other than that I don't do a lot. But I've been to training camp hosted by rng_58 twice (it's not like training camp like Petrozavodsk. It's much smaller).

polequoll: Almost everyday during the semester. During the vacation, I had regularly met my ACM-ICPC team members to practice the contest.

dnk: When I was in high school, every day, we were training together for national OI.

KAN: Regarding meeting with friends: not so often. When I was in high school, nobody in my school was competing on a regular basis, so I met with competitive programming friends at some camps or big contests.
polequoll: Oh, us too

yutaka1999: I meet my programming friends only in onsite events. When I meet them in school, we don't talk a lot about programming.
tozangezan: It's surprising. When I met contest friends in high school I talked almost only about contests. (I and yutaka1999 are from the same high school)
yutaka1999: I talk about some school events such as school festivals, athletic meetings and tests, but actually, I don't have so many chances to talk with them (because they are not classmates.)

Do you have any other hobbies to share with those friends except contests?

tozangezan: I and some others like to play rhythm games (such as beatmania IIDX or Dance Dance Revolution), and solving pencil puzzles...?

polequoll: Many games - rhythm games, Hearthstone, Overwatch, ...

dnk: I think we will start from competitive programming and by some mysterious ways, the conversation will be smoothly moved to another topic

KAN: There are a lot of coders in Russia who enjoy some sport games. I like volleyball and frisbee, and there are some groups playing them almost in every long break at onsite competitions. Also, there are people who like soccer. Another hobby many coders enjoy are board games.

Is there any interesting term, fact or meme in the community?

tozangezan: Too many. Japanese coders are playing with words all day long, such as finding haiku-style sentence from daily tweet or speech or problem statements.

polequoll: There is unique atmosphere..? when competitive programmers talk, but I couldn't give them in a sentences because it's very subtle :$ . Actually, I want to ask the meaning of the word 'Retsu-mo', which makes laugh in Codefestival. *3
tozangezan: Retsu-mo means submodular function
polequoll: I've never heard of submodular function, maybe I have to study it

dnk: Maybe some terms: buffalo = strong implementation skill (maybe 高い実装力 in Japanese), turtle = passing a test set or get a high rank by luck.
tozangezan: I'll use buffalo from now

KAN: Well there are many specific terms in the language we use, but they're just some shortened (and easier to pronounce) forms of mathematical terms I think.

yutaka1999: I think the way I talk with competitive programmers is different from that I talk with my other friends.

Do you have contest friends outside your home-country?

tozangezan: I sometimes go to onsite contest overseas and meet some of them. Especially I often talk with Korean coders because I can speak Korean a little, then one Korean coder (maybe dnk also knows him) introduced me about upcoming contest in Korea, and its prize was so good ;) Anyway, I like to talk with contestants from over the world.

polequoll: Actually, I have almost no friends outside my country

dnk: Yes, I have Japanese friends who are competitive programmers

KAN: Technically, I have some foreign friends, however, they are all from neighboring countries and speak Russian. (and there is no difference between them and Russian friends)

yutaka1999: I have many friends on Facebook.
tozangezan: optimal answer for this question

Outside "Competitive" Programming

Do you write programs other than for contests?

tozangezan: No

polequoll: Yes, I agree with sometimes it's more interesting.

dnk: Almost no

KAN: Yes, I do and sometimes it's more interesting

yutaka1999: No.

Are you planning to work as software engineer after graduation?

tozangezan: If I can research my area (ecology) for all my life, I won't. But some software engineering teams also sound interesting. At least I have plenty of time to decide.
dnk: why are you studying ecology?
tozangezan: Of course because I like the subject.
KAN: I think you'll need to write some programs to study the results of some research and so on
tozangezan: definitely yes. My lab is about theoretical ecology, so simulation of ecosystem is one of the most popular topic.

polequoll: I'm not sure. Currently, I'm interested in a research (such as graduate school) rather than working.

dnk: Yes.

KAN: I study physics, and I find programming as one of the most demanded skills a scientist should have

yutaka1999: I'm not sure. I'm interested in mathematics.

How do you feel about contests-holding companies?

tozangezan: http://m.memegen.com/8wq2ys.jpg
tozangezan: To be serious, it's so helpful that I can choose from them if I want to work as internship.

polequoll: I like them. Sometimes, I wonder how they can make earnings.

dnk: In general, I like those companies.

KAN: How can anyone dislike them?

yutaka1999: I like onsite contests, so I like those companies.

What do you do for programming contest community, besides competing in contests? (ex. problem writing, tutoring, write learning materials, creating tools, etc)

tozangezan: I sometimes write problems for TopCoder and AtCoder, I'm one of the tutors of JOI (Japanese OI), and create Youtube videos about contest techniques. (but for the last one, I started it just for practicing English)

polequoll: Currently, almost nothing. I want to write several problems someday...

dnk: Back in Vietnam, I was translating some Japanese problem statements

KAN: I write and help to prepare some problems for local contests of different level and sometimes for codeforces. I review codeforces' rounds. I train high-school students from my city for team and individual contests
tozangezan: "I train high-school students from my city" sounds interesting
KAN: We have a system called "circles" in Russian in which high-school students can attend some additional courses after school. They exist in many schools in almost every city, some of them are city-wide and some of them are just for one school. High-school students gather to study something together with the help of some tutors.
tozangezan: It's like our system, even though we don't have tutors.

yutaka1999: I like problem writing, but it's just for the fun of it and not for contests... (Note that some of yutaka1999's problems are available at Code Festival 2016's tournament. )

Where is your favorite place you have visited for onsite contests?

tozangezan: Ekaterinburg (Russia, WF2014) is my favorite. There was an event called ICPC Quest in recent World Finals, and I was playing so hard. Thanks to the quests and relatively long contest schedule, I can visit so many places in the city. I remember that I and my teammate and coach walked for an hour to get to the KHL (hockey league in Russia) team's stadium to take photos.

polequoll: SCPC(Samsung Programming Contest) and CODE FESTIVAL

dnk: Maybe Japan. I visited Thailand for ACM ICPC WF and Regionals but at the time of my visit the weather was too hot and air conditionals were too cold.

KAN: Regarding the favorite place, I think for me it is Australia (IOI 2013)

yutaka1999: Maybe it's Taiwan, where IOI 2014 was held.

Conclusion

Why do you continue participating in contests?

tozangezan: Of course one of the reason is it's fun, but it's more complicated. Most of my friends are competitive programmers and I earn money from contests (as participant, writer, tester, etc). I can't imagine life without contest.

polequoll: Obviously, it's fun to solve tricky problems, and I like discussing ideas with my friends.

dnk: I almost earn no money from programming contest but I continue participating because it's fun (in some sense). If I did not meet Japanese coders in ACM ICPC WF maybe right now I'm not participating in programming contests.

KAN: Actually, I don't compete regularly now, I only take part in some annual interesting competitions for fun

This is the last question. What is your current goal?

tozangezan: I had three goals, "becoming member of IOI national team", "win medal at World Finals" and "go to top-25 onsite final of international contests (such as GCJ and FHC)". I've achieved all of them. What else can I set for my goals...? I don't know. Maybe "cause good effect on increasing the number of competitive programmers"...?

polequoll: Actually, I don't have a clear goal currently (in terms of a contest achievement). In other words, I simply want to enjoy competitive as long as I lives

dnk: About competitive programming, I had a goal "to get a slot in IOI team" but I failed. After that, most of my goals are more about foreign language skills (for example: remembering the Vietnamese reading of 2000 kanjis in 3 months)
tozangezan: I hope for "Japanese remembering 2000 GRE words in 3 months"
dnk: Those are two completely different stories as English has little connection with Japanese.

KAN: I don't know actually. I think now my goal is to have as much fun as I can competing and preparing contests. Another my goal is to teach others.

yutaka1999: I want to become smart and one of my definite goals is to get a higher rank in IOI.

Conclusion

Perhaps this is the first time to hold such project. Unfortunately, there were only 5 participants of this interview, and their home-country and their age is too limited. I gathered interview participants in Code Festival (except yutaka1999; the contest was only available for university students, and he is a high school student now) and I'm hoping we can do similar things at next year's Code Festival (if available).

Thanks interview participants for attending. Thanks those whom I asked for during the contest day for spending time. Thank you for reading this article.

Comment here or on Codeforces if you would like.

🐺🍇🐝🐱☺️

*1:Of course that's not true. We'd hold GCJ Finals once and ACM-ICPC World Finals once. However, there were no international contests sponsored by Japanese companies.

*2:The 2nd Samsung Collegiate Programming Contest, held in Seoul. On this August, I and polequoll took part in the contest. My blog entry of the contest is here. You can translate by using Google Translate that is improved recently.

*3:In the Code Festival contest, a professional calligrapher came to perform in front of participants during the ending ceremony, and one prize (best calligraphy award) was that the participant could request words to draw. He asked 'Retsu-mo(劣モ)', submodular function in Japanese. The calligrapher, international participants, and even most Japanese contestants didn't know what it meant.