La seconde partie m'a fait pensé à split pour les groupes de trois... Mais bon, ça fait pléthore de fichiers à gérer ensuite, et puis l'adaptation de la solution précédente n'est pas vraiment difficile (le truc en sus est d'arriver à compter ...modulo trois.)
#!/bin/sh# 1ドル: input filefor c in 'cat''fold''grep''sort''test'doif ! command -v "$c" >/dev/null
thenecho"Error: command '$c' not found" >&2exit3fidoneiftest -z "1ドル"thenecho"Please call me with an input file..." >&2exit1fiif grep -Eqsv '^[A-Za-z]+$'"1ドル"thenecho"Found invalid line, check the file!" >&2exit2fi_if="1ドル"iftest$(($( cat "$_if"| wc -l )%3)) -ne 0thenecho"Number of lines not multiple of 3" >&2exit2fi_fc=$( mktemp )# becomes first rucksack_sc=$( mktemp )# becomes second rucksack_tc=$( mktemp )# third rucksack_si=''# shared items_gc=0# group counter_bl=''# badges listwhileIFS=read -r line <&3do_gc=$(( _gc +1))case$(( _gc %3)) in
1)# 1st member of groupprintf'%s'"$line"| fold -w 1| sort -uo "$_fc";;2)# 2nd member of groupprintf'%s'"$line"| fold -w 1| sort -uo "$_sc"_si="$( comm -12 "$_fc""$_sc")";;0)# 3rd member of groupprintf'%s'"$line"| fold -w 1| sort -uo "$_tc"_bl="$_bl$(printf'%s'"$_si"| comm -12 "$_tc" - )";;
*)echo"?!?$_gc!?!" >&2;;esacdone3<"$_if"
rm "$_fc""$_sc""$_tc"#echo "$_bl" | cat -vet_ps=0# priority sum_ac=0# ASCII codefor character in $(echo"$_bl")do_ac=$(printf'%d'"'$character")case"$character" in
[a-z])# a is 97 but should translate to 1_ps=$(( _ps + _ac -96));;[A-Z])# A is 65 but should translate to 27_ps=$(( _ps + _ac -38));;
*)echo"$character=$_ac=??" >&2;;esacdoneecho"$_ps"
Le vice avait été poussé jusqu'à éviter grep -o car cette option n'est pas POSIX (bien que je la trouve un peu partout ceci dit.) Ici, je propose une autre approche que j'avais mentionnée dans l'un de mes journaux. En terme de perfs, faut voir.
[^] # Re: un bout de coquillage
Posté par Gil Cot ✔ (site web personnel, Mastodon) . En réponse au message Avent du Code, jour 3. Évalué à 2. Dernière modification le 12 décembre 2022 à 01:47.
La seconde partie m'a fait pensé à
splitpour les groupes de trois... Mais bon, ça fait pléthore de fichiers à gérer ensuite, et puis l'adaptation de la solution précédente n'est pas vraiment difficile (le truc en sus est d'arriver à compter ...modulo trois.)Le vice avait été poussé jusqu'à éviter
grep -ocar cette option n'est pas POSIX (bien que je la trouve un peu partout ceci dit.) Ici, je propose une autre approche que j'avais mentionnée dans l'un de mes journaux. En terme de perfs, faut voir.Il y a certainement des optimisations possibles, mais comme on le sait faut pas s'y lancer prématurément.
"It is seldom that liberty of any kind is lost all at once." ― David Hume