File: welfare.pml

package info (click to toggle)
spin 6.5.2%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,512 kB
  • sloc: ansic: 39,876; yacc: 1,021; makefile: 58; sh: 13
file content (32 lines) | stat: -rwxr-xr-x 942 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* 
 a problem due to W. Feijen
  [described in D. Gries, "The Science of Programming,"
  Springer, New York, 1981]
 a, b, and c are three ordered lists of integers
 (originally: three magnetic tapes with sorted lists of names;
  a list of welfare recipients, a payroll list of a company,
  and a list of University students)
 At least one element appears in all three lists.
 Find the smallest indices i, j, and k such that a[i] == b[j] == c[k]
 (i.e., the first name in alphabetical order
  that appears in all three lists)
*/

int a[5], b[5], c[5]

active proctype cr()
{	byte i, j, k

	a[0] = 1; a[1] = 3; a[2] =  4; a[3] = 13; a[4] = 18
	b[0] = 1; b[1] = 4; b[2] = 18; b[3] = 20; b[4] = 25
	c[0] = 5; c[1] = 8; c[2] = 12; c[3] = 18; c[4] = 24

	do	/* non-deterministic */
	:: a[i] < b[j] -> i++
	:: b[j] < c[k] -> j++
	:: c[k] < a[i] -> k++
	:: else -> break
	od;
	assert(a[i] == b[j] && b[j] == c[k])
	assert(i < 5 && j < 5 && k < 5)
}