Tagged: by: N A Phillips Toggle Comment Threads | Keyboard Shortcuts

  • Unknown's avatar

    Jim Randell 12:30 pm on 14 June 2022 Permalink | Reply
    Tags: by: N A Phillips   

    Brain-Teaser 718: An eccentric race 

    From The Sunday Times, 20th April 1975 [link]

    After the tea-party Alice persuaded the Mad Hatter, the March Hare and the Dormouse to run with her round a nearby circular track, promising that they should all four win the race by reaching the winning-post at the same moment — so long as they did not vary their speeds!

    Round the track were twelve posts equally-spaced a whole number of feet apart, No. 12 being at the start, which was also the finishing-post. At each post one of the Flamingoes was stationed as umpire. We will call them F1, F2, …, F12. F12 acted as starter. The umpires reported as follows:

    (1) All four runners maintained their own constant speeds.

    (2) F2 noted that Hatter passed Dormouse at his post exactly 30 seconds after the start.

    (3) F3 reported that Hare passed Hatter at his post exactly 45 seconds after the start.

    (4) F8 said that Hare passed Alice at his post, at which time Alice was passing his post for the third time and Hare for the sixth time.

    (5) The umpires reported no more overtakings, although obviously there were others.

    The speeds of the four runners, in feet per second, were whole numbers between 5 and 20.

    How many laps had they all completed when they all won. And how many seconds did the race last?

    This puzzle is included in the book The Sunday Times Book of Brain-Teasers: Book 2 (1981). The puzzle text above is taken from the book.

    [teaser718]

     
    • Jim Randell's avatar

      Jim Randell 12:33 pm on 14 June 2022 Permalink | Reply

      I am assuming they all set off from the start at the same time (although this is not explicitly mentioned).

      This Python program runs in 55ms. (Internal run time is 326µs).

      Run: [ @replit ]

      from enigma import (irange, inf, div, divisors, fdiv, printf)
      
      # distance units for passing post <n> for the <k>th time
      dist = lambda n, k: n + 12 * (k - 1)
      
      # check velocity <v> passed post <n> at time <t>
      def check(v, n, t, d):
        x = div(v * t, d)
        return (x is not None) and (x % 12 == n)
      
      # calculate the laps and time for a race with velocities <vs>
      def race(vs, lap):
        # find the slowest speed
        s = min(vs)
        # consider total number of laps for the slowest
        for n in irange(1, inf):
          # calculate number of laps for the others
          laps = list(div(v * n, s) for v in vs)
          if None not in laps:
            return (laps, fdiv(n * lap, s))
      
      # choose a speed for the Hare (M)
      for M in irange(7, 20):
      
        # Alice (A) passed post 8 for the 3rd time, when the Hare passed it
        # for the 6th time
        A = div(M * dist(8, 3), dist(8, 6))
        if A is None: continue
      
        # choose speed for D
        for D in irange(5, M - 2):
          # Dormouse passes post 2 at exactly 30s
          # consider possible values for d
          for d in divisors(30 * D):
            if not check(D, 2, 30, d): continue
      
            # choose speed for Hatter (H)
            for H in irange(D + 1, M - 1):
      
              # Hatter passes post 2 at exactly 30s
              if not check(H, 2, 30, d): continue
      
              # Hare and Hatter pass post 3 at exactly 45s
              if not (check(H, 3, 45, d) and check(M, 3, 45, d)): continue
      
              # output solution
              ((lM, lA, lH, lD), t) = race([M, A, H, D], 12 * d)
              printf("M={lM} A={lA} H={lH} D={lD}; d={d} lap={lap} -> t={t:g}", lap=12 * d)
      

      Solution: At the end of the race the number of laps was: Alice = 8, Mad Hatter = 13, March Hare = 17, Dormouse = 7. The race lasted 180 seconds.

      The distance between posts was 15ft, so one lap was 180ft.

      The velocity of each participant, expressed in feet per second, is the same as the number of laps run during the race.

      Like

      • Frits's avatar

        Frits 10:57 pm on 15 June 2022 Permalink | Reply

        check(M, 3, 45, d) can already be done before the loop over H.

        Another idea is to choose H before D and then d must be in the intersection of the divisors of (30 * H) and (45 * H).

        Like

  • Unknown's avatar

    Jim Randell 8:18 am on 10 May 2022 Permalink | Reply
    Tags: by: N A Phillips   

    Brain-Teaser 695: Sitting on a gate 

    From The Sunday Times, 10th November 1974 [link]

    Tom’s mother fetches him by car from school every day, starting out from home so that she arrives at school at 4:15 pm. He is waiting for her and gets into the car at once, and is driven home without delay. This is the normal routine.

    One day Tom expects to be delayed at school for an hour and his mother delays her time of leaving home accordingly. The expected delay does not take place so instead of telephoning home Tom sets out at 4:15 to walk towards home. After walking for half an hour he sits on a convenient roadside gate and waits for the car.

    When it comes he gets in at once and is driven straight home, where they arrive 48 minutes later than usual.

    For how many minutes was Tom sitting on the gate?

    This puzzle is included in the book The Sunday Times Book of Brain-Teasers: Book 2 (1981). The puzzle text above is taken from the book.

    [teaser695]

     
    • Jim Randell's avatar

      Jim Randell 8:19 am on 10 May 2022 Permalink | Reply

      We assume that the car is driven at a constant speed, which does not depend on the time of day.

      Tom sets off walking from the school at 4:15 pm and arrives at the gate at 4:45 pm.

      Mum sets off 60 minutes later than usual, and arrives back home 48 minutes later than usual.

      So Tom’s walking has cut 12 minutes off the car journey. Hence the gate is 6 minutes drive from the school.

      So, on a normal day, Mum would pass the gate 6 minutes before arriving at the school, i.e. at 4:09 pm.

      On the abnormal day, she left an hour later, and so arrives at the gate at 5:09 pm, by which time Tom has been waiting 24 minutes.

      Solution: Tom has been waiting at the gate for 24 minutes.

      Like

  • Unknown's avatar

    Jim Randell 9:19 am on 28 January 2021 Permalink | Reply
    Tags: by: N A Phillips   

    Brain-Teaser 685: Overseas mail 

    From The Sunday Times, 1st September 1974 [link]

    We were visiting the island state of Kimbu and had come to the post-office to send off some parcels to friends at home. The island’s currency is the pim, and the postmaster told us that he had only stamps of five different face-values, as these had to be used up before a new issue of stamps was introduced.

    These stamps were black, red, green, violet, and yellow, in descending order of values, the black being the highest denomination and the yellow the lowest.

    One parcel required stamps to the value of 100 pims and we were handed 9 stamps; 5 black, one green, and 3 violet. The other two parcels required 50 pims’ worth each, and for these we were given two different sets of 9 stamps.

    One consisted of 1 black and 2 of each of the other colours, and the other set contained 5 green and 1 of each of the others.

    What would be been the smallest number of stamps needed for a 50-pim parcel, and of which colours?

    This puzzle is included in the book The Sunday Times Book of Brain-Teasers: Book 1 (1980). The puzzle text above is taken from the book.

    [teaser685]

     
    • Jim Randell's avatar

      Jim Randell 9:20 am on 28 January 2021 Permalink | Reply

      I assumed the denominations of the stamps were all positive integer values.

      We can place lower and upper limits on the values of the stamps.

      The stamps are ordered: B > R > G > V > Y, which gives minimum values of: 5, 4, 3, 2, 1.

      And 5 black stamps are used in making a value of 100, so black must have a value of less than (100 − (3 + 3×2)) / 5 = 18.2.

      Similarly, 5 green stamps are used in making a value of 50, so green must have a value of less than (50 − (5 + 4 + 2 + 1)) / 5 = 7.6.

      So we can write down the following ranges for each denomination:

      B: 5..18
      R: 4..17
      G: 3..7
      V: 2..6
      Y: 1..5

      And we have three equations relating the values. So choosing values for V and Y will give us a set of 5 simultaneous equations that can be solved to find the other values.

      This Python program use the [[ matrix.linear() ]] solver for systems of linear equations from the enigma.py library. It runs in 63ms.

      Run: [ @repl.it ]

      from enigma import (irange, subsets, matrix, as_int, express, group, printf)
      
      # choose values for Y and V
      for (Y, V) in subsets(irange(1, 6), size=2):
      
        # make the equations
        eqs = [
          # B  R  G  V  Y = ???
          ((5, 0, 1, 3, 0), 100), # 100-pim parcel
          ((1, 2, 2, 2, 2),  50), # 1st 50-pim parcel
          ((1, 1, 5, 1, 1),  50), # 2nd 50-pim parcel
          ((0, 0, 0, 0, 1),   Y), # Y value
          ((0, 0, 0, 1, 0),   V), # V value
        ]
      
        # solve the equations for integer values
        # (either matrix.linear() or as_int() may raise a ValueError)
        try:
          (B, R, G, V, Y) = (as_int(x) for x in matrix.linear(*zip(*eqs)))
        except ValueError:
          continue
      
        # check ordering
        if not (B > R > G > V > Y > 0): continue
      
        # find combinations that make 50, grouped by the total number of stamps
        d = group(express(50, [Y, V, G, R, B]), by=sum)
        # output minimal configurations
        k = min(d.keys())
        for (y, v, g, r, b) in d[k]:
          printf("{k} stamps; 50 = {b}x {B} (black), {r}x {R} (red), {g}x {G} (green), {v}x {V} (violet), {y}x {Y} (yellow)")
      

      Solution: A 50-pim parcel can be sent using 5 stamps: 2 black, 1 red, 1 green, 1 yellow.

      The values of the stamps are:

      black = 18 pim
      red = 9 pim
      green = 4 pim
      violet = 2 pim
      yellow = 1 pim

      So each stamp is half (rounded down) the next highest value.

      There are 621 different ways to make 50 using the above denominations.


      Here’s a manual derivation of the denominations:

      [1] B + 2R + 2G + 2V + 2Y = 50
      [2] B + R + 5G + V + Y = 50

      Taking 2×[2][1] gives:

      B + 8G = 50

      And we know G is in the range 3 .. 7, and B is in the range 5 .. 18 and G < B:

      G = 3 ⇒ B = 26 [not possible]
      G = 4 ⇒ B = 18
      G = 5 ⇒ B = 10
      G = 6 ⇒ B = 2 [not possible]
      G = 7 ⇒ B = −6 [not possible]

      And:

      5B + G + 3V = 100

      Where V is in the range 2 .. 6 and V < G:

      G = 4, B = 18 ⇒ V = 2
      G = 5, B = 10 ⇒ V = 15 [not possible]

      So we have: V = 2, G = 4, B = 18.

      From which we see Y = 1, and R = 9.

      Like

      • Jim Randell's avatar

        Jim Randell 5:55 pm on 28 January 2021 Permalink | Reply

        Here’s a solution using the [[ SubstitutedExpression ]] solver from the enigma.py library. It runs in 122ms.

        It operates in base 19 as B ≤ 18.

        The only other restriction I used was that we already know that 50 is possible with 9 stamps, so I limit the numbers used for any single denomination to 8. (We can also do this in my Python program above, by passing [[ qs=irange(0, 8) ]] to the call to [[ express() ]] and that saves a little bit of time).

        We could restrict the other denominations in line with the ranges given above, but it is not necessary for a decent run time.

        Run: [ @repl.it ]

        #! python -m enigma -rr
        
        SubstitutedExpression
        
        --base=19
        --symbols="BRGVYbrgvy"
        --distinct="BRGVY"
        
        # work out the denominations
        "Y > 0"
        "V > Y"
        "G > V"
        "R > G"
        "B > R"
        
        "5 * B + G + 3 * V == 100" # 100 pim parcel
        "B + 2 * (R + G + V + Y) == 50" # 1st 50 pim parcel
        "5 * G + (B + R + V + Y) == 50" # 2nd 50 pim parcel
        
        # find minimal amount to make 50
        "b * B + r * R + g * G + v * V + y * Y == 50"
        
        --answer="((b, r, g, v, y), (B, R, G, V, Y))"
        --code="fmin = lambda ss: min(ss, key=unpack(lambda ns, ds: sum(ns)))"
        --accumulate="fmin"
        
        --verbose=16
        
        # [optional] we already know 50 is possible with 9 stamps
        --invalid="9-18,brgvy"
        

        Like

    • Frits's avatar

      Frits 12:24 pm on 28 January 2021 Permalink | Reply

      from enigma import SubstitutedExpression
      
      # the alphametic puzzle
      p = SubstitutedExpression(
        [
        # try to avoid looping over BL and RE
        "G > V",
        "V > Y",
        # (5, 0, 1, 3, 0)  100-pim parcel
        "(100 - G - 3*V) // 5 = BL",
        
        # (1, 2, 2, 2, 2)  1st 50-pim parcel
        "(50 - BL) // 2  - (G + V + Y) = RE",
        "RE > G",
        "BL > RE",
        # (1, 1, 5, 1, 1)  2nd 50-pim parcel
        "BL + RE + 5*G + V + Y = 50",
        
        # Pick M blacks, N reds, O greens, P violets and Q yellows
        # we already know a 50-pim parcel can be formed with 9 stamps
        "M + N < 10",
        "M + N + O < 10",
        "M + N + O + P < 10",
        "M + N + O + P + Q < 10",
        
        "M*BL + N*RE + O*G + P*V + Q*Y = 50", 
        ],
        answer="M + N + O + P + Q, M, N, O, P, Q",
        distinct="",
        accumulate=min,
        # BL: 5..18  RE: 4..12  G: 3..7  V: 2..6  Y: 1..5 
        d2i=dict([(0, "GVY")] + 
                 [(1, "VG")] + 
                 [(2, "RBG")] + 
                 [(k, "RB") for k in range(3, 6)] +
                 [(6, "YRB")] +
                 [(7, "YVRB")] +
                 [(k, "YVGRBMNOPQ") for k in range(8, 10)]),
      
        reorder=0,
        verbose=0
        )   
        
        
      # solve the puzzle
      r = p.run()
      
      colors = ["black", "red", "green", "violet", "yellow"]
      for (x, y) in zip(list(r.accumulate)[1:], colors):
        if x > 0:
          print(x, y)
      

      Like

    • GeoffR's avatar

      GeoffR 3:04 pm on 28 January 2021 Permalink | Reply

      % A Solution in MiniZinc
      include "globals.mzn";
      
      % black, red, green, violet, yellow stamps
      % ... using Jim's analysis values for all stamp ranges
      var 5..18:B; var 4..17:R; var 3..7: G;
      var 2..6: V; var 1..5:Y;
      
      % stamp values all different and in colour descending values
      constraint all_different([B, R, G, V, Y]);
      constraint B > R /\ R > G /\ G > V /\ V > Y;
      
      % numbers of each colour of stamp to make 50 pim
      var 0..9:NumB; var 0..9:NumG; var 0..9:NumV;
      var 0..9:NumR; var 0..9:NumY;
      
      % three stamp equations stated in teaser description
      % 1. 5 black, one green, and 3 violet stamps for 100 pim
      constraint 5*B + G + 3*V == 100;
      
      % two different equations for stamps of 50 pim
      % 2. one set consisted of 1 black and 2 of each of the other colours
      constraint B + 2*R + 2*G + 2*V + 2*Y == 50;
      
      % 3. other set contained 5 green and 1 of each of other colours 
      constraint B + R + 5*G + V + Y == 50;
      
      % General equation to make 50 pims value
      constraint NumB*B + NumR*R +  NumG*G + NumV*V + NumY*Y == 50;
      
      % minimise total number of coins used to make 50 units value
      solve minimize(NumB + NumR + NumG + NumV + NumY);
      
      output [ "Black stamp value = " ++ show(B) ++ " pim"
      ++ ", Red stamp value = " ++ show(R) ++ " pim"
      ++ "\n" ++ "Green stamp value = " ++ show(G) ++ " pim"
      ++ ", Violet stamp value = " ++ show(V) ++ " pim"
      ++ "\n" ++ "Yellow stamp value = " ++ show(Y) ++ " pim"
      ++ "\n"
      ++ "\n" ++ "Smallest number of stamps needed for a 50-pim parcel" 
      ++ "\n" ++ "[B, R, G, V, Y] =  "
      ++ show (NumB),", ",show(NumR),", ",show(NumG),", ",show(NumV),", ",show(NumY) ];
      
      % Black stamp value = 18 pim, Red stamp value = 9 pim
      % Green stamp value = 4 pim, Violet stamp value = 2 pim
      % Yellow stamp value = 1 pim
      
      % Smallest number of stamps needed for a 50-pim parcel
      % [B, R, G, V, Y] =  2, 1, 1, 0, 1
      % ----------
      % ==========
      
      
      
      

      Like

    • John Crabtree's avatar

      John Crabtree 12:07 am on 29 January 2021 Permalink | Reply

      Eq. 1: 5.B + 0.R + 1.G +3.V + 0.Y = 100
      Eq. 2: 1.B + 2.R + 2.G +2.V + 2.Y = 50
      Eq. 3 : 1.B + 1.R + 5.G +1.V + 1.Y = 50
      10 * Eq. 3 – 5 * Eq. 2 – Eq. 1 gives 39.G – 3.V = 150, or 13.G – V = 50
      Assuming integer solutions, G = 4, V = 2 and then B = 18, R + Y = 10 etc

      Like

  • Unknown's avatar

    Jim Randell 3:13 pm on 18 July 2019 Permalink | Reply
    Tags: by: N A Phillips   

    Brain-Teaser 487: [Seating arrangements] 

    From The Sunday Times, 27th September 1970 [link]

    Five friends, Archer, Brown, Carter, Dale and Eade, and their wives, Anne, Betty, Clara, Diana and Edna, meet on the first Wednesday of every month to dine together (at a round table) in a local hotel. They have a rule that no wife may sit next to, or immediately opposite, her husband. Archer, as M.C., sits always with his back to the fireplace.

    We are concerned with the seating arrangements in January, April, July and October. On these four occasions no man, with the exception of the M.C., sat at any place more than once. In January the men sat in clockwise alphabetical order (men and women always sit alternately). Also, on these four evenings, the ladies sitting opposite Archer were successively: Betty, Clara, Diana and Edna.

    In April, Diana sat at the same place she occupied in January, and in July, Anne sat at the same place that she occupied in April.

    What was the seating arrangement in October? (Clockwise, A to A, using capital initials for the men and small initials for the women).

    This puzzle was originally published with no title.

    [teaser487]

     
    • Jim Randell's avatar

      Jim Randell 3:14 pm on 18 July 2019 Permalink | Reply

      This Python program runs in 88ms.

      Run: [ @repl.it ]

      from enigma import subsets, update as _update, join, printf
      
      # possible names
      names = "ABCDE"
      
      # update a string with new items
      def update(s, js, vs):
        return join(_update(list(s), js, vs))
      
      # generate possible seating plans
      def generate(ss):
        # find unseated people, and empty places
        (xs, js) = (set(names), list())
        for (j, x) in enumerate(ss):
          if x == '?':
            js.append(j)
          else:
            xs.remove(x)
      
        # complete the seating plan
        for s in subsets(xs, size=len, select='P'):
          yield update(ss, js, s)
      
      # groups of adjacent and opposite seats: w -> m
      group = {
        0: [0, 1, 3],
        1: [1, 2, 4],
        2: [2, 3, 0],
        3: [3, 4, 1],
        4: [4, 0, 2],
      }
      
      # check no men reuse seats, apart from seat 0
      def m_check(ms, ss):
        for (i, x) in enumerate(ms):
          if i == 0: continue
          if any(s[i] == x for (s, _) in ss):
            return False
        return True
      
      # check no woman is seated opposite or next to her husband
      def w_check(ms, ws):
        for (i, w) in enumerate(ws):
          if any(ms[j] == w for j in group[i]):
            return False
        return True
      
      # find seating plans, given previous plans
      def solve(ms, ws, ss=[]):
      
        # complete the seating plan for the men
        for ms1 in generate(ms):
          if not m_check(ms1, ss): continue
      
          # complete the seating plan for the women
          for ws1 in generate(ws):
            if not w_check(ms1, ws1): continue
            yield (ms1, ws1)
      
      # find the January seating plan
      for Jan in solve('ABCDE', '??B??'):
      
        # find the April seating plan
        # Mrs D sits in the same place as in Jan
        ws = update('??C??', [Jan[1].index('D')], ['D'])
        for Apr in solve('A????', ws, [Jan]):
      
          # find the July seating plan
          # Mrs A sits in the same place as in April
          ws = update('??D??', [Apr[1].index('A')], ['A'])
          for Jul in solve('A????', ws, [Jan, Apr]):
      
            # find the October seating plan
            for Oct in solve('A????', '??E??', [Jan, Apr, Jul]):
      
              # output the seating plans
              printf("Jan={Jan[0]}+{Jan[1]} Apr={Apr[0]}+{Apr[1]} Jul={Jul[0]}+{Jul[1]} Oct={Oct[0]}+{Oct[1]}")
      

      Solution: The seating arrangement in October was:

      Mr A; Mrs B; Mr E; Mrs A; Mr D; Mrs E; Mr C; Mrs D; Mr B; Mrs C

      The other seating plans are:

      Jan = Mr A; Mrs E; Mr B; Mrs A; Mr C; Mrs B; Mr D; Mrs C; Mr E; Mrs D
      Apr = Mr A; Mrs B/E; Mr D; Mrs E/B; Mr B/E; Mrs C; Mr E/B; Mrs A; Mr C; Mrs D
      Jul = Mr A; Mrs E/B; Mr C; Mrs B/E; Mr E/B; Mrs D; Mr B/E; Mrs A; Mr D; Mrs C
      Oct = Mr A; Mrs B; Mr E; Mrs A; Mr D; Mrs E; Mr C; Mrs D; Mr B; Mrs C

      In places where there are options either the first or second option is used consistently throughout.

      Like

  • Unknown's avatar

    Jim Randell 8:08 am on 23 May 2019 Permalink | Reply
    Tags: by: N A Phillips   

    Brain-Teaser 480: [Hymn numbers] 

    From The Sunday Times, 9th August 1970 [link]

    The church hymn board shows the numbers of the four hymns chosen for the service. There are 800 hymns in the hymn book in use. The numbers are shown by slipping rectangular cards along the four grooved ledges.

    Each card has a digit printed on each side of it, and there are no nines, inverted sixes being used instead.

    What is the smallest number of cards which must be kept in stock so that the numbers of any four different hymns can be shown on the board?

    This puzzle was originally published with no title.

    [teaser480]

     
    • Jim Randell's avatar

      Jim Randell 8:09 am on 23 May 2019 Permalink | Reply

      (A similar puzzle is given in H E Dudeney’s 1917 book Amusements In Mathematics [ link ]. See: Puzzle 426: The Hymn-Board Poser).

      I assumed the hymns are numbered from 1 to 800.

      I think it is easier to work out the digits required on the back of an envelope, but here is a program that does it.

      It examines the hymn numbers, and finds sequences of 4 hymns that use a maximal number of copies of each card, and then totals the numbers for each type of card. It runs in 80ms.

      from enigma import (defaultdict, irange, arg, printf)
      
      # maximum hymn number (N), and number of hymns on the board (K)
      N = arg(800, 0, int)
      K = arg(4, 1, int)
      printf("[N={N} K={K}]")
      
      # record maximum numbers
      m = defaultdict(lambda: defaultdict(list))
      
      # consider hymn numbers
      for n in irange(1, N):
        # displayed as cards with '9' replaced by '6'
        s = str(n).replace('9', '6')
        # record the hymn numbers by the number of each digit required
        for d in set(s):
          m[d][s.count(d)].append(n)
      
      # count maximum numbers of each digit for 4 hymns
      T = 0
      for d in '012345678':
        # collect K numbers with a maximal count
        ks = sorted(m[d].keys())
        ns = list()
        t = 0
        while True:
          n = K - len(ns)
          if n == 0: break
          k = ks.pop()
          xs = m[d][k][:n]
          t += k * len(xs)
          ns.extend(xs)
        printf("digit {d} -> {ns}; requires {t} copies")
        T += t
      
      printf("total copies = {T}")
      

      The minimum number of digits required is 82, and we put 2 digits on each card, so…

      Solution: The minimum number of cards required is 41.

      Examples of maximal sequences for each digit are:

      digit 0 → [100, 200, 300, 400]; requires 8 copies
      digit 1 → [111, 101, 110, 112]; requires 9 copies
      digit 2 → [222, 122, 202, 212]; requires 9 copies
      digit 3 → [333, 133, 233, 313]; requires 9 copies
      digit 4 → [444, 144, 244, 344]; requires 9 copies
      digit 5 → [555, 155, 255, 355]; requires 9 copies
      digit 6 → [666, 669, 696, 699]; requires 12 copies
      digit 7 → [777, 177, 277, 377]; requires 9 copies
      digit 8 → [188, 288, 388, 488]; requires 8 copies

      There is no point making a card with the same digit on both sides, so we can make C(9, 2) = 36 cards corresponding to all pairs of different digits. This uses each digit 8 times, so leaves us with: 1, 2, 3, 4, 5, 6, 6, 6, 6, 7. And we can pair these up as: (1, 6), (2, 6), (3, 6), (4, 6), (5, 7), making a full set of pairs of different digits, and 5 duplicates.

      To show that these cards are sufficient to make all possible combinations is a bit trickier, and something I might revisit later. It might be interesting to determine the smallest number of different pairing types (along with necessary duplicates) required to make a working set.

      Like

c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
Reply
e
Edit
o
Show/Hide comments
t
Go to top
l
Go to login
h
Show/Hide help
shift + esc
Cancel
Design a site like this with WordPress.com
Get started