Пример #1
0
 def check_position_time(self, dimensions, variables, ncFile):
     try:
         sort = Sort(self.data.get_header())
         variablesList = variables.variablesList
         for dimension in dimensions:
             if not dimension in variablesList or 'value' in variablesList[
                     dimension] and variablesList[dimension]['value'] != "":
                 self.appendMiddleDictionary[dimension] = -1
                 continue
             variableNC = ncFile.variables[dimension]
             dataCSV = self.data.get_data_by_column(
                 variablesList[dimension][sort.sort_column(
                     variablesList[dimension])])
             positionFirstElementBigger = numpy.where(
                 variableNC[:][:] > dataCSV[:][0])
             positionFirstElement = numpy.where(
                 variableNC[:][:] == dataCSV[:][0])
             if len(positionFirstElementBigger[0][:]) != 0 and len(
                     positionFirstElement[0][:]) == 0:
                 self.appendMiddleDictionary[
                     dimension] = positionFirstElementBigger[0][0]
             else:
                 self.appendMiddleDictionary[dimension] = 0
             self.appendDictionary[dimension] = 0
     except:
         Log().set_log_error('Error dimensions not found')
         Log().set_log_info('The script has closed unsatisfactorily')
         sys.exit(-1)
Пример #2
0
    def test_sort_dict_by_value(self):
        source = {'b': 3, 'a': 4, 'c': 2, 'd': 1}
        asc_sorted = [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
        desc_sorted = asc_sorted[::-1]

        self.assertEqual(Sort.sort_dict_by_value(source), asc_sorted)
        self.assertEqual(Sort.sort_dict_by_value(source, False), desc_sorted)
Пример #3
0
 def check_same_file(self, dimensions, variables, ncFile):
     sort = Sort(self.data.get_header())
     variablesList = variables.variablesList
     for dimension in dimensions:
         if not dimension in variablesList or 'value' in variablesList[
                 dimension] and variablesList[dimension]['value'] != "":
             self.appendDictionary[dimension] = -1
             continue
         variableNC = ncFile.variables[dimension]
         dataCSV = self.data.get_data_by_column(
             variablesList[dimension][sort.sort_column(
                 variablesList[dimension])])
         firstElementCSV = numpy.where(variableNC[:][:] == dataCSV[:][0])
         lastElementNC = numpy.where(
             dataCSV[:][:] == variableNC[:][len(variableNC[:][:]) - 1])
         if len(firstElementCSV[0][:]) != 0 and len(
                 lastElementNC[0][:]) != 0:
             if len(variableNC[:][:]) < len(dataCSV[:][:]):
                 self.appendDictionary[dimension] = lastElementNC[0][0] + 1
                 continue
             elif lastElementNC[0][0] < len(dataCSV[:][:]) - 1:
                 self.appendDictionary[dimension] = lastElementNC[0][0] + 1
                 continue
             elif len(variableNC[:][:]) == len(dataCSV[:][:]) or len(
                     variableNC[:][:]) > len(dataCSV[:][:]):
                 Log().set_log_info('This file has been used')
                 sys.exit(0)
         elif (len(firstElementCSV[0][:]) > 0 and len(lastElementNC[0][:])
               == 0) or (len(firstElementCSV[0][:]) == 0
                         and len(lastElementNC[0][:]) > 0):
             Log().set_log_info('It is impossible append the information')
             sys.exit(0)
         self.appendDictionary[dimension] = 0
Пример #4
0
def word_sort():
    global sortaword

    x_word = str(request.form['x_word'])
    title = 'Results:'

    my_word = Sort(x_word)

    sorted_word = my_word.sort_word()

    return render_template('sortawordresults.html',
                           the_title=title,
                           the_results=sorted_word)
 def buildUI(self, topframe, callbackDict):
     import tkinter as tk
     from tkinter import ttk
     import Personnages
     ret = super().buildUI(topframe, callbackDict)
     frame = ttk.Frame(topframe)
     frame.pack()
     nomSortLbl = ttk.Label(frame, text="Nom du sort à modifier:")
     nomSortLbl.grid(row=0, column=0, sticky="e")
     self.nomSortEntry = ttk.Entry(frame, width=50)
     self.nomSortEntry.delete(0, 'end')
     self.nomSortEntry.insert(0, self.nomSort)
     self.nomSortEntry.grid(row=0, column=1, sticky="w")
     ret["nomSort"] = self.nomSortEntry
     nomCaracLbl = ttk.Label(frame, text="Nom de la carac à modifier:")
     nomCaracLbl.grid(row=1, column=0, sticky="e")
     self.nomCaracCombobox = ttk.Combobox(frame,
                                          values=Sort.getCaracList(),
                                          state="readonly")
     if self.nomAttributCarac != "":
         self.nomCaracCombobox.set(self.nomAttributCarac)
     self.nomCaracCombobox.grid(row=1, column=1, sticky="w")
     ret["nomAttributCarac"] = self.nomCaracCombobox
     boostCaracLbl = ttk.Label(frame, text="Valeur du boost:")
     boostCaracLbl.grid(row=2, column=0, sticky="e")
     self.boostCaracSpinbox = tk.Spinbox(frame, from_=-999, to=999, width=4)
     self.boostCaracSpinbox.delete(0, 'end')
     self.boostCaracSpinbox.insert(0, int(self.boostCarac))
     self.boostCaracSpinbox.grid(row=2, column=1, sticky="w")
     ret["boostCarac"] = self.boostCaracSpinbox
     return ret
 def IS(l):
     frameList = []
     frameList.append(l[:])
     x = 1
     #While there exists unordered list elements
     while (x < len(l)):
         tempx = x
         a = x - 1
         #Move elements left-to-right to find sorted place for current index
         while (l[tempx] < l[a] and a >= 0):
             Sort.switchIndices(tempx, a, l)
             tempx = a
             a -= 1
             frameList.append(l[:])
         x += 1  #next index
     return frameList
Пример #7
0
 def QS(l):
     pivot = len(l) - 1
     lo = 0
     if (lo == pivot or pivot < 0):
         return l
     else:
         lo = QuickSort.findGreaterValue(lo, pivot, l)
         while (pivot != lo):
             Sort.switchIndices(pivot - 1, lo, l)
             lo = QuickSort.findGreaterValue(lo, pivot, l)
             Sort.switchIndices(pivot, pivot - 1, l)
             pivot -= 1
         temp = []
         temp.append(l[pivot])
         pList = QuickSort.partitionList(l, pivot)
         return (QuickSort.QS(pList[0]) + temp + QuickSort.QS(pList[1]))
Пример #8
0
    def test_sort_tuple(self):
        source = [('b', 3), ('a', 4), ('c', 2), ('d', 1)]

        # タプルの1つ目の要素でソート
        asc_1_sorted = [('a', 4), ('b', 3), ('c', 2), ('d', 1)]
        desc_1_sorted = asc_1_sorted[::-1]

        self.assertEqual(Sort.sort_tuple(source, 0), asc_1_sorted)
        self.assertEqual(Sort.sort_tuple(source, 0, False), desc_1_sorted)

        # タプルの2つ目の要素でソート
        # asc_2_sorted = asc_1_sortedよりは新しく書いた方が分かりやすいかなって
        asc_2_sorted = [('d', 1), ('c', 2), ('b', 3), ('a', 4), ]
        desc_2_sorted = asc_2_sorted[::-1]

        self.assertEqual(Sort.sort_tuple(source, 1), asc_2_sorted)
        self.assertEqual(Sort.sort_tuple(source, 1, False), desc_2_sorted)
Пример #9
0
 def loadSorts(sortfile, lvl):
     with open(sortfile) as f:
         data = f.read()
     sortsData = json.loads(data)
     sorts = []
     for sortName, sortData in sortsData.items():
         sortData["nom"] = sortName
         tabSorts = Sort.craftSort(sortData)
         rightLvlSort = Personnage.getSortRightLvl(lvl, tabSorts)
         sorts.append(rightLvlSort)
     if not sorts:
         raise ValueError("Sorts non trouvés")
     return sorts
Пример #10
0
 def steps2_and_3(self, topic, rows_seed, qrels_filepath, cols_seed,
                  data_seed, qrels_content_filepath,
                  list_cols_seed_and_feature_names,
                  dict_initialScoreRankingResults):
     training_set = collections.OrderedDict()
     # Topic is used as the name-doc num for the seed_doc since the seed document does not have a doc id like the other documents. & Read the initial ranking.
     training_set.update({topic: 1})
     list_of_pmids_for_topic = readInitialRanking(
         self.projDir + 'resources/topics/all.topics2017_2018_2019/' +
         self.topic)
     # Initialise some empty lists. & Read and use improved initial ranking from Lucene4IR RetrievalAppSubset.
     ordered_feature_names, list_of_pmids_for_topic = ([] for i in range(2))
     list_of_pmids_for_topic = [
         key for key, value in dict_initialScoreRankingResults[topic]
     ]
     batch = 1
     # Build lookup ordered dictionary for pmids I have just read and put corresponding numbering.
     tmp_lst = [n for n in range(len(list_of_pmids_for_topic))]
     lookup_dict = collections.OrderedDict(
         zip(tmp_lst, list_of_pmids_for_topic))
     lookup_dict.update({len(list_of_pmids_for_topic): topic})
     # Invert the lookup_dict ordered dictionary.
     inverted_lookup_dict = collections.OrderedDict(
         [[v, k] for k, v in lookup_dict.items()])
     # Set right row index for seed sparse matrix to be constructed inside the loop once the cols/features are also set correctly.
     new_rows_seed = np.array([len(list_of_pmids_for_topic)] *
                              len(rows_seed))
     # Order cols and data lists of seed doc.
     ordered_seed = Sort([[val, data_seed[idx]]
                          for idx, val in enumerate(list(cols_seed))])
     cols_seed = [item[0] for item in ordered_seed]
     data_seed = [item[1] for item in ordered_seed]
     ordered_feature_names = [[i[0], i[2]] for i in sorted(
         list_cols_seed_and_feature_names, key=lambda x: int(x[1]))]
     docs_reviewed = set()
     topic_qrels_dict = readFeedbackQRELSintoDict(topic, qrels_filepath)
     topic_qrels_content_dict = readFeedbackQRELSintoDict(
         topic, qrels_content_filepath)
     doc_score = collections.OrderedDict()
     flag = True
     learning_iterations = 5
     return (topic_qrels_dict, docs_reviewed, cols_seed, data_seed, batch,
             new_rows_seed, inverted_lookup_dict, doc_score, flag,
             learning_iterations, list_of_pmids_for_topic, training_set,
             tmp_lst, lookup_dict, topic_qrels_content_dict,
             ordered_feature_names)
Пример #11
0
    def loadSorts(sortfile, lvl):
        try:
            with open(sortfile) as f:
                data = f.read()
                sortsData = json.loads(data)
        except:
            sortsData = {}

        sorts = []
        sortsDebutCombat = []
        for sortName, sortData in sortsData.items():
            sortData["nom"] = sortName
            tabSorts = Sort.craftSort(sortData)
            rightLvlSort = Personnage.getSortRightLvl(lvl, tabSorts)
            if sortData.get("debutCombat", False):
                sortsDebutCombat.append(rightLvlSort)
            else:
                sorts.append(rightLvlSort)
        return sorts, sortsDebutCombat
Пример #12
0
def main():
    try:
        #Programm der Mainmethode
        l = log(True)

        args = getArgs()

        c = check()
        c.CheckArgCount(args)

        f = fReader(args[1])
        data = f.getData()

        c = Convert()
        data = c.str2Num(data)

        c = Sort()

        b = data.copy()
        m = data.copy()
        q = data.copy()

        msg = "sortet to: " + str(c.Bubblesort(b)) + " by Bubblesort"
        print(msg)
        l.msg(msg)
        msg = "sortet to: " + str(c.Mergesort(m)) + " by Mergesort"
        print(msg)
        l.msg(msg)
        msg = "sortet to: " + str(c.Quicksort(q)) + " by Quicksort"
        print(msg)
        l.msg(msg)

    # Fehlerbehandlung der UsageErrors (eigen angelegte Errors)
    except UE as e:
        msg = 'Benutzerfehler: ' + e.msg
        print(msg)
        l.msg(msg)
        return 1
    else:
        return 0
    print(listOfItems.items)

    while(True):
        try:
            print("What sort would you like to implement?: "
                  "\n1. Insertion Sort\n2. Selection Sort\n3. Quick Sort\n4. Merge Sort")
            selection = int(input("Please enter number corresponding to selection: "))
            if(selection < 1 or selection > 4):
                print("Please enter a number from the selection")
                continue
            else:
                break
        except ValueError:
            print("Must be of type integer")
            continue
    sort = Sort()

    switch = {1: sort.insertionSort,
              2: sort.selectionSort,
              3: sort.quickSort,
              4: sort.mergeSort
              }

    startTime = time.time()
    if(selection == 3 or selection == 4):
        switch[selection](listOfItems.items, 0, len(listOfItems.items)-1)
    else:
        switch[selection](listOfItems.items)
    elapsedTime = time.time() - startTime
    print(elapsedTime)
    print("After Sort" + str(listOfItems.items))
Пример #14
0
#Writen under python 2.2.6

from Sort import Sort
import random

a = Sort()

b = [random.random() for _ in xrange(500)]

print ('PreSort: ')
print (b)
    
bubble = a.bubble_sort(b)

print ('Bubble Sort: ')
print (bubble)

merge = a.merge_sort(b)

print ('Merge Sort: ')
print (merge)
Пример #15
0
def main():
    start_x = 170
    start_y = 760
    x = start_x
    y = start_y
    ix = 0
    Skretanje = [0] * 50
    Blok = [0] * 50
    while ix < 24:
        q = random.randint(
            0, 9)  # bira da li ce ici levo ili desno(0 - levo, 1 - desno
        Skretanje[ix] = q
        if q == 0:
            y = y - 30
        elif q == 1:
            x = x + 20
            y = y - 30
        elif q == 2:
            x = x - 20
            y = y - 30
        elif q == 3:
            x = x - 10
            y = y - 30
        elif q == 4:
            x = x + 10
            y = y - 30
        elif q == 5:
            x = x - 5
            y = y - 30
        elif q == 6:
            x = x + 5
            y = y - 30
        elif q == 7:
            x = x - 15
            y = y - 30
        elif q == 8:
            x = x + 15
            y = y - 30
        Blok[ix] = numpy.array([x, y])
        ix += 1

    Niz_Jedinki = []
    Niz_Fitnessa = []

    f = open("podaci1.txt", "w")
    Generacija = 100
    br_Jedinki = 20
    CrossPop = int(0.3 * br_Jedinki)
    NajboljiBr = int(0.4 * br_Jedinki)
    OstaliBr = int(0.3 * br_Jedinki)
    for i in range(0, br_Jedinki):
        niz_instrukcija = RucnaInicijalizacija(i)  # Inicijalizujem random GKV
        jedinka = Simulacija(niz_instrukcija, Blok)  # stvaram jedinku
        Niz_Jedinki.append(
            jedinka.Niz_Instrukcija)  # U Niz_Jedinki ubacujem jedinke
        Niz_Fitnessa.append(FitU(jedinka.Trci()))

    for evolucija in range(0, Generacija):
        Niz_Jedinki, Niz_Fitnessa = Sort(Niz_Fitnessa, Niz_Jedinki)

        print(str(evolucija) + "\t" + str(Niz_Fitnessa[0]))

        Najbolji_Niz = Niz_Jedinki[:
                                   NajboljiBr]  # Selekcija 40% Najboljih poopulacija
        CrossOver_Niz = Niz_Jedinki[NajboljiBr:(
            Generacija -
            OstaliBr)]  # Koriscenje odbacenih populacija za CrossOver
        Ostalo = Niz_Jedinki[(br_Jedinki - OstaliBr):]  # Ostatak
        Niz_Jedinki = []
        Niz_Fitnessa = []

        for i in range(0, CrossPop, 2):
            CrossOver_Niz[i], CrossOver_Niz[i + 1] = RandomCrossOver(
                CrossOver_Niz[i], CrossOver_Niz[i + 1])
        for i in range(0, OstaliBr):
            Ostalo[i] = RandomZaPopulaciju(
            )  # Za ostatak Niza ubaciti random G, K, V
            # print(Ostalo[i])
        Niz_Jedinki = Najbolji_Niz + CrossOver_Niz + Ostalo  # Spajanje GKV
        for i in range(0, br_Jedinki):
            Deca = Simulacija(Niz_Jedinki[i], Blok)  # Pravljenje dece
            Niz_Fitnessa.append(FitU(Deca.Trci()))
        # pygame.display.flip()
        for i in range(0, br_Jedinki):
            Niz_Jedinki[i] = Mutacija(Niz_Jedinki[i])

        from multiprocessing import Pool
        from itertools import repeat
        with Pool(20) as pool:
            Niz_Fitnessa = list(pool.map(oceni, zip(Niz_Jedinki,
                                                    repeat(Blok))))
Пример #16
0
import math
import timeit
import numpy
import random
import os
from Sort import Sort
import matplotlib.pyplot as plt
from scipy.interpolate import make_interp_spline

sort1 = Sort()
mergeSortTimes = []
insertionSortTimes = []


def howManyRandomNumber(x):
    completeName = os.path.join("randomKeysUsed", "keys" + str(x) + ".txt")
    f = open(completeName, "w")
    for y in range(0, x):
        array[y] = random.randint(0, 100000)
        f.write(str(array[y]) + "\n")
    f.close()


def saveMergeSortedList(x):
    completeName = os.path.join("mergSortResults",
                                "mergeSortedKeys" + str(x) + ".txt")
    f = open(completeName, "w")
    for y in range(0, x):
        f.write(str(array[y]))
        f.write("\n")
    f.close()
Пример #17
0
 def __init__(self):
     self.list = Sort.genRandList()
     #self.list = [3,2,1]
     self.frameList = []
Пример #18
0
#Writen under python 2.2.6

from Sort import Sort
import random

a = Sort()

b = [random.random() for _ in xrange(500)]

print('PreSort: ')
print(b)

bubble = a.bubble_sort(b)

print('Bubble Sort: ')
print(bubble)

merge = a.merge_sort(b)

print('Merge Sort: ')
print(merge)
Пример #19
0
def main():
    done = False
    brzinaStaraX = 0
    brzinaStaraY = 0
    start_x = 170  # x kordinata pocetnog bloka
    start_y = 760  # y kordinata pocetnog bloka
    x_size = 50  # duzina bloka
    y_size = 30  # sirina bloka
    x = start_x
    y = start_y
    playerX = 194
    playerY = 775
    # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))  # prvi blok
    # player = pygame.Rect((playerX, playerY, 4, 4))  # pocetna pozicija igraca
    # pygame.draw.rect(screen, My_light_red_color, player)
    # pygame.display.update()
    ix = 0
    Skretanje = [0] * 50
    Blok = [0] * 50
    # pygame.mouse.set_visible(False)
    #     while not done:

    # generisanje random mape
    while ix < 24:
        q = random.randint(
            0, 9)  # bira da li ce ici levo ili desno(0 - levo, 1 - desno
        Skretanje[ix] = q
        if q == 0:
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        elif q == 1:
            x = x + 20
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        elif q == 2:
            x = x - 20
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        elif q == 3:
            x = x - 10
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        elif q == 4:
            x = x + 10
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        elif q == 5:
            x = x - 5
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        elif q == 6:
            x = x + 5
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        elif q == 7:
            x = x - 15
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        elif q == 8:
            x = x + 15
            y = y - 30
            # pygame.draw.rect(screen, My_light_blue_color, (x, y, x_size, y_size))
        Blok[ix] = numpy.array([x, y])
        ix += 1
    Niz_Populacija = []
    Niz_Jedinki = []
    Niz_Fitnessa = []
    # pygame.display.flip()
    f = open("podaci.txt", "w")
    # for event in pygame.event.get():
    #     if event.type == pygame.QUIT:
    #         # print("Gas - Kocnica - Volan \t x0 - x - Brzina - Ubrzanje \n")
    #         done = True
    Generacija = 10
    br_Jedinki = 100
    Min_Fitness = [0] * Generacija
    CrossPop = int(0.3 * br_Jedinki)
    NajboljiBr = int(0.4 * br_Jedinki)
    OstaliBr = int(0.3 * br_Jedinki)
    generacija = open("PrvaGeneracija.txt", "w")
    for i in range(0, br_Jedinki):
        niz_instrukcija = Inizijalizacija(
            Skretanje)  # Inicijalizujem random GKV
        jedinka = Simulacija(niz_instrukcija, Blok)  # stvaram jedinku
        Niz_Jedinki.append(
            jedinka.Niz_Instrukcija)  # U Niz_Jedinki ubacujem jedinke
        Niz_Fitnessa.append(FitU(
            jedinka.Trci()))  # U Niz Fitnessa ubacujem Fitness od jedinke
        generacija.write(str(niz_instrukcija) + "\n")

    # Evolucija
    for evolucija in range(0, Generacija):
        Niz_Jedinki, Niz_Fitnessa = Sort(
            Niz_Fitnessa,
            Niz_Jedinki)  # Na kraju sortiram Niz_Jedinki na osnovu Fitnesa

        f.write(str(Niz_Fitnessa[0]) + "\n")
        print(str(evolucija) + "\t" + str(Niz_Fitnessa[0]))
        Min_Fitness[evolucija] = Niz_Fitnessa[0]
        Najbolji_Niz = Niz_Jedinki[:
                                   NajboljiBr]  # Selekcija 40% Najboljih poopulacija
        CrossOver_Niz = Niz_Jedinki[NajboljiBr:(
            Generacija -
            OstaliBr)]  # Koriscenje odbacenih populacija za CrossOver
        Ostalo = Niz_Jedinki[(br_Jedinki - OstaliBr):]  # Ostatak

        Niz_Jedinki = []
        Niz_Fitnessa = []

        # for i in range(0, CrossPop, 2):
        #     # Odbaceni_Niz[i], Odbaceni_Niz[i + 1] = TwoPoint(Odbaceni_Niz[i], Odbaceni_Niz[i + 1])
        #     # # print(Odbaceni_Niz[i])                                #Cuveni Two Point crossover

        for i in range(0, CrossPop, 2):
            CrossOver_Niz[i], CrossOver_Niz[i + 1] = RandomCrossOver(
                CrossOver_Niz[i], CrossOver_Niz[i + 1])
        for i in range(0, OstaliBr):
            Ostalo[i] = RandomZaPopulaciju(
            )  # Za ostatak Niza ubaciti random G, K, V
            # print(Ostalo[i])
        Niz_Jedinki = Najbolji_Niz + CrossOver_Niz + Ostalo  # Spajanje GKV
        for i in range(0, br_Jedinki):
            Deca = Simulacija(Niz_Jedinki[i], Blok)  # Pravljenje dece
            Niz_Fitnessa.append(FitU(Deca.Trci()))
        # pygame.display.flip()
        for i in range(0, br_Jedinki):
            Niz_Jedinki[i] = Mutacija(Niz_Jedinki[i])

        from multiprocessing import Pool
        from itertools import repeat
        with Pool(20) as pool:
            Niz_Fitnessa = list(pool.map(oceni, zip(Niz_Jedinki,
                                                    repeat(Blok))))

    NacrtajGrafik(Min_Fitness)
Пример #20
0
from File import File
from Sort import Sort

from timeit import timeit, Timer

if __name__ == "__main__":

    file = File()
    sort = Sort()

    # write random numbers to file
    file.write_ten_random_arrays()

    # read file and save locally
    numbers = file.read_ten_random_arrays()

    template = """Original array: {}

    optimized bubble sort: {} \t {} 
    insertion sort: {} \t {}
    quick sort: {} \t {} 
   
    """

    for arr in numbers:
        ori = " ".join([str(num) for num in arr])
        t1 = Timer(lambda: sort.bubble(arr))
        t2 = Timer(lambda: sort.insertion(arr))
        t3 = Timer(lambda: sort.quick(arr))
        print(
            template.format(ori.split(" "), sort.bubble(arr),