aboutsummaryrefslogtreecommitdiff
path: root/challenge-332/deadmarshal/modula-3/Ch2/src/Ch2.m3
blob: 69b0ee199b04aa6733c2f437df8c92473072558d (plain)
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
MODULE Ch2 EXPORTS Main;

IMPORT SIO,Text,CharIntTbl;

PROCEDURE OddLetters(READONLY S:TEXT):BOOLEAN =
  VAR
    H := NEW(CharIntTbl.Default).init(Text.Length(S));
    It:CharIntTbl.Iterator;
    K:CHAR;
    V:INTEGER;
  BEGIN
    FOR I := 0 TO Text.Length(S)-1 DO
      K := Text.GetChar(S,I);
      IF NOT H.get(K,V) THEN EVAL H.put(K,1)
      ELSE EVAL H.put(K,V+1)
      END
    END;
    It := H.iterate();
    WHILE It.next(K,V) DO
      IF V MOD 2 = 0 THEN RETURN FALSE END
    END;
    RETURN TRUE
  END OddLetters;

BEGIN
  SIO.PutBool(OddLetters("weekly")); SIO.Nl();
  SIO.PutBool(OddLetters("perl")); SIO.Nl();
  SIO.PutBool(OddLetters("challenge")); SIO.Nl()
END Ch2.