Revamp questionnaire, parallelize run-all, add new tasks
- Replace 6 compound Likert questions with 12 atomic ones grouped by dimension (syntax, expressiveness, data/IO, errors, overall); drop free-form question. Responses now stored as ints, not strings. - Back-compat layer maps legacy keys to new dimensions so existing results still render. - Parallelize run-all with ThreadPoolExecutor (configurable workers) and add a thread-safe min-request-interval rate limiter to the Anthropic provider. - Add new tasks: path_normalizer, todo_manager, currency_converter, locale_weather_url, network_info_parser, url_normalizer.
This commit is contained in:
150
tasks/filesystem/todo_manager.toml
Normal file
150
tasks/filesystem/todo_manager.toml
Normal file
@@ -0,0 +1,150 @@
|
||||
name = "todo_manager"
|
||||
category = "filesystem"
|
||||
mode = "convert"
|
||||
description = """
|
||||
A simple todo list manager. Read commands from stdin, one per line:
|
||||
add <task text> — append the task to the todo file
|
||||
list — print all tasks numbered as "NN). <task>"
|
||||
remove <N> — remove task number N (1-based)
|
||||
clear — remove all tasks
|
||||
|
||||
The todo file is "todo.txt" in the working directory.
|
||||
When listing, pad task numbers to two digits (01, 02, …).
|
||||
After "add" or "remove", automatically list the remaining tasks.
|
||||
If the list is empty, print "No tasks found".
|
||||
"""
|
||||
|
||||
bash_source = '''
|
||||
#!/bin/bash
|
||||
TODOFILE="./todo.txt"
|
||||
|
||||
list_tasks() {
|
||||
if [ -f "$TODOFILE" ] && [ -s "$TODOFILE" ]; then
|
||||
count=1
|
||||
IFS=$'\\n'
|
||||
while read -r task; do
|
||||
num=$count
|
||||
if [ $count -lt 10 ]; then num="0$count"; fi
|
||||
echo "$num). $task"
|
||||
count=$(( count + 1 ))
|
||||
done < "$TODOFILE"
|
||||
else
|
||||
echo "No tasks found"
|
||||
fi
|
||||
}
|
||||
|
||||
add_task() {
|
||||
echo "$1" >> "$TODOFILE"
|
||||
}
|
||||
|
||||
remove_task() {
|
||||
taskNum=$1
|
||||
totalLines=$(wc -l < "$TODOFILE" | tr -d ' ')
|
||||
if [ "$taskNum" -gt "$totalLines" ] 2>/dev/null; then
|
||||
echo "Error: task number $taskNum does not exist!"
|
||||
return 1
|
||||
fi
|
||||
tmpfile="./todo_tmp.txt"
|
||||
count=1
|
||||
IFS=$'\\n'
|
||||
while read -r task; do
|
||||
if [ "$count" -ne "$taskNum" ]; then
|
||||
echo "$task" >> "$tmpfile"
|
||||
fi
|
||||
count=$(( count + 1 ))
|
||||
done < "$TODOFILE"
|
||||
if [ -f "$tmpfile" ]; then
|
||||
mv "$tmpfile" "$TODOFILE"
|
||||
else
|
||||
> "$TODOFILE"
|
||||
fi
|
||||
echo "Sucessfully removed task number $taskNum"
|
||||
}
|
||||
|
||||
clear_tasks() {
|
||||
> "$TODOFILE"
|
||||
echo "Tasks cleared."
|
||||
}
|
||||
|
||||
if [ ! -f "$TODOFILE" ]; then
|
||||
touch "$TODOFILE"
|
||||
fi
|
||||
|
||||
while IFS= read -r line || [[ -n "$line" ]]; do
|
||||
cmd=$(echo "$line" | cut -d' ' -f1)
|
||||
arg=$(echo "$line" | cut -d' ' -f2-)
|
||||
case "$cmd" in
|
||||
add)
|
||||
add_task "$arg"
|
||||
list_tasks
|
||||
;;
|
||||
list)
|
||||
list_tasks
|
||||
;;
|
||||
remove)
|
||||
remove_task "$arg"
|
||||
list_tasks
|
||||
;;
|
||||
clear)
|
||||
clear_tasks
|
||||
;;
|
||||
esac
|
||||
done
|
||||
'''
|
||||
|
||||
[[test_cases]]
|
||||
description = "Add tasks then list"
|
||||
stdin = """add Buy groceries
|
||||
add Walk the dog
|
||||
list"""
|
||||
expected_stdout = """01). Buy groceries
|
||||
01). Buy groceries
|
||||
02). Walk the dog
|
||||
01). Buy groceries
|
||||
02). Walk the dog"""
|
||||
|
||||
[[test_cases]]
|
||||
description = "Add, remove, list"
|
||||
stdin = """add First task
|
||||
add Second task
|
||||
add Third task
|
||||
remove 2
|
||||
list"""
|
||||
expected_stdout = """01). First task
|
||||
01). First task
|
||||
02). Second task
|
||||
01). First task
|
||||
02). Second task
|
||||
03). Third task
|
||||
Sucessfully removed task number 2
|
||||
01). First task
|
||||
02). Third task
|
||||
01). First task
|
||||
02). Third task"""
|
||||
|
||||
[[test_cases]]
|
||||
description = "Empty list and clear"
|
||||
stdin = """list
|
||||
add Something
|
||||
clear
|
||||
list"""
|
||||
expected_stdout = """No tasks found
|
||||
01). Something
|
||||
Tasks cleared.
|
||||
No tasks found"""
|
||||
|
||||
[[test_cases]]
|
||||
description = "Works with pre-existing todo file"
|
||||
stdin = """list
|
||||
add Third item
|
||||
list"""
|
||||
setup_files = { "todo.txt" = "Existing item one\nExisting item two\n" }
|
||||
expected_stdout = """01). Existing item one
|
||||
02). Existing item two
|
||||
01). Existing item one
|
||||
02). Existing item two
|
||||
03). Third item
|
||||
01). Existing item one
|
||||
02). Existing item two
|
||||
03). Third item"""
|
||||
expected_files = { "todo.txt" = "Existing item one\nExisting item two\nThird item\n" }
|
||||
Reference in New Issue
Block a user