This is what my current setting looks like:-
Any ideas for the colors of the html tag names other than white ?
2 3 4 5 1 6 7 8 9
and you reverse 4, the result will be 5 4 3 2 1 6 7 8 9
. Now if you reverse 5, you win.What we're asking you to do is, given a list of numbers in a random order, produce the moves required to arrange them so they end up in numerical order.
(from codegolf.com)
Now Ive been working on this for a couple of hours and the best I can come up with is this ( My language of choice, python):-
[UPDATE #1]: File Size - 181kb
1) Changed the while loop condition
2)A different way of printing, by adding a comma after the last object one can suppress the new line that is automatically added by print in python
3)Removing unnecessary indentation helped on the file size
4)Didnt need the strip function
import re,sys
n = map(int,re.split(" ",sys.stdin.readline()))
l = len(n)
while l:
m = n.index(max(n[0:l])) + 1
n[:m] = n[m-1::-1]
n[:l] = n[l-1::-1]
print m,l,
l -= 1
[ORIGINAL]
import re,sys
n = map(int,re.split(" ",str(sys.stdin.readline()).strip()))
l = len(n)
while n != sorted(n):
m = n.index(max(n[0:l])) + 1
n[:m] = n[m-1::-1]
n[:l] = n[l-1::-1]
print m,"\n",l
l -= 1
the algorithm works in the following way:-
given a list, get its length
find the index of the maximum value within it, do a reverse from 0 to the index, so now the max is in front (and the move being the index + 1)
then do a reverse again on the length of the list , bringing the max to the end of the list (now the move after that being the length of the list)
decrease the length, so you iterate over a smaller list and repeat the same steps on the smaller section of the list
import re
import string
#dictionary to store words and their counts
word_count = {}
#read in text document line by line
for line in open("trial.txt").readlines():
#remove leading and trailing whitespace
line = string.strip(line)
#split the string into words
#based on whitespace, punctuation, digits
for word in re.split("["+string.whitespace+string.punctuation+string.digits+"]",line):
#make the word lower case
word = string.lower(word)
#check if it is actually a word
if re.match("^["+string.lowercase+"]+$",word):
#increment count if true
if word_count.has_key(word):
word_count[word]+=1
#else add entry
else:
word_count[word] = 1
for w in word_count:
print w, ":" ,word_count[w]
import re
import string
word_count = {}
text = open("trial.txt").read();
#list of words delimited by whitespace, punctuation and digits
#iterate by words in returned list from split
#lower case all the words in the text
words = re.split("["+string.whitespace+string.punctuation+string.digits+"]",string.lower(text))
#go through the list
for i in range(0,len(words)-1):
#as long as the word in the list is a word and is not already a key
if re.match("^["+string.lowercase+"]+$",words[i]) and not word_count.has_key(words[i]):
#add to the dictionary and get the count from the list
word_count[words[i]] = words.count(words[i])
for w in word_count:
print w,":",word_count[w]