Code Puzzles

General discussion about LÖVE, Lua, game development, puns, and unicorns.
User avatar
CrackedP0t
Citizen
Posts: 69
Joined: Wed May 07, 2014 4:01 am
Contact:

Code Puzzles

Post 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:

Code: Select all

print(t.a + t.b) -- Outputs 5
The answer:

Code: Select all

local t = {
    a = 2,
    b = 3
}
I'll post the first one and some others, but other people should make some up too!
/人 ◕‿‿◕ 人\
Here, have an umlaut. Ö
User avatar
CrackedP0t
Citizen
Posts: 69
Joined: Wed May 07, 2014 4:01 am
Contact:

Re: Code Puzzles

Post 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)
Last edited by CrackedP0t on Fri Dec 04, 2015 5:10 am, edited 1 time in total.
/人 ◕‿‿◕ 人\
Here, have an umlaut. Ö
davisdude
Party member
Posts: 1154
Joined: Sun Apr 28, 2013 3:29 am
Location: North Carolina

Re: Code Puzzles

Post 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)
CrackedP0t wrote:

Code: Select all

print(d.z) -- Outputs 4.26
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
GitHub | MLib - Math and shape intersections library | Walt - Animation library | Brady - Camera library with parallax scrolling | Vim-love-docs - Help files and syntax coloring for Vim
bobbyjones
Party member
Posts: 730
Joined: Sat Apr 26, 2014 7:46 pm

Re: Code Puzzles

Post 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
User avatar
CrackedP0t
Citizen
Posts: 69
Joined: Wed May 07, 2014 4:01 am
Contact:

Re: Code Puzzles

Post 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!
/人 ◕‿‿◕ 人\
Here, have an umlaut. Ö
User avatar
CrackedP0t
Citizen
Posts: 69
Joined: Wed May 07, 2014 4:01 am
Contact:

Re: Code Puzzles

Post 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
/人 ◕‿‿◕ 人\
Here, have an umlaut. Ö
User avatar
Ranguna259
Party member
Posts: 911
Joined: Tue Jun 18, 2013 10:58 pm
Location: I'm right next to you

Re: Code Puzzles

Post 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 ;) .
LoveDebug- A library that will help you debug your game with an on-screen fully interactive lua console, you can even do code hotswapping :D

Check out my twitter.
davisdude
Party member
Posts: 1154
Joined: Sun Apr 28, 2013 3:29 am
Location: North Carolina

Re: Code Puzzles

Post 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) :P

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
GitHub | MLib - Math and shape intersections library | Walt - Animation library | Brady - Camera library with parallax scrolling | Vim-love-docs - Help files and syntax coloring for Vim
User avatar
NickRock
Citizen
Posts: 76
Joined: Thu Dec 25, 2014 9:33 pm
Location: Earth
Contact:

Re: Code Puzzles

Post 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

]]
Weeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeooow!!
User avatar
Ranguna259
Party member
Posts: 911
Joined: Tue Jun 18, 2013 10:58 pm
Location: I'm right next to you

Re: Code Puzzles

Post 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..
LoveDebug- A library that will help you debug your game with an on-screen fully interactive lua console, you can even do code hotswapping :D

Check out my twitter.
Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot], Google [Bot] and 4 guests