Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enc100 = {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
- 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
- 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
- 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
- 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
- 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
- 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,}
- --enc100の値は必要に応じて変更する
- rand = {}
- start = memory.readbyte(0x7E1A9A)
- step = 159
- stop = {999,999,999,999,999}
- avoid = true
- teki = 999
- text = "Fail"
- blank = {}
- distance = {0,0,0,0,0}
- input = {}
- for i = 1, 5 do
- input[i] = {}
- end
- blank[1] = {0,0}
- blank[2] = {0,0}
- blank[3] = {0,0}
- blank[4] = {0,0}
- blank[5] = {0,0}
- --同一フロア内での画面の切替えや強制待機に対応しようとしましたが、あまりうまく機能しないと思います。
- seed1 = memory.readbyte(0x7E0993) + (memory.readbyte(0x7E0994) * 256)
- seed2 = memory.readbyte(0x7E0995) + (memory.readbyte(0x7E0996) * 256)
- seedupper = math.floor(seed1 / 256)
- seedlower = seed1 % 256
- seedupper = (seedupper + (7 - (memory.readbyte(0x7E007F) % 8))) % 256
- seedlower = (seedlower + (7 - (memory.readbyte(0x7E007F) % 8))) % 256
- seed1 = seedlower + (seedupper * 256)
- seedlower = seed2 % 256
- seedlower = (seedlower + (7 - (memory.readbyte(0x7E007F) % 8))) % 256
- seed2 = ((math.floor(seed2 / 256) * 256) + seedlower) % 65536
- seed1store = seed1
- seed2store = seed2
- function rng()
- resist1 = seed1
- resist2 = seed2
- carry = math.floor((seed1 * 2) / 65536)
- seed1 = (seed1 * 2) % 65536
- seed2 = ((seed2 * 2) + carry) % 65536
- carry = math.floor((seed1 + resist1) / 65536)
- seed1 = (seed1 + resist1) % 65536
- seed2 = (seed2 + resist2 + carry) % 65536
- carry = math.floor((seed1 + 0x15AD) / 65536)
- seed1 = (seed1 + 0x15AD) % 65536
- seed2 = (seed2 + carry) % 65536
- rdm = seed2 % 256
- seedupper = math.floor(seed1 / 256)
- seedlower = seed1 % 256
- seedupper = (seedupper + 8) % 256
- seedlower = (seedlower + 8) % 256
- seed1 = seedlower + (seedupper * 256)
- seedlower = ((seed2 % 256) + 8) % 256
- seed2 = (math.floor(seed2 / 256) * 256 + seedlower) % 65536
- return rdm
- end
- function wait(time)
- seedupper = math.floor(seed1 / 256)
- seedlower = seed1 % 256
- seedupper = (seedupper + time) % 256
- seedlower = (seedlower + time) % 256
- seed1 = seedlower + (seedupper * 256)
- seedlower = ((seed2 % 256) + time) % 256
- seed2 = (math.floor(seed2 / 256) * 256 + seedlower) % 65536
- end
- i = 1
- while i < step - start do
- rand[i] = rng()
- if rand[i] < enc100[i] then teki = i
- avoid = false
- break
- else text = "success" end
- i = i + 1
- end
- judge = true
- if avoid == false then
- i = 1
- while i < step + 1 - start do
- seed1 = seed1store
- seed2 = seed2store
- j = 1
- if judge == false then break end
- while j < step + 1 - start do
- avoid = true
- if j == 1 then
- judge = false
- end
- for b = 1, 5 do
- if j == blank[b][1] then
- wait(blank[b][2])
- end
- end
- if i == j then
- wait(8)
- rand[j] = 999
- judge = true
- else rand[j] = rng() end
- if rand[j] < enc100[j] then teki = j
- avoid = false
- if judge == false then break end
- end
- if blank[3][2] == j then
- if rand[j] < 129 then teki = j
- avoid = false
- end
- end
- if avoid == true then stop[1] = i - 1
- else
- for x = 1, 5 do
- if sort ~= true then
- if distance[x] <= j - 2 then
- sort = true
- for y = 1, 5-x do
- distance[6-y] = distance[5-y]
- input[6-y] = input[5-y]
- end
- distance[x] = j - 2
- input[x] = {i-1, j-2}
- end
- end
- end
- sort = false
- break
- end
- j = j + 1
- end
- if avoid == true then text = "Success"
- break end
- i = i + 1
- end
- end
- judge = true
- if avoid == false then
- i = 1
- while i < step + 1 - start do
- seed1 = seed1store
- seed2 = seed2store
- j = 1
- if judge == false then break end
- while j < step + 1 - start do
- avoid = true
- if j == 1 then
- judge = false
- end
- for b = 1, 5 do
- if j == blank[b][1] then
- wait(blank[b][2])
- end
- end
- if i == j then
- wait(15)
- rand[j] = 999
- judge = true
- else rand[j] = rng() end
- if rand[j] < enc100[j] then teki = j
- avoid = false
- if judge == false then break end
- end
- if blank[3][2] == j then
- if rand[j] < 129 then teki = j
- avoid = false
- end
- end
- if avoid == true then stop[1] = i + 14999
- else
- for x = 1, 5 do
- if sort ~= true then
- if distance[x] <= j - 2.875 then
- sort = true
- for y = 1, 5-x do
- distance[6-y] = distance[5-y]
- input[6-y] = input[5-y]
- end
- distance[x] = j - 2.875
- input[x] = {i+14999, j-2}
- end
- end
- end
- sort = false
- break
- end
- j = j + 1
- end
- if avoid == true then text = "Success"
- break end
- i = i + 1
- end
- end
- judge1 = true
- judge2 = true
- if avoid == false then
- i = 1
- while i < step + 2 - start do
- j = 1
- if judge2 == false then break end
- while j < step + 2 - start do
- seed1 = seed1store
- seed2 = seed2store
- k = 1
- if judge1 == false then
- judge1 = true
- break
- end
- while k < step + 2 - start do
- if i > j then break end
- avoid = true
- if k == 1 then
- judge1 = false
- judge2 = false
- end
- hantei = false
- for b = 1, 5 do
- if k == blank[b][1] then
- wait(blank[b][2])
- end
- end
- if j == k then
- wait(8)
- rand[k] = 999
- judge1 = true
- hantei = true
- end
- if i == k then
- wait(8)
- rand[k] = 999
- judge2 = true
- elseif hantei == false then rand[k] = rng() end
- if rand[k] < enc100[k] then teki = j
- avoid = false
- if judge1 == false or judge2 == false then break end
- end
- if blank[3][2] == k then
- if rand[k] < 129 then teki = j
- avoid = false
- end
- end
- if avoid == true then stop[1] = i - 1
- stop[2] = j - 2
- else
- for x = 1, 5 do
- if sort ~= true then
- if distance[x] <= k - 3 then
- sort = true
- for y = 1, 5-x do
- distance[6-y] = distance[5-y]
- input[6-y] = input[5-y]
- end
- distance[x] = k - 3
- input[x] = {i-1, j-2, k-3}
- end
- end
- end
- sort = false
- break
- end
- k = k + 1
- end
- if avoid == true then text = "Success"
- break end
- j = j + 1
- end
- if avoid == true then text = "Success"
- break end
- i = i + 1
- end
- end
- judge1 = true
- judge2 = true
- if avoid == false then
- i = 1
- while i < step + 2 - start do
- j = 1
- if judge2 == false then break end
- while j < step + 2 - start do
- seed1 = seed1store
- seed2 = seed2store
- k = 1
- if judge1 == false then
- judge1 = true
- break
- end
- while k < step + 2 - start do
- avoid = true
- if k == 1 then
- judge1 = false
- judge2 = false
- end
- hantei = false
- for b = 1, 5 do
- if k == blank[b][1] then
- wait(blank[b][2])
- end
- end
- if j == k then
- wait(15)
- rand[k] = 999
- judge1 = true
- hantei = true
- end
- if i == k then
- wait(8)
- rand[k] = 999
- judge2 = true
- elseif hantei == false then rand[k] = rng() end
- if rand[k] < enc100[k] then teki = j
- avoid = false
- if judge1 == false or judge2 == false then break end
- end
- if blank[3][2] == k then
- if rand[k] < 129 then teki = j
- avoid = false
- end
- end
- if avoid == true then stop[1] = i - 1
- stop[2] = j + 14998
- else
- for x = 1, 5 do
- if sort ~= true then
- if distance[x] <= k - 3.875 then
- sort = true
- for y = 1, 5-x do
- distance[6-y] = distance[5-y]
- input[6-y] = input[5-y]
- end
- distance[x] = k - 3.875
- input[x] = {i-1, j+14998, k-3}
- end
- end
- end
- sort = false
- break
- end
- k = k + 1
- end
- if avoid == true then text = "Success"
- break end
- j = j + 1
- end
- if avoid == true then text = "Success"
- break end
- i = i + 1
- end
- end
- judge1 = true
- judge2 = true
- judge3 = true
- if avoid == false then
- i = 1
- while i < step + 3 - start do
- j = 1
- if judge3 == false then break end
- while j < step + 3 - start do
- k = 1
- if judge2 == false then
- judge2 = true
- break
- end
- while k < step + 3 - start do
- seed1 = seed1store
- seed2 = seed2store
- l = 1
- if i > j then break end
- if judge1 == false then
- judge1 = true
- break
- end
- while l < step + 3 - start do
- if j > k then break end
- avoid = true
- if l == 1 then
- judge1 = false
- judge2 = false
- judge3 = false
- end
- hantei1 = false
- hantei2 = false
- for b = 1, 5 do
- if l == blank[b][1] then
- wait(blank[b][2])
- end
- end
- if k == l then
- wait(8)
- rand[l] = 999
- hantei1 = true
- judge1 = true
- end
- if j == l then
- wait(8)
- rand[l] = 999
- hantei2 = true
- judge2 = true
- end
- if i == l then
- wait(8)
- rand[l] = 999
- judge3 = true
- elseif hantei1 == false and hantei2 == false then rand[l] = rng() end
- if rand[l] < enc100[l] then teki = j
- avoid = false
- if judge1 == false or judge2 == false or judge3 == false then break end
- end
- if blank[3][2] == l then
- if rand[k] < 129 then teki = j
- avoid = false
- end
- end
- if avoid == true then stop[1] = i - 1
- stop[2] = j - 2
- stop[3] = k - 3
- else
- for x = 1, 5 do
- if sort ~= true then
- if distance[x] <= l - 4 then
- sort = true
- for y = 1, 5-x do
- distance[6-y] = distance[5-y]
- input[6-y] = input[5-y]
- end
- distance[x] = l - 4
- input[x] = {i-1, j-2, k-3, l-4}
- end
- end
- end
- sort = false
- break
- end
- l = l + 1
- end
- if avoid == true then text = "Success"
- break end
- k = k + 1
- end
- if avoid == true then text = "Success"
- break end
- j = j + 1
- end
- if avoid == true then text = "Success"
- break end
- i = i + 1
- end
- end
- if avoid == true then
- print(stop[1]+start.." "..stop[2]+start.." "..stop[3]+start.." "..text)
- else
- print("Fail!")
- end
- for i = 1, table.getn(distance) do
- distance[i] = distance[i] + start
- end
- print(distance)
- for i = 1, 5 do
- for j = 1, table.getn(input[i]) do
- input[i][j] = input[i][j] + start
- end
- end
- print(input)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement