• Chatbot programming: An example

    From Stefan Ram@21:1/5 to the chatbot on Tue Apr 22 11:14:02 2025
    I wrote,

    I have a list of 4-tuples of str objects.
    These 4-tuples are called "rules".
    A rule is a full-word rule if its component 0
    starts with "<" and its component 2 ends with ">".
    The complexity of a rule is the length of the str object
    that results from concatenating the first three components
    of that rule.

    Write code to sort this is list as follows: First the
    full-word rules ordered by decreasing complexity, then
    all the other rules ordered by decreasing complexity.

    , the chatbot replied:

    |def is_full_word_rule(rule):
    | return rule[0].startswith("<") and rule[2].endswith(">")
    |
    |def rule_complexity(rule):
    | return len(rule[0] + rule[1] + rule[2])
    |
    |def custom_sort(rules):
    | # Separate full-word and other rules
    | full_word_rules = [r for r in rules if is_full_word_rule(r)]
    | other_rules = [r for r in rules if not is_full_word_rule(r)]
    |
    | # Sort each list by decreasing complexity
    | full_word_rules.sort(key=rule_complexity, reverse=True)
    | other_rules.sort(key=rule_complexity, reverse=True)
    |
    | # Concatenate the sorted lists
    | return full_word_rules + other_rules

    . The code of the chatbot is better than the code I would have
    written manually, because it's sweet how he represented my English
    concepts "full-word rule" and "complexity" by a def each, which I
    would not have the patience to write myself had I written the code
    manually! I'd just have inlined the expression in "custom_sort".
    I also might not have written such nice comments . . .

    Note how it helped to make the code and comments meaningful that
    I created a mini terminology in my prompt.

    (Disclaimer: Bryce Adelstein Lelbach [and maybe Frances Buontempo and
    many others too] already used ChatGPT in 2023 to generate code.)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)