Commit 8f806526 authored by AVANZINI Martin's avatar AVANZINI Martin
Browse files

more examples

parent e5de6acc
......@@ -203,7 +203,7 @@ pldi = unsafePerformIO $ Benchmark "pldi" <$> do
{-# NOINLINE oopsla #-}
oopsla :: Benchmark
oopsla = unsafePerformIO $ Benchmark "oopsla" <$> do
fps <- sort . lines <$> readCreateProcess (shell "find examples/oopsla -type f -name '*.imp' -o -name '*.pwhile'") mempty
fps <- sort . lines <$> readCreateProcess (shell "find examples/oopsla -type f -name '*.imp' -o -name '*.pwhile' | sort") mempty
forM fps $ \fp -> Problem fp <$> fromFile' fp
......
# 2-d random walk
# d = |x| + |y|
def f():
var x, y, d, n
while d < n:
if x > 0:
if y > 0:
prob(1,3):
x = x + 2
d = d + 2
else:
prob(1,2):
y = y + 2
d = d + 2
else:
prob(1,1):
x = x - 1
d = d - 1
else:
y = y - 1
d = d - 1
else:
if y < 0:
prob(1,3):
x = x + 2
d = d + 2
else:
prob(1,2):
y = y + 1
d = d - 1
else:
prob(1,1):
x = x - 1
d = d - 1
else:
y = y - 2
d = d + 2
else:
prob(1,3):
x = x + 2
d = d + 2
else:
prob(1,2):
y = y + 1
d = d + 1
else:
prob(1,1):
x = x - 1
d = d - 1
else:
y = y - 1
d = d + 1
else:
if x < 0:
if y > 0:
prob(1,3):
x = x + 1
d = d - 1
else:
prob(1,2):
y = y + 2
d = d + 2
else:
prob(1,1):
x = x - 2
d = d + 2
else:
y = y - 1
d = d - 1
else:
if y < 0:
prob(1,3):
x = x + 1
d = d - 1
else:
prob(1,2):
y = y + 1
d = d - 1
else:
prob(1,1):
x = x - 2
d = d + 2
else:
y = y - 2
d = d + 2
else:
prob(1,3):
x = x + 1
d = d - 1
else:
prob(1,2):
y = y + 1
d = d + 1
else:
prob(1,1):
x = x - 2
d = d + 2
else:
y = y - 1
d = d + 1
else:
if y > 0:
prob(1,3):
x = x + 1
d = d + 1
else:
prob(1,2):
y = y + 2
d = d + 2
else:
prob(1,1):
x = x - 1
d = d + 1
else:
y = y - 1
d = d - 1
else:
if y < 0:
prob(1,3):
x = x + 1
d = d + 1
else:
prob(1,2):
y = y + 1
d = d - 1
else:
prob(1,1):
x = x - 1
d = d + 1
else:
y = y - 2
d = d + 2
else:
prob(1,3):
x = x + 1
d = d + 1
else:
prob(1,2):
y = y + 1
d = d + 1
else:
prob(1,1):
x = x - 1
d = d + 1
else:
y = y - 1
d = d + 1
tick 1
# t09 in C4B figure 8
def f():
var i, j, x, r
i = 1
j = 0
while j < x:
j = j + 1
if i >= 10:
i = 1
tick 40
else:
r = unif(1,3)
i = i + r
tick 1
# t13 in C4B figure 8
def f():
var x, y, t
assume y >= 0
while x > 0:
x = x - 1
prob(1, 3):
y = y + 1
else:
while y > 0:
y = y - 1
tick 1
tick 1
# t15 in C4B figure 8
def f():
var x, y, t, r
assume y >= 0
while x > y:
x = x - y
x = x - 1
t = y
while t > 0:
r = unif(0,1)
t = t - r
tick 1
tick 1
# t15 in C4B figure 8
def f():
var x, y, t, r
assume y >= 0
while [y >= 0] x > y:
x = x - y
x = x - 1
t = y
while t > 0:
r = unif(0,1)
t = t - r
tick 1
tick 1
# t19 in C4B figure 8
def f():
var i, k
while i > 100:
prob(1,1):
i = i - 1
else:
i = i - 0
tick 1
i = i + k + 50
while i >= 0:
i = i - 1
tick 1
# t30 in C4B figure 8
def f():
var x, y, t, r
while x > 0:
r = unif(1, 3)
x = x - r
t = x
x = y
y = t
tick 1
# t30 in C4B figure 8
def f():
var x, y, t, r
while [y >= -1] x > 0:
r = unif(1, 3)
x = x - r
t = x
x = y
y = t
tick 1
# tick N = 10
def f():
var l
while l >= 8:
prob(95,5):
l = l - 8
tick 8
while l > 0:
l = l - 1
tick 1
# Example of Bayesian Network
# Perform n iterations over the network with 5 nodes
def f():
var i, d, s, l, g
while n > 0:
i = ber(3,10)
tick 1
d = ber(2,5)
tick 1
if i < 1 and d < 1:
g = ber(7,10)
tick 1
else:
if i < 1 and d > 0:
g = ber(19,20)
tick 1
else:
if i > 0 and d < 1:
g = ber(1,10)
tick 1
else:
g = ber(1,2)
tick 1
if i < 1:
s = ber(1,20)
tick 1
else:
s = ber(4,5)
tick 1
if g < 1:
l = ber(1,10)
tick 1
else:
l = ber(3,5)
tick 1
n = n - 1
\ No newline at end of file
def f():
var x, n, r
while x < n:
r = ber(1,2)
x = x + r
tick 1
def f():
var x, n, r
x = 0
while x < n:
r = bin(10,1,2)
x = x + r
tick 1
# mix of conjunction and disjunction conditional loop
def f():
var n, m
while n > 0 and m > 0:
prob(1,1):
n = n - 1
else:
m = m - 1
tick 1
# Coupon with N = 5
def f():
var i
i = 0
while i < 5:
if i = 0:
i = i + 1
else:
if i = 1:
prob(1,4):
i = 1
else:
i = i + 1
else:
if i = 2:
prob(2,3):
i = 2
else:
i = i + 1
else:
if i = 3:
prob(3,2):
i = 3
else:
i = i + 1
else:
prob(4,1):
i = 4
else:
i = i + 1
tick 1
# The duel cowboys
# The probability A hits B is p_a = 3/4
# The probability B hits A is p_b = 1/3
# The duel ends when one hits the other
# A shoots first
# Compute the expected number of turns that the duel will end
# Exact answer, it is a geometric distribution with p = (3/4 + 1/4*1/3) = 5/6, E(1_Head) = 6/5 = 1.2
# Alternatively, 1.(3/4 + 1/4.1/3) + 2.(1/4.2/3.3/4 + 1/4.2/3.1/4.1/3) ....
# = 1.5/6 + 2.(5/6^2) + 3.(5/6^3) + ... + n.(5/6^n)
# Arithmetic-geometric sequence a = 1, b = 5/6, d = 1, r = 1/6
# t_n = [1 + (n-1).1].5/6.(1/6)^(n-1)
# limit of Sn = 5/6(6/5 + 6/25) = 1 + 1/5 = 1.2
# flag : 0: one is hit, otherwise 1
def f():
var flag
flag = 1
while flag > 0:
prob(3,1):
flag = 0
else:
prob(1,2):
flag = 0
else:
flag = 1
tick 1
\ No newline at end of file
# filling containers
def f():
var volToFill, fast, medium, slow, vol, volMeasured, r
var volToFill, fast, medium, slow, vol, volMeasured
fast = 10
medium = 3
slow = 1
......@@ -10,16 +10,12 @@ def f():
while volMeasured <= volToFill:
if volToFill < (volMeasured + fast):
r = unif(9,10)
volMeasured = volMeasured + r
volMeasured = volMeasured + unif(9,10)
else:
if volToFill < (volMeasured + medium):
r = unif(2,4)
volMeasured = volMeasured + r
volMeasured = volMeasured + unif(2,4)
else:
r = unif(0,2)
volMeasured = volMeasured + r
volMeasured = volMeasured + unif(0,2)
r = unif(0,1)
volMeasured = volMeasured + r
volMeasured = volMeasured + unif(0,1)
tick 1
def f():
var x
while x >= 2:
prob(1,2):
x = x - 1
else:
x = x - 2
tick 1
def f():
var x, y, m, n
while x + 3 <= n:
if y < m:
prob(1,1):
y = y + 1
else:
y = y + 0
else:
prob(1,3):
x = x + 0
else:
prob(1,2):
x = x + 1
else:
prob(1,1):
x = x + 2
else:
x = x + 3
tick 1
# simulate the randomization of pushing one and always popping many
def f():
var x, y
assume y >= 0
while x > 0:
x = x - 1
prob(1,3):
y = y + 1
while y > 0:
y = y - 1
tick 1
tick 2
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment