Ich versuche Folgendes zu tun:
Correct answers: A C A B D B ...
Student: Answers: Score:
-------- -------- ------
Charlie A. A D A B D C ... 4/6
George B. A C A B D D ... 5/6
Wie zählt man die richtigen Antworten, indem man die Antworten jedes einzelnen Schülers mit den Antworten in der ersten Zeile vergleicht? Ich möchte die Punktzahl der Tests berechnen können, indem ich die Antworten eingebe.
Antwort1
Hier ist ein Shell-Skript, das einfach die Anzahl der gleichen Zeichen ausgibt, ohne eine Formatierung vorzunehmen:
#!/bin/bash
solutions="ACABDB"
input="Charlie A.,ADABDC
George B.,ACABDD"
IFS=$'\n'
for line in $input; do
name=${line%,*}
answers=${line#*,}
correct=0
for i in $(seq ${#solutions}); do
[ ${answers:$i:1} == ${solutions:$i:1} ] && ((correct++))
done
echo "$line,$correct"
done
Und eine Ruby-Version, die die Ergebnisse als Monospace-Tabelle formatiert:
solutions = "ACABDB"
"Charlie A.,ADABDC
George B.,ACABDD".split("\n").each { |line|
name, answer = line.split(",")
correct = 0
(0...solutions.length).each { |i|
correct += 1 if answer[i] == solutions[i]
}
puts "#{"%-17s" % name}#{"%-20s" % answer.split("").join(" ")}#{correct}/#{solutions.length}"
}
Sie können die Skripte mit TextEdit speichern (im Nur-Text-Modus) und sie dann vom Terminal aus mit etwas wie bash ~/Desktop/script.sh
oder ausführen ruby ~/Desktop/script.rb
.