Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

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.

  • Advanced
  • 40 minutes
  • Examples run with Node.js 24.21.0, Python 3.14.8 and quickjs 0.32.0
  • By MySmartCoPilot
Free core, Pro depth: 11 of 40 minutes free
Free: The grid and how a mark spreads · Order puzzles: floors, boxes and days · Selection rules and league tables · 2 more sections. With a pass: 3 in-depth parts and 3 interview answers, about 29 minutes.

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

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:

  1. A tick crosses out the rest of its row and column: each person has one value, each value one person.
  2. A row or column with one blank left gets a tick there.
  3. 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.
  4. When the rules stall, tick the tightest open cell in pencil; cross it out if a clue breaks.
A six by six grid of cities and languages: four ticks from the linking clues, one cross from a clue, and two ticks left as the only cells.City and language grid after the linking cluesGoJavaKotlinPythonRustTSBengaluruChennaiHyderabadJaipurKochiPunetick from a cluetick in the only cell leftcross from a clue

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

  1. “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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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 five examples, the grid solved by ticks and crosses and checked against all 518,400 assignments JavaScript · puzzles.mjs
// 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

Truth Table Generator Write a selection rule as p → q and see the one row it forbids.

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.

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.

  1. Question 1 of 10 In a grid of interns and cities you tick "Ravi – Pune". What else can you mark straight away?

    Choose one answer.

    Show the answer to question 1

    Answer: A cross in every other cell of Ravi's row and of Pune's column

    Each intern has one city and each city one intern, so a tick rules out every other city for Ravi and every other intern for Pune. Ticks in other grids need a link, such as "the intern from Pune writes Python".

  2. Question 2 of 10 Seven teams each play every other team once. How many matches are played?

    Type a number.

    Show the answer to question 2

    Answer: 21 matches

    Each pair of teams meets once, and there are 7 × 6 ÷ 2 = 21 pairs: each of the 7 teams plays 6 matches, and every match is counted from both sides.

  3. Question 3 of 10 In that seven-team league a win earns 2 points and a draw 1 point to each side. How many points does the final table hold in all?

    Type a number.

    Show the answer to question 3

    Answer: 42 points

    Every match gives out exactly 2 points, whether it is won or drawn, so 21 matches give 42 points. That is why the total of such a table says nothing about the number of draws.

  4. Question 4 of 10 Six teams play each other once, with 3 points a win and 1 point each for a draw. The table adds up to 42 points. How many matches were drawn?

    Type a number.

    Show the answer to question 4

    Answer: 3 draws

    Fifteen matches with no draw would give 45 points. Each draw gives out 2 points instead of 3, so the total falls by 1 per draw: 45 − 42 = 3 draws.

  5. Question 5 of 10 Floors are numbered 1 to 6 from the bottom. M lives immediately above N, and N lives on floor 4. Where does M live?

    Choose one answer.

    Show the answer to question 5

    Answer: On floor 5

    "Immediately above" means the next floor up, so M is on floor 5. "Above" alone would allow floor 5 or 6.

  6. Question 6 of 10 "Exactly one floor lies between A and B" means their floor numbers differ by

    Choose one answer.

    Show the answer to question 6

    Answer: 2

    A on floor 3 and B on floor 5 have one floor, 4, between them, and 5 − 3 = 2. Neighbours differ by 1, and two floors between them means a difference of 3.

  7. Question 7 of 10 If Anu is selected, Bobby is selected. Bobby is not selected. What follows?

    Choose one answer.

    Show the answer to question 7

    Answer: Anu is not selected

    The rule forbids only one case: Anu in and Bobby out. With Bobby out, Anu in would be exactly that case, so Anu is out too.

  8. Question 8 of 10 The rule says "Chetan is chosen only if Diya is chosen". Which statements follow from it?

    Choose every answer that is right.

    Show the answer to question 8

    Answer:

    • If Diya is not chosen, Chetan is not chosen.
    • If Chetan is chosen, Diya is chosen.

    "Chetan only if Diya" means Chetan needs Diya: if Chetan, then Diya, and so, without Diya, no Chetan. It does not say that Diya brings Chetan in, and it allows both to be chosen.

  9. Question 9 of 10 A schedule covers one week from Monday to Sunday and does not repeat. A clue says a meeting is three days after another one on Friday. What do you conclude?

    Choose one answer.

    Show the answer to question 9

    Answer: The clue cannot be met within the week

    Three days after Friday is Monday of the next week, which this schedule does not include. Only a schedule that repeats every week lets "after Sunday" come back to Monday.

  10. Question 10 of 10 Om, Pia and Raj come from Delhi, Goa and Indore, one each. Om is not from Goa, and Pia is from Indore. Where is Raj from?

    Choose one answer.

    Show the answer to question 10

    Answer: Goa

    Pia takes Indore, so Om, who is not from Goa, must be from Delhi, and Goa is left for Raj.

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.

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.

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.

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

  1. 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.

  2. 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?

    Model answer, Pro. Model answers open with any pass; prices are in the notice on this page. First step and follow-ups

  3. 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?

    Model answer, Pro. First step and follow-ups

  4. 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.

    Model answer, Pro. First step and follow-ups

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

Related tools

Report a problem with this lesson

Quick answers and tool search

Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.