Placement Aptitude (Quant, Logical, Verbal) Module 12 – Arrangements, relations and puzzles
Puzzles: floors, boxes and schedules
Puzzles for aptitude tests: grids that match people to several attributes, floor, box and schedule puzzles, and conditional rules in selections and leagues.
What you will learn
- Solve grid puzzles that match people to several attributes
- Solve floor, box-stacking and scheduling puzzles
- Handle conditional rules in selection and tournament puzzles
Before you start
What you’ll learn · Before you start
What you will learn
- Solve grid puzzles that match people to several attributes
- Solve floor, box-stacking and scheduling puzzles
- Handle conditional rules in selection and tournament puzzles
Before you start
On this page
A multi-attribute puzzle gives a few people and several attributes, such as a city, a language, a floor or a day, with clues that link them; the answer is one value of each attribute for each person. The tool is a grid with one row per person and one column per value: tick a fact, cross an exclusion, and after every tick cross out the rest of its row and column. Floor, box and schedule puzzles add an order, so “above” and “immediately above” differ. Selection puzzles turn “if A, then B” into a rule that forbids only A without B, and league puzzles start from the number of matches, n(n − 1)/2. This lesson solves five examples, checks the main grid against all 518,400 assignments, and ends with an untimed set of ten.
The grid and how a mark spreads
Draw one grid per pair of attributes: intern and city, intern and language, city and language. Then use four rules:
- A tick crosses out the rest of its row and column: each person has one value, each value one person.
- A row or column with one blank left gets a tick there.
- A link (“the intern from Kochi writes Java”) is a tick in the grid of those two attributes, and it copies ticks and crosses between the other grids.
- When the rules stall, tick the tightest open cell in pencil; cross it out if a clue breaks.
How four linking clues and one cross fill the city and language grid
Text description of the diagram
A grid with six cities as rows (Bengaluru, Chennai, Hyderabad, Jaipur, Kochi, Pune) and six languages as columns (Go, Java, Kotlin, Python, Rust, TypeScript). Four ticks come straight from clues: Chennai–Go, Jaipur–Kotlin, Kochi–Java and Pune–Python. Each tick fills the rest of its row and its column with crosses, which leaves only a two by two block open: Bengaluru and Hyderabad against Rust and TypeScript. A clue puts a cross at Hyderabad–Rust, so TypeScript is the only cell left for Hyderabad and Rust the only cell left for Bengaluru; those two ticks are circled. Every other cell holds a cross.
Order puzzles: floors, boxes and days
Floors and stacked boxes are a line from the bottom up, numbered as the puzzle says: a ground floor sits below floor
- “Above” means at any higher place, “immediately above” the next one up, and “exactly one floor between” means numbers that differ by 2. Days form a line too: a week from Monday to Sunday does not come back to Monday unless the schedule repeats.
Selection rules and league tables
“If A is chosen, B is chosen” is false only when A is in and B is out, so it also means “if B is out, A is out”, but not “if B is in, A is in”; “A only if B” says the same. In a league where every team plays every other once, n teams play n(n − 1)/2 matches. With 2 points a win and 1 each for a draw, every match gives out 2 points, so the total is fixed; with 3 points a win, each draw lowers it by 1.
Five solved examples
-
A grid of interns. Aarav, Bhumi, Chirag, Dia, Eshan and Fatima come from Bengaluru, Chennai, Hyderabad, Jaipur, Kochi and Pune and write Go, Java, Kotlin, Python, Rust and TypeScript, one of each. The intern from Kochi writes Java. Bhumi writes neither Python nor Java and is not from Pune. Dia is from Bengaluru or Hyderabad and does not write TypeScript. The Python intern is from Pune. Fatima writes TypeScript. Aarav is not from Kochi, Pune or Chennai. The Go intern is from Chennai. Eshan is not from Pune. The Rust intern is not from Hyderabad. The Kotlin intern is from Jaipur.
Four clues link cities to languages, leaving Bengaluru and Hyderabad for Rust and TypeScript, and Rust is not from Hyderabad. So Fatima is from Hyderabad and Dia from Bengaluru; then Aarav is from Jaipur, Bhumi from Chennai, Eshan from Kochi and Chirag from Pune.
-
A hostel of seven floors. P to V live on floors 1 to 7. Exactly two floors lie between Q and T, R lives immediately above T, S lives above P but below U, P is not on floor 1, and Q lives immediately below U. U is above S, P and Q, so on floor 4 or higher; only floor 7 survives, and from the bottom: V, P, T, R, S, Q, U.
-
Boxes. Five boxes, P to T, are stacked: T at the bottom, Q immediately above P, one box between Q and S, and R above S. From the bottom: T, S, P, Q, R.
-
A selection. A team of three is chosen from Aman, Bina, Chetan, Diya and Eshwar. If Aman is chosen, Bina is too; Chetan and Diya are not both chosen; Eshwar is chosen only if Chetan is. Of 10 possible teams, three remain: Aman, Bina, Chetan; Aman, Bina, Diya; Bina, Chetan, Eshwar. Bina is in every one.
-
A league. Five colleges play each other once, 2 points a win and no draws. A wins all four, E loses all four, and B, C and D finish level. Ten matches give 20 points, so B, C and D have 4 each: each beat E, lost to A and won one of its two other matches. That happens in two ways, so who beat whom among them cannot be determined.
The program solves the grid by the four rules alone, checks it against every assignment, and lists what the other examples allow.
// The lesson's five solved examples: the intern grid solved by marking ticks and crosses the way a person does on
// paper (and checked against all 518,400 assignments), the hostel floors, a stack of boxes, a team selection with
// conditions, and a five-team league table.
/** Calls visit(order) for every order of 0..n-1 (Heap's method; the array is reused between calls). */
function eachOrder(n, visit) {
const a = Array.from({ length: n }, (_, i) => i);
const c = new Array(n).fill(0);
visit(a);
let i = 1;
while (i < n) {
if (c[i] < i) {
const j = i % 2 === 0 ? 0 : c[i];
const t = a[j];
a[j] = a[i];
a[i] = t;
visit(a);
c[i]++;
i = 1;
} else {
c[i] = 0;
i++;
}
}
}
// 1. Six interns, six cities, six languages.
const P = ['Aarav', 'Bhumi', 'Chirag', 'Dia', 'Eshan', 'Fatima'];
const C = ['Bengaluru', 'Chennai', 'Hyderabad', 'Jaipur', 'Kochi', 'Pune'];
const L = ['Go', 'Java', 'Kotlin', 'Python', 'Rust', 'TypeScript'];
const p = (x) => P.indexOf(x);
const c = (x) => C.indexOf(x);
const l = (x) => L.indexOf(x);
// Three grids of ticks (1), crosses (-1) and blanks (0): intern-city, intern-language and city-language.
const grid = (n) => Array.from({ length: n }, () => new Array(n).fill(0));
const PC = grid(6);
const PL = grid(6);
const CL = grid(6);
const trace = [];
let contradiction = false;
let marks = 0;
function mark(g, i, j, v, why) {
if (g[i][j] === v) return false;
if (g[i][j] !== 0) contradiction = true;
g[i][j] = v;
marks++;
if (v === 1) trace.push(why);
return true;
}
// The clues, as the ticks and crosses they give directly.
mark(CL, c('Kochi'), l('Java'), 1, 'clue 1: Kochi writes Java');
for (const x of ['Python', 'Java']) mark(PL, p('Bhumi'), l(x), -1);
mark(PC, p('Bhumi'), c('Pune'), -1);
for (const x of C) if (x !== 'Bengaluru' && x !== 'Hyderabad') mark(PC, p('Dia'), c(x), -1);
mark(PL, p('Dia'), l('TypeScript'), -1);
mark(CL, c('Pune'), l('Python'), 1, 'clue 4: Pune writes Python');
mark(PL, p('Fatima'), l('TypeScript'), 1, 'clue 5: Fatima writes TypeScript');
for (const x of ['Kochi', 'Pune', 'Chennai']) mark(PC, p('Aarav'), c(x), -1);
mark(CL, c('Chennai'), l('Go'), 1, 'clue 7: Chennai writes Go');
mark(PC, p('Eshan'), c('Pune'), -1);
mark(CL, c('Hyderabad'), l('Rust'), -1);
mark(CL, c('Jaipur'), l('Kotlin'), 1, 'clue 10: Jaipur writes Kotlin');
/** One pass of the paper rules; returns true when it changed anything. */
function pass() {
let changed = false;
const names = [[PC, P, C], [PL, P, L], [CL, C, L]];
for (const [g, rows, cols] of names) {
for (let i = 0; i < 6; i++) {
for (let j = 0; j < 6; j++) {
if (g[i][j] !== 1) continue;
for (let k = 0; k < 6; k++) {
if (k !== j) changed = mark(g, i, k, -1) || changed;
if (k !== i) changed = mark(g, k, j, -1) || changed;
}
}
const rowOpen = [0, 1, 2, 3, 4, 5].filter((j) => g[i][j] !== -1);
if (rowOpen.length === 0) contradiction = true;
if (rowOpen.length === 1) changed = mark(g, i, rowOpen[0], 1, `only ${cols[rowOpen[0]]} is left for ${rows[i]}`) || changed;
const colOpen = [0, 1, 2, 3, 4, 5].filter((k) => g[k][i] !== -1);
if (colOpen.length === 0) contradiction = true;
if (colOpen.length === 1) changed = mark(g, colOpen[0], i, 1, `only ${rows[colOpen[0]]} is left for ${cols[i]}`) || changed;
}
}
// Ticks and crosses carried between the grids: an intern's city and the city's language give the intern's language.
for (let i = 0; i < 6; i++) {
for (let j = 0; j < 6; j++) {
for (let k = 0; k < 6; k++) {
if (PC[i][j] === 1 && CL[j][k] !== 0) changed = mark(PL, i, k, CL[j][k], `${P[i]} is from ${C[j]}, which writes ${L[k]}`) || changed;
if (PC[i][j] === 1 && PL[i][k] !== 0) changed = mark(CL, j, k, PL[i][k], `${C[j]} is ${P[i]}'s city`) || changed;
if (PL[i][k] === 1 && CL[j][k] !== 0) changed = mark(PC, i, j, CL[j][k], `${P[i]} writes ${L[k]}, which goes with ${C[j]}`) || changed;
if (PL[i][k] === 1 && PC[i][j] === -1) changed = mark(CL, j, k, -1) || changed;
if (CL[j][k] === 1 && PC[i][j] === -1) changed = mark(PL, i, k, -1) || changed;
if (CL[j][k] === 1 && PL[i][k] === -1) changed = mark(PC, i, j, -1) || changed;
}
}
}
return changed;
}
let passes = 0;
while (pass()) passes++;
const solved = PC.every((row) => row.filter((v) => v === 1).length === 1) && PL.every((row) => row.filter((v) => v === 1).length === 1);
console.log(`1. The intern grid: ${solved && !contradiction ? 'solved' : 'not solved'} by ticks and crosses alone, ${passes} passes, ${marks} marks, no guess`);
console.log(` The ticks, in the order they appear: ${trace.join('; ')}`);
for (let i = 0; i < 6; i++) console.log(` ${P[i]}: ${C[PC[i].indexOf(1)]}, ${L[PL[i].indexOf(1)]}`);
// The same puzzle the slow way: every city order times every language order.
const clues = [
(city, lang) => lang[city.indexOf(c('Kochi'))] === l('Java'),
(city, lang) => lang[p('Bhumi')] !== l('Python') && lang[p('Bhumi')] !== l('Java') && city[p('Bhumi')] !== c('Pune'),
(city, lang) => (city[p('Dia')] === c('Bengaluru') || city[p('Dia')] === c('Hyderabad')) && lang[p('Dia')] !== l('TypeScript'),
(city, lang) => city[lang.indexOf(l('Python'))] === c('Pune'),
(city, lang) => lang[p('Fatima')] === l('TypeScript'),
(city) => ![c('Kochi'), c('Pune'), c('Chennai')].includes(city[p('Aarav')]),
(city, lang) => city[lang.indexOf(l('Go'))] === c('Chennai'),
(city) => city[p('Eshan')] !== c('Pune'),
(city, lang) => city[lang.indexOf(l('Rust'))] !== c('Hyderabad'),
(city, lang) => city[lang.indexOf(l('Kotlin'))] === c('Jaipur'),
];
const cityOrders = [];
eachOrder(6, (o) => cityOrders.push(o.slice()));
let assignments = 0;
let fits = 0;
for (const city of cityOrders) {
for (const lang of cityOrders) {
assignments++;
if (clues.every((ok) => ok(city, lang))) fits++;
}
}
console.log(` Checked against all ${assignments} assignments: ${fits} fits`);
// 2. Seven students on floors 1 (bottom) to 7.
const S = ['P', 'Q', 'R', 'S', 'T', 'U', 'V'];
const floorClues = [
['Exactly two floors lie between Q and T', (f) => Math.abs(f.Q - f.T) === 3],
['R lives immediately above T', (f) => f.R === f.T + 1],
['S lives above P but below U', (f) => f.P < f.S && f.S < f.U],
['P does not live on floor 1', (f) => f.P !== 1],
['Q lives immediately below U', (f) => f.Q === f.U - 1],
];
let floors = [];
eachOrder(7, (o) => floors.push(Object.fromEntries(S.map((x, i) => [x, o[i] + 1]))));
const start = floors.length;
for (const [, ok] of floorClues) floors = floors.filter(ok);
const upwards = (f) => S.slice().sort((a, b) => f[a] - f[b]).join(' ');
console.log(`2. The hostel: ${start} orders; ${floors.length} fits all five clues; floors 1 to 7: ${floors.map(upwards).join(' / ')}`);
// 3. Five boxes stacked from 1 (bottom) to 5.
const boxes = [];
eachOrder(5, (o) => {
const b = Object.fromEntries(['P', 'Q', 'R', 'S', 'T'].map((x, i) => [x, o[i] + 1]));
if (b.T === 1 && b.Q === b.P + 1 && Math.abs(b.Q - b.S) === 2 && b.R > b.S) boxes.push(b);
});
console.log(`3. The boxes: ${boxes.length} stack fits; bottom to top: ${boxes.map((b) => Object.keys(b).sort((x, y) => b[x] - b[y]).join(' ')).join(' / ')}`);
// 4. A team of three from five, with three rules.
const people = ['Aman', 'Bina', 'Chetan', 'Diya', 'Eshwar'];
const teams = [];
for (let mask = 0; mask < 32; mask++) {
const team = people.filter((_, i) => (mask >> i) & 1);
if (team.length !== 3) continue;
const has = (x) => team.includes(x);
if (has('Aman') && !has('Bina')) continue; // if Aman, then Bina
if (has('Chetan') && has('Diya')) continue; // not both Chetan and Diya
if (has('Eshwar') && !has('Chetan')) continue; // Eshwar only if Chetan
teams.push(team.join(', '));
}
const inAll = people.filter((x) => teams.every((t) => t.includes(x)));
console.log(`4. The selection: 10 teams of three, ${teams.length} allowed: ${teams.join(' / ')}; in every one: ${inAll.join(', ')}`);
// 5. Five teams play each other once: 10 matches, 2 points a win, no draws. Try all 2^10 ways the matches can go.
const teamsAtoE = ['A', 'B', 'C', 'D', 'E'];
const matches = [];
for (let i = 0; i < 5; i++) for (let j = i + 1; j < 5; j++) matches.push([i, j]);
let tables = 0;
const fitting = [];
for (let mask = 0; mask < 1 << matches.length; mask++) {
const points = [0, 0, 0, 0, 0];
matches.forEach(([i, j], k) => { points[(mask >> k) & 1 ? i : j] += 2; });
tables++;
if (points[0] === 8 && points[4] === 0 && points[1] === 4 && points[2] === 4 && points[3] === 4) {
// The three matches among B, C and D (A and E won and lost everything).
const among = matches.map(([i, j], k) => [i, j, k]).filter(([i, j]) => i >= 1 && j <= 3);
fitting.push(among.map(([i, j, k]) => ((mask >> k) & 1 ? `${teamsAtoE[i]} beat ${teamsAtoE[j]}` : `${teamsAtoE[j]} beat ${teamsAtoE[i]}`)).join(', '));
}
}
console.log(`5. The league: ${matches.length} matches, ${tables} ways they can go; A 8, B 4, C 4, D 4, E 0 fits ${fitting.length}: ${fitting.join(' / ')}`); Output
1. The intern grid: solved by ticks and crosses alone, 4 passes, 108 marks, no guess The ticks, in the order they appear: clue 1: Kochi writes Java; clue 4: Pune writes Python; clue 5: Fatima writes TypeScript; clue 7: Chennai writes Go; clue 10: Jaipur writes Kotlin; only Chirag is left for Pune; only Rust is left for Dia; only Chirag is left for Python; only TypeScript is left for Hyderabad; only Bengaluru is left for Rust; Dia writes Rust, which goes with Bengaluru; Fatima writes TypeScript, which goes with Hyderabad; only Eshan is left for Kochi; only Eshan is left for Java; only Jaipur is left for Aarav; only Bhumi is left for Chennai; only Kotlin is left for Aarav; only Bhumi is left for Go Aarav: Jaipur, Kotlin Bhumi: Chennai, Go Chirag: Pune, Python Dia: Bengaluru, Rust Eshan: Kochi, Java Fatima: Hyderabad, TypeScript Checked against all 518400 assignments: 1 fits 2. The hostel: 5040 orders; 1 fits all five clues; floors 1 to 7: V P T R S Q U 3. The boxes: 1 stack fits; bottom to top: T S P Q R 4. The selection: 10 teams of three, 3 allowed: Aman, Bina, Chetan / Aman, Bina, Diya / Bina, Chetan, Eshwar; in every one: Bina 5. The league: 10 matches, 1024 ways they can go; A 8, B 4, C 4, D 4, E 0 fits 2: C beat B, B beat D, D beat C / B beat C, D beat B, C beat D
Recorded with Node.js 24.21.0 on macOS 26 arm64. To run it yourself: mise exec node@24.21.0 -- node puzzles.mjs
Runs on this device, in your browser. The first run downloads JavaScript (about 0.6 MB), which is kept for the next runs.
Your run, in this browser
Your turn
The exercise finds the number of draws from a league table’s total; the ten questions are untimed.
Exercise · Medium · JavaScript
How many league matches were drawn
In a league, every team plays every other team once. A win earns win points and a draw earns draw points for each of the two teams. Write draws(teams, total, win, draw), which returns how many matches were drawn when the points of the final table add up to total.
Return null when the total is impossible (it would need a negative number of draws, more draws than matches, or a fraction of a draw), and also when the total cannot tell the number of draws, because a draw gives out as many points as a win.
With 3 points a win and 1 a draw, five teams play 10 matches, so draws(5, 26, 3, 1) returns 4. The sample tests include leagues with no draws, with only draws, with 2 points a win, and totals that cannot happen.
Starter code · draws.mjs
/**
* A league where every team plays every other once; a win earns `win` points, a draw `draw` for each side. Returns the
* number of drawn matches when the table's points add up to `total`, or null when that cannot be told or cannot happen.
*/
export function draws(teams, total, win, draw) {
// Replace this line with your code (this one assumes 3 points a win and never checks the answer).
return (3 * teams * (teams - 1)) / 2 - total;
} The sample tests · draws.test.mjs
import { test, assert } from 'mysmartcopilot:test';
import { draws } from './draws.mjs';
test('five teams, 3 points a win: a total of 26 means 4 draws', () => {
assert.equal(draws(5, 26, 3, 1), 4);
});
test('no draws at all', () => {
assert.equal(draws(5, 30, 3, 1), 0);
});
test('every match drawn', () => {
assert.equal(draws(5, 20, 3, 1), 10);
});
test('more draws than matches cannot happen', () => {
assert.equal(draws(5, 19, 3, 1), null);
});
test('six teams, a total of 40', () => {
assert.equal(draws(6, 40, 3, 1), 5);
});
test('a total above the most a league can give out', () => {
assert.equal(draws(3, 10, 3, 1), null);
});
test('2 points a win and 1 a draw: the total cannot tell', () => {
assert.equal(draws(5, 20, 2, 1), null);
});
test('4 points a win: each draw takes 2 points off the total', () => {
assert.equal(draws(4, 16, 4, 1), 4);
});
test('a total that would need half a draw', () => {
assert.equal(draws(4, 17, 4, 1), null);
}); A hint
Count the matches first: teams × (teams − 1) / 2. A decided match gives out win points and a drawn one 2 × draw, so every draw changes the total by win − 2 × draw from the total with no draws, win × matches. If that change is 0, the total cannot tell you anything. Otherwise divide, and check that the result is a whole number from 0 to the number of matches.
Results of the sample tests
| Test | Result | Details |
|---|
What your code printed
The sample tests run on this device, in your browser (QuickJS): nothing is sent to mysmartcopilot.com. The first run downloads JavaScript (about 0.6 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.
Ten questions, untimed
10 questions about this lesson. Every answer and why it is right is on the page, behind “Show the answer”. Your score stays in this browser.
Twelve more floor, box, schedule, selection and league items, with full working Pro: opens with a Pro, Premium or Ultimate pass
Puzzle sets mix five families: floors and boxes, grids, schedules, selections and league tables. The twelve items here are new; each is worked through completely, and each ends by naming the mistake it is set up to provoke.
In this part:
- Floors and boxes, worked
- Grids and schedules, worked
- Selection rules, worked
- League tables, worked
1 runnable example (JavaScript) · about 5 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
Difficulty and fairness measured: guesses, clue order and league tables Pro: opens with a Pro, Premium or Ultimate pass
How hard a puzzle feels depends on how many guesses it forces, not on how long its text is. This part measures the guesses a solver that uses only the four paper rules needs, what each clue of the intern grid is worth, what the order of placing people costs on the hostel, and which league tables fix every result.
In this part:
- Guesses as a measure of difficulty, with numbers
- A second answer reproduced
- The order of placing people, measured on the hostel
- Which league tables fix every result, counted
1 runnable example (JavaScript) · about 2 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
A ten-minute timed set, with answers and a rubric Pro: opens with a Pro, Premium or Ultimate pass
These ten mixed puzzle items are meant to be done in one block of ten minutes. When the time is up, go through them with the working below and place your score in the bands that follow.
In this part:
- Ten items for ten minutes
- Answers, with the shortest working and the trap
- A rubric for what your score says
1 runnable example (JavaScript) · about 4 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
Interview questions
-
Fresher · Warm-up
What is the difference between "above" and "immediately above" in a floor puzzle, and how does each change the cases you draw?
"Above" means on any higher floor; "immediately above" means on the very next floor up. In a building of floors 1 to 6, "R lives above T" with T on floor 2 leaves R four choices, floors 3 to 6, while "R lives immediately above T" fixes R on floor 3. So an "immediately" clue joins two people into a block that moves together, which makes it a strong clue to place first; a plain "above" clue only orders the two and is best kept as a check on the cases. "Exactly one floor between" means the numbers differ by 2, and "below" works the same way downwards. Check the numbering as well: with a ground floor, the floor immediately above it is floor 1.
-
Fresher
A six-person grid puzzle with three attributes has stalled: every direct clue is marked and no row or column has a single blank left. What do you do next, and how do you stop a guessed branch from spoiling the grid?
-
Fresher
Five teams play each other once, with 2 points a win and no draws. The final table reads 8, 4, 4, 4, 0. Can you say who beat whom? What changes if it reads 8, 6, 4, 2, 0?
-
Fresher
A rule says "If Arjun is in the team, Bela must be in it too." A classmate argues that since Bela is in the team, Arjun must be too. Explain the error, list what the rule allows, and say which conclusions are safe.
Key takeaways
- One grid per pair of attributes; after every tick, cross out its row and column.
- “Above” is any higher floor, “immediately above” the next one.
- “If A, then B” forbids only A without B.
- n teams play n(n − 1)/2 matches; a table may leave results open.
References
- backtracking (Dictionary of Algorithms and Data Structures) (National Institute of Standards and Technology (NIST))
- Mathematics, Class 11, Chapter 6: Permutations and Combinations (National Council of Educational Research and Training (NCERT))
- Indicative Conditionals (Stanford Encyclopedia of Philosophy)
- above (preposition), Oxford Advanced Learner’s Dictionary (Oxford University Press)
- immediately (adverb), Oxford Advanced Learner’s Dictionary (Oxford University Press)
Related tools
Report a problem with this lesson
Kept only in this browser. Your Learn progress