dot

packages and services management
Log | Files | Refs | README

commit a46405bd3adce64dfd26347f74bd92a39bc40711
parent 592c0fa903c5ecf980adadc95dd41633a2ecab17
Author: Josuah Demangeon <mail@josuah.net>
Date:   Sun, 11 Mar 2018 17:59:29 +0100

sort() in pure awk!

Diffstat:
Magenda/epitech | 359++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mbin/agenda | 74++++++++++++++++++++++++++++++++++++++++++++++++++------------------------
Abin/random | 6++++++
Abin/sort.awk | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 308 insertions(+), 184 deletions(-)

diff --git a/agenda/epitech b/agenda/epitech @@ -16,33 +16,6 @@ D:Event D:Open House 6 D:Espace accueil : -B:1517558400 -E:1517590800 -S:G-EPI-004 >> Exhibition -C:Event -L: -D:Event -D:Exhibition -D:Extérieur -: -B:1517644800 -E:1517677200 -S:G-EPI-004 >> Exhibition -C:Event -L: -D:Event -D:Exhibition -D:Extérieur -: -B:1518111000 -E:1518118200 -S:B-INN-000 >> Atelier : Game Maker #1 -C:Workshop -L: -D:Workshop -D:Atelier : Game Maker #1 -D:Hub -: B:1518699600 E:1518714000 S:G-EPI-004 >> Fairs @@ -70,15 +43,6 @@ D:Conference D:S.O.S Handicap 35 D:Seigneur des Anneaux : -B:1517936400 -E:1517940000 -S:B-INN-000 >> #Embarqué FOCUS -C:Workshop -L: -D:Workshop -D:#Embarqué FOCUS -D:Réunion -: B:1519146000 E:1519149600 S:B-INN-000 >> #Embarqué FOCUS @@ -106,24 +70,6 @@ D:Workshop D:#Embarqué FOCUS D:Réunion : -B:1518008400 -E:1518019200 -S:G-EPI-004 >> Discovery Days -C:Event -L: -D:Event -D:Discovery Days -D:Seigneur des Anneaux -: -B:1517644800 -E:1517659200 -S:G-EPI-004 >> Fairs -C:Event -L: -D:Event -D:Fairs -D:Extérieur -: B:1520341200 E:1520344800 S:B-CUI-070 >> IT MCA @@ -133,15 +79,6 @@ D:IT-MCA D:IT MCA D:Seigneur des Anneaux : -B:1517576400 -E:1517580000 -S:G-GPR-000 >> : discussion autour de l'addiction aux jeux vidéos -C:Workshop -L: -D:Workshop -D:: discussion autour de l'addiction aux jeux vidéos -D:Réunion -: B:1518181200 E:1518184800 S:G-GPR-000 >> : discussion autour de l'addiction aux jeux vidéos @@ -151,15 +88,6 @@ D:Workshop D:: discussion autour de l'addiction aux jeux vidéos D:Réunion : -B:1517911200 -E:1517914800 -S:B-ANG-058 >> Guidance cycle 4 -C:Follow-ups -L: -D:Follow-ups -D:Guidance cycle 4 -D:Réunion -: B:1518516000 E:1518519600 S:B-ANG-058 >> Guidance cycle 4 @@ -223,15 +151,6 @@ D:Event D:Fairs D:Extérieur : -B:1517990400 -E:1518001200 -S:G-EPI-004 >> Discovery Days -C:Event -L: -D:Event -D:Discovery Days -D:Seigneur des Anneaux -: B:1518613200 E:1518624000 S:G-EPI-004 >> Discovery Days @@ -241,15 +160,6 @@ D:Event D:Discovery Days D:Seigneur des Anneaux : -B:1518080400 -E:1518085800 -S:B-PSU-400 >> Follow-up - Malloc -C:Follow Up -L: -D:Follow Up -D:Follow-up - Malloc -D:Seigneur des Anneaux -: B:1518627600 E:1518631200 S:B-INN-001 >> Le photographe Karim Vanderstylen cherche une aide pour mettre à jour son site web. @@ -259,15 +169,6 @@ D:Conference D:Le photographe Karim Vanderstylen cherche une aide pour mettre à jour son site web. D:Hub : -B:1518022800 -E:1518026400 -S:B-INN-001 >> Tek Advice : Intervention de Nicolas MAGERE (ex Epitech), développeur à Capgemini -C:Conference -L: -D:Conference -D:Tek Advice : Intervention de Nicolas MAGERE (ex Epitech), développeur à Capgemini -D:Hub -: B:1519822800 E:1519833600 S:G-EPI-004 >> Discovery Days @@ -327,15 +228,6 @@ D:Event D:FORUM ENTREPRISES D:Seigneur des Anneaux : -B:1517839200 -E:1517842800 -S:B-INN-001 >> Présentation de Maia Mater : camp d’entraînement pour primo-entrepreneurs -C:Conference -L: -D:Conference -D:Présentation de Maia Mater : camp d’entraînement pour primo-entrepreneurs -D:Hub -: B:1518548400 E:1518553800 S:B-INN-000 >> WEBWORLD #1 : Web, HTTP, HTML/CSS @@ -363,8 +255,8 @@ D:Workshop D:WEBWORLD #4 : PHP & Smarty D:Hub : -B:1520362800 -E:1520368200 +B:1520359200 +E:1520364600 S:B-INN-000 >> WEBWORLD #5 : Adminsys : First LEARN, Second HACK C:Workshop L: @@ -372,8 +264,8 @@ D:Workshop D:WEBWORLD #5 : Adminsys : First LEARN, Second HACK D:Hub : -B:1520535600 -E:1520541000 +B:1520532000 +E:1520537400 S:B-INN-000 >> WEBWORLD #6 : Node.js is the future C:Workshop L: @@ -381,8 +273,8 @@ D:Workshop D:WEBWORLD #6 : Node.js is the future D:Hub : -B:1520967600 -E:1520973000 +B:1520964000 +E:1520969400 S:B-INN-000 >> WEBWORLD #7 : Basic site with Node.js C:Workshop L: @@ -390,8 +282,8 @@ D:Workshop D:WEBWORLD #7 : Basic site with Node.js D:Hub : -B:1521140400 -E:1521145800 +B:1521136800 +E:1521142200 S:B-INN-000 >> WEBWORLD #8 : API WORLD & Welcome to chatbots) C:Workshop L: @@ -399,8 +291,8 @@ D:Workshop D:WEBWORLD #8 : API WORLD & Welcome to chatbots) D:Hub : -B:1521572400 -E:1521577800 +B:1521568800 +E:1521574200 S:B-INN-000 >> WEBWORLD #9 : Back to PHP. Laravel and Beautiful Code C:Workshop L: @@ -408,8 +300,8 @@ D:Workshop D:WEBWORLD #9 : Back to PHP. Laravel and Beautiful Code D:Hub : -B:1521745200 -E:1521750600 +B:1521741600 +E:1521747000 S:B-INN-000 >> WEBWORLD #10 : : Increase website loading) C:Workshop L: @@ -426,24 +318,6 @@ D:Event D:Discovery Days D:Seigneur des Anneaux : -B:1517848200 -E:1517851800 -S:B-INN-001 >> Les crypto-monnaies (Paskal Arzel) -C:Conference -L: -D:Conference -D:Les crypto-monnaies (Paskal Arzel) -D:Hub -: -B:1517851800 -E:1517855400 -S:B-INN-001 >> Finance appliquée aux crypto-monnaies (Paskal Arzel) -C:Conference -L: -D:Conference -D:Finance appliquée aux crypto-monnaies (Paskal Arzel) -D:Hub -: B:1518768000 E:1518778800 S:B-PCP-000 >> Develop your self-confidence/ Self-Esteem @@ -453,15 +327,6 @@ D:Workshop D:Develop your self-confidence/ Self-Esteem D:Réunion : -B:1518015600 -E:1518019200 -S:B-INN-000 >> FOCUS : Prototypage de site avec Adobe Xd (Lucas Portet) -C:Workshop -L: -D:Workshop -D:FOCUS : Prototypage de site avec Adobe Xd (Lucas Portet) -D:Hub -: B:1518185700 E:1518192900 S:G-GPR-000 >> Coaching Session. individuel @@ -534,15 +399,6 @@ D:TD D:Un diaporama efficace (Partie 1) D:Video Games & Star Wars : -B:1518012000 -E:1518013800 -S:B-ADM-400 >> Présentation nouveau BDE -C:Event -L: -D:Event -D:Présentation nouveau BDE -D:Seigneur des Anneaux -: B:1519389000 E:1519403400 S:G-EPI-004 >> Fairs @@ -780,6 +636,7 @@ C:Kick-off L: D:Kick-off D:Kick-off - LemIPC +D:Silence : B:1520859600 E:1520870400 @@ -788,6 +645,7 @@ C:Bootstrap L: D:Bootstrap D:Bootstrap - LemIPC +D:Silence : B:1520946000 E:1520949600 @@ -796,6 +654,7 @@ C:Follow Up L: D:Follow Up D:Follow-up - MiniLibC +D:Seigneur des Anneaux : B:1519650000 E:1519660800 @@ -824,8 +683,8 @@ D:TEPitech D:TEPitech D:Seigneur des Anneaux : -B:1520256600 -E:1520258400 +B:1520258400 +E:1520260200 S:B-CPP-400 >> Kick-off - Arcade C:Kick-off L: @@ -858,6 +717,7 @@ C:Corrections L: D:Corrections D:Evaluation - Diaporama +D:Silence : B:1519896600 E:1519902000 @@ -951,11 +811,11 @@ D:Espace accueil : B:1522256400 E:1522260000 -S:B-INN-001 >> Mr LEFVBRE - Aide à la mise en place d'un Market Place lié à l'automobile. +S:B-INN-001 >> Mr LEFVBRE - YamamAUTO.com - Aide à la mise en place d'un Market Place lié à l'automobile. C:Conference L: D:Conference -D:Mr LEFVBRE - Aide à la mise en place d'un Market Place lié à l'automobile. +D:Mr LEFVBRE - YamamAUTO.com - Aide à la mise en place d'un Market Place lié à l'automobile. D:Hub : B:1519977600 @@ -1075,3 +935,182 @@ D:Follow-ups D:Follow up projet maker D:Hub : +B:1521018000 +E:1521025200 +S:B-MET-400 >> Review. Philosophe +C:Review +L: +D:Review +D:Review. Philosophe +D:Seigneur des Anneaux +: +B:1522177200 +E:1522188000 +S:B-INN-000 >> Battle Dev Saison 11 +C:Event +L: +D:Event +D:Battle Dev Saison 11 +D:Star Wars +: +B:1521529200 +E:1521556200 +S:G-EPI-004 >> Les matinales Rennes Atalante +C:Event +L: +D:Event +D:Les matinales Rennes Atalante +: +B:1520586000 +E:1520589600 +S:B-INN-001 >> Créer un chatbot Google Assistant en 10 min c'est possible ! +C:Conference +L: +D:Conference +D:Créer un chatbot Google Assistant en 10 min c'est possible ! +D:Hub +: +B:1520600400 +E:1520604000 +S:B-INN-001 >> Quand Internet sera gouvernée par les chats de Shrödinger ? +C:Conference +L: +D:Conference +D:Quand Internet sera gouvernée par les chats de Shrödinger ? +D:Hub +: +B:1520607600 +E:1520611200 +S:B-INN-001 >> How to escape education's death valley ? +C:Conference +L: +D:Conference +D:How to escape education's death valley ? +D:Hub +: +B:1520614800 +E:1520618400 +S:B-INN-001 >> Les vulnérabilités de Windows et de NTFS +C:Conference +L: +D:Conference +D:Les vulnérabilités de Windows et de NTFS +D:Hub +: +B:1520676000 +E:1520679600 +S:B-INN-001 >> Comment faire pour avoir un site "invincible" ? +C:Conference +L: +D:Conference +D:Comment faire pour avoir un site "invincible" ? +D:Hub +: +B:1520686800 +E:1520690400 +S:B-INN-001 >> Npm, Yarn Et si la vérité était ailleurs ? +C:Conference +L: +D:Conference +D:Npm, Yarn Et si la vérité était ailleurs ? +D:Hub +: +B:1520701200 +E:1520704800 +S:B-INN-001 >> Inside the mind of a master procrastinator +C:Conference +L: +D:Conference +D:Inside the mind of a master procrastinator +D:Hub +: +B:1520708400 +E:1520712000 +S:B-INN-001 >> Faites chauffer les neurones de votre smartphone avec du deep learning +C:Conference +L: +D:Conference +D:Faites chauffer les neurones de votre smartphone avec du deep learning +D:Hub +: +B:1520604000 +E:1520607600 +S:B-INN-000 >> DNS : l'ultime configuration pour son nom de domaine ? +C:Workshop +L: +D:Workshop +D:DNS : l'ultime configuration pour son nom de domaine ? +D:Hub +: +B:1520611200 +E:1520614800 +S:B-INN-000 >> Clés SSH : Tout ce qu'il faut savoir +C:Workshop +L: +D:Workshop +D:Clés SSH : Tout ce qu'il faut savoir +D:Hub +: +B:1520618400 +E:1520622000 +S:B-INN-000 >> Créer un Bot Discord pour perturber Mee6 (Node.js) +C:Workshop +L: +D:Workshop +D:Créer un Bot Discord pour perturber Mee6 (Node.js) +D:Hub +: +B:1520690400 +E:1520694000 +S:B-INN-000 >> Initiation à la réalité virtuelle +C:Workshop +L: +D:Workshop +D:Initiation à la réalité virtuelle +D:Hub +: +B:1520586000 +E:1520622000 +S:B-INN-000 >> Hackaton: CTF Epitech Rennes +C:Event +L: +D:Event +D:Hackaton: CTF Epitech Rennes +D:Star Wars +: +B:1520672400 +E:1520708400 +S:B-INN-000 >> Hackaton: CTF Epitech Rennes +C:Event +L: +D:Event +D:Hackaton: CTF Epitech Rennes +D:Star Wars +: +B:1520668800 +E:1520719200 +S:B-INN-000 >> Hackaton: Galway Game Jam +C:Event +L: +D:Event +D:Hackaton: Galway Game Jam +D:Star Wars +: +B:1520755200 +E:1520805600 +S:B-INN-000 >> Hackaton: Galway Game Jam +C:Event +L: +D:Event +D:Hackaton: Galway Game Jam +D:Star Wars +: +B:1520672400 +E:1520676000 +S:B-INN-000 >> Sous domaines illimités automatiques avec Apache. +C:Workshop +L: +D:Workshop +D:Sous domaines illimités automatiques avec Apache. +D:Hub +: diff --git a/bin/agenda b/bin/agenda @@ -4,7 +4,7 @@ AGENDA="${AGENDA:-$HOME/.config/agenda}" -date=' +awk=' function leap(yrs) { @@ -41,12 +41,9 @@ function to_date(fmt, sec) for (min = 0; sec >= 60; min++) sec -= 60; return sprintf(fmt, yrs, mth, day, hrs, min, sec); -}' - -import="$date"' -#OFF [+-]HH +} -function ical_date(str, off) { +function date_ical(str, off) { yrs = substr(str, 1, 4); mth = substr(str, 5, 2); day = substr(str, 7, 2); @@ -55,6 +52,44 @@ function ical_date(str, off) { return to_sec(yrs, mth, day, hrs, min, 0) - off * 3600; } +function date_iso8601(date) +{ + yrs = substr(date, 1, 4); + mth = substr(date, 6, 2); + day = substr(date, 9, 2); + hrs = substr(date, 12, 2); + min = substr(date, 15, 2); + return to_sec(yrs, mth, day, hrs, min, 0) - OFF * 3600; +} + +function swap(array, a, b) +{ + tmp = array[a]; + array[a] = array[b]; + array[b] = tmp; +} + +function sort(array, beg, end) +{ + if (end - beg < 2) + return; + a = beg; + b = end; + while (a < b) { + while (a < b && array[a] < array[beg]) + a++; + while (a < b && array[a] > array[beg]) + b--; + swap(array, a, b); + } + swap(array, beg, a); + sort(array, beg, a); + sort(array, a, end); +}' + +import="$awk"' +#OFF [+-]HH + BEGIN { FS = "[:;]"; } @@ -79,7 +114,7 @@ BEGIN { gsub("\\\\", "", event["DESCRIPTION"]); gsub("\\\\", "", event["SUMMARY"]); printf("B:%d\nE:%d\nS:%s\nC:%s\nL:%s\nD:%s\n:\n", - ical_date(event["DTSTART"], OFF), ical_date(event["DTEND"], OFF), + date_ical(event["DTSTART"], OFF), date_ical(event["DTEND"], OFF), event["SUMMARY"], event["CATEGORIES"], event["LOCATION"], event["DESCRIPTION"]); }' @@ -88,13 +123,13 @@ sort=' #SORT [BESCL] BEGIN { - FS=":" sort = "sort | cut -f " length(SORT) + 2 "-"; } /^B:/ { nb = 1; - line["B"] = line["E"] = line["S"] = line["C"] = line["L"] = line["D"] = ""; + line["B"] = line["E"] = line["S"] = ""; + line["C"] = line["L"] = line["D"] = ""; } /^[BESCLD]:/ { @@ -112,7 +147,7 @@ BEGIN { printf("%s%s\n", prefix, line[i]) | sort; }' -view="$date"' +view="$awk"' #OFF [+-]HH BEGIN { @@ -154,26 +189,17 @@ BEGIN { last_day = b_day; }' -add="$date"' +add="$awk"' #DT1 YYYY/MM/DD-HH:MM #DT2 YYYY/MM/DD-HH:MM #OFF [+-]HH -function parse(date) -{ - yrs = substr(date, 1, 4); - mth = substr(date, 6, 2); - day = substr(date, 9, 2); - hrs = substr(date, 12, 2); - min = substr(date, 15, 2); - return to_sec(yrs, mth, day, hrs, min, 0) - OFF * 3600; -} - BEGIN { - printf("B:%d\nE:%d\nS:\nC:\nL:\nD:\n:\n", parse(DT1), parse(DT2)); + printf("B:%d\nE:%d\nS:\nC:\nL:\nD:\n:\n", + date_iso8601(DT1), date_iso8601(DT2)); }' -list="$date"' +list="$awk"' sub("^B:", "") { minimum = ($0 < minimum || minimum == 0) ? $0 : minimum; @@ -183,7 +209,7 @@ END { name = FILENAME; sub(".*/", "", name); printf("%s - %-10s %s\n", - to_date("%d/%02d/%02d", minimum + 3600), name, FILENAME); + to_date("%d/%02d/%02d", minimum + 3600), name, FILENAME); }' mkdir -p "$AGENDA" diff --git a/bin/random b/bin/random @@ -0,0 +1,6 @@ +#!/bin/sh -e + +dd status=none if=/dev/urandom bs=1 | + od -dA n | + tr -cd 0-9 | + fold -w "$1" diff --git a/bin/sort.awk b/bin/sort.awk @@ -0,0 +1,53 @@ +#!/usr/bin/awk -f + +function swap(array, a, b) +{ + tmp = array[a]; + array[a] = array[b]; + array[b] = tmp; +} + +function debug(array, beg, end) +{ + printf("[ "); + for (i = beg; i <= end - 1; i++) + printf("%s, ", array[i]); + printf("%s ]\n", array[i]); +} + +function sort(array, beg, end) +{ + if (beg >= end) # end recursion + return; + + debug(array, beg, end); + + a = beg + 1; # #1 is the pivot + b = end; + while (a < b) { + while (a < b && array[a] <= array[beg]) # beg: skip lesser + a++; + while (a < b && array[b] > array[beg]) # end: skip greater + b--; + swap(array, a, b); # found 2 misplaced + } + if (array[beg] > array[a]) + swap(array, beg, a); # put the pivot back + + debug(array, beg, end); + print(""); + + sort(array, beg, a - 1); # sort lower half + sort(array, a, end); # sort higher half +} + +{ + array[NR] = $0 +} + +END { + sort(array, 1, NR); + for (i = 1; i <= NR; i++) + printf(" %s", array[i]); + print(""); +}