Starając się osiągnąć następujące zmagał zdanie:Konwersja uniksowego `cal` wyjścia do kodu tabeli latex: jedno rozwiązanie liniowej?
Konwersja Unix cal
wyjście do kodu tabeli lateks, stosując krótkie i słodkie jedną wkładkę (lub kilka-liner).
Np cal -h 02 2012 | $magicline
powinna przynieść
Mo &Tu &We &Th &Fr \\
& & 1 & 2 & 3 \\
6 & 7 & 8 & 9 &10 \\
13 &14 &15 &16 &17 \\
20 &21 &22 &23 &24 \\
27 &28 & & & \\
jedynym rozsądnym rozwiązaniem mogłem wymyślić do tej pory było
cal -h | sed -r -e '1d' -e \
's/^(..)?(...)?(...)?(...)?(...)?(...)?(...)?$/\2\t\&\3\t\&\4\t\&\5\t\&\6\t\\\\/'
... i naprawdę starał. Zaletą jest to, że jest nieskomplikowany i łatwy do zrozumienia, co jest złym faktem, że jest "nieelastyczny" (nie radził sobie z 8-dniowym tygodniem) i trochę gadatliwy. Szukam alternatywnych rozwiązań, aby uczyć się od ;-)
EDIT: znaleźć inny, który wydaje się do zaakceptowania
cal -h | tail -n +2 |
perl -ne 'chomp;
$,="\t&";
$\="\t\\\\\n";
$line=$_;
print map {substr($line,$_*3,3)} (1..5)'
EDIT: Nice one:
cal -h | perl \
-F'(.{1,3})' -ane \
'BEGIN{$,="\t&";$\="\t\\\\\n"}
next if $.==1;
print @F[3,5,7,9,11]'
Kod golf ma własne forum SE. – tripleee
Która wersja 'cal', na której platformie akceptuje opcję' -h'? –
@ Jonathan: wydaje się, że tylko [wersja calowa Ubuntu] (http://manpages.ubuntu.com/manpages/gutsy/man1/cal.1.html) jest jedyną. – Borodin