erkam's blog

By erkam, history, 2 months ago, In English

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:

  1. Formatting changes between submissions
  2. Rapid solving of problems E1 and E2
  3. Suspicious submissions for problem D
  4. 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.
Partial formatting examples on the same code
  • 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.

Example

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.

Full text and comments »

  • Vote: I like it
  • -13
  • Vote: I do not like it

By erkam, history, 3 years ago, In English

Hello, I want to talk about an ongoing curse in Turkey. I am the most recent victim of that curse at it's 9th year. Let's start with the beginning.

2015-2016

Curse starts with kalimm taking 5th place in 2015. After that year, he tried his best and was in the team in 2016. But because of some reasons Turkey team wasn't able to participate IOI 2016. After that, the curse has started. You can look at this blog for details.

2017

I don't know who was at 5th place that year. But probably curse was active.

2018-2019

In 2018, TahsinEnesKuru got 5th place. 3/4 of that team was at their last year so he had a high chance of being in the team at 2019. But he didn't know, he was already cursed. He missed the team with a difference of 3/700. He also has a blog about it.

2020

At that year, AhmetKaan got 5th place. He was at his 1st year and he had 2 years left. But unfortunately, he already got the curse. In the next 2 years, he was at top 8, but not 5th. Because the curse has passed to someone else...

2021

Here, my story starts. I was at our junior olympiad before, and I got 1st place in almost all of junior contests. I had very high expectations of myself at my first year, but I was relax because I had 3 attempts. Our first contest is like a joke, and I won't talk about it. So I am starting with second contest. There are 4 gold medals, 8 silver medals, 12 bronz medals normally in that contest. I got 5th place because destructive_criticism accidentally got some subtask and got 4th place. Our difference was little but I can't remember. That was closest I got to the gold medal.

In 2021 team selection contest, I got 5th place. Difference was really big, and I don't think I would have performed better than any of them at IOI. This year is the most boring part of the story. Someone has to be the 5th right?

2022

And this year is when things starts to get worse and worse for me. Last year I saw the great difference between myself and the ones that went to IOI. None of them graduated, so I was depressed. And the second contest of that year really didn't help. At first day, I misreaded a simple thing about a problem (replace and swap is similar in Turkish) so I wasn't able to solve the easiest problem of the day. I got 3/100 in that problem, and like top 20 got 100. I was at 18th place and that really shocked me. I dropped from high silver to low bronze? I know, it wasn't about my cp skills, it was about my reading skills but results were there and it was really depressing. Anyway, I performed kinda normal at second day and got 10th place. I was really depressed for a few months but I tried my best for Team Selection Contest even though I thought I was way behind the last years team.

One of the 2021's team members wasn't able to participate in team selection contest, so when contest started, I thought I had a chance. I got 3rd place first day, and another member of last years team performed really bad(we had around 100 points of difference), so if I don't be so bad at second day, I was at team. But guess what happened, I was sooo bad. There were 4 problems that day because idk, maybe they wanted to give a chance to people who performed bad at first day? Well if that was the plan they were successful. I solved the 4th problem really fast, because it was too easy. But after that, I made more and more mistakes. I found a solution for 1st problem in the first hour, so I started to write it. After that, I wasn't able to make it pass because my complexity wasn't intended and it had high constant. But instead of trying another problem or finding another solution to that problem, I tried to optimize constant. (After the contest I learned it wasn't even close) That took me around 3 hours. At last hour I was stressed, I just got some easy subtasks from 2nd and 3rd problem and my time was over. After the contest, I was at 6th place. Everyone solved both 1st and 2nd problem. I just couldn't accept the situation. I was really an idiot. And other annoying thing just happened. 1st place owner decided to not go to IOI, so 5th place was going instead. I had a 9/700 difference with 5th place. And that just made my 2nd 5th place.

2023

Finally my last year. I was doing olympiads longer than anyone participating at this point. But I had no hope in anything. Because last years tst really broken me. I am now at 12th grade and I also need to study for our university exams. I wasn't 0 at school lessons so university exams wasn't a problem for me. But I still had some desire to prove myself. I didn't wanted to end my olympiad life without achieving anything. Soo that years second contest came aaand I got 9th place. :p

Anyway, second contest isn't nearly as important as team. I learned lessons from my pervious experiences. At that point I didn't want to go to IOI. All I wanted is getting into team and proving myself. So first day happened and it was a joke. 1st day literally had no effects at results. Because 5 people got 300/300 and other 8 people got 278/300. 2 problems were at div2C level, and 78 points of the last problem was really easy. I got the last subtask but wth, it was only 22 points? Btw even people who wasn't at 278 was around ~250 so after the first day, only thing changed was we now had a 1 day tst.

So second day, there were 4 problems like last year but I don't want to say 4 problems. One of them literally was at div3A level. I don't know the purpose of that problem. Most of the participants solved it in 2-3 minutes. (But I needed those 2-3 minutes) I was able to solve one of them pretty quickly. And my favorite friend just returned for 4th problem. Misread. I solved the problem for subsequences but it had to be subarray. I was trying to solve a harder version. I failed at first and I fell into despair. At 3.5 hours, I was at 200 points. I was so stressed. And at one moment, I just cleared my mind. I tried my best and got 46 points from 3rd problem, and solved the harder version of the 4th problem. After I wrote it, I had only 5 minutes left, and I just realized I was solving the wrong problem. Luckily, for solving the subarray version i just needed to delete some lines, but while deleting probably I made a bug and my code got only 61. I only needed 5-10 minutes probably. And we started 5 minutes late because of the system. Anyway, after the contest we were asking for results, and I just realised I might be at 5th place again. And today results were announced, I am indeed at the 5th place.

Ending

This is where my story ends. 1st time was sad, 2nd time was devastating but 3rd was just funny. After that contest my 5 year old olympiad life ended. I am really happy, I was able to join this community. I couldn't managed to break this long ongoing curse but I am trusting next generations for it. Do your best, and be careful. Lastly I want to thank all of the people I met during this 5 years for making my high school way better. (I wanted to mention them, but I realised I needed to mention around 300 people so I just gave up)

-erkam (2018-2023)

Full text and comments »

  • Vote: I like it
  • +341
  • Vote: I do not like it

By erkam, history, 4 years ago, In English

So, round #810 is cancelled because problem E of the Div. 1 was copied from another round intentionally. The blog of the contest is downvoted so much and the author is at the bottom of the contribution. And the round is getting a lot of hate. But the community just started to get too toxic.

First of all, co-outhor of the round, admitted he stole the problem and didn't told anyone about that. Lets assume it is the case. Empathize with Rhodoks, just made a round with a friend, gave a lot of effort, and after the round it turned out that his co-outhor stole a problem, so he is now at the bottom. I mean, what could he do? It is pretty normal that he couldn't foresee this. (As said by a lot of people, it is not unusual to have a same problem with an old round because testers are limited and no one knows all the problems in the community)

Also, i am not defending the author who stole it but, it is not all authors fault. Some people recognised the problem, and just posted it to the comments of the announcement so lots of people got AC and the round is ruined. Other thing is, Div. 2 participants are around saying things like "trash round, wasted my time". And probably bombarding downvote. I want to say that, if Div. 2 E(Div. 1 C) was also stolen intentionally, Div. 2 would also be unrated. But it isn't. Div. 2 is a normal codeforces round with regular flaws like being unbalanced.

My point is, that round still carries a lot of effort guys, don't be so mean. I don't think the author deserved the bottom spot.

UPD

I learned that div. 1 participants have higher weight in upvotes, so I can't say that by looking the number of downvotes. But still there are a lot of comments of Div. 2 people so I think my point still stands.

Full text and comments »

  • Vote: I like it
  • +266
  • Vote: I do not like it