Wyzwanie : napisz pojedynczy plik skryptu, foo.cmd
który można wywołać z waniliowego cmd.exe
monitu Windows (nie PowerShell, nie w trybie administratora), aby wykonać dowolny kod specyficzny dla Windows ...
> .\foo.cmd
Hello Windows!
... ale również powoływać niezmienione od typowego POSIX (Linux / OSX) shell prompt ( bash
, tcsh
lub zsh
), aby wykonać dowolny POSIX-specyficzny kod:
$ chmod a+x foo.cmd
$ ./foo.cmd
Hello POSIX!
... bez konieczności instalowania lub tworzenia zewnętrznych tłumaczy / narzędzi.
Wiem, że jest to możliwe, ale w przypadku cruft (tj. W systemie Windows jedna lub dwie linie śmieci / komunikat o błędzie są drukowane na stderr lub stdout przed „Hello Windows!”).
Kryterium wygranej jest minimalizacja (pierwszej) liczby linii cruft i (drugiej) liczby znaków cruft.
Cruft można zdefiniować jako dowolne wyjście konsoli (standardowe lub standardowe), które nie jest generowane przez (dowolny) kod ładunku. Puste linie są liczone w liczbie wierszy. Nowe linie nie są liczone w liczbie znaków. Wyniki Cruft należy zsumować na obu platformach. Nie bierzmy pod uwagę takich mechanizmów, cls
które wymiatają cruft, ale kosztem wyczyszczenia również poprzedniego wyjścia terminala. Jeśli system Windows powtórzy polecenia, ponieważ jeszcze tego nie zrobiłeś @echo off
, wykluczmy znaki, które spędza na drukowaniu bieżącego katalogu i monit.
Drugim kryterium jest prostota / elegancja zastosowanego rozwiązania foo.cmd
: jeśli „infrastruktura” jest zdefiniowana jako dowolny znak nieobjęty bezpośrednio dowolnym kodem ładunku, to najpierw należy zminimalizować liczbę wierszy zawierających znaki infrastruktury, a następnie całkowitą liczbę infrastruktury postacie.
Dodatkowe wyróżnienia, jeśli część POSIX będzie działać pomimo tego, że plik ma zakończenia linii CRLF! (Nie jestem pewien, czy ostatnia część jest nawet możliwa.)
Moje istniejące rozwiązanie, które opublikuję tutaj, gdy inni będą mieli okazję, wykorzystuje 6 linii kodu infrastruktury (52 znaki z wyłączeniem nowych linii). Tworzy 5 wierszy cruft, z których dwa są puste, z których wszystkie występują w systemie Windows (30 znaków z wyłączeniem nowych wierszy i wykluczenia bieżącego ciągu katalogu / zachęty, który pojawia się w dwóch z tych wierszy).