Click here to Skip to main content
13,708,247 members
Click here to Skip to main content

Tagged as

Stats

43.7K views
99 downloads
21 bookmarked
Posted 27 Sep 2012
Licenced MIT

ObjectScript: A new programming language

, 9 Oct 2012
The ObjectScript is a new programing language that mixes benefits of JavaScript, Lua, and PHP. The ObjectScript has syntax from JavaScript, multiple results from Lua, OOP from PHP and much more.
OS
examples-os
add_user_module.os
bind.os
core.os
run_os_prog.os
test.os
proj.win32
add_user_module
os
osbind
profile_benchmark
scripts
test_fannkuch.os
run_os_prog
stack_usage
source
bin
os.exe
add_user_module.os
bind.os
core.os
run_os_prog.os
test.os
Makefile
test_fannkuch.os
unitpoint-objectscript-86f30d7
.gitignore
bin
.gitignore
examples-os
add_user_module.os
bind.os
core.os
run_os_prog.os
test.os
proj.win32
.gitignore
add_user_module
.gitignore
os
.gitignore
test_fannkuch.osc
test_fannkuch.osd
osbind
.gitignore
profile_benchmark
.gitignore
scripts
test_fannkuch.os
run_os_prog
.gitignore
stack_usage
.gitignore
source
.gitignore
.gitignore
.gitignore
os.exe
add_user_module.os
bind.os
core.os
run_os_prog.os
test.os
.gitignore
.gitignore
.gitignore
test_fannkuch.osc
test_fannkuch.osd
.gitignore
.gitignore
test_fannkuch.os
.gitignore
.gitignore
.gitignore
local function fannkuch(n)
  local p, q, s, sign, maxflips, sum = {}, {}, {}, 1, 0, 0
  for i=1,n do p[i] = i; q[i] = i; s[i] = i end
  repeat
    -- Copy and flip.
    local q1 = p[1]				-- Cache 1st element.
    if q1 ~= 1 then
      for i=2,n do q[i] = p[i] end		-- Work on a copy.
      local flips = 1
      repeat
		local qq = q[q1]
		if qq == 1 then				-- ... until 1st element is 1.
		  sum = sum + sign*flips
		  if flips > maxflips then 
			maxflips = flips 
		  end -- New maximum?
		  break
		end
		q[q1] = q1
		if q1 >= 4 then
		  local i, j = 2, q1 - 1
		  repeat q[i], q[j] = q[j], q[i]; i = i + 1; j = j - 1; until i >= j
		end
		q1 = qq; flips = flips + 1
      until false
    end
    -- Permute.
    if sign == 1 then
      p[2], p[1] = p[1], p[2]; sign = -1	-- Rotate 1<-2.
    else
      p[2], p[3] = p[3], p[2]; sign = 1		-- Rotate 1<-2 and 1<-2<-3.
      for i=3,n do
		local sx = s[i]
		if sx ~= 1 then s[i] = sx-1; break end
		if i == n then return sum, maxflips end	-- Out of permutations.
		s[i] = i
		-- Rotate 1<-...<-i+1.
		local t = p[1]; for j=1,i do p[j] = p[j+1] end; p[i+1] = t
      end
    end
  until false
end
local start_time = os.time()
local n = tonumber(arg and arg[1]) or 1
local sum, flips = fannkuch(n)
io.write(sum, "\nPfannkuchen(", n, ") = ", flips, "\n", "time = ", os.time() - start_time)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The MIT License

Share

About the Author

unitpoint
United States United States
No Biography provided

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web01-2016 | 2.8.180920.1 | Last Updated 9 Oct 2012
Article Copyright 2012 by unitpoint
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid