Created
July 21, 2015 07:48
-
-
Save mahendrakalkura/31e497337ded0c44dcaa to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
''' | |
Method 1 | |
======== | |
(as implemented below) | |
Reason: "The line will be at most 1000 characters long." | |
i.e.: We will always have enough memory to slice and dice the list normally. | |
Method 2 | |
======== | |
(customized intermittent bubble sort; not implemented) | |
def is_integer(item): | |
try: | |
int(item) | |
return True | |
except ValueError: | |
pass | |
return False | |
items = input.split(' ') | |
length = len(items) | |
for outer in range(length): | |
for inner in range(length - 1, outer, -1): | |
if is_integer(items[inner]): | |
index = inner - 1 | |
while True: | |
if is_integer(items[index]): | |
if int(items[inner]) > int(items[index]): | |
# in-efficient; calling int() twice | |
items[inner], items[index] = items[index], items[inner] | |
break | |
index = index - 1 | |
else: | |
index = inner - 1 | |
while True: | |
if not is_integer(items[index]): | |
if items[inner] > items[index]: | |
items[inner], items[index] = items[index], items[inner] | |
break | |
index = index - 1 | |
This method can also be improved by using a pre-computed bitmask | |
(as used in Method 1) instead of inner and outer loops. | |
''' | |
def get_sorted_list(input): | |
if not input: | |
return input | |
integers = [] | |
words = [] | |
mask = [] | |
for item in input.split(' '): | |
try: | |
item = int(item) | |
mask.append(1) | |
integers.append(item) | |
except ValueError: | |
mask.append(0) | |
words.append(item) | |
integers = map(str, sorted(integers)) | |
words = sorted(words) | |
output = [] | |
for bit in mask: | |
if bit: | |
output.append(integers.pop(0)) | |
else: | |
output.append(words.pop(0)) | |
return ' '.join(output) | |
''' | |
Testing | |
======= | |
assert get_sorted_list('') == '' | |
assert get_sorted_list('1') == '1' | |
assert get_sorted_list('car truck bus') == 'bus car truck' | |
assert get_sorted_list('8 4 6 1 -2 9 5') == '-2 1 4 5 6 8 9' | |
assert get_sorted_list('car truck 8 4 bus 6 1') == 'bus car 1 4 truck 6 8' | |
''' | |
if __name__ == '__main__': | |
print get_sorted_list(raw_input()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment