{
  "id": 550336,
  "title": "5th place solution",
  "content": "<p>Our code is <a href=\"https://www.kaggle.com/code/gromml/arc-prize-2024-poohai-solution\" target=\"_blank\">here</a>.</p>\n<p>Basically, our solution consists of 3 ideas:</p>\n<p>1) <strong>Ensembling different solutions.</strong></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F83488802523e694d5ab4ce5984e0e0f6%2Fensembling__.png?generation=1733569928133209&amp;alt=media\"></p>\n<p>2) <strong>Applying different postprocessing filters.</strong></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F60ed2df7d537be28c08c220165c356e4%2Fpostprocessing_.png?generation=1733569982701177&amp;alt=media\"></p>\n<p>We noticed that an algorithm can make typical mistakes. For instance, a genetic algorithm tends to produce redundant vertical or horizontal lines.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2Fde875adfed78ba8c904cdc6301f4c0b3%2Fgen1_.png?generation=1733570064376646&amp;alt=media\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F5b5c27d16797fc2dbd2ef7d164eca553%2Fgen2_.png?generation=1733570076948928&amp;alt=media\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F433d8a9c106d0945b33cb5bd843dd0c8%2Fgen3_.png?generation=1733571013703337&amp;alt=media\"></p>\n<p>Also, another typical mistake is a wrong shape.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F5455fe567ae591c94fe1a68f9e3fe805%2Fgen4_.png?generation=1733570102883731&amp;alt=media\"></p>\n<p>So, you can implement as many postprocessing filters as you can to cover the most common mistakes of algorithms in your ensemble.</p>\n<p>3) <strong>Brute-force.</strong> Tasks can be sorted by their identifiers, and the order remains the same across different submissions.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2Ffd5064ef9910eaeeb01c31916a331524%2Forder_.png?generation=1733569963472044&amp;alt=media\"></p>\n<p>To identify the 26 tasks solved by the <a href=\"https://www.kaggle.com/code/mehrankazeminia/3-arc24-developed-2020-winning-solutions\" target=\"_blank\">well-known 26 notebook</a>, you need no more than 100 submissions. Once the 26 tasks are identified, you can try new algorithms one by one (checking whether they are able to solve at least one new task, that is one of the 74 remaining tasks). Once a new task is found, you can identify its ordinal number with the help of binary search. Also, you can leave all other tasks to the strongest algorithm.</p>\n<p><strong>Our summary:</strong></p>\n<ul>\n<li>A very efficient way to improve an ensemble was to identify tasks solved by the ensemble, and then try to solve other tasks by other algorithms</li>\n<li>It seems that LLMs could be added to our ensemble, but fine-tuning is needed</li>\n<li>Selecting the right attempt (the correct answer) is difficult, while removing wrong attempts is easier</li>\n<li>An algorithm can make typical mistakes (like the genetic algorithm often produces redundant lines, and you can create the corresponding postprocessing filters)</li>\n</ul>\n<p>Congratulations to all the winners, and thanks to the host team for organizing the competition! Looking forward to ARC Prize 2025!</p>",
  "comments": [
    {
      "id": 3065711,
      "author_name": "Guillermo Barbadillo",
      "author_url": "",
      "post_date": "2024-12-07T07:31:23.487000",
      "content": "<blockquote>\n  <p>To identify the 26 tasks solved by the well-known 26 notebook, you need no more than 100 submissions. Once the 26 tasks are identified, you can try new algorithms one by one (checking whether they are able to solve at least one new task, that is one of the 74 remaining tasks). Once a new task is found, you can identify its ordinal number with the help of binary search. Also, you can leave all other tasks to the strongest algorithm.</p>\n</blockquote>\n<p>Leaderboard probing is totally against the spirit of the competition.</p>\n<p><a href=\"https://www.kaggle.com/gregkamradt\" target=\"_blank\">@gregkamradt</a> probably next year edition should try to prevent this leaderboard probing without limiting legit approaches. On the AIMO competition, they created a python library that gave the tasks one by one, and you could not receive one task without answering the current one. That removed the option of leaderboard probing, but also removed the option of dynamically assigning resources to the different tasks. I don't know what is the best solution, but hopefully there is enough time to find one.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3065946,
          "author_name": "Oleg Trott",
          "author_url": "",
          "post_date": "2024-12-07T13:35:43.493000",
          "content": "<blockquote>\n  <p>On the AIMO competition, they created a python library that gave the tasks one by one, and you could not receive one task without answering the current one. </p>\n</blockquote>\n<p>I'm not finding anything probing-related in the AIMO2 discussions or rules. Could you post a link?</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3066013,
              "author_name": "Guillermo Barbadillo",
              "author_url": "",
              "post_date": "2024-12-07T14:42:24.357000",
              "content": "<p>I was talking about the first edition: </p>\n<ul>\n<li><a href=\"https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize\" target=\"_blank\">https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize</a></li>\n<li><a href=\"https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495133\" target=\"_blank\">https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495133</a></li>\n<li><a href=\"https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495362\" target=\"_blank\">https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495362</a></li>\n</ul>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3066016,
              "author_name": "Guillermo Barbadillo",
              "author_url": "",
              "post_date": "2024-12-07T14:43:09.433000",
              "content": "<p>And also this link: <a href=\"https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/497123\" target=\"_blank\">https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/497123</a></p>",
              "votes": 2,
              "replies": []
            }
          ]
        },
        {
          "id": 3068686,
          "author_name": "",
          "author_url": "",
          "post_date": "2024-12-10T14:55:30.923000",
          "content": "<p>I admit, the zero-feedback-except-the-final-score situation leaves one hungry for such information.  If <a href=\"https://www.kaggle.com/gromml\" target=\"_blank\">@gromml</a> were really bent on breaking that rule, they probably would not have published their intent in their discussion entry.  This odd level of honesty is probably a simple disconnect from the world of malicious behavior.  I suffer from that, and I'm proud!  But rules are rules… so that.</p>\n<p>Also, the simple act of introducing 100 (or 200) brand new challenges for the next contest would totally quash any gains from gaming 2024.  The challenges must be orthogonally skewed, but seeing as almost every evaluation task handles that requirement with aplomb, it shouldn't be a too-extremely-high bar.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    }
  ],
  "comment_count": 5,
  "messages": [
    {
      "id": 3065486,
      "postDate": "2024-12-06T21:56:25.173Z",
      "content": "<p>Our code is <a href=\"https://www.kaggle.com/code/gromml/arc-prize-2024-poohai-solution\" target=\"_blank\">here</a>.</p>\n<p>Basically, our solution consists of 3 ideas:</p>\n<p>1) <strong>Ensembling different solutions.</strong></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F83488802523e694d5ab4ce5984e0e0f6%2Fensembling__.png?generation=1733569928133209&amp;alt=media\"></p>\n<p>2) <strong>Applying different postprocessing filters.</strong></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F60ed2df7d537be28c08c220165c356e4%2Fpostprocessing_.png?generation=1733569982701177&amp;alt=media\"></p>\n<p>We noticed that an algorithm can make typical mistakes. For instance, a genetic algorithm tends to produce redundant vertical or horizontal lines.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2Fde875adfed78ba8c904cdc6301f4c0b3%2Fgen1_.png?generation=1733570064376646&amp;alt=media\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F5b5c27d16797fc2dbd2ef7d164eca553%2Fgen2_.png?generation=1733570076948928&amp;alt=media\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F433d8a9c106d0945b33cb5bd843dd0c8%2Fgen3_.png?generation=1733571013703337&amp;alt=media\"></p>\n<p>Also, another typical mistake is a wrong shape.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F5455fe567ae591c94fe1a68f9e3fe805%2Fgen4_.png?generation=1733570102883731&amp;alt=media\"></p>\n<p>So, you can implement as many postprocessing filters as you can to cover the most common mistakes of algorithms in your ensemble.</p>\n<p>3) <strong>Brute-force.</strong> Tasks can be sorted by their identifiers, and the order remains the same across different submissions.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2Ffd5064ef9910eaeeb01c31916a331524%2Forder_.png?generation=1733569963472044&amp;alt=media\"></p>\n<p>To identify the 26 tasks solved by the <a href=\"https://www.kaggle.com/code/mehrankazeminia/3-arc24-developed-2020-winning-solutions\" target=\"_blank\">well-known 26 notebook</a>, you need no more than 100 submissions. Once the 26 tasks are identified, you can try new algorithms one by one (checking whether they are able to solve at least one new task, that is one of the 74 remaining tasks). Once a new task is found, you can identify its ordinal number with the help of binary search. Also, you can leave all other tasks to the strongest algorithm.</p>\n<p><strong>Our summary:</strong></p>\n<ul>\n<li>A very efficient way to improve an ensemble was to identify tasks solved by the ensemble, and then try to solve other tasks by other algorithms</li>\n<li>It seems that LLMs could be added to our ensemble, but fine-tuning is needed</li>\n<li>Selecting the right attempt (the correct answer) is difficult, while removing wrong attempts is easier</li>\n<li>An algorithm can make typical mistakes (like the genetic algorithm often produces redundant lines, and you can create the corresponding postprocessing filters)</li>\n</ul>\n<p>Congratulations to all the winners, and thanks to the host team for organizing the competition! Looking forward to ARC Prize 2025!</p>",
      "rawMarkdown": "Our code is [here](https://www.kaggle.com/code/gromml/arc-prize-2024-poohai-solution).\n\nBasically, our solution consists of 3 ideas:\n\n1) **Ensembling different solutions.**\n\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F83488802523e694d5ab4ce5984e0e0f6%2Fensembling__.png?generation=1733569928133209&alt=media\" width=\"500\">\n\n2) **Applying different postprocessing filters.**\n\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F60ed2df7d537be28c08c220165c356e4%2Fpostprocessing_.png?generation=1733569982701177&alt=media\" width=\"500\">\n\nWe noticed that an algorithm can make typical mistakes. For instance, a genetic algorithm tends to produce redundant vertical or horizontal lines.\n\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2Fde875adfed78ba8c904cdc6301f4c0b3%2Fgen1_.png?generation=1733570064376646&alt=media\" width=\"500\">\n\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F5b5c27d16797fc2dbd2ef7d164eca553%2Fgen2_.png?generation=1733570076948928&alt=media\" width=\"500\">\n\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F433d8a9c106d0945b33cb5bd843dd0c8%2Fgen3_.png?generation=1733571013703337&alt=media\" width=\"500\">\n\nAlso, another typical mistake is a wrong shape.\n\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2F5455fe567ae591c94fe1a68f9e3fe805%2Fgen4_.png?generation=1733570102883731&alt=media\" width=\"500\">\n\nSo, you can implement as many postprocessing filters as you can to cover the most common mistakes of algorithms in your ensemble.\n\n3) **Brute-force.** Tasks can be sorted by their identifiers, and the order remains the same across different submissions.\n\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F3365741%2Ffd5064ef9910eaeeb01c31916a331524%2Forder_.png?generation=1733569963472044&alt=media\" width=\"500\">\n\nTo identify the 26 tasks solved by the [well-known 26 notebook](https://www.kaggle.com/code/mehrankazeminia/3-arc24-developed-2020-winning-solutions), you need no more than 100 submissions. Once the 26 tasks are identified, you can try new algorithms one by one (checking whether they are able to solve at least one new task, that is one of the 74 remaining tasks). Once a new task is found, you can identify its ordinal number with the help of binary search. Also, you can leave all other tasks to the strongest algorithm.\n\n**Our summary:**\n\n* A very efficient way to improve an ensemble was to identify tasks solved by the ensemble, and then try to solve other tasks by other algorithms\n* It seems that LLMs could be added to our ensemble, but fine-tuning is needed\n* Selecting the right attempt (the correct answer) is difficult, while removing wrong attempts is easier\n* An algorithm can make typical mistakes (like the genetic algorithm often produces redundant lines, and you can create the corresponding postprocessing filters)\n\nCongratulations to all the winners, and thanks to the host team for organizing the competition! Looking forward to ARC Prize 2025!",
      "votes": 11
    },
    {
      "id": 3065711,
      "postDate": "2024-12-07T07:31:23.487Z",
      "content": "<blockquote>\n  <p>To identify the 26 tasks solved by the well-known 26 notebook, you need no more than 100 submissions. Once the 26 tasks are identified, you can try new algorithms one by one (checking whether they are able to solve at least one new task, that is one of the 74 remaining tasks). Once a new task is found, you can identify its ordinal number with the help of binary search. Also, you can leave all other tasks to the strongest algorithm.</p>\n</blockquote>\n<p>Leaderboard probing is totally against the spirit of the competition.</p>\n<p><a href=\"https://www.kaggle.com/gregkamradt\" target=\"_blank\">@gregkamradt</a> probably next year edition should try to prevent this leaderboard probing without limiting legit approaches. On the AIMO competition, they created a python library that gave the tasks one by one, and you could not receive one task without answering the current one. That removed the option of leaderboard probing, but also removed the option of dynamically assigning resources to the different tasks. I don't know what is the best solution, but hopefully there is enough time to find one.</p>",
      "rawMarkdown": "> To identify the 26 tasks solved by the well-known 26 notebook, you need no more than 100 submissions. Once the 26 tasks are identified, you can try new algorithms one by one (checking whether they are able to solve at least one new task, that is one of the 74 remaining tasks). Once a new task is found, you can identify its ordinal number with the help of binary search. Also, you can leave all other tasks to the strongest algorithm.\n\nLeaderboard probing is totally against the spirit of the competition.\n\n@gregkamradt probably next year edition should try to prevent this leaderboard probing without limiting legit approaches. On the AIMO competition, they created a python library that gave the tasks one by one, and you could not receive one task without answering the current one. That removed the option of leaderboard probing, but also removed the option of dynamically assigning resources to the different tasks. I don't know what is the best solution, but hopefully there is enough time to find one.",
      "votes": 1,
      "replies": [
        {
          "id": 3065946,
          "postDate": "2024-12-07T13:35:43.493Z",
          "content": "<blockquote>\n  <p>On the AIMO competition, they created a python library that gave the tasks one by one, and you could not receive one task without answering the current one. </p>\n</blockquote>\n<p>I'm not finding anything probing-related in the AIMO2 discussions or rules. Could you post a link?</p>",
          "rawMarkdown": "> On the AIMO competition, they created a python library that gave the tasks one by one, and you could not receive one task without answering the current one. \n\nI'm not finding anything probing-related in the AIMO2 discussions or rules. Could you post a link?",
          "replies": [
            {
              "id": 3066013,
              "postDate": "2024-12-07T14:42:24.357Z",
              "content": "<p>I was talking about the first edition: </p>\n<ul>\n<li><a href=\"https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize\" target=\"_blank\">https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize</a></li>\n<li><a href=\"https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495133\" target=\"_blank\">https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495133</a></li>\n<li><a href=\"https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495362\" target=\"_blank\">https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495362</a></li>\n</ul>",
              "rawMarkdown": "I was talking about the first edition: \n\n- https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize\n- https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495133\n- https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/495362",
              "votes": 2
            },
            {
              "id": 3066016,
              "postDate": "2024-12-07T14:43:09.433Z",
              "content": "<p>And also this link: <a href=\"https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/497123\" target=\"_blank\">https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/497123</a></p>",
              "rawMarkdown": "And also this link: https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize/discussion/497123",
              "votes": 2
            }
          ]
        },
        {
          "id": 3068686,
          "postDate": "2024-12-10T14:55:30.923Z",
          "content": "<p>I admit, the zero-feedback-except-the-final-score situation leaves one hungry for such information.  If <a href=\"https://www.kaggle.com/gromml\" target=\"_blank\">@gromml</a> were really bent on breaking that rule, they probably would not have published their intent in their discussion entry.  This odd level of honesty is probably a simple disconnect from the world of malicious behavior.  I suffer from that, and I'm proud!  But rules are rules… so that.</p>\n<p>Also, the simple act of introducing 100 (or 200) brand new challenges for the next contest would totally quash any gains from gaming 2024.  The challenges must be orthogonally skewed, but seeing as almost every evaluation task handles that requirement with aplomb, it shouldn't be a too-extremely-high bar.</p>",
          "rawMarkdown": "I admit, the zero-feedback-except-the-final-score situation leaves one hungry for such information.  If @gromml were really bent on breaking that rule, they probably would not have published their intent in their discussion entry.  This odd level of honesty is probably a simple disconnect from the world of malicious behavior.  I suffer from that, and I'm proud!  But rules are rules... so that.\n\nAlso, the simple act of introducing 100 (or 200) brand new challenges for the next contest would totally quash any gains from gaming 2024.  The challenges must be orthogonally skewed, but seeing as almost every evaluation task handles that requirement with aplomb, it shouldn't be a too-extremely-high bar.",
          "isDeleted": true
        }
      ]
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-19T22:23:25Z",
  "competition_id": 67357,
  "competition_slug": "arc-prize-2024",
  "team_id": 12333075,
  "solution_url": "/competitions/arc-prize-2024/writeups/poohai-5th-place-solution"
}