Natknąłem się na to pytanie na SO i pomyślałem, że będzie to fajne wyzwanie golfowe. Oto on:
Wyzwanie:
Napisz program, który czyta sekwencję ciągów znaków, po jednym w wierszu, i wyświetla listę wszystkich pozycji, w których każdy ciąg ma ten sam znak.
Wejście i wyjście:
Dane wejściowe składają się z co najmniej jednego wiersza drukowalnych znaków ASCII, które nie są spacjami, a po każdym następuje nowy wiersz. Państwo może założyć, że wszystkie linie wejściowe mają taką samą długość. Nowa linia nie powinna być uważana za część danych wejściowych (tzn. Nie należy wyprowadzać jej jako pasującego znaku).
Przykładowe dane wejściowe (bezwstydnie skradzione z pytania SO):
abcdefg
avcddeg
acbdeeg
Po odczytaniu danych wejściowych program powinien wydrukować pozycje każdej pasującej kolumny i zawarte w nich znaki. (Twój program może, ale nie musi, przestać czytać dalsze dane wejściowe, jeśli może wcześnie ustalić, że nie ma pasujących kolumn). Dowolny rozsądny format wyjściowy jest dozwolony; w szczególności możesz użyć indeksowania opartego na 0 lub na podstawie 1 dla pozycji.
Przykładowe dane wyjściowe dla powyższych danych wejściowych (przy użyciu indeksowania opartego na 0):
0: a
3: d
6: g
Punktacja:
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź. W przypadku remisu ułamkowe znaki rozdzielające remisy mogą zostać przyznane za dodatkowe funkcje:
- ½½ znaki do prawidłowej obsługi wierszy wejściowych o nierównej długości. (Dane wyjściowe nie powinny zawierać pozycji poza końcem najkrótszej linii wejściowej.)
- ¼ znaków do poprawnej obsługi danych wejściowych składających się z dowolnych znaków Unicode zakodowanych w UTF-8.
Aby uzyskać inspirację, możesz znaleźć nierozwiązane rozwiązania w pytaniu SO (patrz wyżej).
Wyjaśnienia:
Po prostu łączenie pozycji i znaków, jak w
0a3d6g, nie liczy się jako „rozsądny wynik”. Powinieneś zapewnić jakiś separator (na przykład spację) między każdym elementem wyniku, aby można go było jednoznacznie przeanalizować.Dane wejściowe będą dostarczane w standardowym strumieniu wejściowym (
stdin) lub przy użyciu dowolnego mechanizmu wprowadzania plików tekstowych, który jest najbardziej naturalny dla wybranego języka. (Jeśli wybrany język nie ma naturalnego mechanizmu wprowadzania plików, rób wszystko, co wydaje się najbliższe duchowi.)Dane wejściowe kończą się, gdy nie ma już danych do odczytu (tj. Gdy wystąpi warunek końca pliku). Jeśli chcesz, to może wymagać, że wejście zostać rozwiązana przez pustą linię (które następnie nie należy liczyć jako część wkładu, oczywiście). Jeśli to zrobisz, proszę o tym wspomnieć w swojej odpowiedzi, aby inni mogli podać poprawne dane wejściowe do testów.
Każda linia wprowadzania, w tym ostatnia, kończy się znakiem nowej linii. Twoja odpowiedź nie może zgłaszać tego nowego wiersza jako pasującej kolumny. (W porządku, jeśli twoje rozwiązanie obsługuje również dane wejściowe, w których ostatni wiersz nie kończy się na nowej linii, ale nie jest to wymagane).