Hello Codeforces!
As you may have noticed, there are popular blogs about Ahmet Kaan and his ban from Codeforces after recent contests. One of them is a sentimental appeal, and one is an admin response to that appeal.
Before even starting the blog, let me clarify, challenging the admin decision absolutely isn't this blog's purpose. Codeforces has its own standards as a community, and admins must enforce them. Admins do not and should not have obligation to prepare something like a legal accusation, nor are they obligated to carefully examine the arguments presented in this blog when making their decisions. That's why I purposely left out defense for older claims, which would make this blog more look like a ban appeal -which it is not-, and debating them here only spark off-topic controversy. The sole purpose here is to provide technical context for his recent contest performances.
Therefore, admins are not tagged in this blog, and I kindly request you to not tag them or try to contact them for this matter even if you think this explanation is satisfactory, since this matter already took much more time than they should gave. (I actually appreciate admins to address community appeal and giving hours to prepare a detailed blog, orz)
I have discussed this topic with Ahmet Kaan and I have his full point of view, and this blog will have his full approval before posting. This blog will try to explain his point of view, and what actually supports his point of view, to anyone who wants to or needs to have a more solid idea about the situation.
The concerns raised in previous blogs mainly focus on are:
- Formatting changes between submissions
- Rapid solving of problems E1 and E2
- Suspicious submissions for problem D
- Unexpectedly high performance in his last 3 contest
Before I talked to him, and before admins announced their final decision, I tried to find logical explanations for all the existing accusation up until that point in my comment, which you don't need to check, since I will restate points of that comment in this blog in a cleaner manner.
Round 1085
Full Timeline:
- A is solved normally. He had some issues with B, which resulted in switching to C, after reading and having some initial thoughts about other problems, he got accepted from B 1 hours and 17 minutes after contest start, at 18.52 (I will use UTC+3).
- He had a solution to D, he wrote it with a reasonable amount of initial bugs and submitted at 19.08.
- After WA, he switched to thinking E, where he was able to find a solution fairly quickly, but before writing it, he returned to D, did some minimal changes to it and submitted again at 19.20.
- He had no idea what was wrong in D, he had solutions to E1 and E2, so with that hype, he knew solving D would almost guarantee him being GM, so he tried to stress test as fast as possible. switched to vs code because stress testing there would be faster, he completed stress test setup, and his stress test stuck at a specific place, he wasn't able to see problem immediately, so he switched to writing E1.
- He was able to write E1 fairly fast, because that code is really simple, like some 1-line for loops and 1 slightly longer for loop. It took about 5 minutes to his submission at 19.31.
- Some more efforts in D, and accidentally submitted his stress test code instead of actual code at 19.35.
- More efforts on D, and he accidentally submitted his stress test code again at 19.42. Frustrated, switched to E2.
- Wrote E2 in a similar speed to E1, (their codes are both simple) and submitted it at 19.47.
- Returned to D, noticed submitting the wrong code, submitted the right code, and got AC.
Observations you can make that are supporting this sequence:
- The difference between D in 19.42 and 19.52 is explained extremely fittingly with 2 concurrent writing. You can actually observe 2 branches, 19.20->19.35->19.42 and 19.20->19.52 (you can see most abnormal changes are not present here). Which also answers appearing and disappearing if(cin) and min_inf.
- Time given for A,B,C is too long for a completely focused user on this rating. It implies some of the time is given to other problems
- You can explain some of the formatting changes with editor change. What I mean by editor change is not because of auto formatting. It is because geany is a competitive programming environment, and vs code is a normal coding environment. If you examine the formatting changes between submissions that are claimed to be written in geany and submissions in vs code, you can observe that reviewing code in geany causes him to delete spaces, and reviewing code in vs code causes him to add spaces.
- His code writing speed is consistent throughout this explanation.
Observations you can make against AI usage:
- The formatting changes are done partially. What I mean by that is at first only spaces after commas and semicolons are added, and then other formatting changes are added in a different submissions, but even with all changes, his submissions didn't adhere to formatting rules completely in a significant code zone. It may be caused by manual edit after formatting by AI, but than you are facing the probability of him using AI, doing random changes, and doing those random changes to different rules of formatting. I am not claiming this is impossible with AI, but the observed formatting behavior appears more consistent with manual editing than with automated formatting.
- AI assistance is unlikely for problem B. The submission latency and the simplicity of the problem suggest that. This observation doesn't rule out starting to use AI at a later stage, but it rules out some AI scenarios.
- The state of rush, too much switch between problems, calming down after submitting D, makes sense for human stress, but with AI, that part will need a different explanation. Again I can't argue it is impossible, but it heavily increases the difficulty of forming an argument based on "he was trying to conceal AI usage". If you try to think of an AI case, you most likely should include this argument, because he has many human fingerprints in the code.
Rounds 1081 and 1082
First, I want to point out that Ahmet Kaan was able to perform at this level normally. It is true that 3 times in a row didn't happen before, but his performance graph had some peaks, where his performance was comparable to those 3.
About examples given in those rounds, you can see Ahmet Kaan-like writing in the code, which means either heavy editing, careful prompting, or using a fine tuned AI specifically for his style if these codes are direct AI generation. Here, I wasn't able to find any extreme inconsistencies that can't be explained with AI like the previous ones, but here, existence of AI implies an effort for concealment. Which also rules out some of the scenarios about how an AI may be used.
Addressing some possible AI usage scenarios
- "Ahmet Kaan was consistently using AI for subtle/big help in those rounds, he was concealing his usage and that caused his performance increase": This is what it looks like when you put together all evidence from all 3 rounds together. But for this explanation, pure chaos of his timeline in contest 1085 contradicts a calculated concealer of AI usage of the previous rounds. Submitting E1 and E2 at the middle of his submissions for D, and changing that many things so sloppily in D implies a more amateur AI user. Which introduces contradictions within theory.
- "Ahmet Kaan was normally participating in contests for 1081 and 1082, but when he got a WA at round 1085's D, he used AI for debugging and fixing": Since round 1085's D is the most suspicious part, you can come up with this scenario even when it doesn't include other anomalies. But, problem D also has the most abnormal changes, as I explained above. Those anomalies are used before as a supporting argument for AI, but they are actually too inconsistent for AI, like with partial formatting. This argument suggests he used AI panickedly for debugging, but in those panic, he also just switched to E1 and E2 while he was busy prompting AI and abnormally adding/deleting random spaces to/from AI code.
- "Ahmet Kaan was using AI just for small tips, and copy pastes, that's why his style is not that affected": Overall explanation with best coverage of anomalies, but, his inconsistencies in code are not local at all. Just like the partial formatting example, not a single significant part of the code looks like a direct AI copy paste. There are some inconsistencies in his formatting, but they do not form single blocks
One more small explanation
About formatting issues, there is also "tab and 4 spaces" issue present among his codes. This is caused by geany's auto-detect tab format from file. We are not exactly sure how, but either from geany requesting some snippets from his previous codes, or just manually putting four spaces to the start of his struct, his code




He also almost had a solution for F, which got TLE at case 35 at last minute.

