DEV Community

HHMathewChan
HHMathewChan

Posted on • Originally published at rebirthwithcode.tech

6 3

Python exercise 12: find the hidden ball

Question

  • Create a function that returns the letter position where the ball final position is once the swapping is finish.

description

  • There are three cups on a table, at positions A, B, and C. At the start, there is a ball hidden under the cup at position B.

Three red cups facedown

  • There will be several swap perform, represented by two letters.
  • For example, if I swap the cups at positions A and B, this can be represented as AB or BA.

Examples

cup_swapping(["AB", "CA"]) ➞ "C"

cup_swapping(["AC", "CA", "CA", "AC"]) ➞ "B"

cup_swapping(["BA", "AC", "CA", "BC"]) ➞ "A"
Enter fullscreen mode Exit fullscreen mode

My solution

  • 1. initialise a current position "B"
  • 2. iterate over the list of swap combination
    • 2.1 iterate over each swap combination
  • 3. check the ball have been swap
    • 3.1 if current position is exist in the swap combination, it is swapped
    • 3.2 update the current position
    • 3.2.1 if current_position equals to the first letter
    • 3.2.2 then final letter is the current position
    • 3.3.1 if current_position not equal the first letter
    • 3.3.2 then first letter is the current position
  • 4. print the final position
def cup_swapping(swaps):  
    current_position = "B"  
    for move in swaps:  
        if current_position in move:  
            if current_position == move[0]:  
                current_position = move[1]  
            else:  
                current_position = move[0]  
    return current_position 
Enter fullscreen mode Exit fullscreen mode

Solution by others

Method 1

  • shorten version of my answer
def cup_swapping(swaps):  
    current_position = "B"  
    for move in swaps:  
        if current_position in move:  
            current_position = move[1] if move[0] == current_position else move[0]  
    return current_position
Enter fullscreen mode Exit fullscreen mode

Method 2

def cup_swapping(swaps, current_position="B"):  
    for move in swaps:  
        current_position = move.replace(current_position, "") if current_position in move else current_position  
    return current_position
Enter fullscreen mode Exit fullscreen mode
  • key point
  • iterate over each swap
    • in the swap, there is two letter
    • if the current position appear in the swap, replace that letter with empty string
      • i.e. replace "AB" to "A" if current position is "A"
      • and also update the current position to the remaining single letter
    • if the current position do not appear in the swap, keep the current position

My reflection

  • It is a good feeling to solve a problem without hint. First I got stuck when just write the code, then I try to solve the question by writing the algorithm down, it sudden feel much easier to think. Thus, I will make the habit the write down the algorithm first rather coding at first. Beside, I learn new way to shorten the if else statement

Credit

challenge found on edabit

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

👥 Ideal for solo developers, teams, and cross-company projects

Learn more