Page 1 of 5
Code Puzzles
Posted: Fri Dec 04, 2015 1:10 am
by CrackedP0t
I've come up an idea for making puzzles that should be fun to solve!
The format is this: The puzzle maker posts the last half of a source code file and the whole file's output, and the object is to write the first half.
For example:
The puzzle:
The answer:
I'll post the first one and some others, but other people should make some up too!
Re: Code Puzzles
Posted: Fri Dec 04, 2015 1:14 am
by CrackedP0t
First Puzzle:
(Pretty hard)
Code: Select all
a = 1
b = 2
c = 3
d = 4
z = 26
print(a) -- Outputs 1
print(a.b) -- Outputs 1.2
print(a.b + c.d) -- Outputs 4.6
print(d.z) -- Outputs 4.26
You can ask me to run some code with the answer if you want, and I'll give you the output.
(Note: It uses the standard Lua print function, so no replacing it)
Re: Code Puzzles
Posted: Fri Dec 04, 2015 4:34 am
by davisdude
Code: Select all
debug.setmetatable( 1, {
__index = function( self, i )
return self + ( _G[i] / ( 10 ^ math.ceil( math.log10( _G[i] ) ) ) )
end,
} )
a = 1
b = 2
c = 3
d = 4
e = 26
print(a) -- Outputs 1
print(a.b) -- Outputs 1.2
print(a.b + c.d) -- Outputs 4.6
print(d.e) -- Outputs 4.26
I like it
(btw I assume you mean "e" instead of "z" here)
My turn!
Code: Select all
twice = random( 1, 5, 2 )
print( twice() ) -- x (from 1 to 5)
print( twice() ) -- x
print( twice() ) -- nil
thrice = random( 2, 10, 3 )
print( thrice() ) -- y (2-10)
print( thrice() ) -- y
print( thrice() ) -- y
print( thrice() ) -- nil
Re: Code Puzzles
Posted: Fri Dec 04, 2015 5:46 am
by bobbyjones
Here is my solution to davisdude's puzzle. I do not have one to offer though.
I should add this was my first time writing a closure. Didn't even use google. #pro.
Code: Select all
function random( low, high, howMany)
local low = low
local high = high
local howMany = howMany
local t = {}
local function randomAmount()
t[howMany] = (t[howMany] or howMany)-1
if t[howMany] >= 0 then
return math.random(low,high)
end
end
return randomAmount
end
twice = random( 1, 5, 2 )
print( twice() ) -- x (from 1 to 5)
print( twice() ) -- x
print( twice() ) -- nil
thrice = random( 2, 10, 3 )
print( thrice() ) -- y (2-10)
print( thrice() ) -- y
print( thrice() ) -- y
print( thrice() ) -- nil
Re: Code Puzzles
Posted: Fri Dec 04, 2015 5:32 pm
by CrackedP0t
Slightly simpler solution:
Code: Select all
local function random(a, b, n)
local i = 0
return function()
i = i + 1
return i <= n and math.random(a, b) or nil
end
end
twice = random( 1, 5, 2 )
print( twice() ) -- x (from 1 to 5)
print( twice() ) -- x
print( twice() ) -- nil
thrice = random( 2, 10, 3 )
print( thrice() ) -- y (2-10)
print( thrice() ) -- y
print( thrice() ) -- y
print( thrice() ) -- nil
Lovely closure puzzle!
Re: Code Puzzles
Posted: Fri Dec 04, 2015 5:38 pm
by CrackedP0t
Iterator puzzle:
Code: Select all
local t = {"a", "b", "c", "d", "e"}
for i, v in ripairs(t) do
print(i, v)
--[[ Outputs:
5 e
4 d
3 c
2 b
1 a
]]
end
Re: Code Puzzles
Posted: Sat Dec 05, 2015 6:36 pm
by Ranguna259
CrackedP0t wrote:Iterator puzzle:
Code: Select all
local t = {"a", "b", "c", "d", "e"}
for i, v in ripairs(t) do
print(i, v)
--[[ Outputs:
5 e
4 d
3 c
2 b
1 a
]]
end
Easy, just make ipairs go backwards:
Code: Select all
function ripairs(t)
local i = #t+1
return function(t,i)
i = i-1
if i == 0 then
return
end
return i,t[i]
end,t,i
end
Phi puzzle:
Code: Select all
print(phi(0)) --Output: 2
print(phi(1)) --Output: 1.5
print(phi(2)) --Output: 1.6666666666667
print(phi(10)) --Output: 1.6180555555556
print(phi(30)) --Output: 1.61803398875
print(phi(31)) --Output: 1.6180339887499
Read
this webpage about phi, especially the section "Phi as a continued fraction".
Good luck
.
Re: Code Puzzles
Posted: Sat Dec 05, 2015 9:41 pm
by davisdude
CrackedP0t wrote:Lovely closure puzzle!
Thanks, although I actually intended it to be a closure puzzle (although your solution is much more elegant)
Code: Select all
function random( low, high, times )
return setmetatable(
{
coroutine.create( function()
for i = 1, times do
coroutine.yield( math.random( low, high ) )
end
while true do coroutine.yield( nil ) end
end )
}, {
__call = function( tab, ... ) return select( 2, coroutine.resume( tab[1], ... ) ) end
}
)
end
Ranguna259 wrote:-snip-
Code: Select all
local function phi( times, _value, _times )
_value, _times = _value or 1, _times or 0
if _times > times then return _value
else return phi( times, 1 + ( 1 / _value ), _times + 1 ) end
end
Let me see if I can think of a good puzzle...
edit:
Code: Select all
data = [[
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
]]
print( getLargestProduct( data, 4 ) ) --> 5832
print( getLargestProduct( data, 13 ) ) --> 23514624000
-- In case you can't tell, the second number represents the number of consecutive digits
Re: Code Puzzles
Posted: Sun Dec 06, 2015 9:34 am
by NickRock
This one is pretty easy
Code: Select all
printNum(100, 1)
--[[ outputs:
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
80
79
78
77
76
75
74
73
72
71
70
69
68
67
66
65
64
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
-1
]]
Re: Code Puzzles
Posted: Sun Dec 06, 2015 12:34 pm
by Ranguna259
NickRock wrote:This one is pretty easy
Code: Select all
printNum(100, 1)
--[[ outputs:
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
80
79
78
77
76
75
74
73
72
71
70
69
68
67
66
65
64
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
-1
]]
Code: Select all
function printNum(s,n)
for i=s,-1,-n do
print(i)
end
end
davisdude wrote:...
Ranguna259 wrote:-snip-
Code: Select all
local function phi( times, _value, _times )
_value, _times = _value or 1, _times or 0
if _times > times then return _value
else return phi( times, 1 + ( 1 / _value ), _times + 1 ) end
end
...
Correct
davisdude wrote:...
Code: Select all
data = [[
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
]]
print( getLargestProduct( data, 4 ) ) --> 5832
print( getLargestProduct( data, 13 ) ) --> 23514624000
-- In case you can't tell, the second number represents the number of consecutive digits
base64 data ? I don't even..