Uganka: Prevedene funkcije
(The English translation is at the bottom of the page.)
(Pri teh nalogah ne uporabljajte različnih decompilerjev, ker ... ni fora. To zna vsak.)
FRI ima, kot gotovo veste, pogodbe z različnimi uglednimi tujimi organizacijami (NSA, MI5, Mossad - you name it) za izvajanje občasnih del. Nekoč je ena od njih prestregla tole funkcijo v Pythonu. No, pravzaprav ne funkcije, temveč že prevedeno kodo te funkcije. Zanimalo jih je, kaj počne, kaj računa, kaj izpiše, kaj vrne (če kaj). Torej?
Eni pravijo, naj bi bil
n
menda argument funkcije. Pa še tega ne smemo pozabiti, da funkcijaprint
vrne rezultat (objektNone
).
2 0 LOAD_CONST 1 (1)
2 DUP_TOP
4 STORE_FAST 1 (a)
6 STORE_FAST 2 (b)
3 >> 8 LOAD_FAST 0 (n)
10 LOAD_CONST 2 (0)
12 COMPARE_OP 4 (>)
14 POP_JUMP_IF_FALSE 48
4 16 LOAD_GLOBAL 0 (print)
18 LOAD_FAST 1 (a)
20 CALL_FUNCTION 1
22 POP_TOP
5 24 LOAD_FAST 2 (b)
26 LOAD_FAST 1 (a)
28 LOAD_FAST 2 (b)
30 BINARY_ADD
32 ROT_TWO
34 STORE_FAST 1 (a)
36 STORE_FAST 2 (b)
6 38 LOAD_FAST 0 (n)
40 LOAD_CONST 1 (1)
42 INPLACE_SUBTRACT
44 STORE_FAST 0 (n)
46 JUMP_ABSOLUTE 8
>> 48 LOAD_CONST 0 (None)
50 RETURN_VALUE
Če ste, draga študentka ali študent, potencialni kandidat za občasna pogodbena dela na FRI, se boste morali izkazati še z nekoliko težjo funkcijo. Kaj izračuna in vrne tale?
Videti je, da naj bi bila
n
inx
argumenta funkcije, saj jima nihče ne prireja vrednosti.r
pa je, bi rekel, neka spremenljivka znotraj funkcije. Vsaj meni tako izgleda.
2 0 LOAD_CONST 1 (1)
2 STORE_FAST 2 (r)
3 >> 4 LOAD_FAST 1 (n)
6 LOAD_CONST 2 (0)
8 COMPARE_OP 4 (>)
10 POP_JUMP_IF_FALSE 50
4 12 LOAD_FAST 1 (n)
14 LOAD_CONST 3 (2)
16 BINARY_MODULO
18 LOAD_CONST 1 (1)
20 COMPARE_OP 2 (==)
22 POP_JUMP_IF_FALSE 32
5 24 LOAD_FAST 2 (r)
26 LOAD_FAST 0 (x)
28 BINARY_MULTIPLY
30 STORE_FAST 2 (r)
6 >> 32 LOAD_FAST 0 (x)
34 LOAD_FAST 0 (x)
36 BINARY_MULTIPLY
38 STORE_FAST 0 (x)
7 40 LOAD_FAST 1 (n)
42 LOAD_CONST 3 (2)
44 BINARY_FLOOR_DIVIDE
46 STORE_FAST 1 (n)
48 JUMP_ABSOLUTE 4
8 >> 50 LOAD_FAST 2 (r)
52 RETURN_VALUE
(For these puzzles, do not use any decompilers. That's cheating. Anybody can do that.)
As you may be aware, our faculty is a subcontractor for various respectable foreign organisations (NSA, MI5, Mossad - you name it). One of them (I'm not allowed to disclose which) once intercepted the following Python function. The function is already translated. The task is to find what it does, computes, prints, returns ...
Some say that
n
is probably an argument of the function. Also don't forget that functionprint
returns a result (an objectNone
). The function probably discards it.If you, dear student, are a potential candidate for this job, you should prove yourself some more. What does the second function compute?
It seems that
n
andx
are arguments because they are not assigned a value before they're used.r
is, I'd say, a local variable.