ed, 35 znaków
s/[a-zA-Z]*\([a-zA-Z]\)\|./\1/g
p
Q
Tak więc świat kończy się na ed. Ponieważ lubię być zbyt dosłowny, postanowiłem napisać, aby napisać rozwiązanie w ed - i najwyraźniej jest to faktycznie język programowania . Jest zaskakująco krótki, nawet biorąc pod uwagę wiele krótszych rozwiązań w tym wątku. Byłoby miło, gdybym mógł użyć czegoś innego [a-zA-Z], ale biorąc pod uwagę, że ed nie jest językiem programowania, jest wystarczająco dobry.
Po pierwsze, chciałbym powiedzieć, że analizuje to tylko ostatni wiersz w pliku. Można by parsować więcej, wystarczy wpisać ,na początku dwóch pierwszych wierszy (to określiło zakres „wszystko”, w przeciwieństwie do standardowego zakresu ostatniego wiersza), ale zwiększyłoby to rozmiar kodu do 37 znaków.
Teraz wyjaśnienia. Pierwszy wiersz robi dokładnie to samo, co robi Perl (z wyjątkiem bez obsługi znaków Unicode). Nie skopiowałem rozwiązania Perla, właśnie wynalazłem coś podobnego przez przypadek.
Drugi wiersz wypisuje ostatni wiersz, dzięki czemu można zobaczyć wynik. Trzecia linia zmusza do wyjścia - muszę to zrobić, w przeciwnym edrazie wydrukuje, ?aby przypomnieć, że nie zapisałeś pliku.
Teraz, jak to wykonać. To bardzo proste. Po prostu uruchom edz plikiem zawierającym przypadek testowy, podczas pipetowania mojego programu, w ten sposób.
ed -s testcase < program
-smilczy. Zapobiega to edwysyłaniu brzydkiego rozmiaru pliku na początku. W końcu używam go jako skryptu, a nie edytora, więc nie potrzebuję metadanych. Gdybym tego nie zrobił, ed pokazałby rozmiar pliku, którego inaczej nie mogłem zapobiec.