World Cup group stage: Difference between revisions
m
→{{header|Wren}}: Minor tidy
m (→{{header|Wren}}: Minor tidy) |
|||
(13 intermediate revisions by 7 users not shown) | |||
Line 1:
{{task}}
It's World Cup season (or at least it was when this page was created)!
The World Cup is an international football/soccer tournament that happens every 4 years. Countries put their international teams together in the years between tournaments and qualify for the tournament based on their performance in other international games. Once a team has qualified they are put into a group with 3 other teams.
For the first part of the World Cup tournament the teams play in "group stage" games where each of the four teams in a group [[wp:Round-robin tournament|plays all three other teams once]]. The results of these games determine which teams will move on to the "knockout stage" which is a standard single-elimination tournament. The two teams from each group with the most standings points move on to the knockout stage.
Each game can result in a win for one team and a loss for the other team or it can result in a draw/tie for each team.
:::* A win is worth three points.
:::* A draw/tie is worth one point.
:::* A loss is worth zero points.
;Task:
:* Generate all possible outcome combinations for the six group stage games. With three possible outcomes for each game there should be 3<sup>6</sup> = 729 of them.
:* Calculate the standings points for each team with each combination of outcomes.
:* Show a histogram (graphical, ASCII art, or straight counts--whichever is easiest/most fun) of the standings points for all four teams over all possible outcomes.
Don't worry about tiebreakers as they can get complicated. We are basically looking to answer the question "if a team gets x standings points, where can they expect to end up in the group standings?".
<small>''Hint: there should be no possible way to end up in second place with less than two points as well as no way to end up in first with less than three. Oddly enough, there is no way to get 8 points at all.''</small>
<br><br>
=={{header|11l}}==
{{trans|Go}}
<syntaxhighlight lang="11l">V games = [‘12’, ‘13’, ‘14’, ‘23’, ‘24’, ‘34’]
V results = ‘000000’
F numberToBase(=n, b)
I n == 0
R ‘0’
V digits = ‘’
L n != 0
digits ‘’= String(Int(n % b))
n I/= b
R reversed(digits)
F nextResult()
I :results == ‘222222’
R 0B
V res = Int(:results, radix' 3) + 1
:results = numberToBase(res, 3).zfill(6)
R 1B
V points = [[0] * 10] * 4
L
V records = [0] * 4
L(i) 0 .< games.len
S results[i]
‘2’
records[games[i][0].code - ‘1’.code] += 3
‘1’
records[games[i][0].code - ‘1’.code]++
records[games[i][1].code - ‘1’.code]++
‘0’
records[games[i][1].code - ‘1’.code] += 3
records.sort()
L(i) 4
points[i][records[i]]++
I !nextResult()
L.break
print(|‘POINTS 0 1 2 3 4 5 6 7 8 9
-------------------------------------------------------------’)
V places = [‘1st’, ‘2nd’, ‘3rd’, ‘4th’]
L(i) 4
print(places[i], end' ‘ place ’)
L(j) 10
print(‘#<5’.format(points[3 - i][j]), end' ‘’)
print()</syntaxhighlight>
{{out}}
<pre>
POINTS 0 1 2 3 4 5 6 7 8 9
-------------------------------------------------------------
1st place 0 0 0 1 14 148 152 306 0 108
2nd place 0 0 4 33 338 172 164 18 0 0
3rd place 0 18 136 273 290 4 8 0 0 0
4th place 108 306 184 125 6 0 0 0 0 0
</pre>
=={{header|C}}==
{{trans|C++}}
<syntaxhighlight lang="c">#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// to supply to qsort
int compare(const void *a, const void *b) {
int int_a = *((int *)a);
int int_b = *((int *)b);
return (int_a > int_b) - (int_a < int_b);
}
char results[7];
bool next_result() {
char *ptr = results + 5;
int num = 0;
size_t i;
// check if the space has been examined
if (strcmp(results, "222222") == 0) {
return false;
}
// translate the base 3 string back to a base 10 integer
for (i = 0; results[i] != 0; i++) {
int d = results[i] - '0';
num = 3 * num + d;
}
// to the next value to process
num++;
// write the base 3 string (fixed width)
while (num > 0) {
int rem = num % 3;
num /= 3;
*ptr-- = rem + '0';
}
// zero fill the remainder
while (ptr > results) {
*ptr-- = '0';
}
return true;
}
char *games[6] = { "12", "13", "14", "23", "24", "34" };
char *places[4] = { "1st", "2nd", "3rd", "4th" };
int main() {
int points[4][10];
size_t i, j;
strcpy(results, "000000");
for (i = 0; i < 4; i++) {
for (j = 0; j < 10; j++) {
points[i][j] = 0;
}
}
do {
int records[] = { 0, 0, 0, 0 };
for (i = 0; i < 6; i++) {
switch (results[i]) {
case '2':
records[games[i][0] - '1'] += 3;
break;
case '1':
records[games[i][0] - '1']++;
records[games[i][1] - '1']++;
break;
case '0':
records[games[i][1] - '1'] += 3;
break;
default:
break;
}
}
qsort(records, 4, sizeof(int), compare);
for (i = 0; i < 4; i++) {
points[i][records[i]]++;
}
} while (next_result());
printf("POINTS 0 1 2 3 4 5 6 7 8 9\n");
printf("-----------------------------------------------------------\n");
for (i = 0; i < 4; i++) {
printf("%s place", places[i]);
for (j = 0; j < 10; j++) {
printf("%5d", points[3 - i][j]);
}
printf("\n");
}
return 0;
}</syntaxhighlight>
{{out}}
<pre>POINTS 0 1 2 3 4 5 6 7 8 9
-----------------------------------------------------------
1st place 0 0 0 1 14 148 152 306 0 108
2nd place 0 0 4 33 338 172 164 18 0 0
3rd place 0 18 136 273 290 4 8 0 0 0
4th place 108 306 184 125 6 0 0 0 0 0</pre>
=={{header|C++}}==
{{trans|Go}}
<
#include <array>
#include <iomanip>
Line 100 ⟶ 283:
}
return 0;
}</
{{out}}
<pre>POINTS 0 1 2 3 4 5 6 7 8 9
Line 114 ⟶ 297:
<!-- By Martin Freedman, 17/01/2018 -->
Unlike the Python solution, this does not use a library for combinations and cartesian products but provides 4 1-liner Linq methods.
<
using System.Collections.Generic;
using System.Linq;
Line 195 ⟶ 378:
}
}
</syntaxhighlight>
Produces:
<pre>
Line 208 ⟶ 391:
=={{header|Common Lisp}}==
{{works with|SBCL|1.4.9}}
<
(let ((scoring (vector 0 1 3))
(histo (list (vector 0 0 0 0 0 0 0 0 0 0) (vector 0 0 0 0 0 0 0 0 0 0)
Line 240 ⟶ 423:
(dotimes (i (length el))
(format t "~3D " (aref el i)))
(format t "~%"))</
{{out}}
<pre>
Line 252 ⟶ 435:
This imports the module of the third D solution of the Combinations Task.
{{trans|Python}}
<
import std.stdio, std.range, std.array, std.algorithm, combinations3;
Line 271 ⟶ 454:
}
writefln("%(%s\n%)", histo[].retro);
}</
{{out}}
<pre>[0, 0, 0, 1, 14, 148, 152, 306, 0, 108]
Line 279 ⟶ 462:
This alternative version is not fully idiomatic D, it shows what to currently do to tag the main function of the precedent version as @nogc.
<
immutable uint[2][6] combs = 4u.iota.array.combinations(2).array;
Line 308 ⟶ 491:
printf("\n");
}
}</
{{out}}
<pre>0 0 0 1 14 148 152 306 0 108
Line 317 ⟶ 500:
=={{header|Elena}}==
{{trans|Java}}
ELENA
<
import extensions;
Line 338 ⟶ 521:
}
{
var points := IntMatrix.allocate(4, 10);
Line 347 ⟶ 530:
var records := new int[]{0,0,0,0};
for(int i := 0
{
var r := results[i];
Line 361 ⟶ 544:
records := records.ascendant();
for(int i := 0
{
points[i][records[i]] := points[i][records[i]] + 1
Line 373 ⟶ 556:
});
}
}</
{{out}}
<pre>
Line 384 ⟶ 567:
=={{header|Elixir}}==
{{trans|Erlang}}
<
def group_stage do
results = [[3,0],[1,1],[0,3]]
Line 415 ⟶ 598:
:io.format(format, Enum.to_list(0..9))
IO.puts String.duplicate(" ---", 10)
Enum.each(World_Cup.group_stage, fn x -> :io.format(format, x) end)</
{{out}}
Line 430 ⟶ 613:
This solution take advantage of the expressiveness power of the list comprehensions expressions. Function ''combos'' is copied from [http://panduwana.wordpress.com/2010/04/21/combination-in-erlang/ panduwana blog].
<
-module(world_cup).
Line 464 ⟶ 647:
combinations([H|T],List2) ->
[ [{H,Item} | Comb] || Item <- List2, Comb <- combinations(T,List2)].
</syntaxhighlight>
Output:
Line 476 ⟶ 659:
=={{header|Go}}==
{{trans|Kotlin}}
<
import (
Line 529 ⟶ 712:
fmt.Println()
}
}</
{{out}}
Line 545 ⟶ 728:
There might be a more elegant way of expressing this.
<
outcome=: 3 0,1 1,:0 3
pairs=: (i.4) e."1(2 comb 4)
standings=: +/@:>&>,{<"1<"1((i.4) e."1 pairs)#inv"1/ outcome</
Here, standings represents all the possible outcomes:
<
729 4</
Of course, not all of them are distinct:
<
556 4</
With only 556 distinct outcomes, there must be some repeats. Looking at this more closely (gathering the outcomes in identical groups, counting how many members are in each group, and then considering the unique list of group sizes):
<
1 2 3 4 6</
Some standings can be attained two different ways, some three different ways, some four different ways, and some six different ways. Let's look at the one with six different possibilities:
<
4 4 4 4</
That's where every team gets 4 standing.
Line 571 ⟶ 754:
How about outcomes which can be achieved four different ways?
<
6 6 3 3
6 3 3 6
Line 577 ⟶ 760:
3 6 6 3
3 6 3 6
3 3 6 6</
Ok, that's simple. So how about a histogram. Actually, it's not clear what a histogram should represent. There are four different teams, and possible standings range from 0 through 9, so we could show the outcomes for each team:
<
27 81 81 108 162 81 81 81 0 27
27 81 81 108 162 81 81 81 0 27
27 81 81 108 162 81 81 81 0 27
27 81 81 108 162 81 81 81 0 27</
Each team has the same possible outcomes. So instead, let's order the results so that instead of seeing each team as a distinct entity we are seeing the first place, second place, third place and fourth place team (and where there's a tie, such as 4 4 4 4, we just arbitrarily say that one of the tied teams gets in each of the tied places...):
<
0 0 0 1 14 148 152 306 0 108
0 0 4 33 338 172 164 18 0 0
0 18 136 273 290 4 8 0 0 0
108 306 184 125 6 0 0 0 0 0</
Here, the first row represents whichever team came in first in each outcome, the second row represents the second place team and so on.
Line 602 ⟶ 785:
{{works with|Java|1.5+}}
This example codes results as a 6-digit number in base 3. Each digit is a game. A 2 is a win for the team on the left, a 1 is a draw, and a 0 is a loss for the team on the left.
<
public class GroupStage{
Line 642 ⟶ 825:
System.out.println("Fourth place: " + Arrays.toString(points[0]));
}
}</
{{out}}
<pre>First place: [0, 0, 0, 1, 14, 148, 152, 306, 0, 108]
Line 651 ⟶ 834:
=={{header|Julia}}==
{{trans|Java}}
<
games = ["12", "13", "14", "23", "24", "34"]
results = "000000"
Line 691 ⟶ 874:
worldcupstages()
</
<pre>
First place: [0, 0, 0, 1, 14, 148, 152, 306, 0, 108]
Line 701 ⟶ 884:
=={{header|Kotlin}}==
{{trans|Java}}
<
val games = arrayOf("12", "13", "14", "23", "24", "34")
Line 736 ⟶ 919:
println()
}
}</
{{out}}
Line 747 ⟶ 930:
4th place 108 306 184 125 6 0 0 0 0 0
</pre>
=={{header|Lua}}==
{{trans|C++}}
<syntaxhighlight lang="lua">function array1D(a, d)
local m = {}
for i=1,a do
table.insert(m, d)
end
return m
end
function array2D(a, b, d)
local m = {}
for i=1,a do
table.insert(m, array1D(b, d))
end
return m
end
function fromBase3(num)
local out = 0
for i=1,#num do
local c = num:sub(i,i)
local d = tonumber(c)
out = 3 * out + d
end
return out
end
function toBase3(num)
local ss = ""
while num > 0 do
local rem = num % 3
num = math.floor(num / 3)
ss = ss .. tostring(rem)
end
return string.reverse(ss)
end
games = { "12", "13", "14", "23", "24", "34" }
results = "000000"
function nextResult()
if results == "222222" then
return false
end
local res = fromBase3(results)
results = string.format("%06s", toBase3(res + 1))
return true
end
points = array2D(4, 10, 0)
repeat
local records = array1D(4, 0)
for i=1,#games do
if results:sub(i,i) == '2' then
local j = tonumber(games[i]:sub(1,1))
records[j] = records[j] + 3
elseif results:sub(i,i) == '1' then
local j = tonumber(games[i]:sub(1,1))
records[j] = records[j] + 1
j = tonumber(games[i]:sub(2,2))
records[j] = records[j] + 1
elseif results:sub(i,i) == '0' then
local j = tonumber(games[i]:sub(2,2))
records[j] = records[j] + 3
end
end
table.sort(records)
for i=1,#records do
points[i][records[i]+1] = points[i][records[i]+1] + 1
end
until not nextResult()
print("POINTS 0 1 2 3 4 5 6 7 8 9")
print("-------------------------------------------------------------")
places = { "1st", "2nd", "3rd", "4th" }
for i=1,#places do
io.write(places[i] .. " place")
local row = points[i]
for j=1,#row do
io.write(string.format("%5d", points[5 - i][j]))
end
print()
end</syntaxhighlight>
{{out}}
<pre>POINTS 0 1 2 3 4 5 6 7 8 9
-------------------------------------------------------------
1st place 0 0 0 1 14 148 152 306 0 108
2nd place 0 0 4 33 338 172 164 18 0 0
3rd place 0 18 136 273 290 4 8 0 0 0
4th place 108 306 184 125 6 0 0 0 0 0</pre>
=={{header|Nim}}==
{{trans|Python}}
{{libheader|itertools}}
<syntaxhighlight lang="nim">import algorithm, sequtils, strutils
import itertools
const Scoring = [0, 1, 3]
var histo: array[4, array[10, int]]
for results in product([0, 1, 2], repeat = 6):
var s: array[4, int]
for (r, g) in zip(results, toSeq(combinations([0, 1, 2, 3], 2))):
s[g[0]] += Scoring[r]
s[g[1]] += Scoring[2 - r]
for i, v in sorted(s):
inc histo[i][v]
for x in reversed(histo):
echo x.mapIt(($it).align(3)).join(" ")</syntaxhighlight>
{{out}}
<pre> 0 0 0 1 14 148 152 306 0 108
0 0 4 33 338 172 164 18 0 0
0 18 136 273 290 4 8 0 0 0
108 306 184 125 6 0 0 0 0 0</pre>
=={{header|Perl}}==
{{trans|Raku}}
<
@scoring = (0, 1, 3);
Line 770 ⟶ 1,077:
$fmt = ('%3d ') x 10 . "\n";
printf $fmt, @$_ for reverse @histo;</
{{out}}
<pre> 0 0 0 1 14 148 152 306 0 108
Line 782 ⟶ 1,089:
In this case I used both, and modified both to fit their particular tasks (games and results).<br>
Some credit is due to the Kotlin entry for inspiring some of the innermost code.
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">function</span> <span style="color: #000000;">game_combinations</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">res</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">pool</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">needed</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">sequence</span> <span style="color: #000000;">chosen</span><span style="color: #0000FF;">={})</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">needed</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">chosen</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- collect the full sets</span>
<span style="color: #008080;">else</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">chosen</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">?</span><span style="color: #000000;">1</span><span style="color: #0000FF;">:</span><span style="color: #000000;">chosen</span><span style="color: #0000FF;">[$]+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">to</span> <span style="color: #000000;">pool</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">game_combinations</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pool</span><span style="color: #0000FF;">,</span><span style="color: #000000;">needed</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">chosen</span><span style="color: #0000FF;">),</span><span style="color: #000000;">i</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">games</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">game_combinations</span><span style="color: #0000FF;">({},</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- ie {{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}}</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">scores</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}}</span> <span style="color: #000080;font-style:italic;">-- ie win/draw/lose</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">points</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10</span><span style="color: #0000FF;">),</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- 1st..4th place, 0..9 points</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">result_combinations</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">pool</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">needed</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">sequence</span> <span style="color: #000000;">chosen</span><span style="color: #0000FF;">={})</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">needed</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #000080;font-style:italic;">-- (here, chosen is {1,1,1,1,1,1}..{3,3,3,3,3,3}, 729 in all)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">results</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">chosen</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">team1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">team2</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">games</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">points1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">points2</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">scores</span><span style="color: #0000FF;">[</span><span style="color: #000000;">chosen</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]]</span>
<span style="color: #000000;">results</span><span style="color: #0000FF;">[</span><span style="color: #000000;">team1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">points1</span>
<span style="color: #000000;">results</span><span style="color: #0000FF;">[</span><span style="color: #000000;">team2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">points2</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #000000;">results</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sort</span><span style="color: #0000FF;">(</span><span style="color: #000000;">results</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">4</span> <span style="color: #008080;">do</span> <span style="color: #000000;">points</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">results</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">else</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">pool</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">result_combinations</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pool</span><span style="color: #0000FF;">,</span><span style="color: #000000;">needed</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">chosen</span><span style="color: #0000FF;">),</span><span style="color: #000000;">i</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000080;font-style:italic;">-- accumulate the results of all possible outcomes (1..3) of 6 games:</span>
<span style="color: #000000;">result_combinations</span><span style="color: #0000FF;">(</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (the result ends up in points)
--result_combinations(length(scores),length(games)) -- (equivalent)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">fmt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%5d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10</span><span style="color: #0000FF;">))&</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">cardinals</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"st"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"nd"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"rd"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"th"</span><span style="color: #0000FF;">}</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" points "</span><span style="color: #0000FF;">&</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">&</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #008000;">'-'</span><span style="color: #0000FF;">,</span><span style="color: #000000;">69</span><span style="color: #0000FF;">)&</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">tagset</span><span style="color: #0000FF;">(</span><span style="color: #000000;">9</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">4</span> <span style="color: #008080;">do</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%d%s place "</span><span style="color: #0000FF;">&</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cardinals</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]}&</span><span style="color: #000000;">points</span><span style="color: #0000FF;">[</span><span style="color: #000000;">5</span><span style="color: #0000FF;">-</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
Line 839 ⟶ 1,148:
=={{header|Python}}==
<
scoring = [0, 1, 3]
Line 854 ⟶ 1,163:
for x in reversed(histo):
print x</
{{out}}
<pre>[0, 0, 0, 1, 14, 148, 152, 306, 0, 108]
Line 862 ⟶ 1,171:
=={{header|Racket}}==
<
;; Tim Brown 2014-09-15
(define (sort-standing stndg#)
Line 921 ⟶ 1,230:
4 "Sack the team!"))
(show-histogram histogram captions)</
{{out}}
Line 934 ⟶ 1,243:
{{Works with|rakudo|2016.12}}
{{trans|Python}}
<syntaxhighlight lang="raku"
my @histo = [0 xx 10] xx 4;
Line 950 ⟶ 1,259:
}
say .fmt('%3d',' ') for @histo.reverse;</
{{out}}
<pre> 0 0 0 1 14 148 152 306 0 108
Line 960 ⟶ 1,269:
===version 1, static game sets===
{{trans|Java}}
<
results = '000000' /*start with left teams all losing */
games = '12 13 14 23 24 34'
Line 1,032 ⟶ 1,341:
End
End
Return</
{{out}}
<pre>[0, 0, 0, 1, 14, 148, 152, 306, 0, 108]
Line 1,062 ⟶ 1,371:
:::* used lowercase spellings of REXX keywords for easier reading.
:::* removed some deadcode (code not needed or code not used).
:::* elided unnecessary/superfluous '''do''' groups and/or loops.
:::* aligned the numbers in the output (used a consisted width/length).
:::* added whitespace within assignments and other REXX clauses.
Line 1,079 ⟶ 1,388:
:::* used an idiomatic method to show the place winners.
:::* added the capability to simulate a ''Cricket World Cup''.
<
parse arg teams win . /*obtain optional argument from the CL.*/
if teams=='' | teams=="," then teams= 4 /*Not specified? Then use the default.*/
Line 1,118 ⟶ 1,427:
end /*m*/
say left('', 15) "╚"translate( $$, '═╧', "─│")'╝' /*display the bottom sep for title.*/
exit
/*──────────────────────────────────────────────────────────────────────────────────────*/
nextResult: if results==setLimit then return 0 /* [↓] do arithmetic in base three. */
Line 1,133 ⟶ 1,442:
end /*j*/; return
/*──────────────────────────────────────────────────────────────────────────────────────*/
th: arg th; return (th/1) || word('th st nd rd', 1 +(th//10) *(th//100%10\==1)*(th//10<4))</
Programming note: additional code was add to support a nice-looking grid for displaying the output.
Line 1,194 ⟶ 1,503:
=={{header|Ruby}}==
<
matches = teams.combination(2).to_a
outcomes = [:win, :draw, :loss]
Line 1,220 ⟶ 1,529:
puts fmt % [" ", *0..9]
puts fmt % ["-", *["---"]*10]
places_histogram.each.with_index(1) {|hist,place| puts fmt % [place, *hist]}</
{{out}}
<pre> : 0 1 2 3 4 5 6 7 8 9
Line 1,230 ⟶ 1,539:
=={{header|Scala}}==
<
val games = Array("12", "13", "14", "23", "24", "34")
val points = Array.ofDim[Int](4, 10) //playing 3 games, points range from 0 to 9
Line 1,268 ⟶ 1,577:
println("Fourth place: " + points(0).mkString("[",", ","]"))
}</
=={{header|Tcl}}==
{{trans|Java}}
{{works with|Tcl|8.6}}
<
proc groupStage {} {
foreach n {0 1 2 3} {
Line 1,301 ⟶ 1,610:
foreach nth {First Second Third Fourth} nums [groupStage] {
puts "$nth place:\t[join [lmap n $nums {format %3s $n}] {, }]"
}</
{{out}}
<pre>
Line 1,309 ⟶ 1,618:
Fourth place: 108, 306, 184, 125, 6, 0, 0, 0, 0, 0
</pre>
=={{header|Visual Basic .NET}}==
{{trans|C++}}
<syntaxhighlight lang="vbnet">Imports System.Text
Module Module1
Dim games As New List(Of String) From {"12", "13", "14", "23", "24", "34"}
Dim results = "000000"
Function FromBase3(num As String) As Integer
Dim out = 0
For Each c In num
Dim d = Asc(c) - Asc("0"c)
out = 3 * out + d
Next
Return out
End Function
Function ToBase3(num As Integer) As String
Dim ss As New StringBuilder
While num > 0
Dim re = num Mod 3
num \= 3
ss.Append(re)
End While
Return New String(ss.ToString().Reverse().ToArray())
End Function
Function NextResult() As Boolean
If results = "222222" Then
Return False
End If
Dim res = FromBase3(results)
Dim conv = ToBase3(res + 1)
results = conv.PadLeft(6, "0"c)
Return True
End Function
Sub Main()
Dim points(0 To 3, 0 To 9) As Integer
Do
Dim records(0 To 3) As Integer
For index = 0 To games.Count - 1
Select Case results(index)
Case "2"c
records(Asc(games(index)(0)) - Asc("1"c)) += 3
Case "1"c
records(Asc(games(index)(0)) - Asc("1"c)) += 1
records(Asc(games(index)(1)) - Asc("1"c)) += 1
Case "0"c
records(Asc(games(index)(1)) - Asc("1"c)) += 3
End Select
Next
Array.Sort(records)
For index = 0 To records.Length - 1
Dim t = records(index)
points(index, t) += 1
Next
Loop While NextResult()
Console.WriteLine("POINTS 0 1 2 3 4 5 6 7 8 9")
Console.WriteLine("-------------------------------------------------------------")
Dim places As New List(Of String) From {"1st", "2nd", "3rd", "4th"}
For i = 0 To places.Count - 1
Console.Write("{0} place", places(i))
For j = 0 To 9
Console.Write("{0,5}", points(3 - i, j))
Next
Console.WriteLine()
Next
End Sub
End Module</syntaxhighlight>
{{out}}
<pre>POINTS 0 1 2 3 4 5 6 7 8 9
-------------------------------------------------------------
1st place 0 0 0 1 14 148 152 306 0 108
2nd place 0 0 4 33 338 172 164 18 0 0
3rd place 0 18 136 273 290 4 8 0 0 0
4th place 108 306 184 125 6 0 0 0 0 0</pre>
=={{header|Wren}}==
Line 1,314 ⟶ 1,710:
{{libheader|Wren-fmt}}
{{libheader|Wren-sort}}
<
import "./sort" for Sort
var games = ["12", "13", "14", "23", "24", "34"]
Line 1,353 ⟶ 1,749:
points[3-i].each { |p| Fmt.write("$5d", p) }
System.print()
}</
{{out}}
Line 1,367 ⟶ 1,763:
=={{header|Yabasic}}==
{{trans|Java}}
<
dim game$(6)
Line 1,479 ⟶ 1,875:
next
print
next</
=={{header|zkl}}==
{{trans|D}}{{trans|Python}}
<
scoring:=T(0,1,3);
histo :=(0).pump(4,List().write,(0).pump(10,List().write,0).copy); //[4][10] of zeros
Line 1,496 ⟶ 1,892:
foreach h,v in (histo.zip(s.sort())){ h[v]+=1; }
}
foreach h in (histo.reverse()){ println(h.apply("%3d ".fmt).concat()) }</
{{out}}
<pre>
|