{"id":67317,"date":"2026-10-21T09:51:10","date_gmt":"2026-10-21T06:51:10","guid":{"rendered":"https:\/\/wpcalc.com\/en\/?p=67317"},"modified":"2026-10-21T09:51:10","modified_gmt":"2026-10-21T06:51:10","slug":"random-team-generator","status":"publish","type":"post","link":"https:\/\/wpcalc.com\/en\/life\/random-team-generator\/","title":{"rendered":"Random Team Generator"},"content":{"rendered":"<section class=\"not-prose calculator-box\" aria-labelledby=\"calculator-title\"><div class=\"flex items-baseline sm:items-center justify-between gap-2 sm:gap-3\"><div class=\"flex flex-col sm:flex-row sm:items-center gap-2\"><span class=\"icon icon-calculator text-primary-700! text-base! dark:text-primary-300!\" aria-hidden=\"true\"><\/span><h2 id=\"calculator-title\" class=\"text-lg font-display font-bold\">Split a List of Names into Random Teams<\/h2><\/div><div class=\"calcdash-favorite group\">\n  <button type=\"button\" class=\"favorite\" id=\"favorite\" data-favorite-id=\"67317\" data-favorite-title=\"Team Generator\" data-favorite-url=\"https:\/\/wpcalc.com\/en\/life\/random-team-generator\/\" data-favorite-excerpt=\"Enter a list of names and this random team generator splits them into fair teams instantly \u2014 choose the number of teams or people per team, balance total skill per team, and copy the result with one click.\" aria-label=\"Add to Favorites\" data-favorite-icon=\"icon icon-wpcalc-dice\">\n    <span class=\"icon icon-shape-star-empty\" aria-hidden=\"true\"><\/span>\n  <\/button>\n  <div class=\"calcdash-favorite__tip\" aria-hidden=\"true\">\n   <span class=\"favorite-tooltip\" id=\"favorite-tooltip\"><\/span>\n  <\/div>\n  <span class=\"sr-only\" role=\"status\" id=\"favorite-status\"><\/span>\n<\/div><\/div><form action=\"https:\/\/wpcalc.com\/en\/life\/random-team-generator\/\" method=\"POST\" class=\"calculator\" id=\"calculator-67317\" data-post=\"67317\"><fieldset class=\"fieldset-input is-2\"><legend class=\"sr-only\">Input Fields<\/legend><div class=\"field is-single\" id=\"input-1\"><label for=\"field-1\">Names<\/label><textarea id=\"field-1\" name=\"names\">Alice, 9\nBob, 7\nCarol, 8\nDan, 5\nEve, 6\nFrank, 4<\/textarea><\/div><div class=\"field\" id=\"input-2\"><label for=\"field-2\">Split by<\/label><div class=\"grid grid-cols-1\"><select id=\"field-2\" name=\"split_by\"><option value=\"teams\" selected>Number of teams<\/option><option value=\"size\">People per team<\/option><\/select><svg class=\"pointer-events-none col-start-1 row-start-1 mr-2 size-5 self-center justify-self-end text-gray-500 sm:size-4\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\">\n              <path fill-rule=\"evenodd\" d=\"M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z\" clip-rule=\"evenodd\" \/>\n            <\/svg><\/div><\/div><div class=\"field\" id=\"input-3\"><label for=\"field-3\">Number of teams<\/label><input type=\"text\" name=\"number_of_teams\" id=\"field-3\" data-number inputmode=\"decimal\" autocomplete=\"off\" spellcheck=\"false\" min=\"2\" max=\"100\" value=\"3\"\/><\/div><div class=\"field\" id=\"input-4\" hidden><label for=\"field-4\">People per team<\/label><input type=\"text\" name=\"people_per_team\" id=\"field-4\" data-number inputmode=\"decimal\" autocomplete=\"off\" spellcheck=\"false\" min=\"1\" max=\"100\" value=\"2\"\/><\/div><div class=\"field is-single\" id=\"input-5\"><label for=\"field-5\">Team names (optional)<\/label><input type=\"text\" name=\"team_names_optional\" id=\"field-5\" aria-describedby=\"calc-info-5\" placeholder=\"Team 1, Team 2\u2026\" step=\"any\" value=\"Sharks, Wolves, Eagles\"\/><small id=\"calc-info-5\">Comma-separated team names, e.g. &quot;Sharks, Wolves&quot;. Names left empty fall back to Team 1, Team 2\u2026<\/small><\/div><div class=\"field is-checkbox is-single\" id=\"input-6\"><input type=\"checkbox\" id=\"field-6\" value=\"1\" checked=\"checked\"\/><label for=\"field-6\">Balance by skill<\/label><\/div><div class=\"field is-checkbox is-single\" id=\"input-7\"><input type=\"checkbox\" id=\"field-7\" value=\"1\" checked=\"checked\"\/><label for=\"field-7\">Reshuffle teams (button trigger)<\/label><\/div><div class=\"field is-checkbox is-single\" id=\"input-8\"><input type=\"checkbox\" id=\"field-8\" value=\"1\" checked=\"checked\"\/><label for=\"field-8\">Copy teams as text (button trigger)<\/label><\/div><\/fieldset><div class=\"buttons\"><button type=\"submit\" data-text=\"Re-Calculate\" id=\"calculate-button\" data-post=\"67317\">Calculate<\/button><button type=\"reset\">Reset<\/button><\/div><div class=\"field is-checkbox hidden!\" id=\"field-auto-calc\"><input type=\"checkbox\" id=\"auto-calc\"><label for=\"auto-calc\">Calculate automatically<\/label><small>If enabled, the result will update automatically when you change any value.<\/small><\/div><div class=\"fieldset-result is-hidden\" aria-labelledby=\"result-title\" aria-live=\"polite\" role=\"region\"> <h3 class=\"result-title bg-gradient-to-r from-primary-50 to-gray-50 dark:from-primary-900 dark:to-gray-800\" id=\"result-title\"><span class=\"icon icon-s-pulse\" aria-hidden=\"true\"><\/span> Your Teams<\/h3><div class=\"result-box\"><div class=\"field-result is-column\" id=\"output-1\"><span class=\"field-title\"><span>Your teams<\/span><\/span><span class=\"field-value\" id=\"result-1\"><\/span><button type=\"button\" class=\"copy-result\" data-tooltip=\"Copy Result\" aria-label=\"Copy Result\"><span class=\"copy-icon icon icon-document-copy\" aria-hidden=\"true\"><\/span><\/button><\/div><div class=\"field-result\" id=\"output-2\"><span class=\"field-title\"><span>Number of teams<\/span><\/span><span class=\"field-value\" id=\"result-2\"><\/span><button type=\"button\" class=\"copy-result\" data-tooltip=\"Copy Result\" aria-label=\"Copy Result\"><span class=\"copy-icon icon icon-document-copy\" aria-hidden=\"true\"><\/span><\/button><\/div><div class=\"field-result\" id=\"output-3\"><span class=\"field-title\"><span>People per team<\/span><\/span><span class=\"field-value\" id=\"result-3\"><\/span><button type=\"button\" class=\"copy-result\" data-tooltip=\"Copy Result\" aria-label=\"Copy Result\"><span class=\"copy-icon icon icon-document-copy\" aria-hidden=\"true\"><\/span><\/button><\/div><div class=\"field-result\" id=\"output-4\"><span class=\"field-title\"><span>Skill spread (max \u2212 min total)<\/span><\/span><span class=\"field-value\" id=\"result-4\"><\/span><button type=\"button\" class=\"copy-result\" data-tooltip=\"Copy Result\" aria-label=\"Copy Result\"><span class=\"copy-icon icon icon-document-copy\" aria-hidden=\"true\"><\/span><\/button><\/div><div class=\"field-result is-column\" id=\"output-5\"><span class=\"field-title\"><span>Copy-ready text<\/span><\/span><span class=\"field-value\" id=\"result-5\"><\/span><button type=\"button\" class=\"copy-result\" data-tooltip=\"Copy Result\" aria-label=\"Copy Result\"><span class=\"copy-icon icon icon-document-copy\" aria-hidden=\"true\"><\/span><\/button><\/div><div class=\"field-result is-column\" id=\"output-6\"><span class=\"field-title\"><span>Method and notes<\/span><\/span><span class=\"field-value\" id=\"result-6\"><\/span><button type=\"button\" class=\"copy-result\" data-tooltip=\"Copy Result\" aria-label=\"Copy Result\"><span class=\"copy-icon icon icon-document-copy\" aria-hidden=\"true\"><\/span><\/button><\/div><\/div><div class=\"result-actions\"><button type=\"button\" class=\"copy-link\"><svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z\"\/><path d=\"M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z\"\/><\/svg><span class=\"copy-link__text\">Copy link to this calculation<\/span><\/button><span class=\"sr-only\" role=\"status\" id=\"copy-link-status\"><\/span><\/div><\/div><a href=\"#respond\" class=\"hidden transition-opacity duration-300 opacity-0 w-50 text-sm justify-center items-center gap-2 px-4 py-2 rounded bg-gray-200 text-gray-700 hover:bg-gray-300\" id=\"leave-comment\"><span class=\"icon icon-comments\" aria-hidden=\"true\"><\/span>Leave a Comment<\/a><\/form><\/section><section id=\"calc-reactions\" class=\"not-prose hidden my-12 bg-gradient-to-r from-primary-50 to-gray-50 border border-indigo-100 rounded-xl px-6 py-4 shadow-sm\" data-post=\"67317\" aria-live=\"polite\" aria-labelledby=\"calc-reactions-title\"><p id=\"calc-reactions-title\" class=\"text-sm text-gray-500 text-center mb-2\">How did this result make you feel?<\/p><div role=\"group\" aria-labelledby=\"calc-reactions-title\" class=\"grid grid-cols-3 sm:flex sm:flex-row sm:justify-around gap-4 sm:items-center sm:flex-wrap\"><button type=\"button\" aria-pressed=\"false\" class=\"reaction-btn flex flex-col items-center gap-1 text-sm text-gray-700 hover:text-primary-600 cursor-pointer transition-transform hover:scale-105\" data-reaction=\"like\"><span class=\"reaction-count\" data-reaction-count=\"like\">0<\/span><span class=\"reaction text-3xl\" aria-hidden=\"true\">\ud83d\ude00 <\/span><span class=\"reaction-description font-medium\">Like <\/span><\/button><button type=\"button\" aria-pressed=\"false\" class=\"reaction-btn flex flex-col items-center gap-1 text-sm text-gray-700 hover:text-primary-600 cursor-pointer transition-transform hover:scale-105\" data-reaction=\"helpful\"><span class=\"reaction-count\" data-reaction-count=\"helpful\">0<\/span><span class=\"reaction text-3xl\" aria-hidden=\"true\">\ud83d\udca1 <\/span><span class=\"reaction-description font-medium\">Helpful <\/span><\/button><button type=\"button\" aria-pressed=\"false\" class=\"reaction-btn flex flex-col items-center gap-1 text-sm text-gray-700 hover:text-primary-600 cursor-pointer transition-transform hover:scale-105\" data-reaction=\"confused\"><span class=\"reaction-count\" data-reaction-count=\"confused\">0<\/span><span class=\"reaction text-3xl\" aria-hidden=\"true\">\ud83d\ude15 <\/span><span class=\"reaction-description font-medium\">Confused <\/span><\/button><button type=\"button\" aria-pressed=\"false\" class=\"reaction-btn flex flex-col items-center gap-1 text-sm text-gray-700 hover:text-primary-600 cursor-pointer transition-transform hover:scale-105\" data-reaction=\"disappointed\"><span class=\"reaction-count\" data-reaction-count=\"disappointed\">0<\/span><span class=\"reaction text-3xl\" aria-hidden=\"true\">\ud83d\ude1e <\/span><span class=\"reaction-description font-medium\">Disappointed <\/span><\/button><button type=\"button\" aria-pressed=\"false\" class=\"reaction-btn flex flex-col items-center gap-1 text-sm text-gray-700 hover:text-primary-600 cursor-pointer transition-transform hover:scale-105\" data-reaction=\"inaccurate\"><span class=\"reaction-count\" data-reaction-count=\"inaccurate\">0<\/span><span class=\"reaction text-3xl\" aria-hidden=\"true\">\u274c <\/span><span class=\"reaction-description font-medium\">Inaccurate <\/span><\/button><\/div><div id=\"reaction-message\" class=\"hidden mt-8 rounded-md border border-primary-100 bg-white\/50 backdrop-blur-sm px-4 py-2 text-sm text-center shadow-sm\"><\/div><\/section><div class=\"calcdash-ad not-prose calcdash-ad--calc_result calcdash-ad--in-article\"><ins class=\"adsbygoogle\" style=\"display:block\" data-ad-client=\"ca-pub-1721569815777345\" data-ad-slot=\"6317458308\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\"><\/ins><script>(adsbygoogle = window.adsbygoogle || []).push({});<\/script><\/div>\n<style id=\"wpcoderpro-inline-1\">.formula-box {\r\n\tborder-bottom: none !important;\r\n}<\/style><section class=\"formula-box\" aria-labelledby=\"formula-title\">\r\n\t<div id=\"formula-title\" class=\"not-prose font-display mb-4\"><span class=\"icon icon-formula\" aria-hidden=\"true\"><\/span><h2>Team Generator Formula<\/h2><\/div>\r\n\t<figure class=\"not-prose formula\">\r\n\t\t<figcaption class=\"formula-title\">Formula<\/figcaption>\r\n\t\t<div class=\"text-base text-gray-800\" id=\"formula\">\n\\[ \\text{base} = \\left\\lfloor \\frac{n}{T} \\right\\rfloor, \\quad \\text{extra} = n \\bmod T, \\quad s_i = \\text{base} + \\begin{cases} 1, &amp; i \\le \\text{extra} \\\\ 0, &amp; i &gt; \\text{extra} \\end{cases} \\]\n\\[ T = \\left\\lceil \\frac{n}{P} \\right\\rceil \\quad \\text{(when splitting by people per team)}, \\qquad \\Delta = S_{\\max} - S_{\\min} \\]\n<\/div>\r\n\t<\/figure>\r\n\t<\/p>\n<p><strong>Where:<\/strong><\/p>\n<ul>\n<li>\\(n\\) \u2014 number of people in the list<\/li>\n<li>\\(T\\) \u2014 number of teams<\/li>\n<li>\\(s_i\\) \u2014 size of team \\(i\\) (sizes differ by at most 1 person)<\/li>\n<li>\\(P\\) \u2014 desired people per team, when splitting by team size<\/li>\n<li>\\(S_{\\max}\\), \\(S_{\\min}\\) \u2014 highest and lowest team skill totals; \\(\\Delta\\) is the reported skill spread<\/li>\n<\/ul>\n<p>The first line guarantees that team sizes are as even as possible: everyone gets \\(\\text{base}\\) members, and the first \\(\\text{extra}\\) teams each receive one more. The skill spread \\(\\Delta\\) tells you how far apart the strongest and weakest teams are; with skill balancing on, the generator tries to push \\(\\Delta\\) toward 0.<\/p>\n<p>\r\n<\/section>\n<style id=\"wpcoderpro-inline-459\">.calculation-box {\r\n\tborder-bottom: none !important;\r\n}<\/style><section id=\"calculation\" class=\"calculation-box\" aria-labelledby=\"calculation-title\">\r\n\t<div id=\"calculation-title\" class=\"not-prose font-display\"><span class=\"icon icon-unordered-list\" aria-hidden=\"true\"><\/span><h2>Team Generator \u2013 Calculation Example<\/h2><\/div>\r\n\r\n<\/p>\n<p><strong>Example:<\/strong> six people with skill ratings \u2014 Alice 9, Bob 7, Carol 8, Dan 5, Eve 6, Frank 4 \u2014 split into 3 teams with the names Sharks, Wolves, Eagles, with <em>Balance by skill<\/em> ticked (the default values of the calculator).<\/p>\n<p>\\[ n = 6, \\quad T = 3 \\quad \\Rightarrow \\quad \\text{base} = \\left\\lfloor \\tfrac{6}{3} \\right\\rfloor = 2, \\quad \\text{extra} = 0 \\Rightarrow s_i = 2 \\]<\/p>\n<p>\\[ \\text{total skill} = 9 + 7 + 8 + 5 + 6 + 4 = 39, \\quad \\text{fair share} = \\tfrac{39}{3} = 13 \\]<\/p>\n<p>Sorted from highest to lowest and dealt to the team with the lowest running total, the pairing becomes \\(9+4\\), \\(8+5\\), \\(7+6\\):<\/p>\n<p>\\[ 9 + 4 = 13, \\quad 8 + 5 = 13, \\quad 7 + 6 = 13 \\quad \\Rightarrow \\quad \\Delta = 13 - 13 = 0 \\]<\/p>\n<p><strong>Result:<\/strong> Sharks \u2014 Alice (9), Frank (4); Wolves \u2014 Carol (8), Dan (5); Eagles \u2014 Bob (7), Eve (6). Each team has 2 people and a total skill of exactly 13, so the skill spread is 0 \u2014 a perfectly balanced draw.<\/p>\n<p>\n\r\n<\/section>\n<h2>How to use the calculator<\/h2>\n<ol>\n<li>Type your names into the <strong>Names<\/strong> box, one per line. To use skill balancing, add a number after a comma or semicolon, e.g. <code>Alice, 9<\/code> (a dot works for decimals, e.g. <code>Alice, 8.5<\/code>). Blank lines are ignored.<\/li>\n<li>Choose <strong>Split by<\/strong>: <em>Number of teams<\/em> or <em>People per team<\/em>. The matching field (<strong>Number of teams<\/strong> or <strong>People per team<\/strong>) appears below it.<\/li>\n<li>Optionally enter comma-separated <strong>Team names (optional)<\/strong>, such as <code>Sharks, Wolves, Eagles<\/code>. Any team without a name falls back to Team 1, Team 2\u2026<\/li>\n<li>If your names carry skill numbers, keep <strong>Balance by skill<\/strong> ticked to even out the total skill per team; untick it for a purely random draw.<\/li>\n<li>Read your teams under <strong>Your Teams<\/strong>, along with the number of teams, people per team, and the skill spread. Press <strong>Shuffle again<\/strong> for a fresh draw or <strong>Copy as text<\/strong> to put the whole list on your clipboard.<\/li>\n<\/ol>\n<h2>What is a random team generator?<\/h2>\n<p>A random team generator takes a list of names and divides it into teams without any bias \u2014 the digital equivalent of drawing names out of a hat, but faster and fairer. It is handy for splitting a class into project groups, organizing a sports pick-up game, assigning workshop tables, or creating random pairings for a tournament or secret Santa.<\/p>\n<p>Fairness here means two things. First, no person and no split is favored: the list is shuffled with the Fisher\u2013Yates algorithm using cryptographically secure random numbers (<code>crypto.getRandomValues<\/code>), so every possible division into teams is equally likely. Second, the teams are even in size: sizes never differ by more than one person, so nobody ends up on a lonely team of one while others play in a crowd.<\/p>\n<p>The optional skill balancing adds a third layer of fairness. Each person can carry a number \u2014 a rating, a handicap, a score from last week, a Ping-Pong ranking \u2014 and the generator deals people so that the <em>totals<\/em> per team come out as close as possible. People are sorted from the highest skill to the lowest, and each one joins the eligible team with the smallest running total. The <strong>Skill spread<\/strong> value in the results (the difference between the strongest and weakest team) tells you how well it worked: 0 means perfectly even totals, and small values mean the match should be competitive.<\/p>\n<p>Note that with skills turned on the draw is only partially random: team sizes and evenness are guaranteed, and the totals are balanced, but a purely random split is no longer the goal. If you want a completely unpredictable draw instead \u2014 like a <a href=\"https:\/\/wpcalc.com\/en\/life\/spin-the-wheel-random-wheel-spinner\/\">random wheel spinner<\/a> or a <a href=\"https:\/\/wpcalc.com\/en\/life\/coin-flip-heads-or-tails\/\">coin flip<\/a> \u2014 untick the balancing box, or try our <a href=\"https:\/\/wpcalc.com\/en\/life\/dice-roller\/\">dice roller<\/a> for quick random decisions.<\/p>\n<h2>Limitations and practical tips<\/h2>\n<ul>\n<li>The list accepts 2 to 200 names, up to 120 characters per line. Skill numbers must be between 0 and 1000 and can use a decimal point.<\/li>\n<li>Names without a skill number count as 0 in the totals. If you mix named skills and plain names, the spread can only be so small \u2014 give everyone a number for the best results.<\/li>\n<li>Skill balancing is a fast greedy method, not an exhaustive search. For everyday lists it lands on the balanced split, but for very tricky combinations of numbers a mathematically perfect split may exist that the calculator misses by a hair.<\/li>\n<li>When you split by <em>People per team<\/em> and the list does not divide evenly, the last team simply gets the leftover people \u2014 the results note mentions this explicitly.<\/li>\n<li>Teams keep their members until something changes: editing a name, changing the split, or pressing <strong>Shuffle again<\/strong> produces a new draw. This lets you copy or screenshot a result without it changing under you.<\/li>\n<li>Because the shuffle comes from the browser's cryptographic random source, the draws are not reproducible, and no name list is stored anywhere \u2014 everything happens locally in your browser.<\/li>\n<li>For single winners rather than teams \u2014 picking one name from a hat, choosing who goes first \u2014 a coin flip or a random drawing tool fits better than team splitting.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Enter a list of names and this random team generator splits them into fair teams instantly \u2014 choose the number of teams or people per team, balance total skill per team, and copy the result with one click.<\/p>\n","protected":false},"author":3168,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6],"tags":[101],"class_list":["post-67317","post","type-post","status-publish","format-standard","hentry","category-life","tag-games-chance"],"acf":[],"_links":{"self":[{"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/posts\/67317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/users\/3168"}],"replies":[{"embeddable":true,"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/comments?post=67317"}],"version-history":[{"count":1,"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/posts\/67317\/revisions"}],"predecessor-version":[{"id":67318,"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/posts\/67317\/revisions\/67318"}],"wp:attachment":[{"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/media?parent=67317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/categories?post=67317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpcalc.com\/en\/wp-json\/wp\/v2\/tags?post=67317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}