Hello Codeforces!
As you may have noticed, there are popular blogs about AhmetKaan 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. He had another idea which he thinks should be true, and tried to stress test using the original idea and this idea (lets call it stress test idea). Switched to vs code because stress testing there would be faster, he completed stress test setup. With this setup he worked on stress test code on vs code, and original code on geany.
- 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. Formatting anomalies and different suspicious behaviours are from stress test code which is coded in vs code.
- 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 he is normally using geany for competitive programming, and vs code for university related things (where actual formatting matters). 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.
- Overall, even though AI can not be ruled out entirely, connecting anomalies with AI seems even harder than connecting those anomalies with human behaviour.
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
The main issue with this human explanation is that it is not simple at all. Occam’s razor would clearly favor a single cause (some form of AI usage combined with human editing) if that story could actually explain the evidence cleanly. At first glance, "he used AI" looks like the simplest answer. However, when I tried to construct any concrete version of that "simple" AI story, every attempt still required stretched or contradictory assumptions to address specific anomalies: the extreme timeline chaos, the partial and bidirectional formatting changes, the non-local inconsistencies, etc. None of them held together without adding their own extra complications. Here are some of them:
- "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. In general, details you can observe from these events is that even if he is an AI user, his concealing is sometimes really inconsistent. Like he needs to conceal AI by keeping his coding identity, and also work on spacing of AI submissions, but also hiding those formatting inconsistencies extremely sloppy, having an extremely suspicious timeline. Additionally, his behavior for only choosing to use AI for hard problems contradicts this theory, like having his B solution time faster using AI should not really be an issue, and it won't be suspicious at all.
- "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, geany detected his code using four spaces, but default is tab. Therefore copy-paste's from his round 1082-D default has both tab and space, at the exact same place, from start until first few lines of main it has space, after that it has tab. For short, his own code copy-pastes and geany's auto-detect tab caused this.
Final thoughts
As I mentioned at the start, this blog isn't an attempt to overturn an administrative decision. Admins have to protect the platform, and suspicious patterns must be acted upon. However, Ahmet Kaan’s reputation as a programmer matters to him and to those who know his actual skill level. He has shown the capacity to perform at this level before. I wanted to put this explanation out there so that anyone looking at the situation has the full context, not just the accusation. After reading this blog and the suspicions, decision will be left to the readers.




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

