Appendix: Adventcalender solutions#

Ab morgen geht in der WG der Adventskalender los. Leider gibt es noch keine Reihenfolge, wer wann ein Päckchen öffnen darf.

Natürlich kann seit diesem Jahr auch Python genutzt werden um das Problem zu lösen. Wer eine Lösung einer randomisierten Ziehung für die Mitbewohnenden (mitbewohner_innen = [“Charlotte”, “Elli”, “Malena”, “Felix”, “Vanessa”, “Julius”]) - 01.12. bis 24.12.- bis nächste Woche zum Seminar einsendet, bekommt einen Joker für eine Woche Aufgaben. Alle sollten natürlich gleich viele Päckchen bekommen.

Filenames examples#

good = 'this_is_a_good_file.ipynb' # all lower case and seperated by underscore
bad = 'This is a bad filename, by Julius.Welzel.ipynb' # includes whitespace and comma

Example 1#

import numpy as np
#variable erstellen, die zum Lösungsversuch mit np.random,choice passt
mitbewohner_innen = np.tile (["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"], (4))
mitbewohner_innen
array(['Charlotte', 'Elli', 'Malena', 'Felix', 'Vanessa', 'Julius',
       'Charlotte', 'Elli', 'Malena', 'Felix', 'Vanessa', 'Julius',
       'Charlotte', 'Elli', 'Malena', 'Felix', 'Vanessa', 'Julius',
       'Charlotte', 'Elli', 'Malena', 'Felix', 'Vanessa', 'Julius'],
      dtype='<U9')
# Kalendertürchen verteilen. Es wird ein Array ausgegeben, der die Reihenfolge der Türchenöffnenden angibt. 
verteilen = np.random.choice(mitbewohner_innen , size = 24, replace = True, p = [(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24)])
verteilen
array(['Vanessa', 'Vanessa', 'Vanessa', 'Malena', 'Julius', 'Malena',
       'Elli', 'Elli', 'Vanessa', 'Julius', 'Felix', 'Vanessa', 'Felix',
       'Elli', 'Vanessa', 'Malena', 'Vanessa', 'Charlotte', 'Vanessa',
       'Vanessa', 'Elli', 'Vanessa', 'Julius', 'Felix'], dtype='<U9')
# Kalendertürchen verteilen. Es wird ein Array ausgegeben, der die Reihenfolge der Türchenöffnenden angibt. 
n_tuerchen = 24
verteilen = np.random.choice(mitbewohner_innen , size = n_tuerchen, replace = True, p = [(1/n_tuerchen)] * n_tuerchen)
verteilen
array(['Julius', 'Charlotte', 'Malena', 'Vanessa', 'Julius', 'Felix',
       'Elli', 'Elli', 'Julius', 'Charlotte', 'Malena', 'Vanessa', 'Elli',
       'Julius', 'Vanessa', 'Charlotte', 'Elli', 'Malena', 'Malena',
       'Elli', 'Felix', 'Vanessa', 'Julius', 'Felix'], dtype='<U9')

Example 2#

import numpy as np
import random

mitbewohner_innen = ["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"]

datum = np.arange(1,25,1, dtype = int)
random.shuffle(datum)

x = 0
ind1 = 0
ind2 = 0

for i in mitbewohner_innen:
    ind2 = ind2 + 4
    list = datum[ind1:ind2]
    print(mitbewohner_innen[x])
    print(list)
    x = x+1
    ind1 = ind2
Charlotte
[17 22 24  6]
Elli
[ 1  4 20 10]
Malena
[21 15 16  7]
Felix
[ 5  9 23  3]
Vanessa
[19 12 14  8]
Julius
[11  2 13 18]
new_test_list = list('christmas')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [7], in <cell line: 1>()
----> 1 new_test_list = list('christmas')

TypeError: 'numpy.ndarray' object is not callable
del list

import numpy as np
import random

mitbewohner_innen = ["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"]

datum = np.arange(1,25,1, dtype = int)
random.shuffle(datum)

x = 0
ind1 = 0
ind2 = 0

for i in mitbewohner_innen:
    ind2 = ind2 + 4
    date_list = datum[ind1:ind2]
    print(mitbewohner_innen[x])
    print(date_list)
    x = x+1
    ind1 = ind2
Charlotte
[16  9 13  3]
Elli
[ 5 10 14 15]
Malena
[21 22  6  1]
Felix
[24 23 12  4]
Vanessa
[ 2  7  8 18]
Julius
[20 11 17 19]
new_test_list = list("x-mas")
print(new_test_list)
['x', '-', 'm', 'a', 's']

Example 3#

dates = np.arange(1, 25, 1, dtype = int)
names = list(np.repeat(["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"], 4))
np.random.shuffle(names)
    
for i in range(len(dates)) :
    print(f"{dates[i]:>2}.12.2022: {names[i]}")
 1.12.2022: Elli
 2.12.2022: Felix
 3.12.2022: Charlotte
 4.12.2022: Malena
 5.12.2022: Julius
 6.12.2022: Charlotte
 7.12.2022: Malena
 8.12.2022: Elli
 9.12.2022: Elli
10.12.2022: Felix
11.12.2022: Charlotte
12.12.2022: Felix
13.12.2022: Malena
14.12.2022: Felix
15.12.2022: Elli
16.12.2022: Vanessa
17.12.2022: Vanessa
18.12.2022: Julius
19.12.2022: Malena
20.12.2022: Vanessa
21.12.2022: Julius
22.12.2022: Vanessa
23.12.2022: Charlotte
24.12.2022: Julius

One of many solutions#

import pandas as pd
from random import shuffle

mitbewohner_innen = ["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"]

n_days = 24
n_bewohner_innen = len(mitbewohner_innen)
n_draws = n_days // n_bewohner_innen
days = [i for i in range(1,n_days + 1)]
adv_cal = mitbewohner_innen * n_draws

shuffle(adv_cal)

pd_cal = pd.DataFrame(adv_cal, index=days, columns =['Adventskalender'])
print(pd_cal)

n_my_draws = pd_cal["Adventskalender"].str.count("Julius").sum()
print(f"\n Julius bekommt {n_my_draws} Päckchen")
   Adventskalender
1        Charlotte
2             Elli
3            Felix
4        Charlotte
5           Julius
6           Julius
7          Vanessa
8        Charlotte
9           Malena
10          Julius
11            Elli
12         Vanessa
13           Felix
14           Felix
15         Vanessa
16         Vanessa
17          Malena
18           Felix
19          Malena
20            Elli
21          Julius
22       Charlotte
23            Elli
24          Malena

 Julius bekommt 4 Päckchen