diff --git a/README.md b/README.md new file mode 100644 index 0000000..22e2f54 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# google-python-class +[Mirror] Google's Python Class Exercises + +This repository aims to port google's exercises package to python3.x +https://developers.google.com/edu/python/ diff --git a/basic/list1.py b/basic/list1.py index 0fa9735..4e6171c 100755 --- a/basic/list1.py +++ b/basic/list1.py @@ -21,8 +21,8 @@ # and last chars of the string are the same. # Note: python does not have a ++ operator, but += works. def match_ends(words): - # +++your code here+++ - return + # +++your code here+++ + return # B. front_x @@ -33,9 +33,8 @@ def match_ends(words): # Hint: this can be done by making 2 lists and sorting each of them # before combining them. def front_x(words): - # +++your code here+++ - return - + # +++your code here+++ + return # C. sort_last @@ -45,46 +44,45 @@ def front_x(words): # [(2, 2), (1, 3), (3, 4, 5), (1, 7)] # Hint: use a custom key= function to extract the last element form each tuple. def sort_last(tuples): - # +++your code here+++ - return + # +++your code here+++ + return # Simple provided test() function used in main() to print # what each function returns vs. what it's supposed to return. def test(got, expected): - if got == expected: - prefix = ' OK ' - else: - prefix = ' X ' - print '%s got: %s expected: %s' % (prefix, repr(got), repr(expected)) + if got == expected: + prefix = ' OK ' + else: + prefix = ' X ' + print('%s got: %s expected: %s' % (prefix, repr(got), repr(expected))) # Calls the above functions with interesting inputs. def main(): - print 'match_ends' - test(match_ends(['aba', 'xyz', 'aa', 'x', 'bbb']), 3) - test(match_ends(['', 'x', 'xy', 'xyx', 'xx']), 2) - test(match_ends(['aaa', 'be', 'abc', 'hello']), 1) - - print - print 'front_x' - test(front_x(['bbb', 'ccc', 'axx', 'xzz', 'xaa']), - ['xaa', 'xzz', 'axx', 'bbb', 'ccc']) - test(front_x(['ccc', 'bbb', 'aaa', 'xcc', 'xaa']), - ['xaa', 'xcc', 'aaa', 'bbb', 'ccc']) - test(front_x(['mix', 'xyz', 'apple', 'xanadu', 'aardvark']), - ['xanadu', 'xyz', 'aardvark', 'apple', 'mix']) - - - print - print 'sort_last' - test(sort_last([(1, 3), (3, 2), (2, 1)]), - [(2, 1), (3, 2), (1, 3)]) - test(sort_last([(2, 3), (1, 2), (3, 1)]), - [(3, 1), (1, 2), (2, 3)]) - test(sort_last([(1, 7), (1, 3), (3, 4, 5), (2, 2)]), - [(2, 2), (1, 3), (3, 4, 5), (1, 7)]) + print('match_ends') + test(match_ends(['aba', 'xyz', 'aa', 'x', 'bbb']), 3) + test(match_ends(['', 'x', 'xy', 'xyx', 'xx']), 2) + test(match_ends(['aaa', 'be', 'abc', 'hello']), 1) + + print() + print('front_x') + test(front_x(['bbb', 'ccc', 'axx', 'xzz', 'xaa']), + ['xaa', 'xzz', 'axx', 'bbb', 'ccc']) + test(front_x(['ccc', 'bbb', 'aaa', 'xcc', 'xaa']), + ['xaa', 'xcc', 'aaa', 'bbb', 'ccc']) + test(front_x(['mix', 'xyz', 'apple', 'xanadu', 'aardvark']), + ['xanadu', 'xyz', 'aardvark', 'apple', 'mix']) + + print() + print('sort_last') + test(sort_last([(1, 3), (3, 2), (2, 1)]), + [(2, 1), (3, 2), (1, 3)]) + test(sort_last([(2, 3), (1, 2), (3, 1)]), + [(3, 1), (1, 2), (2, 3)]) + test(sort_last([(1, 7), (1, 3), (3, 4, 5), (2, 2)]), + [(2, 2), (1, 3), (3, 4, 5), (1, 7)]) if __name__ == '__main__': - main() + main() diff --git a/basic/list2.py b/basic/list2.py index a0698ba..390dd1f 100755 --- a/basic/list2.py +++ b/basic/list2.py @@ -13,8 +13,8 @@ # so [1, 2, 2, 3] returns [1, 2, 3]. You may create a new list or # modify the passed in list. def remove_adjacent(nums): - # +++your code here+++ - return + # +++your code here+++ + return # E. Given two lists sorted in increasing order, create and return a merged @@ -22,8 +22,9 @@ def remove_adjacent(nums): # Ideally, the solution should work in "linear" time, making a single # pass of both lists. def linear_merge(list1, list2): - # +++your code here+++ - return + # +++your code here+++ + return + # Note: the solution above is kind of cute, but unforunately list.pop(0) # is not constant time with the standard python list implementation, so @@ -37,29 +38,29 @@ def linear_merge(list1, list2): # Simple provided test() function used in main() to print # what each function returns vs. what it's supposed to return. def test(got, expected): - if got == expected: - prefix = ' OK ' - else: - prefix = ' X ' - print '%s got: %s expected: %s' % (prefix, repr(got), repr(expected)) + if got == expected: + prefix = ' OK ' + else: + prefix = ' X ' + print('%s got: %s expected: %s' % (prefix, repr(got), repr(expected))) # Calls the above functions with interesting inputs. def main(): - print 'remove_adjacent' - test(remove_adjacent([1, 2, 2, 3]), [1, 2, 3]) - test(remove_adjacent([2, 2, 3, 3, 3]), [2, 3]) - test(remove_adjacent([]), []) + print('remove_adjacent') + test(remove_adjacent([1, 2, 2, 3]), [1, 2, 3]) + test(remove_adjacent([2, 2, 3, 3, 3]), [2, 3]) + test(remove_adjacent([2, 2, 3, 3, 3, 2]), [2, 3, 2]) + test(remove_adjacent([]), []) - print - print 'linear_merge' - test(linear_merge(['aa', 'xx', 'zz'], ['bb', 'cc']), - ['aa', 'bb', 'cc', 'xx', 'zz']) - test(linear_merge(['aa', 'xx'], ['bb', 'cc', 'zz']), - ['aa', 'bb', 'cc', 'xx', 'zz']) - test(linear_merge(['aa', 'aa'], ['aa', 'bb', 'bb']), - ['aa', 'aa', 'aa', 'bb', 'bb']) + print('\nlinear_merge') + test(linear_merge(['aa', 'xx', 'zz'], ['bb', 'cc']), + ['aa', 'bb', 'cc', 'xx', 'zz']) + test(linear_merge(['aa', 'xx'], ['bb', 'cc', 'zz']), + ['aa', 'bb', 'cc', 'xx', 'zz']) + test(linear_merge(['aa', 'aa'], ['aa', 'bb', 'bb']), + ['aa', 'aa', 'aa', 'bb', 'bb']) if __name__ == '__main__': - main() + main() diff --git a/basic/mimic.py b/basic/mimic.py index be13399..40e6834 100755 --- a/basic/mimic.py +++ b/basic/mimic.py @@ -46,26 +46,26 @@ def mimic_dict(filename): - """Returns mimic dict mapping each word to list of words which follow it.""" - # +++your code here+++ - return + """Returns mimic dict mapping each word to list of words which follow it.""" + # +++your code here+++ + return def print_mimic(mimic_dict, word): - """Given mimic dict and start word, prints 200 random words.""" - # +++your code here+++ - return + """Given mimic dict and start word, prints 200 random words.""" + # +++your code here+++ + return # Provided main(), calls mimic_dict() and mimic() def main(): - if len(sys.argv) != 2: - print 'usage: ./mimic.py file-to-read' - sys.exit(1) + if len(sys.argv) != 2: + print('usage: ./mimic.py file-to-read') + sys.exit(1) - dict = mimic_dict(sys.argv[1]) - print_mimic(dict, '') + dict = mimic_dict(sys.argv[1]) + print_mimic(dict, '') if __name__ == '__main__': - main() + main() diff --git a/basic/string1.py b/basic/string1.py index 3138ea3..34d2716 100755 --- a/basic/string1.py +++ b/basic/string1.py @@ -24,8 +24,8 @@ # So donuts(5) returns 'Number of donuts: 5' # and donuts(23) returns 'Number of donuts: many' def donuts(count): - # +++your code here+++ - return + # +++your code here+++ + return # B. both_ends @@ -34,8 +34,8 @@ def donuts(count): # so 'spring' yields 'spng'. However, if the string length # is less than 2, return instead the empty string. def both_ends(s): - # +++your code here+++ - return + # +++your code here+++ + return # C. fix_start @@ -48,8 +48,8 @@ def both_ends(s): # Hint: s.replace(stra, strb) returns a version of string s # where all instances of stra have been replaced by strb. def fix_start(s): - # +++your code here+++ - return + # +++your code here+++ + return # D. MixUp @@ -60,53 +60,52 @@ def fix_start(s): # 'dog', 'dinner' -> 'dig donner' # Assume a and b are length 2 or more. def mix_up(a, b): - # +++your code here+++ - return + # +++your code here+++ + return # Provided simple test() function used in main() to print # what each function returns vs. what it's supposed to return. def test(got, expected): - if got == expected: - prefix = ' OK ' - else: - prefix = ' X ' - print '%s got: %s expected: %s' % (prefix, repr(got), repr(expected)) + if got == expected: + prefix = ' OK ' + else: + prefix = ' X ' + print('%s got: %s expected: %s' % (prefix, repr(got), repr(expected))) # Provided main() calls the above functions with interesting inputs, # using test() to check if each result is correct or not. def main(): - print 'donuts' - # Each line calls donuts, compares its result to the expected for that call. - test(donuts(4), 'Number of donuts: 4') - test(donuts(9), 'Number of donuts: 9') - test(donuts(10), 'Number of donuts: many') - test(donuts(99), 'Number of donuts: many') - - print - print 'both_ends' - test(both_ends('spring'), 'spng') - test(both_ends('Hello'), 'Helo') - test(both_ends('a'), '') - test(both_ends('xyz'), 'xyyz') - - - print - print 'fix_start' - test(fix_start('babble'), 'ba**le') - test(fix_start('aardvark'), 'a*rdv*rk') - test(fix_start('google'), 'goo*le') - test(fix_start('donut'), 'donut') - - print - print 'mix_up' - test(mix_up('mix', 'pod'), 'pox mid') - test(mix_up('dog', 'dinner'), 'dig donner') - test(mix_up('gnash', 'sport'), 'spash gnort') - test(mix_up('pezzy', 'firm'), 'fizzy perm') + print('donuts') + # Each line calls donuts, compares its result to the expected for that call. + test(donuts(4), 'Number of donuts: 4') + test(donuts(9), 'Number of donuts: 9') + test(donuts(10), 'Number of donuts: many') + test(donuts(99), 'Number of donuts: many') + + print() + print('both_ends') + test(both_ends('spring'), 'spng') + test(both_ends('Hello'), 'Helo') + test(both_ends('a'), '') + test(both_ends('xyz'), 'xyyz') + + print() + print('fix_start') + test(fix_start('babble'), 'ba**le') + test(fix_start('aardvark'), 'a*rdv*rk') + test(fix_start('google'), 'goo*le') + test(fix_start('donut'), 'donut') + + print() + print('mix_up') + test(mix_up('mix', 'pod'), 'pox mid') + test(mix_up('dog', 'dinner'), 'dig donner') + test(mix_up('gnash', 'sport'), 'spash gnort') + test(mix_up('pezzy', 'firm'), 'fizzy perm') # Standard boilerplate to call the main() function. if __name__ == '__main__': - main() + main() diff --git a/basic/string2.py b/basic/string2.py index c5894ee..631091a 100755 --- a/basic/string2.py +++ b/basic/string2.py @@ -16,8 +16,8 @@ # If the string length is less than 3, leave it unchanged. # Return the resulting string. def verbing(s): - # +++your code here+++ - return + # +++your code here+++ + return # E. not_bad @@ -29,8 +29,8 @@ def verbing(s): # So 'This dinner is not that bad!' yields: # This dinner is good! def not_bad(s): - # +++your code here+++ - return + # +++your code here+++ + return # F. front_back @@ -41,40 +41,39 @@ def not_bad(s): # Given 2 strings, a and b, return a string of the form # a-front + b-front + a-back + b-back def front_back(a, b): - # +++your code here+++ - return + # +++your code here+++ + return # Simple provided test() function used in main() to print # what each function returns vs. what it's supposed to return. def test(got, expected): - if got == expected: - prefix = ' OK ' - else: - prefix = ' X ' - print '%s got: %s expected: %s' % (prefix, repr(got), repr(expected)) + if got == expected: + prefix = ' OK ' + else: + prefix = ' X ' + print('%s got: %s expected: %s' % (prefix, repr(got), repr(expected))) # main() calls the above functions with interesting inputs, # using the above test() to check if the result is correct or not. def main(): - print 'verbing' - test(verbing('hail'), 'hailing') - test(verbing('swiming'), 'swimingly') - test(verbing('do'), 'do') + print('verbing') + test(verbing('hail'), 'hailing') + test(verbing('swiming'), 'swimingly') + test(verbing('do'), 'do') - print - print 'not_bad' - test(not_bad('This movie is not so bad'), 'This movie is good') - test(not_bad('This dinner is not that bad!'), 'This dinner is good!') - test(not_bad('This tea is not hot'), 'This tea is not hot') - test(not_bad("It's bad yet not"), "It's bad yet not") + print('\nnot_bad') + test(not_bad('This movie is not so bad'), 'This movie is good') + test(not_bad('This dinner is not that bad!'), 'This dinner is good!') + test(not_bad('This tea is not hot'), 'This tea is not hot') + test(not_bad("It's bad yet not"), "It's bad yet not") + + print('\nfront_back') + test(front_back('abcd', 'xy'), 'abxcdy') + test(front_back('abcde', 'xyz'), 'abcxydez') + test(front_back('Kitten', 'Donut'), 'KitDontenut') - print - print 'front_back' - test(front_back('abcd', 'xy'), 'abxcdy') - test(front_back('abcde', 'xyz'), 'abcxydez') - test(front_back('Kitten', 'Donut'), 'KitDontenut') if __name__ == '__main__': - main() + main() diff --git a/basic/wordcount.py b/basic/wordcount.py index b806078..a6c7c2e 100755 --- a/basic/wordcount.py +++ b/basic/wordcount.py @@ -39,6 +39,7 @@ import sys + # +++your code here+++ # Define print_words(filename) and print_top(filename) functions. # You could write a helper utility function that reads a file @@ -50,19 +51,20 @@ # This basic command line argument parsing code is provided and # calls the print_words() and print_top() functions which you must define. def main(): - if len(sys.argv) != 3: - print 'usage: ./wordcount.py {--count | --topcount} file' - sys.exit(1) - - option = sys.argv[1] - filename = sys.argv[2] - if option == '--count': - print_words(filename) - elif option == '--topcount': - print_top(filename) - else: - print 'unknown option: ' + option - sys.exit(1) + if len(sys.argv) != 3: + print('usage: ./wordcount.py {--count | --topcount} file') + sys.exit(1) + + option = sys.argv[1] + filename = sys.argv[2] + if option == '--count': + print_words(filename) + elif option == '--topcount': + print_top(filename) + else: + print('unknown option: ' + option) + sys.exit(1) + if __name__ == '__main__': - main() + main() diff --git a/copyspecial/solution/copyspecial.py b/copyspecial/solution/copyspecial.py index 239850c..a269516 100755 --- a/copyspecial/solution/copyspecial.py +++ b/copyspecial/solution/copyspecial.py @@ -10,94 +10,98 @@ import re import os import shutil -import commands +import subprocess """Copy Special exercise """ + # +++your code here+++ # Write functions and modify main() to call them # LAB(begin solution) def get_special_paths(dirname): - """Given a dirname, returns a list of all its special files.""" - result = [] - paths = os.listdir(dirname) # list of paths in that dir - for fname in paths: - match = re.search(r'__(\w+)__', fname) - if match: - result.append(os.path.abspath(os.path.join(dirname, fname))) - return result + """Given a dirname, returns a list of all its special files.""" + result = [] + paths = os.listdir(dirname) # list of paths in that dir + for fname in paths: + match = re.search(r'__(\w+)__', fname) + if match: + result.append(os.path.abspath(os.path.join(dirname, fname))) + return result def copy_to(paths, to_dir): - """Copy all of the given files to the given dir, creating it if necessary.""" - if not os.path.exists(to_dir): - os.mkdir(to_dir) - for path in paths: - fname = os.path.basename(path) - shutil.copy(path, os.path.join(to_dir, fname)) - # could error out if already exists os.path.exists(): + """Copy all of the given files to the given dir, creating it if necessary.""" + if not os.path.exists(to_dir): + os.mkdir(to_dir) + for path in paths: + fname = os.path.basename(path) + shutil.copy(path, os.path.join(to_dir, fname)) + # could error out if already exists os.path.exists(): def zip_to(paths, zipfile): - """Zip up all of the given files into a new zip file with the given name.""" - cmd = 'zip -j ' + zipfile + ' ' + ' '.join(paths) - print "Command I'm going to do:" + cmd - (status, output) = commands.getstatusoutput(cmd) - # If command had a problem (status is non-zero), - # print its output to stderr and exit. - if status: - sys.stderr.write(output) - sys.exit(1) + """Zip up all of the given files into a new zip file with the given name.""" + cmd = 'zip -j ' + zipfile + ' ' + ' '.join(paths) + print("Command I'm going to do:" + cmd) + try: + output = subprocess.check_output(cmd) + except Exception as e: + # If command had a problem (status is non-zero), + # print its output to stderr and exit. + sys.stderr.write(output) + sys.exit(1) + # LAB(end solution) def main(): - # This basic command line argument parsing code is provided. - # Add code to call your functions below. - - # Make a list of command line arguments, omitting the [0] element - # which is the script itself. - args = sys.argv[1:] - if not args: - print "usage: [--todir dir][--tozip zipfile] dir [dir ...]"; - sys.exit(1) - - # todir and tozip are either set from command line - # or left as the empty string. - # The args array is left just containing the dirs. - todir = '' - if args[0] == '--todir': - todir = args[1] - del args[0:2] - - tozip = '' - if args[0] == '--tozip': - tozip = args[1] - del args[0:2] - - if len(args) == 0: - print "error: must specify one or more dirs" - sys.exit(1) - - # +++your code here+++ - # Call your functions - # LAB(begin solution) - - # Gather all the special files - paths = [] - for dirname in args: - paths.extend(get_special_paths(dirname)) - - if todir: - copy_to(paths, todir) - elif tozip: - zip_to(paths, tozip) - else: - print '\n'.join(paths) - # LAB(end solution) + # This basic command line argument parsing code is provided. + # Add code to call your functions below. + + # Make a list of command line arguments, omitting the [0] element + # which is the script itself. + args = sys.argv[1:] + if not args: + print("usage: [--todir dir][--tozip zipfile] dir [dir ...]") + sys.exit(1) + + # todir and tozip are either set from command line + # or left as the empty string. + # The args array is left just containing the dirs. + todir = '' + if args[0] == '--todir': + todir = args[1] + del args[0:2] + + tozip = '' + if args[0] == '--tozip': + tozip = args[1] + del args[0:2] + + if len(args) == 0: + print("error: must specify one or more dirs") + sys.exit(1) + + # +++your code here+++ + # Call your functions + # LAB(begin solution) + + # Gather all the special files + paths = [] + for dirname in args: + paths.extend(get_special_paths(dirname)) + + if todir: + copy_to(paths, todir) + elif tozip: + zip_to(paths, tozip) + else: + print('\n'.join(paths)) + # LAB(end solution) + if __name__ == "__main__": - main() + main() diff --git a/logpuzzle/solution/solutionA.zip b/logpuzzle/solution/solutionA.zip new file mode 100644 index 0000000..1e2f721 Binary files /dev/null and b/logpuzzle/solution/solutionA.zip differ diff --git a/logpuzzle/solution/solutionB.zip b/logpuzzle/solution/solutionB.zip new file mode 100644 index 0000000..f7323e6 Binary files /dev/null and b/logpuzzle/solution/solutionB.zip differ diff --git a/sw_planets.csv b/sw_planets.csv new file mode 100644 index 0000000..c41c425 --- /dev/null +++ b/sw_planets.csv @@ -0,0 +1,388 @@ +name,region +Abafar,Outer Rim Territories +Abednedo,Colonies +Abhean,Mid Rim +Adumar,Wild Space +Aeten,Wild Space +Agamar,Outer Rim Territories +Akiva,Outer Rim Territories +Akuria,Outer Rim Territories +Alderaan,Core Worlds +Aleen,Mid Rim +Alpinn,Outer Rim Territories +Allyuen,Outer Rim Territories +Ambria,Inner Rim +Amethia Prime,Inner Rim +Anantapar,Outer Rim Territories +Anaxes,Core Worlds +Andelm IV,Outer Rim Territories +Ando,Mid Rim +Ankus,Mid Rim +Anoat,Outer Rim Territories +Ansion,Mid Rim +Antar,Inner Rim +Anthan Prime,Outer Rim Territories +Anzat,Mid Rim +Aquaris,Expansion Region +Argazda,Outer Rim Territories +Arkania,Colonies +Arkanis,Outer Rim Territories +Asmeru,Mid Rim +Atzerri,Inner Rim +Balamak,Mid Rim +Balmorra,Colonies +Balosar,Core Worlds +Bamayar,Mid Rim +Bardotta,Colonies +Bastatha,Inner Rim +Basteel,Outer Rim Territories +Bastion,Outer Rim Territories +Bavva,Outer Rim Territories +Belladoon,Outer Rim Territories +Belderone,Outer Rim Territories +Belkadan,Outer Rim Territories +Bellnar,Colonies +Belsavis,Mid Rim +Bendeluum,Outer Rim Territories +Berchest,Inner Rim +Bescane,Outer Rim Territories +Bespin,Outer Rim Territories +Bestine,Inner Rim +Bilbringi,Inner Rim +Bimmiel,Outer Rim Territories +Bimmisaari,Mid Rim +Birgis,Outer Rim Territories +Birren,Inner Rim +Bogden,Inner Rim +Bomis Koori,Mid Rim +Borgo Prime,Outer Rim Territories +Borleias,Colonies +Borosk,Outer Rim Territories +Botajef,Outer Rim Territories +Bothawui,Mid Rim +Boz Pity,Mid Rim +Brentaal IV,Core Worlds +Burnin Konn,Outer Rim Territories +Byblos,Colonies +Byss (Outer Rim Territories),Outer Rim Territories +Calcoraan,Inner Rim +Carida,Colonies +Carlac,Outer Rim Territories +Castell,Colonies +Cato Neimoidia,Colonies +Centares,Mid Rim +Cerea,Mid Rim +Chad,Outer Rim Territories +Chalacta,Mid Rim +Chalcedon,Mid Rim +Champala,Inner Rim +Chandrila,Core Worlds +Charros,Mid Rim +Christophsis,Outer Rim Territories +Ciutric,Outer Rim Territories +Codia,Mid Rim +Colla IV,Inner Rim +Commenor,Colonies +Comra,Wild Space +Cona,Inner Rim +Corellia,Core Worlds +Corsin,Expansion Region +Corulag,Core Worlds +Coruscant,Core Worlds +Council,Outer Rim Territories +Coyerti,Mid Rim +Crucival,Outer Rim Territories +Crul,Mid Rim +Csilla,Unknown Regions +Cyphar,Mid Rim +Cyrkon,Outer Rim Territories +D'Qar,Outer Rim Territories +Daalang,Mid Rim +Dagobah,Outer Rim Territories +Dandoran,Outer Rim Territories +Dantooine,Outer Rim Territories +Darlyn Boda,Outer Rim Territories +Dasoor,Mid Rim +Dathomir,Outer Rim Territories +Daxam IV,Outer Rim Territories +Delphon,Outer Rim Territories +Denon,Inner Rim +Dermos,Outer Rim Territories +Devaron,Outer Rim Territories +Deysum,Mid Rim +Dorin,Expansion Region +Dolla,Mid Rim +Dowut,Core Worlds +Drearia,Inner Rim +Dressel,Mid Rim +Druckenwell,Mid Rim +Dubrillion,Outer Rim Territories +Durkteel,Mid Rim +Duro,Core Worlds +Edusa,Outer Rim Territories +Eiattu,Mid Rim +Enarc,Mid Rim +Endor,Outer Rim Territories +Entralla,Outer Rim Territories +Epiphany,Outer Rim Territories +Er'Kit,Outer Rim Territories +Eriadu,Outer Rim Territories +Ertegas,Outer Rim Territories +Esfandia,Wild Space +Eufornis Major,Core Worlds +Eufornis Minor,Outer Rim Territories +Exodeen,Colonies +Falleen,Mid Rim +Farana,Outer Rim Territories +Farstine,Mid Rim +Felucia,Outer Rim Territories +Filordis,Inner Rim +Florrum,Outer Rim Territories +Fondor,Colonies +Formos,Outer Rim Territories +Fornax,Mid Rim +Galaan,Outer Rim Territories +Gamorr,Outer Rim Territories +Gan Moradir,Mid Rim +Gand,Outer Rim Territories +Ganthel,Core Worlds +Garel,Outer Rim Territories +Garos,Mid Rim +Genassa,Mid Rim +Generis,Outer Rim Territories +Gentes,Outer Rim Territories +Geonosis,Outer Rim Territories +Gerrenthum,Outer Rim Territories +Ghorman,Colonies +Giju,Colonies +Gilvaanen,Inner Rim +Glee Anselm,Mid Rim +Gorse,Inner Rim +Graf-World,Wild Space +Gravlex Med,Outer Rim Territories +Gromas,Mid Rim +Gutretee,Outer Rim Territories +G'wenee,Outer Rim Territories +Haidoral Prime,Mid Rim +Halcyon,Colonies +Halmad,Outer Rim Territories +Haruun Kal,Mid Rim +Helska,Outer Rim Territories +Herdessa,Mid Rim +Hinari,Outer Rim Territories +Horuz,Outer Rim Territories +Hosnian Prime,Core Worlds +Hosra,Outer Rim Territories +Hoth,Outer Rim Territories +Hok,Colonies +Ibaar,Outer Rim Territories +Iktotchon ,Expansion Region +Ilum,Unknown Regions +Indoumodo,Wild Space +Indupar,Mid Rim +Ione,Outer Rim Territories +Iridonia,Mid Rim +Isde Naha,Western Reaches +Iseno,Inner Rim +Ison,Outer Rim Territories +Iskalon,Mid Rim +Ithor,Mid Rim +Jaemus,Outer Rim Territories +Jakku,Western Reaches +Jelucan,Outer Rim Territories +Jhas,Outer Rim Territories +Jilrua,Outer Rim Territories +Jiroch,Mid Rim +Kaal,Mid Rim +Kaddak,Outer Rim Territories +Kalarba,Mid Rim +Kalee,Wild Space +Kalevala,Outer Rim Territories +Kalinda,Mid Rim +Kaller,Outer Rim Territories +Kattada,Colonies +Kamino,Beyond the Rishi Maze +Karfeddion,Mid Rim +Kashyyyk,Mid Rim +Keitum,Mid Rim +Kelada,Colonies +Kerkoidia ,Expansion Region +Kessel,Outer Rim Territories +Ketaris,Outer Rim Territories +Khuteb,Outer Rim Territories +Kiffex,Inner Rim +Kiffu,Inner Rim +Kintan,Outer Rim Territories +Kirtarkin,Outer Rim Territories +Klytus V,Wild Space +Kooriva,Inner Rim +Korrus,Outer Rim Territories +Kril'dor,Mid Rim +Kriselist,Mid Rim +Krownest ,Outer Rim Territories +Ktil,Inner Rim +Kuat,Core Worlds +Kubindi,Outer Rim Territories +Kwenn,Mid Rim +Lahn,Outer Rim Territories +Lahsbane,Mid Rim +Lannik,Mid Rim +Lantillies,Mid Rim +Lasan,Outer Rim Territories +Leritor,Mid Rim +Li-Toran,Inner Rim +Lira San,Wild Space +Lola Sayu,Outer Rim Territories +Lorahns,Mid Rim +Loronar,Colonies +Lorrd,Outer Rim Territories +Lorta,Mid Rim +Lothal,Outer Rim Territories +Lotho Minor,Outer Rim Territories +Lwhekk,Unknown Regions +Makem Te,Outer Rim Territories +Malachor,Outer Rim Territories +Malastare,Mid Rim +Manda,Mid Rim +Mandalore,Outer Rim Territories +Manpha,Outer Rim Territories +Maridun,Outer Rim Territories +Mataou,Outer Rim Territories +Metalorn,Mid Rim +Miser,Outer Rim Territories +Moltok,Outer Rim Territories +Mon Cala,Outer Rim Territories +Mon Gazza,Mid Rim +Monastery,Mid Rim +Moonus Mandel,Mid Rim +Moraband,Outer Rim Territories +Mrisst,Colonies +Mugaar,Mid Rim +Murkhana,Outer Rim Territories +Mustafar,Outer Rim Territories +Muunilinst,Outer Rim Territories +Mygeeto,Outer Rim Territories +Mytus,Outer Rim Territories +Naator,Mid Rim +Naboo,Mid Rim +Nag Ubdur,Outer Rim Territories +NaJedha,Mid Rim +Nakadia,Mid Rim +Nal Hutta,Outer Rim Territories +Namadii,Mid Rim +Nanth'ri,Mid Rim +Nar Kanji,Outer Rim Territories +Narq,Colonies +Neimoidia,Colonies +NewCov,Mid Rim +Nexus Ortai,Mid Rim +Nez Peron,Outer Rim Territories +Nirauan,Wild Space +Nixor,Mid Rim +Nothoiin,Outer Rim Territories +Nouane,Inner Rim +Null,Mid Rim +N'Zoth ,Core Worlds +Obroa-skai,Inner Rim +Ogem,Western Reaches +Omereth,Outer Rim Territories +Onderon,Inner Rim +Oon,Outer Rim Territories +Oosalon,Outer Rim Territories +Ord Biniir,Outer Rim Territories +Ord Cantrell,Outer Rim Territories +Ord Mantell,Mid Rim +Ord Pardorn,Mid Rim +Ord Trasi,Outer Rim Territories +Orinda,Mid Rim +Orn Kios,Outer Rim Territories +Orto Plutonia,Outer Rim Territories +Palanhi,Colonies +Pamarthe,Outer Rim Territories +Paqwepor,Mid Rim +Pasher,Inner Rim +Phaeda,Outer Rim Territories +Phatrong,Outer Rim Territories +Pheryon,Inner Rim +Phindar,Outer Rim Territories +Phorsa Gedd,Mid Rim +Phu,Colonies +Plexis,Core Worlds +Polis Massa,Outer Rim Territories +Polmanar,Outer Rim Territories +Ponemah Terminal,Outer Rim Territories +Prefsbelt,Outer Rim Territories +Promencius Four,Outer Rim Territories +Pujool,Outer Rim Territories +Quarzite,Inner Rim +Quell,Outer Rim Territories +Quellor,Colonies +Quermia,Outer Rim Territories +Radnor,Mid Rim +Rago,Mid Rim +Randon,Mid Rim +Rakata Prime,Unknown Regions +Rattatak,Outer Rim Territories +Raxus,Outer Rim Territories +Raydonia,Outer Rim Territories +The Redoubt,Wild Space +The Red Twins,Mid Rim +Riflor,Mid Rim +Rintonne,Mid Rim +Riosa,Inner Rim +Rishi,Outer Rim Territories +Roche,Mid Rim +Rodia,Outer Rim Territories +Ruusan,Mid Rim +Ryloth,Outer Rim Territories +Sakiya,Outer Rim Territories +Saleucami,Outer Rim Territories +Salient I,Outer Rim Territories +Salient II,Outer Rim Territories +Samovar,Western Reaches +Sarka,Mid Rim +Scarif,Outer Rim Territories +Scipio,Outer Rim Territories +Seelos,Outer Rim Territories +Serenno,Outer Rim Territories +Sernpidal,Outer Rim Territories +Sesid,Outer Rim Territories +Seswenna,Outer Rim Territories +Sha Qarot,Deep Core +Shantipole,Mid Rim +Shaum Hii,Outer Rim Territories +Shili,Expansion Region +Shu-Torun,Mid Rim +Skako,Core Worlds +Sleheyron,Hutt Space +Sneeve,Mid Rim +Son-tuul,Outer Rim Territories +Sriluur,Outer Rim Territories +Starkiller Base,Unknown Regions +Stygeon Prime,Outer Rim Territories +Sullust,Outer Rim Territories +Taanab,Inner Rim +Takodana,Western Reaches +Tangenine,Core Worlds +Tangrene,Outer Rim Territories +Taris,Outer Rim Territories +Tatooine,Outer Rim Territories +Tepasi,Core Worlds +Teth,Wild Space +Teyr,Colonies +Thabeska,Outer Rim Territories +Thalassia,Outer Rim Territories +Thisspias,Expansion Region +Thune,Wild Space +Thustra,Expansion Region +Thyferra,Inner Rim +Tinnel IV,Core Worlds +Togoria,Mid Rim +Tokmia,Outer Rim Territories +Toydaria,Mid Rim +Trandosha,Mid Rim +Trian,Outer Rim Territories +Troiken,Outer Rim Territories +Tsevuka,Outer Rim Territories +Tund,Outer Rim Territories +Tython,Deep Core \ No newline at end of file