PowerShell: 145 103
Zmiany w stosunku do oryginału
Usunięto błąd quelch dla komentarza pytającego .
Kod:
"$([array]::IndexOf(($s=(read-host)-split''|?{$_}),($x=$s|?{$_%2-eq0}|?{$_-gt0}|sort|select -f 1))),$x"
Przewodnik:
"... "Wszystko w cudzysłowie zostanie dołączone do wyniku.
$(... )Wszystko między nawiasami będzie traktowane jako polecenia, a wynik samego kodu zostanie dołączony zamiast samych poleceń.
[array]::IndexOf(... )Służy do uzyskania indeksu elementu z tablicą. Pierwszym parametrem jest przeszukiwany obiekt tablicowy. Drugi parametr to obiekt do znalezienia. To tylko wypisuje indeks pierwszego pasującego elementu. Próbowałem po prostu użyć IndexOfmetody bezpośrednio przeciwko $s(np .: $s.IndexOf($x), ale to się nie udaje z jakiegoś powodu, którego jeszcze nie odkryłem - twierdzi, że metoda nie istnieje na tym obiekcie.
(... )Wyrażenie w nawiasie będzie pierwszym parametrem dla IndexOf.
$s= $ s będzie zmienną do przechowywania danych wejściowych użytkownika.
(read-host)-split'' Pobiera dane wejściowe użytkownika i dzieli je na tablicę znaków
|?{$_}Odfiltrowuje dodatkowe puste elementy tablicy, które są generowane przez -split''.
,(... )Wyrażenie w nawiasie będzie drugim parametrem dla IndexOf.
$x= $ s będzie zmienną do przechowywania najniższej parzystej cyfry z danych wejściowych użytkownika.
$s|?{$_%2-eq0} Wyciąga parzyste liczby z $ s.
|?{$_-gt0} Unieważnia zero.
|sort Sortuje pozostałe obiekty, domyślnie kolejność jest rosnąca.
|select -f 1 Wybiera pierwszy obiekt, który do tej pory będzie najniższą cyfrą parzystą.
,$xPowyższy kod wyświetli indeks naszej najniższej parzystej cyfry. Dodaje to przecinek, a następnie wypisuje samą cyfrę.
Uwagi:
Być może jest to trochę zasada rozciągania # 4. Jeśli nie ma parzystej cyfry, wynik nie będzie zawierał drugiej liczby.
Spowoduje to również wygenerowanie niektórych błędów nieterminalnych, jeśli dane wejściowe zawierają elementy nienumeryczne. Skrypt nadal będzie działał i dawał prawidłowe dane wyjściowe, ale możesz chcieć ustawić $ErrorActionPreferencego 'SilentlyContinue'przed uruchomieniem.