Decision tables: Difference between revisions

Content added Content deleted
m (→‎{{header|Sidef}}: Fix link: Perl 6 --> Raku)
Line 849: Line 849:


For large numbers of rules and few actions, J's native support of sparse arrays might provide a performance advantage, particularly in space. A minor note about the implementation here: the verb (function) <tt>troubleshoot</tt> is generalized, and reusable on any set of rule table, questions, and suggested actions. The default is to use those given in the printer troubleshooting table.
For large numbers of rules and few actions, J's native support of sparse arrays might provide a performance advantage, particularly in space. A minor note about the implementation here: the verb (function) <tt>troubleshoot</tt> is generalized, and reusable on any set of rule table, questions, and suggested actions. The default is to use those given in the printer troubleshooting table.

=={{header|Java}}==
{{trans|Kotlin}}
<lang java>import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import java.util.Objects;

public class DecisionTables {
private static class Pair<T, U> {
private final T t;
private final U u;

public static <T, U> Pair<T, U> of(T t, U u) {
return new Pair<>(t, u);
}

public Pair(T t, U u) {
this.t = t;
this.u = u;
}

public T getFirst() {
return t;
}

public U getSecond() {
return u;
}
}

private static final List<Pair<String, String>> conditions = List.of(
Pair.of("Printer prints", "NNNNYYYY"),
Pair.of("A red light is flashing", "YYNNYYNN"),
Pair.of("Printer is recognized by computer", "NYNYNYNY")
);

private static final List<Pair<String, String>> actions = List.of(
Pair.of("Check the power cable", "NNYNNNNN"),
Pair.of("Check the printer-computer cable", "YNYNNNNN"),
Pair.of("Ensure printer software is installed", "YNYNYNYN"),
Pair.of("Check/replace ink", "YYNNNYNN"),
Pair.of("Check for paper jam", "NYNYNNNN")
);

public static void main(String[] args) throws IOException {
final int nc = conditions.size();
final int na = actions.size();
final int nr = conditions.get(0).getSecond().length();
final int np = 7;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Please answer the following questions with a y or n:");
final boolean[] answers = new boolean[nc];
for (int c = 0; c < nc; ++c) {
String input;
do {
System.out.printf(" %s ? ", conditions.get(c).getFirst());
input = br.readLine().toUpperCase();
} while (!Objects.equals(input, "Y") && !Objects.equals(input, "N"));
answers[c] = Objects.equals(input, "Y");
}
System.out.println("\nRecommended action(s)");

outer:
for (int r = 0; r < nr; ++r) {
for (int c = 0; c < nc; ++c) {
char yn = answers[c] ? 'Y' : 'N';
if (conditions.get(c).getSecond().charAt(r) != yn) {
continue outer;
}
}
if (r == np) {
System.out.println(" None (no problem detected)");
} else {
for (Pair<String, String> action : actions) {
if (action.getSecond().charAt(r) == 'Y') {
System.out.printf(" %s\n", action.getFirst());
}
}
}
break;
}
}
}</lang>
{{out}}
<pre>Please answer the following questions with a y or n:
Printer prints ? n
A red light is flashing ? n
Printer is recognized by computer ? n

Recommended action(s)
Check the power cable
Check the printer-computer cable
Ensure printer software is installed</pre>


=={{header|JavaScript}}==
=={{header|JavaScript}}==