{
  "assessmentTests": {
    "python_test": {
      "name": "Tes Python",
      "desc": "30 pitakon skenario babagan sintaks, fungsi, struktur data, lan prilaku objek — mangga dipriksa apa Python panjenengan cocog karo sing dikarepaké iklan lowongan pagawean nalika nyebut kaprigelan Python.",
      "recommendation": "Profil kaprigelan Python panjenengan",
      "results": {
        "beginner": {
          "name": "Pemula",
          "desc": "Panjenengan bisa ngetutaké skrip cendhak lan ngowahi nilai ing njerone, nanging pitakon sing kaliwat ngumpul ing prilaku khusus basa kasebut dhewe, dudu logika umum — argumen default sing digawe sepisan banjur dienggo manèh, is dibandhingaké karo == ing rong dhaptar sing katon padha, variabel sing dadi lokal sanalika panjenengan ngisi nilai ing ngendi wae ing sajroning fungsi. Kabeh punika dudu perkara panjenengan ala ing pemrograman; punika aturan khusus Python sing uga kerep marakaké kesandhung wong saka basa liya, padha kaya pemula. Aturan-aturan kasebut penting ing pagawean amarga saben siji dadi papan ndhelike bug ing kode sing katon bener ing pandelengan sepisanan.",
          "recommendation": "Mangga diwiwiti karo telung perkara, kanthi urutan punika: argumen default sing bisa owah (ngapa basket=[] mbebayani), bedane is karo ==, lan cara kerjane lingkup variabel ing njero fungsi. Tutorial Python resmi ing docs.python.org mbahas katelu-telune kanthi langsung, lan istilah “Python gotchas” nuduhaké conto-conto lengkap kanggo saben perkara."
        },
        "intermediate": {
          "name": "Menengah",
          "desc": "Panjenengan nangani scripting saben dina kanthi nyaman — struktur data, alur kontrol, fungsi sing prasaja — lan ora bakal kalambat dening pagawean pangopènan rutin utawa fitur cilik ing codebase sing wis ana. Bedane antarane tingkat punika lan tingkat Lanjut umume ana ing apa sing kedadeyan nalika fitur-fitur kepenak Python saling mangaruhi: shallow copy sing ninggal data ing njerone tetep dienggo bareng, padahal panjenengan ngarep-arep data kasebut wis kaduplikat, nilai return generator sing meneng-meneng ora dadi bagéan saka output-é, dekorator sing ditumpuk kanthi urutan sing gampang kabalik. Bug kaya mengkono sing bisa ditandhani reviewer senior ing sepuluh detik, déné wong liyane ngentekaké sajam kanggo nguber-uber.",
          "recommendation": "Mangga fokus ing bab njero objek lan iterasi: shallow copy dibandhingaké karo deep copy, apa sing sejatiné ditindakaké generator marang return, lan cara kerjane urutan numpukan dekorator. Banjur dasar-dasar kelas sing paling akèh dilewati tutorial — kesetaraan default tanpa __eq__, lan ngapa atribut kelas sing bisa owah dienggo bareng ing saben instance."
        },
        "advanced": {
          "name": "Lanjutan",
          "desc": "Punika tingkat sing paling kerep dimaksud iklan lowongan pagawean nalika nyebut “Python sing kuwat.” Panjenengan milih piranti sing trep tanpa kudu nggoleki, ngerti ngapa sawijining state sing dienggo bareng wis owah (ora mung ngerti yen wis owah), lan bisa maca fungsi garapané wong liya lan ngira output-é kanthi bener. Sing misahaké tingkat punika saka tingkat paling dhuwur yaiku sisi pangayoman saka pagawean: ngerti endi saka rong pendekatan sing katon bener bakal salah nalika atribut kelas, argumen keyword-only, utawa hierarki exception melu dadi bagéan.",
          "recommendation": "Mangga nyinau luwih jero bab-bab sing njaga codebase sing uga disenggol wong liya: argumen keyword-only minangka pilihan desain API tinimbang keanehan sintaks, hierarki exception (supaya klausa except nangkep kulawarga error sing bener, ora mung siji kelas), lan context manager minangka cara standar kanggo njamin pangresikan. Artikel-artikel Real Python sing mbahas kanthi jero punika pilihan candhake sing apik kanggo katelune."
        },
        "expert": {
          "name": "Ahli",
          "desc": "Panjenengan entuk skor paling dhuwur ing saben bagéan — sintaks inti, fungsi lan lingkup, struktur data, lan idiom pamrograman sing adhedhasar objek. Kanthi praktis, tegesé panjenengan bisa diwenehi file saka wong sing ora panjenengan kenal lan njlentrehaké ngapa file kasebut ngasilaké output kaya mengkono, ora mung apa sing dikarepaké sintaks, sing dadi kaprigelan sing luwih angel lan luwih aji. Ing tingkat punika basa pamrograman dhewe arang dadi pambatesé pagawean panjenengan; sing dadi wates biasané ukuran utawa wujud sistem ing saubengé kode.",
          "recommendation": "Hasil sing paling gedhe saiki ana ing tooling lan review: pamriksan tipe statis nganggo mypy utawa pyright, profiling sadurunge ngoptimalaké tinimbang ngira-ira, lan maca pull request wong liya kanggo kategori bug persis kaya mengkono — sing lolos kabeh tes nanging tetep ngasilaké sing salah ing input tartamtu. Yen panjenengan lagi diseleksi kanggo sawijining jabatan, mangga dicritakaké bug kaya mengkono sing tau panjenengan temokaké, tinimbang namakaké fitur basa — punika nuduhaké nalar, ora mung kosakata."
        }
      },
      "questions": [
        {
          "question": "Panjenengan nulis def add_item(item, basket=[]): basket.append(item); return basket, banjur nyeluk add_item('a') lan add_item('b'), loro-lorone tanpa ngisi basket. Apa sing dibalèkaké panyeluk kaping pindho?",
          "options": [
            {
              "icon": "",
              "label": "['b']"
            },
            {
              "icon": "",
              "label": "Sawijining TypeError"
            },
            {
              "icon": "",
              "label": "['a', 'b']"
            },
            {
              "icon": "",
              "label": "['a']"
            }
          ]
        },
        {
          "question": "a = [1, 2, 3] lan b = [1, 2, 3]. Apa sing dibalèkaké a == b, lan apa sing dibalèkaké a is b?",
          "options": [
            {
              "icon": "",
              "label": "True kanggo loro-lorone"
            },
            {
              "icon": "",
              "label": "True kanggo ==, False kanggo is"
            },
            {
              "icon": "",
              "label": "False kanggo loro-lorone"
            },
            {
              "icon": "",
              "label": "True kanggo is, False kanggo =="
            }
          ]
        },
        {
          "question": "Ing Python 3, 7 / 2 ngasilaké apa, lan 7 // 2 ngasilaké apa?",
          "options": [
            {
              "icon": "",
              "label": "3.5, banjur 3"
            },
            {
              "icon": "",
              "label": "3, banjur 3.5"
            },
            {
              "icon": "",
              "label": "3.5, banjur 3.5"
            },
            {
              "icon": "",
              "label": "3, banjur 3"
            }
          ]
        },
        {
          "question": "s = 'hello', banjur panjenengan nglakokaké s[0] = 'H'. Apa sing kedadeyan?",
          "options": [
            {
              "icon": "",
              "label": "s dadi 'Hello'"
            },
            {
              "icon": "",
              "label": "s dadi 'Hhello'"
            },
            {
              "icon": "",
              "label": "Nuwuhaké TypeError"
            },
            {
              "icon": "",
              "label": "Ora ana; s tetep 'hello'"
            }
          ]
        },
        {
          "question": "x = [10, 20, 30, 40, 50]. Apa sing dibalèkaké x[1:4]?",
          "options": [
            {
              "icon": "",
              "label": "[20, 30, 40, 50]"
            },
            {
              "icon": "",
              "label": "[10, 20, 30, 40]"
            },
            {
              "icon": "",
              "label": "[20, 30, 40]"
            },
            {
              "icon": "",
              "label": "[30, 40]"
            }
          ]
        },
        {
          "question": "name = 'Ana' lan age = 30. Apa sing diasilaké f'{name} is {age}'?",
          "options": [
            {
              "icon": "",
              "label": "{name} is {age}"
            },
            {
              "icon": "",
              "label": "Ana is 30"
            },
            {
              "icon": "",
              "label": "name is age"
            },
            {
              "icon": "",
              "label": "Sawijining TypeError"
            }
          ]
        },
        {
          "question": "1 < 2 < 3 ngasilaké apa?",
          "options": [
            {
              "icon": "",
              "label": "Leres"
            },
            {
              "icon": "",
              "label": "Lepat"
            },
            {
              "icon": "",
              "label": "Sawijining SyntaxError"
            },
            {
              "icon": "",
              "label": "3"
            }
          ]
        },
        {
          "question": "bool([]) ngasilaké apa, lan bool([0]) ngasilaké apa?",
          "options": [
            {
              "icon": "",
              "label": "False, banjur False"
            },
            {
              "icon": "",
              "label": "False, banjur True"
            },
            {
              "icon": "",
              "label": "True, banjur True"
            },
            {
              "icon": "",
              "label": "True, banjur False"
            }
          ]
        },
        {
          "question": "Ana count = 0 ing tingkat modul. Ing jero def increment(): count += 1; return count, panjenengan ngundang increment(). Apa sing bakal kedadeyan?",
          "options": [
            {
              "icon": "",
              "label": "Nuwuhaké UnboundLocalError"
            },
            {
              "icon": "",
              "label": "Mbalèkaké 1 lan nyetel count global dadi 1"
            },
            {
              "icon": "",
              "label": "Mbalèkaké 1; count global tetep 0"
            },
            {
              "icon": "",
              "label": "Nuwuhaké TypeError"
            }
          ]
        },
        {
          "question": "def f(*args, **kwargs): return args, kwargs. Apa sing dibalèkaké dening f(1, 2, x=3)?",
          "options": [
            {
              "icon": "",
              "label": "([1, 2], {'x': 3})"
            },
            {
              "icon": "",
              "label": "((1, 2), {'x': 3})"
            },
            {
              "icon": "",
              "label": "(1, 2, {'x': 3})"
            },
            {
              "icon": "",
              "label": "Sawijining TypeError"
            }
          ]
        },
        {
          "question": "Panjenengan nggawé funcs = [lambda: i for i in range(3)] ing sawijining loop. Apa sing dibalèkaké dening [f() for f in funcs]?",
          "options": [
            {
              "icon": "",
              "label": "[2, 2, 2]"
            },
            {
              "icon": "",
              "label": "[0, 1, 2]"
            },
            {
              "icon": "",
              "label": "[0, 0, 0]"
            },
            {
              "icon": "",
              "label": "Sawijining NameError"
            }
          ]
        },
        {
          "question": "Sawijining fungsi didéfinisiaké nganggo @a pas ing nduwur @b, sing uga pas ing nduwur def f(): pass. Dekorator ditrapaké marang f kanthi urutan kepriye?",
          "options": [
            {
              "icon": "",
              "label": "b mbungkus f dhisik, banjur a mbungkus asilé"
            },
            {
              "icon": "",
              "label": "a mbungkus f dhisik, banjur b mbungkus asilé"
            },
            {
              "icon": "",
              "label": "Mung sing pungkasan didéfinisiaké sing ditrapaké"
            },
            {
              "icon": "",
              "label": "Gumantung marang urutan import"
            }
          ]
        },
        {
          "question": "def f(a, *, b): return a + b. Pamanggilan endi ing ngisor iki sing bisa mlaku?",
          "options": [
            {
              "icon": "",
              "label": "f(1, b=2)"
            },
            {
              "icon": "",
              "label": "f(1, 2)"
            },
            {
              "icon": "",
              "label": "f(a=1, 2)"
            },
            {
              "icon": "",
              "label": "f(1)"
            }
          ]
        },
        {
          "question": "Sawijining fungsi generator nindakaké yield 1, banjur yield 2, banjur return 99. Apa isiné list(the_generator()), lan apa sing kedadeyan karo 99?",
          "options": [
            {
              "icon": "",
              "label": "[1, 2, 99], amarga return dadi yield pungkasan"
            },
            {
              "icon": "",
              "label": "[99], amarga return nimpa yield-yield kasebut"
            },
            {
              "icon": "",
              "label": "[1, 2], lan 99 dadi nilai StopIteration"
            },
            {
              "icon": "",
              "label": "Nuwuhaké RuntimeError"
            }
          ]
        },
        {
          "question": "Ing fungsi outer(), x = 1 disetel, banjur inner() sing ana ing jerone nindakaké nonlocal x; x += 1, lan outer() ngundang inner() sadurungé mbalèkaké x. Apa sing dibalèkaké outer()?",
          "options": [
            {
              "icon": "",
              "label": "1"
            },
            {
              "icon": "",
              "label": "Sawijining UnboundLocalError"
            },
            {
              "icon": "",
              "label": "Sawijining SyntaxError"
            },
            {
              "icon": "",
              "label": "2"
            }
          ]
        },
        {
          "question": "d = {'a': 1, 'b': 2}. Apa sing dibalèkaké d.get('c', 0), lan apa 'c' ditambahaké menyang dictionary?",
          "options": [
            {
              "icon": "",
              "label": "0, lan ora"
            },
            {
              "icon": "",
              "label": "0, lan ya"
            },
            {
              "icon": "",
              "label": "Sawijining KeyError"
            },
            {
              "icon": "",
              "label": "None, lan ya"
            }
          ]
        },
        {
          "question": "t = (1, 2, [3, 4]). Apa panjenengan bisa nglakokaké t[2].append(5), lan apa panjenengan bisa nglakokaké t[0] = 10?",
          "options": [
            {
              "icon": "",
              "label": "Kalorone bisa"
            },
            {
              "icon": "",
              "label": "Kalorone nuwuhaké TypeError"
            },
            {
              "icon": "",
              "label": "t[2].append(5) nuwuhaké TypeError; t[0] = 10 bisa"
            },
            {
              "icon": "",
              "label": "t[2].append(5) bisa; t[0] = 10 nuwuhaké TypeError"
            }
          ]
        },
        {
          "question": "Endi saka iki sing mbalèkaké iterator sing ngitung nilai kanthi lazy, tinimbang nggawé kabèh urutan ing memori bebarengan: [x*x for x in range(1000000)] utawa (x*x for x in range(1000000))?",
          "options": [
            {
              "icon": "",
              "label": "Sing nganggo tanda kurung"
            },
            {
              "icon": "",
              "label": "Sing nganggo kurung kotak"
            },
            {
              "icon": "",
              "label": "Kalorone; mung jenis asilé sing beda"
            },
            {
              "icon": "",
              "label": "Ora loro-lorone; kalorone nggawé list lengkap"
            }
          ]
        },
        {
          "question": "Blok try mbagi karo nol, klausa except ZeroDivisionError nampilaké 'a', lan klausa finally nampilaké 'b'. Apa sing ditampilaké, lan kanthi urutan kepriye?",
          "options": [
            {
              "icon": "",
              "label": "b banjur a"
            },
            {
              "icon": "",
              "label": "a banjur b"
            },
            {
              "icon": "",
              "label": "Mung b"
            },
            {
              "icon": "",
              "label": "Mung a"
            }
          ]
        },
        {
          "question": "import copy; a = [[1, 2], [3, 4]]; b = copy.copy(a); b[0].append(99). Apa a[0] uga owah?",
          "options": [
            {
              "icon": "",
              "label": "No"
            },
            {
              "icon": "",
              "label": "Nuwuhaké error"
            },
            {
              "icon": "",
              "label": "Mung yèn nganggo deepcopy"
            },
            {
              "icon": "",
              "label": "Inggih"
            }
          ]
        },
        {
          "question": "d = {'x': 1, 'y': 2}. Apa sing dipriksa dening 'x' in d — kunci, nilai, utawa kalorone?",
          "options": [
            {
              "icon": "",
              "label": "Nilai-nilainé"
            },
            {
              "icon": "",
              "label": "Kunci lan nilai kalorone"
            },
            {
              "icon": "",
              "label": "Ora loro-lorone; nuwuhaké TypeError"
            },
            {
              "icon": "",
              "label": "Kunci-kuncine"
            }
          ]
        },
        {
          "question": "names = ['Al', 'Bo'] lan scores = [10, 20]. Apa sing dibalèkaké list(zip(names, scores))?",
          "options": [
            {
              "icon": "",
              "label": "[('Al', 'Bo'), (10, 20)]"
            },
            {
              "icon": "",
              "label": "['Al', 10, 'Bo', 20]"
            },
            {
              "icon": "",
              "label": "[('Al', 10), ('Bo', 20)]"
            },
            {
              "icon": "",
              "label": "Sawijining ValueError"
            }
          ]
        },
        {
          "question": "class Dog: tricks = [] nyimpen list tingkat kelas, lan add_trick nambahaké menyang self.tricks. d1 = Dog() lan d2 = Dog() loro-lorone digawé, banjur d1.add_trick('sit') dilakokaké. Apa isiné d2.tricks?",
          "options": [
            {
              "icon": "",
              "label": "[]"
            },
            {
              "icon": "",
              "label": "['sit']"
            },
            {
              "icon": "",
              "label": "Sawijining TypeError"
            },
            {
              "icon": "",
              "label": "Ora ana"
            }
          ]
        },
        {
          "question": "class A nduwé def greet(self): return 'A'. class B(A) nduwé def greet(self): return 'B' + super().greet(). Apa sing dibalèkaké B().greet()?",
          "options": [
            {
              "icon": "",
              "label": "'AB'"
            },
            {
              "icon": "",
              "label": "'B'"
            },
            {
              "icon": "",
              "label": "'BA'"
            },
            {
              "icon": "",
              "label": "Sawijining AttributeError"
            }
          ]
        },
        {
          "question": "class Point nyimpen self.x ing __init__ lan ora nemtokaké metode liyané. p1 = Point(1) lan p2 = Point(1). Apa sing dibalèkaké p1 == p2 kanthi default?",
          "options": [
            {
              "icon": "",
              "label": "Leres"
            },
            {
              "icon": "",
              "label": "Lepat"
            },
            {
              "icon": "",
              "label": "Ora ana"
            },
            {
              "icon": "",
              "label": "Sawijining TypeError"
            }
          ]
        },
        {
          "question": "Klausa except endi ing ngisor iki sing uga bakal nangkep ZeroDivisionError: except ArithmeticError, except ValueError, utawa except KeyError?",
          "options": [
            {
              "icon": "",
              "label": "except ValueError"
            },
            {
              "icon": "",
              "label": "except KeyError"
            },
            {
              "icon": "",
              "label": "Ora ana siji-sijia"
            },
            {
              "icon": "",
              "label": "except ArithmeticError"
            }
          ]
        },
        {
          "question": "Panjenengan mbukak file nganggo open('data.txt') as f: lan ana exception sing muncul nalika maca ing jero blok. Apa file kasebut isih bakal ditutup?",
          "options": [
            {
              "icon": "",
              "label": "No"
            },
            {
              "icon": "",
              "label": "Mung yèn ditambahi klausa finally"
            },
            {
              "icon": "",
              "label": "Inggih"
            },
            {
              "icon": "",
              "label": "Gumantung marang jinis exception"
            }
          ]
        },
        {
          "question": "x = [3, 1, 2] lan y = x.sort(). Apa sing disimpen dening y?",
          "options": [
            {
              "icon": "",
              "label": "[1, 2, 3]"
            },
            {
              "icon": "",
              "label": "Ora ana"
            },
            {
              "icon": "",
              "label": "[3, 1, 2]"
            },
            {
              "icon": "",
              "label": "Sawijining TypeError"
            }
          ]
        },
        {
          "question": "Apa sing kedadeyan yèn panjenengan nglakokaké 'Score: ' + 42?",
          "options": [
            {
              "icon": "",
              "label": "'Score: 42'"
            },
            {
              "icon": "",
              "label": "'Score: '"
            },
            {
              "icon": "",
              "label": "42"
            },
            {
              "icon": "",
              "label": "Nuwuhaké TypeError"
            }
          ]
        },
        {
          "question": "Panjenengan perlu mriksa apa list kanthi jeneng results kosong. Endi cara Python sing idiomatik: if results == []: , if len(results) == 0: , utawa if not results: ?",
          "options": [
            {
              "icon": "",
              "label": "if results == []:"
            },
            {
              "icon": "",
              "label": "if len(results) == 0:"
            },
            {
              "icon": "",
              "label": "if results is None:"
            },
            {
              "icon": "",
              "label": "if not results:"
            }
          ]
        }
      ],
      "optionOrderVersion": "26e0df963ab76db1"
    }
  },
  "testNames": {
    "python-test": "Tes Python"
  }
}
