Assigning projects in order of priority











up vote
3
down vote

favorite












Let's assume we have the following situation:




  • Multiple project topics exist, each corresponding to a natural number n,

  • students can sign in and choose two projects and give them either priority_1 or priority_2,

  • The name and the time when they sign in is tracked as well.


With all of the information above assume you receive data in the from of a txt-file looking like this



Martin  16:46:32    8   19
Alice 15:22:56 8 12
Alex 17:23:11 19 1
John 19:02:11 11 13
Phillip 19:03:11 11 13
Diego 15:23:57 14 5
Jack 16:46:45 8 3


where the columns represent the name, time, priority 1 and priority 2 in this order. You can assume that all of them signed in on the same day and students which signed in first have a higher priority in comparison to the others.



I wanted to write a program that takes this txt-file as input and returns a txt-file with output



Name    Assigned Project
Alice 8
Diego 14
Martin 19
Jack 3
Alex 1
John 11
Phillip 13




The solution I came up with looks like this:



import numpy as np

dat = np.genfromtxt("data.txt", dtype="str")

class person:
def __init__(self, name, time, prio1, prio2):
self.name = name
sp = time.split(":")
t = sp[0]*3600 + sp[1]*60 + sp[2]
self.time = t
self.prio1 = prio1
self.prio2 = prio2

names = dat[:, 0]
time = dat[:, 1]
prio1 = dat[:, 2]
prio2 = dat[:, 3]

people =
for i,j,k,l in zip(names, time, prio1, prio2):
people.append(person(i,j,k,l))

people_sorted_time = sorted(people, key=lambda x: x.time)

for k in range(len(people_sorted_time)):
for j in range(k + 1, len(people_sorted_time)):
if people_sorted_time[k].prio1 == people_sorted_time[j].prio1:
people_sorted_time[j].prio1 = people_sorted_time[j].prio2

res = open("results","w")
res.write("Name"+"t"+"Assigned Project"+"n")
for k in range(len(people_sorted_time)):
res.write(people_sorted_time[k].name + "t"
+ people_sorted_time[k].prio1 + "n")




The code seems to work fine, but I'm not sure if I actually was able to take care of all edge-cases. I'm also not sure if this is really a efficient way to solve the problem, I rarely code stuff like that (mostly computational physics stuff), and would appreciate any kind of suggestions on how one could improve the code in general.










share|improve this question







New contributor




Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
























    up vote
    3
    down vote

    favorite












    Let's assume we have the following situation:




    • Multiple project topics exist, each corresponding to a natural number n,

    • students can sign in and choose two projects and give them either priority_1 or priority_2,

    • The name and the time when they sign in is tracked as well.


    With all of the information above assume you receive data in the from of a txt-file looking like this



    Martin  16:46:32    8   19
    Alice 15:22:56 8 12
    Alex 17:23:11 19 1
    John 19:02:11 11 13
    Phillip 19:03:11 11 13
    Diego 15:23:57 14 5
    Jack 16:46:45 8 3


    where the columns represent the name, time, priority 1 and priority 2 in this order. You can assume that all of them signed in on the same day and students which signed in first have a higher priority in comparison to the others.



    I wanted to write a program that takes this txt-file as input and returns a txt-file with output



    Name    Assigned Project
    Alice 8
    Diego 14
    Martin 19
    Jack 3
    Alex 1
    John 11
    Phillip 13




    The solution I came up with looks like this:



    import numpy as np

    dat = np.genfromtxt("data.txt", dtype="str")

    class person:
    def __init__(self, name, time, prio1, prio2):
    self.name = name
    sp = time.split(":")
    t = sp[0]*3600 + sp[1]*60 + sp[2]
    self.time = t
    self.prio1 = prio1
    self.prio2 = prio2

    names = dat[:, 0]
    time = dat[:, 1]
    prio1 = dat[:, 2]
    prio2 = dat[:, 3]

    people =
    for i,j,k,l in zip(names, time, prio1, prio2):
    people.append(person(i,j,k,l))

    people_sorted_time = sorted(people, key=lambda x: x.time)

    for k in range(len(people_sorted_time)):
    for j in range(k + 1, len(people_sorted_time)):
    if people_sorted_time[k].prio1 == people_sorted_time[j].prio1:
    people_sorted_time[j].prio1 = people_sorted_time[j].prio2

    res = open("results","w")
    res.write("Name"+"t"+"Assigned Project"+"n")
    for k in range(len(people_sorted_time)):
    res.write(people_sorted_time[k].name + "t"
    + people_sorted_time[k].prio1 + "n")




    The code seems to work fine, but I'm not sure if I actually was able to take care of all edge-cases. I'm also not sure if this is really a efficient way to solve the problem, I rarely code stuff like that (mostly computational physics stuff), and would appreciate any kind of suggestions on how one could improve the code in general.










    share|improve this question







    New contributor




    Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






















      up vote
      3
      down vote

      favorite









      up vote
      3
      down vote

      favorite











      Let's assume we have the following situation:




      • Multiple project topics exist, each corresponding to a natural number n,

      • students can sign in and choose two projects and give them either priority_1 or priority_2,

      • The name and the time when they sign in is tracked as well.


      With all of the information above assume you receive data in the from of a txt-file looking like this



      Martin  16:46:32    8   19
      Alice 15:22:56 8 12
      Alex 17:23:11 19 1
      John 19:02:11 11 13
      Phillip 19:03:11 11 13
      Diego 15:23:57 14 5
      Jack 16:46:45 8 3


      where the columns represent the name, time, priority 1 and priority 2 in this order. You can assume that all of them signed in on the same day and students which signed in first have a higher priority in comparison to the others.



      I wanted to write a program that takes this txt-file as input and returns a txt-file with output



      Name    Assigned Project
      Alice 8
      Diego 14
      Martin 19
      Jack 3
      Alex 1
      John 11
      Phillip 13




      The solution I came up with looks like this:



      import numpy as np

      dat = np.genfromtxt("data.txt", dtype="str")

      class person:
      def __init__(self, name, time, prio1, prio2):
      self.name = name
      sp = time.split(":")
      t = sp[0]*3600 + sp[1]*60 + sp[2]
      self.time = t
      self.prio1 = prio1
      self.prio2 = prio2

      names = dat[:, 0]
      time = dat[:, 1]
      prio1 = dat[:, 2]
      prio2 = dat[:, 3]

      people =
      for i,j,k,l in zip(names, time, prio1, prio2):
      people.append(person(i,j,k,l))

      people_sorted_time = sorted(people, key=lambda x: x.time)

      for k in range(len(people_sorted_time)):
      for j in range(k + 1, len(people_sorted_time)):
      if people_sorted_time[k].prio1 == people_sorted_time[j].prio1:
      people_sorted_time[j].prio1 = people_sorted_time[j].prio2

      res = open("results","w")
      res.write("Name"+"t"+"Assigned Project"+"n")
      for k in range(len(people_sorted_time)):
      res.write(people_sorted_time[k].name + "t"
      + people_sorted_time[k].prio1 + "n")




      The code seems to work fine, but I'm not sure if I actually was able to take care of all edge-cases. I'm also not sure if this is really a efficient way to solve the problem, I rarely code stuff like that (mostly computational physics stuff), and would appreciate any kind of suggestions on how one could improve the code in general.










      share|improve this question







      New contributor




      Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      Let's assume we have the following situation:




      • Multiple project topics exist, each corresponding to a natural number n,

      • students can sign in and choose two projects and give them either priority_1 or priority_2,

      • The name and the time when they sign in is tracked as well.


      With all of the information above assume you receive data in the from of a txt-file looking like this



      Martin  16:46:32    8   19
      Alice 15:22:56 8 12
      Alex 17:23:11 19 1
      John 19:02:11 11 13
      Phillip 19:03:11 11 13
      Diego 15:23:57 14 5
      Jack 16:46:45 8 3


      where the columns represent the name, time, priority 1 and priority 2 in this order. You can assume that all of them signed in on the same day and students which signed in first have a higher priority in comparison to the others.



      I wanted to write a program that takes this txt-file as input and returns a txt-file with output



      Name    Assigned Project
      Alice 8
      Diego 14
      Martin 19
      Jack 3
      Alex 1
      John 11
      Phillip 13




      The solution I came up with looks like this:



      import numpy as np

      dat = np.genfromtxt("data.txt", dtype="str")

      class person:
      def __init__(self, name, time, prio1, prio2):
      self.name = name
      sp = time.split(":")
      t = sp[0]*3600 + sp[1]*60 + sp[2]
      self.time = t
      self.prio1 = prio1
      self.prio2 = prio2

      names = dat[:, 0]
      time = dat[:, 1]
      prio1 = dat[:, 2]
      prio2 = dat[:, 3]

      people =
      for i,j,k,l in zip(names, time, prio1, prio2):
      people.append(person(i,j,k,l))

      people_sorted_time = sorted(people, key=lambda x: x.time)

      for k in range(len(people_sorted_time)):
      for j in range(k + 1, len(people_sorted_time)):
      if people_sorted_time[k].prio1 == people_sorted_time[j].prio1:
      people_sorted_time[j].prio1 = people_sorted_time[j].prio2

      res = open("results","w")
      res.write("Name"+"t"+"Assigned Project"+"n")
      for k in range(len(people_sorted_time)):
      res.write(people_sorted_time[k].name + "t"
      + people_sorted_time[k].prio1 + "n")




      The code seems to work fine, but I'm not sure if I actually was able to take care of all edge-cases. I'm also not sure if this is really a efficient way to solve the problem, I rarely code stuff like that (mostly computational physics stuff), and would appreciate any kind of suggestions on how one could improve the code in general.







      python python-3.x






      share|improve this question







      New contributor




      Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question







      New contributor




      Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question






      New contributor




      Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 1 hour ago









      Sito

      1162




      1162




      New contributor




      Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Sito is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.



























          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          Sito is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209729%2fassigning-projects-in-order-of-priority%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          Sito is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          Sito is a new contributor. Be nice, and check out our Code of Conduct.













          Sito is a new contributor. Be nice, and check out our Code of Conduct.












          Sito is a new contributor. Be nice, and check out our Code of Conduct.
















          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209729%2fassigning-projects-in-order-of-priority%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Quarter-circle Tiles

          build a pushdown automaton that recognizes the reverse language of a given pushdown automaton?

          Mont Emei