Skip to content

Instantly share code, notes, and snippets.

@mahendrakalkura
Created July 21, 2015 07:48
Show Gist options
  • Save mahendrakalkura/31e497337ded0c44dcaa to your computer and use it in GitHub Desktop.
Save mahendrakalkura/31e497337ded0c44dcaa to your computer and use it in GitHub Desktop.
# -*- 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