# Copyright (C) 2024-2025 LibreWeddingPlanner contributors # frozen_string_literal: true module Tables class WheelSwap private attr_reader :initial_solution def initialize(initial_solution) @initial_solution = initial_solution end def call(size = 1) Rails.logger.debug { "WheelSwap with size: #{size}" } new_solution = @initial_solution.deep_dup selected_guests = [] size.times do selected_guests += new_solution.tables.map(&:pop) end selected_guests.shuffle! tables = new_solution.tables.cycle tables.next << selected_guests.pop while selected_guests.any? new_solution.tables.each(&:reset) new_solution end end end