Sunday, March 17, 2019

Mutations - Hacker Rank Solution

We have seen that lists are mutable (they can be changed), and tuples are immutable (they cannot be changed).
Let's try to understand this with an example.

You are given an immutable string, and you want to make changes to it.
Example
>>> string = "abracadabra"
You can access an index by:
>>> print string[5]
a
What if you would like to assign a value?
>>> string[5] = 'k' 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
How would you approach this?
  • One solution is to convert the string to a list and then change the value.
Example
>>> string = "abracadabra"
>>> l = list(string)
>>> l[5] = 'k'
>>> string = ''.join(l)
>>> print string
abrackdabra
  • Another approach is to slice the string and join it back.
Example
>>> string = string[:5] + "k" + string[6:]
>>> print string
abrackdabra
Task
Read a given string, change the character at a given index and then print the modified string.
Input Format
The first line contains a string, .
The next line contains an integer , denoting the index location and a character  separated by a space.
Output Format
Using any of the methods explained above, replace the character at index  with character .
Sample Input
abracadabra
5 k
Sample Output
abrackdabra

Mutations - Hacker Rank Solution

Using the slice : operator, we can solve this challenge.
Problem Tester's code:
s = raw_input()
i,k = raw_input().split()
print s[:int(i)]+k+s[int(i)+1:]

7 comments:

  1. The answer was in question itself...
    def mutate_string(string, position, character):
    string = "abracadabra"
    l = list(string)
    l[5] = 'k'
    string = ''.join(l)
    return string

    if __name__ == '__main__': #already given part
    s = raw_input()
    i, c = raw_input().split()
    s_new = mutate_string(s, int(i), c)
    print s_new

    ReplyDelete
  2. def mutate_string(string, position, character):
    l = list(string)
    l[position] = character
    string = ''.join(l)
    return string

    if __name__ == '__main__':
    s = input()
    i, c = input().split()
    s_new = mutate_string(s, int(i), c)
    print(s_new)

    ReplyDelete
  3. I think this would be the perfect solution for this.

    def mutate_string(string, position, character):
    a = list(string)
    a[position] = character
    c = "".join(a)
    return c

    if __name__ == '__main__':
    s = input()
    i, c = input().split()
    s_new = mutate_string(s, int(i), c)
    print(s_new)

    ReplyDelete
  4. def mutate_string(s, i, c):
    l = list(s)
    l[i] = c
    s = ''.join(l)
    return s

    if __name__ == '__main__':
    s = input()
    i, c = input().split()
    s_new = mutate_string(s, int(i), c)
    print(s_new)

    ReplyDelete
  5. def mutate_string(string, position, character):
    return string[:position] + character + string[position + 1:]

    if __name__ == '__main__':
    s = input()
    i, c = input().split()
    s_new = mutate_string(s, int(i), c)
    print(s_new)

    ReplyDelete

Powered by Blogger.