Hex Artifact Content
Not logged in

Artifact 9caa644d5228a4f9afe09acf1f44a6fa1ddaa974:


0000: 28 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  (***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a  *************. *
0050: 20 57 72 69 74 74 65 6e 20 69 6e 0a 20 2a 20 20   Written in. *  
0060: 20 20 41 6c 69 63 65 20 31 2e 34 0a 20 2a 20 20    Alice 1.4. *  
0070: 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 70 73 2e    http://www.ps.
0080: 75 6e 69 2d 73 61 61 72 6c 61 6e 64 2e 64 65 2f  uni-saarland.de/
0090: 61 6c 69 63 65 2f 0a 20 2a 2a 2a 2a 2a 2a 2a 2a  alice/. ********
00a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00e0: 2a 2a 2a 2a 29 0a 0a 66 75 6e 20 73 6f 6c 76 65  ****)..fun solve
00f0: 20 28 6e 20 3a 20 69 6e 74 2c 20 6b 20 3a 20 69   (n : int, k : i
0100: 6e 74 29 20 3a 20 62 6f 6f 6c 20 3d 0a 09 6c 65  nt) : bool =..le
0110: 74 0a 09 09 6f 70 65 6e 20 57 6f 72 64 0a 09 09  t...open Word...
0120: 69 6e 66 69 78 20 35 20 3c 3c 20 61 6e 64 62 0a  infix 5 << andb.
0130: 09 09 76 61 6c 20 6d 61 73 6b 20 3d 20 28 30 77  ..val mask = (0w
0140: 78 31 20 3c 3c 20 66 72 6f 6d 49 6e 74 20 6e 29  x1 << fromInt n)
0150: 20 2d 20 30 77 78 31 0a 09 69 6e 0a 09 09 28 66   - 0wx1..in...(f
0160: 72 6f 6d 49 6e 74 20 6b 29 20 61 6e 64 62 20 6d  romInt k) andb m
0170: 61 73 6b 20 3d 20 6d 61 73 6b 0a 09 65 6e 64 0a  ask = mask..end.
0180: 0a 66 75 6e 20 6d 61 69 6e 20 28 29 20 3d 0a 09  .fun main () =..
0190: 6c 65 74 0a 09 09 66 75 6e 20 72 65 61 64 4c 69  let...fun readLi
01a0: 6e 65 20 28 29 20 3d 0a 09 09 09 63 61 73 65 20  ne () =....case 
01b0: 54 65 78 74 49 4f 2e 69 6e 70 75 74 4c 69 6e 65  TextIO.inputLine
01c0: 20 54 65 78 74 49 4f 2e 73 74 64 49 6e 20 6f 66   TextIO.stdIn of
01d0: 0a 09 09 09 7c 20 4e 4f 4e 45 20 20 20 20 3d 3e  ....| NONE    =>
01e0: 20 5b 5d 0a 09 09 09 7c 20 53 4f 4d 45 28 73 29   []....| SOME(s)
01f0: 20 3d 3e 20 6d 61 70 20 49 6e 74 2e 66 72 6f 6d   => map Int.from
0200: 53 74 72 69 6e 67 20 28 53 74 72 69 6e 67 2e 74  String (String.t
0210: 6f 6b 65 6e 73 20 28 66 6e 20 78 20 3d 3e 20 78  okens (fn x => x
0220: 20 3d 20 23 22 20 22 29 20 73 29 0a 0a 09 09 66   = #" ") s)....f
0230: 75 6e 20 70 61 72 73 65 4f 6e 65 20 63 20 3d 0a  un parseOne c =.
0240: 09 09 09 63 61 73 65 20 72 65 61 64 4c 69 6e 65  ...case readLine
0250: 28 29 20 6f 66 0a 09 09 09 7c 20 5b 53 4f 4d 45  () of....| [SOME
0260: 20 6e 2c 20 53 4f 4d 45 20 6b 5d 20 3d 3e 20 28   n, SOME k] => (
0270: 63 2c 20 28 6e 2c 20 6b 29 29 0a 09 09 09 7c 20  c, (n, k))....| 
0280: 5f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  _               
0290: 20 3d 3e 20 61 73 73 65 72 74 20 66 61 6c 73 65   => assert false
02a0: 0a 0a 09 09 66 75 6e 20 73 70 61 77 6e 20 73 6f  ....fun spawn so
02b0: 6c 76 65 4f 6e 65 20 28 63 2c 20 69 6e 70 29 20  lveOne (c, inp) 
02c0: 3d 0a 09 09 09 28 63 2c 20 73 6f 6c 76 65 20 69  =....(c, solve i
02d0: 6e 70 29 0a 0a 09 09 66 75 6e 20 70 72 69 6e 74  np)....fun print
02e0: 4f 6e 65 20 28 63 2c 20 61 6e 73 29 20 3d 0a 09  One (c, ans) =..
02f0: 09 09 70 72 69 6e 74 20 28 22 43 61 73 65 20 23  ..print ("Case #
0300: 22 20 5e 20 49 6e 74 2e 74 6f 53 74 72 69 6e 67  " ^ Int.toString
0310: 20 28 63 2b 31 29 20 5e 20 22 3a 20 22 20 5e 20   (c+1) ^ ": " ^ 
0320: 28 69 66 20 61 6e 73 20 74 68 65 6e 20 22 4f 4e  (if ans then "ON
0330: 22 20 65 6c 73 65 20 22 4f 46 46 22 29 20 5e 20  " else "OFF") ^ 
0340: 22 5c 6e 22 29 0a 09 69 6e 0a 09 09 63 61 73 65  "\n")..in...case
0350: 20 72 65 61 64 4c 69 6e 65 20 28 29 20 6f 66 0a   readLine () of.
0360: 09 09 7c 20 5b 53 4f 4d 45 20 74 5d 20 3d 3e 20  ..| [SOME t] => 
0370: 4c 69 73 74 2e 61 70 70 20 70 72 69 6e 74 4f 6e  List.app printOn
0380: 65 20 28 4c 69 73 74 2e 6d 61 70 20 73 6f 6c 76  e (List.map solv
0390: 65 4f 6e 65 20 28 4c 69 73 74 2e 74 61 62 75 6c  eOne (List.tabul
03a0: 61 74 65 20 28 74 2c 20 70 61 72 73 65 4f 6e 65  ate (t, parseOne
03b0: 29 29 29 0a 09 09 7c 20 5f 20 20 20 20 20 20 20  )))...| _       
03c0: 20 3d 3e 20 61 73 73 65 72 74 20 66 61 6c 73 65   => assert false
03d0: 0a 09 65 6e 64 0a 0a 64 6f 20 6d 61 69 6e 20 28  ..end..do main (
03e0: 29 0a 64 6f 20 4f 53 2e 50 72 6f 63 65 73 73 2e  ).do OS.Process.
03f0: 65 78 69 74 20 30 0a                             exit 0.