هذا نص مترجم آليًا وقد يحتوي على أخطاء!
Quote
“خوارزمية”، كلمة يستخدمها المبرمجون عندما لا يريدون شرح ما فعلوه.
Algoritme?
ما هي الخوارزمية؟
الخوارزمية هي دالة منطقية تنفذ عملية معينة. بمعنى آخر، يمكنك من الناحية الفنية أن تسمي دالة تجمع رقمين “خوارزمية”، ولكن في أغلب الأحيان تكون الخوارزمية شيئًا أكثر تعقيدًا من ذلك. غالبًا ما تُستخدم الخوارزميات لتسريع العمليات التي تستغرق وقتًا طويلاً.
هل يجب عليّ استخدام بايثون في هذه المهام؟
لا! يمكنك استخدام أي لغة برمجة تفضلها في هذه المهام.
هل المكتبات المدمجة؟
الفكرة في هذه المهام هي تجنب استخدام المكتبات المدمجة أو وظائف Python الخاصة. على سبيل المثال، هناك “سطر واحد” بسيط لعكس النص: text[::-1]، ولكن هنا نريد منك محاولة حل هذه المهام بدون استخدام ذلك. قد نذكر وظيفة مدمجة إذا كان الحل صعبًا بعض الشيء. سيتم تمييز ذلك بـ ❗.
في الممارسة العملية، يجب أن يكون من الممكن تمامًا حل جميع هذه المهام باستخدام if و for و while وعمليات القائمة العادية.
كيف “تصميم” خوارزمية؟
في أغلب الأحيان، يتم تصميم الخوارزميات بشكل تكراري. ماذا يعني هذا؟
1. ✅ قم أولاً بتقسيم المشكلة إلى أجزاء أصغر.
- فكر أولاً وقبل كل شيء في أهم شيء تحتاجه لكي يعمل الخوارزمية
- هل يجب أن تُرجع قيمة؟ قيمة
boolean؟ قائمة؟ - هل أحتاج إلى أي وظائف مساعدة؟
- هل يجب أن تُرجع قيمة؟ قيمة
2. ❓ هل هناك أي حالات خاصة؟
- ماذا يحدث إذا قمت بإدخال قائمة فارغة أو نص؟
3. ✅ ابدأ بمجرد محاولة إيجاد حل.
4. ✅ تحقق مما إذا كانت الخوارزمية تعمل بشكل جيد في وقت التشغيل
- جرّب مدخلات أكبر، هل يستغرق الأمر وقتًا طويلاً؟
5. ❓ فكر في حلك، هل تحتاج إلى جميع الخطوات التي استخدمتها؟
- هل جميع فحوصات
ifضرورية؟ - إذا كان لديك أكثر من حلقة
forواحدة، فهل هناك طرق واضحة للقيام بذلك في حلقةforواحدة؟- هذا يختلف إذا كان لديك حلقات متداخلة أو حلقات متتالية. غالبًا ما يكون من الممكن تجنب المتتالية.
6. ✅ فكر في السيناريوهات المتطرفة مع المدخلات:
- مثال مع أرقام: أرقام كبيرة، أرقام صغيرة، أرقام سالبة
- مثال نصي: الكثير من النصوص، العديد من الكلمات الصغيرة، مسافات إضافية، أحرف كبيرة وصغيرة.
7. ❓ هل من المفيد استخدام شبه الرمز لفهم المنطق بشكل أفضل؟
مهمة 1 - تحديد ما إذا كانت القائمة تحتوي على رقم معين
قم بإنشاء خوارزمية (دالة) تحدد ما إذا كانت القائمة تحتوي على رقم معين. يجب أن تُرجع True أو False بناءً على ما إذا كان الرقم موجودًا في القائمة أم لا.
إليك قائمة ببيانات الاختبار:
Test-data for algoritme:
| Test-Data | Sjekk | Svar |
|---|---|---|
[1, 2, 3, 4, 5, 6, 7, 8, 9] | 5 | True |
[1, 2, 3, 4, 5, 6, 7, 8, 9] | 10 | False |
[2, 3, 5, 7, 11, 13, 17, 19, 23] | 2 | True |
[2, 3, 5, 7, 11, 13, 17, 19, 23] | 10 | False |
[-1, 0, 1, -34, 321, 22, 98, -214] | -214 | True |
[-1, 0, 1, -34, 321, 22, 98, -214] | 0 | True |
[-1, 0, 1, -34, 321, 22, 98, -214] | 2 | False |
Tips til framgangsmåte
- أدخل قائمة وقيمة قائمة في دالة. في هذه المهمة، يجب أن تكون أرقامًا، ولكن يمكن أن تكون نصًا.
- استخدم حلقة
forللمرور عبر القائمة - إذا كان الرقم مساويًا لرقم التحقق، فأرجع
True - إذا انتهت حلقة
forولم تجدها، فأرجعFalse
Svaret (i python)
def exists_in_list(the_list, check):
for number in the_list:
if number == check:
return True
return False
مهمة 2 - التلخيص
قم بإنشاء خوارزمية تقوم بجمع قائمة من الأرقام.
Test-data for algoritme:
[1, 2, 3, 4, 5, 6], يعطي الإجابة21.[5, 1, 23, 68, 22, 13, 4], يعطي الإجابة136[3, 3, -3, -3, 3]يعطي الإجابة3. ربما يمكنك تجاهل الأرقام السالبة وإعطاء الإجابة9.
Tips til framgangsmåte
- أدخل قائمة في دالة
- احفظ مجموعًا مؤقتًا كـ
0. - استخدم حلقة
forللمرور عبر القائمة. returnمجموع القائمة.
Svaret (i python)
def sum_list(numbers):
total = 0
for num in numbers:
total += num
return total
تعريف الدالة لحساب مجموع قائمة الأرقام:
def sum_list(numbers):
total = 0
for num in numbers:
total += num
return total
مهمة 3أ - القيمة القصوى في قائمة
قم بإنشاء خوارزمية للعثور على أكبر قيمة في قائمة.
Test-data for algoritme:
[1, 2, 3, 4, 5, 6], يعطي الإجابة6.[6, 17, 227, 1, 23, 42, 12], يعطي الإجابة227[2, -2, 2, -2, -2, 2]يعطي الإجابة2.
Tips til framgangsmåte
- أدخل قائمة في دالة
- عيّن قيمة مؤقتة للعنصر الأول في القائمة.
- استخدم حلقة
forللمرور عبر القائمة ومقارنتها بالقيمة التي حددتها في 2. - إذا كانت القيمة أكبر، فقم بتعيين القيمة المؤقتة إلى القيمة الجديدة.
returnهذه القيمة المؤقتة.
Svaret (i python)
def find_max(numbers):
largest = numbers[0]
for num in numbers:
if num > largest:
largest = num
return largest
هذا هو الحل (في بايثون)
المهمة 3ب - إذا كانت القائمة فارغة؟
أضف فحصًا يختبر ما إذا كانت القائمة تحتوي على عناصر. إذا لم يكن الأمر كذلك، فأرجع None.
Svaret (i python)
def find_max(numbers):
if len(numbers) == 0:
return None
largest = numbers[0]
for num in numbers:
if num > largest:
largest = num
return largest
المهمة 4 - عد عدد عنصر معين في قائمة
قم بإنشاء خوارزمية لعد عدد عنصر معين في قائمة.
Test-data for algoritme:
["apple", "banana", "orange", "apple", "apple", "banana"]معappleيعطي الإجابة 3.[1, 4, 5, 2, 4, -3, -4, 4, 2, 4, 221, 3, 1, 1, 4, 1, 12, 33, 4, 4, 2, -4, 1, 4]مع4يعطي الإجابة8.["cat", "dog", "cat", "mouse", "cat", "dog", "dog"]معdogيعطي الإجابة3.[7, 7, 2, 9, 7, 1, 0, 7, 3, 7, 9]مع7يعطي الإجابة5.["red", "blue", "green", "red", "yellow", "red"]معredيعطي الإجابة3.[10, -2, -2, -2, 5, 10, 10, -2]مع-2يعطي الإجابة4.
Tips til framgangsmåte
- أدخل قائمة وقيمة تحقق في دالة
- ابدأ بقيمة عد مؤقتة مضبوطة على 0.
- انتقِ خلال القائمة باستخدام حلقة
for. - إذا كان العنصر مساويًا للتحقق، فقم بزيادة قيمة العد بمقدار 1.
- أرجع قيمة العد.
Svaret (i python)
def count(the_list, check):
count = 0
for element in the_list:
if element == check:
count += 1
return count
مهمة 5 - عكس string نص
قم بإنشاء خوارزمية لعكس string معطاة.
Test-data for algoritme:
Hello there!يصبح!ereht olleH.heisann alle sammenيصبحnemmas ella nnasiehPythonيصبحnohtyPracecarيصبحracecar12345abcيصبحcba54321god morgenيصبحnegrom dog
Tips til framgangsmåte
- أدخل
stringفي دالة - أنشئ قيمة مؤقتة لتخزين
stringفارغ. - انتقل عبر النصوص باستخدام حلقة
forمعrange. يمكنك الانتقال عبر القائمة للخلف، ولكن يمكنك حل هذا بالانتقال للأمام في القائمة. - أضف كل حرف إلى القيمة المؤقتة بالترتيب.
- أرجع النص المؤقت.
Svaret (i python)
def reverse(text):
result = ""
# هذا السطر معقد بعض الشيء، لكنه يبدأ
# من النهاية، ويمر (بما في ذلك) إلى 0 (عن طريق كتابة
# -1 كنهاية)، وينزل بمقدار 1 في كل مرة
for i in range(len(text) - 1, -1, -1):
result += text[i]
return result
ربما يمكنك استخدام خوارزمية تضيف في البداية بدلاً من ذلك:
def reverse(text):
result = ""
for i in range(0, len(text)):
# أضف في البداية بدلاً من ذلك
result = text[i] + result
return result
المهمة 6 - خوارزمية المتناظر
قم بإنشاء خوارزمية تتحقق مما إذا كانت كلمة معينة متناظرة أم لا. أمثلة على المتناظرات هي abba و racecar و regninger.
Tips til framgangsmåte
- قم بإنشاء دالة تأخذ نصًا للتحقق
- استخدم حلقة
forللتحقق مما إذا كانت الأحرف على كل جانب من النص متطابقة. - أرجع
Falseإذا لم يتطابق حرف، وإذا تطابقت جميع الأحرف (اكتملت حلقةfor)، فأرجعTrue.
Ekstra:
هل ترى كيف يمكنك جعل الخوارزمية أسرع بمرتين؟
Hint
أنت تحتاج فقط إلى التحقق من النصف!
الإجابة (في بايثون)
def palindrome(text):
for i in range(0, len(text)):
if text[i] != text[len(text) - i - 1]:
return False
return True
خوارزمية أسرع
def palindrome(text):
for i in range(0, int(len(text) / 2)):
if text[i] != text[len(text) - i - 1]:
return False
return True
المهمة 7 - التحقق مما إذا كانت القائمة مرتبة
قم بإنشاء خوارزمية تتحقق مما إذا كانت القائمة مرتبة. أسهل طريقة للتحقق من ذلك هي البدء من البداية ومقارنة ما إذا كان العنصر التالي “أكبر”. إذا لم يكن العنصر “أكبر”، فإن القائمة ليست مرتبة.
Test-data for algoritme:
[1, 2, 3, 4, 5, 6], يعطي الإجابةTrue.[6, 17, 227, 1, 23, 42, 12], يعطي الإجابةFalse[2, -2, 2, -2, -2, 2]يعطي الإجابةFalse.[2, 2, 3, 4, 4, 6], يعطي الإجابةTrue.[12, 23, 34, 45, 56, 67], يعطي الإجابةTrue.
Tips til framgangsmåte
- قم بإنشاء دالة تأخذ قائمة كمدخل.
- استخدم حلقة
forللمرور عبر القائمة بأكملها (استخدمrangeلطول القائمة، ناقص 1len(list) - 1). - قارن العنصر \(n\) بالعنصر \(n + 1\)، أي العنصر الحالي بالعنصر التالي.
- إذا كان \(n\) أقل من \(n + 1\)، فانتقل إلى المقارنة التالية.
- إذا لم يكن أقل، بل أكبر، فهذه القائمة غير مرتبة. أرجع
Falseهنا. - إذا وصلت إلى النهاية، فهذه القائمة مرتبة، أرجع
True.
Svaret (i Python)
def is_sorted(the_list):
for i in range(len(the_list) - 1):
if the_list[i] > the_list[i + 1]:
return False
return True
مهمة 8 - خلط
قم بإنشاء خوارزمية لخلط قائمة بالعناصر. هناك العديد من الطرق للقيام بذلك، ولكن إحدى الطرق الجيدة هي ما يسمى بخوارزمية Fisher-Yates shuffle. يمكنك قراءة المزيد حول هذا هنا Wikipedia.
Test Data
["a", "b", "c", "d", "e"]→ يمكن أن يصبح مثلاً["c", "e", "a", "d", "b"][1, 2, 3, 4, 5, 6]→ يمكن أن يصبح مثلاً[4, 1, 6, 3, 2, 5]["apple", "banana", "orange"]→ يمكن أن يصبح مثلاً["orange", "apple", "banana"]["x"]→ يظل كما هو["x"][]→ يظل كما هو[]
كيف تعمل:
Algoritmen
- قم بإنشاء دالة تأخذ قائمة الأرقام كمدخل.
- قم بإنشاء قائمة فارغة جديدة للاحتفاظ بالنتيجة المختلطة.
- استخدم
randomلاختيار فهرس عشوائي في القائمة. - أضف هذا العنصر إلى القائمة الفارغة واحذفه من القائمة القديمة.
- أرجع القائمة الجديدة من الدالة.
Svaret (i Python)
import random
def shuffle(the_list):
shuffled = []
while len(the_list) > 0:
i = random.randrange(0, len(the_list))
shuffled.append(the_list[i])
the_list.pop(i)
return shuffled
المهمة 9 - بوجو-فرز
في هذه المهمة، ستقوم بإنشاء خوارزمية فرز (عمليًا) رهيبة، ولكنها بسيطة للغاية. إنها سيئة للغاية عندما يتعلق الأمر بالقوائم الكبيرة (ستستغرق إلى الأبد مع أكثر من 12-13 عنصرًا). في المستوى 2، سنقوم بإنشاء خوارزمية فرز أفضل، الفرز الفقاعي.
Test Data
[3, 1, 2]→[1, 2, 3][5, 4, 3, 2, 1]→[1, 2, 3, 4, 5][10, 7, 8, 2]→[2, 7, 8, 10][1, 1, 1]→[1, 1, 1][9, 3, 6, 3, 9]→[3, 3, 6, 9, 9][0, -1, 4, -2]→[-2, -1, 0, 4]
تعمل الخوارزمية كالتالي:
Algoritmen
- قم بإنشاء دالة تأخذ قائمة الأرقام غير المرتبة كمدخل.
- قم بخلط القائمة بشكل عشوائي (استخدم shuffle من المهمة 8).
- تحقق مما إذا كانت القائمة مرتبة (استخدم الفحص الذي قمت به في المهمة 7).
- إذا لم تكن القائمة مرتبة، كرر الخطوتين 2 و 3.
- كرر حتى تصبح القائمة مرتبة، ثم أرجع.
بشكل بسيط: يقوم bogo-sort بخلط القائمة بأكملها ويأمل أن تكون مرتبة.
تلميح: استخدم shuffle من المهمة 8 لإنشاء قائمة غير مرتبة للخوارزمية الخاصة بك.
Svaret (i Python)
def bogo_sort(the_list):
while not is_sorted(the_list):
the_list = shuffle(the_list)
return the_list
المهمة 10أ - البحث عن نص - “سلسلة فرعية” (صعب!)
قم بإنشاء خوارزمية يمكنها العثور على كلمة رئيسية في نص. أي، إذا كان لديك جملة مثل hello there، فسترجع True مع الكلمة الرئيسية hello، و False مع كلمة رئيسية مثل hahah. يجب أن تعمل هذه الخوارزمية بغض النظر عن المدخلات والمخرجات.
استخدم بيانات النص أدناه للتحقق مما إذا كانت خوارزيتك تعمل.
Test-data for algoritme:
hello there everyoneمعthere=Truehello there everyoneمعever=Truehello there everyoneمعthen=Falseqwecvyufavsjekkftyergwceryمعsjekk=True
Tips til framgangsmåte
- قم بإنشاء دالة تأخذ سلسلتين (
string)، البيانات و كلمة البحث. - استخدم حلقة
forمعrangeللتكرار خلال النص. - من المهم هنا التفكير في إلى أي مدى يجب أن تمتد الحلقة.
- قم بإنشاء متغير مؤقت يشير إلى ما إذا تم العثور على كلمة البحث أم لا، وقم بتعيينه إلى
Trueافتراضيًا. - استخدم حلقة
forأخرى معrangeلمقارنة مكانك في النص بكلمة البحث. - إذا لم يتطابق أي شيء في كلمة البحث مع المكان الذي تتحقق منه الآن، فقم بتعيين المتغير المؤقت إلى
Trueوbreakللخروج من الحلقة الداخلية. - إذا وصلت إلى نهاية النص دون العثور على أي شيء، فأرجع
False.
Svaret (i Python)
def search(data, word):
for i in range(0, len(data) - len(word) + 1):
found = True
for j in range (0, len(word)):
if data[i + j] != word[j]:
found = False
break
if found:
return True
return False
المهمة 10ب
أضف أيضًا فحصًا إضافيًا للتأكد من أن الكلمة المفتاحية ليست أطول من الجملة.
Tips til framgangsmåte
- أضف هذا الفحص قبل حلقة
for.
Svaret (i python)
def search(data, word):
if len(word) > len(data):
return False
for i in range(0, len(data) - len(word) + 1):
found = True
for j in range (0, len(word)):
if data[i + j] != word[j]:
found = False
break
if found:
return True
return False
المهمة 11 - عكس الكلمات في الجملة (صعب)
تذكر المهمة 5 حول عكس جملة. عدّل (أو ابدأ من جديد) لإنشاء خوارزمية تعكس كل كلمة على حدة في جملة، ثم تجمعها معًا مرة أخرى.
Test-data for algoritme:
hello there everyoneيصبحolleh ereht enoyreveThis is the way it goes!يصبحsihT si eht yaw ti !seogdoes this racecar go? of course!يصبحseod siht racecar ?og fo !esruoc
Tips til framgangsmåte
- قم بإنشاء دالة تأخذ
stringكمدخل. - ❗قسّم النص باستخدام
.split(" "). - قم بإنشاء متغير مؤقت لتخزين القيمة النهائية.
- استخدم حلقة
forللمرور عبر كل كلمة. - استخدم نفس الطريقة للعكس كما في المهمة 5
- استخدم النتيجة وأضفها إلى المتغير الذي أنشأته في الخطوة 2.
- أرجع القيمة النهائية
Svaret (i Python)
def reverse_words(words):
sentence = words.split(" ")
output = ""
for word in sentence:
reversed_word = ""
for i in range(0, len(word)):
reversed_word = word[i] + reversed_word
output += reversed_word + " "
return output
هذه هي الإجابة (في بايثون).
def reverse_words(words):
sentence = words.split(" ")
output = ""
for word in sentence:
reversed_word = ""
for i in range(0, len(word)):
reversed_word = word[i] + reversed_word
output += reversed_word + " "
return output
➕إضافي:
مهمة E1 - حذف التكرارات من قائمة
لنفترض أن لديك قائمة تحتوي على أرقام أو نصوص، ولكننا نريد حذف التكرارات. قم بإنشاء خوارزمية تحذف جميع التكرارات من قائمة وتحتوي فقط على العنصر الأول من كل عنصر فريد موجود في القائمة.
Tips til framgangsmåte
- ابدأ بدالة تأخذ قائمة كمدخل
- هنا سنستخدم حلقات
whileبدلاً منfor. هذا يجعل الأمر أسهل في بايثون، في لغات أخرى تعملforمع متغيرات العد بشكل جيد. - أنشئ متغير عد
idx(للفهرس، أوi) - استخدم حلقة
whileيجب أن تنتقل إلى طول القائمة - سنقارن العنصر الموجود في
idxبجميع العناصر الأخرى - أنشئ متغير عد إلى
jdx(أوj) يبدأ منidx + 1 - قارن العنصر الموجود في
idxبالعنصر الموجود فيjdx، إذا كانا متساويين، احذفjdxباستخدامpop(jdx). - تذكر! إذا حذفت العنصر، تصبح القائمة أصغر، لذلك يجب أن نعود خطوة واحدة عند
jdx -= 1. - قم بزيادة
jdxبمقدار 1 واختبر العنصر التالي - بعد الحلقة الداخلية
while، قم بزيادةidxبمقدار 1 وستستمر الحلقة الخارجيةwhile. - أرجع القائمة مع إزالة التكرارات.
Test Data
[1, 2, 2, 3, 1, 4, 3]→ يصبح[1, 2, 3, 4]["a", "b", "a", "c", "b", "d"]→ يصبح["a", "b", "c", "d"][5, 5, 5, 5]→ يصبح[5]["x", "y", "z", "x", "y", "x"]→ يصبح["x", "y", "z"][10, -1, 10, -1, 0, 0, 10]→ يصبح[10, -1, 0]["apple", "apple', "banana", "orange", "apple", "orange", "pear", "apple"]- يجب أن يعطي:
["apple", "banana", "orange", "pear"]
- يجب أن يعطي:
Svaret (i Python)
def delete_duplicates(the_list):
idx = 0
while idx < len(the_list):
jdx = idx + 1
while jdx < len(the_list):
if the_list[idx] == the_list[jdx]:
the_list.pop(jdx)
jdx -= 1
jdx += 1
idx += 1
return the_list
Oppgave E2 - Counting Sort
Counting sort هي إحدى خوارزميات الفرز القليلة التي تعمل في ما نسميه وقت \(O(n)\). أي أنها لا تستغرق وقتًا أطول بكثير من عدد العناصر في القائمة. اقرأ المزيد حول تدوين Big O في المستوى 2.
يعتمد الأمر قليلاً على مدى اتساع نطاق العناصر. إذا كان الأصغر 0 والأكبر 100000 فقد يستغرق الأمر بعض الوقت، لذلك يمكن استخدام هذا إذا كان نطاق القيم صغيرًا. كما أنها لا تعمل مع الأرقام السالبة، ولكن يمكن تعديل الخوارزمية لتعمل مع الأرقام السالبة.
تعمل الخوارزمية على النحو التالي:
- اكتشف ما هو أكبر عنصر، وقم بتخزين قيمة هذا العنصر كـ \(k\).
- قم بإنشاء قائمة تحتوي على \(k + 1\) عنصر،
count. - انتقل عبر القائمة غير المرتبة واستخدم قيمة الرقم كفهرس. أي إذا كانت قيمة العنصر 47، فانتقل إلى
count[47]وزدها بمقدار 1. - انتقل عبر قائمة
countوضع عدد الأرقام التي هو الفهرس. مثال: إذا كان هناك 3 في الفهرس 1، فأضف ثلاثة أرقام 1.
Testdata
| بيانات غير مرتبة | بيانات مرتبة |
|---|---|
[7, 3, 9, 1, 4, 3, 0, 6, 8, 6, 2, 1, 9, 0, 5, 4] | [0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 9, 9] |
[12, 13, 15, 0, 8, 15, 8, 5, 16, 8, 0, 20, 4, 9, 17, 16, 1, 3, 6, 15, 5, 2, 3, 1, 19, 13, 17, 5, 3, 10] | [0, 0, 1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8, 9, 10, 12, 13, 13, 15, 15, 15, 16, 16, 17, 17, 19, 20] |
Tips til framgangsmåte
- ابدأ بإنشاء دالة بقائمة كمدخل
- أنشئ قائمة
outputفارغة - استخدم حلقة
forللمرور عبر القائمة بأكملها - تتبع القيمة القصوى في متغير قبل حلقة
for. - قم بتحديث القيمة القصوى إذا وجدت شيئًا أكبر.
- أنشئ قائمة تحتوي على هذا العدد من الأصفار + 1. مثال: أكبر قيمة هي 47، ثم قم بإنشاء قائمة بها 48 صفرًا. يمكنك القيام بذلك باستخدام
[0] * (maks + 1)، أو حلقةfor. أطلق عليها اسمcount. - مر عبر القائمة مرة أخرى باستخدام حلقة
for. - استخدم قيمة العنصر كفهرس وزد بمقدار 1.
count[value] += 1 - استخدم حلقة
forللمرور عبر قائمةcount. - استخدم القيمة الموجودة في كل فهرس لإضافة هذا العدد من الأرقام.
- أرجع القائمة التي تم فرزها.
Svaret (i Python)
def counting_sort(input_list):
output = []
max_val = input_list[0]
for n in input_list:
if n > max_val:
max_val = n
# dette vil lage en haug med nuller
count = [0] * (max_val + 1)
for n in input_list:
count[n] += 1
for i in range(len(count)):
# bruk _ for å ignorere en verdi
for _ in range(count[i]):
output.append(i)
return output

