O serii
Po pierwsze, możesz potraktować to jak każde inne wyzwanie związane z golfem i odpowiedzieć na nie, nie martwiąc się w ogóle serią. Istnieje jednak tabela wyników dla wszystkich wyzwań. Możesz znaleźć tabelę liderów wraz z kilkoma więcej informacji o serii w pierwszym poście .
Dziura 8: Przetasuj nieskończoną listę
Powinieneś napisać funkcję lub program, który pobiera nieskończoną listę jako dane wejściowe i zwraca losową wersję tej listy.
O nieskończonych wejściach / wyjściach
Istnieje kilka sposobów na uzyskanie danych wejściowych i uzyskanie wyników dla tego wyzwania:
- Możesz wziąć listę dodatnich liczb całkowitych lub ich ciąg reprezentujący albo ciąg znaków lub listę drukowalnych znaków ASCII (od 0x20 do 0x7E włącznie). Format wyjściowy musi być zgodny z formatem wejściowym. Odtąd będę odtąd określał dane jako „listę”, niezależnie od wybranej opcji.
- Możesz odczytać listę z nieskończonego standardowego strumienia wejściowego i zapisywać dane wyjściowe w sposób ciągły do nieskończonego standardowego strumienia wyjściowego. Rozwiązanie nie powinno zależeć od żadnej konkretnej wartości lub sekwencji wartości, aby zapewnić, że strumień wyjściowy jest regularnie zapisywany i opróżniany (np. Nie można po prostu zapisywać danych wyjściowych, gdy jest
5
na liście wejściowej). Oczywiście, jeśli czytasz ciąg reprezentujący listę, możesz poczekać, aż pojawi się separator listy. - W językach, które je obsługują, możesz napisać funkcję, która pobiera i zwraca leniwą nieskończoną listę lub ciąg znaków.
- W językach, które je obsługują, możesz zaimplementować nieskończony generator, który pobiera inny generator jako dane wejściowe.
- Alternatywnie możesz napisać funkcję, która nie przyjmuje argumentów i zwraca jedną wartość wyjściową za każdym razem, gdy jest wywoływana. W takim przypadku można założyć, że zdefiniowano funkcję, która nie przyjmuje żadnych argumentów i zwraca kolejną wartość wejściową za każdym razem, gdy jest wywoływana. Możesz dowolnie wybrać nazwę tej funkcji.
Możesz założyć, że twój program działa wiecznie i że nieskończona pamięć jest dostępna. (Można to rozwiązać za pomocą skończonej ilości pamięci, ale oznacza to, że możesz wyciec pamięć.)
O losowości
Dla każdej wartości v, która jest odczytywana w pozycji i nieskończonego sygnału wejściowego, musi istnieć dodatnie prawdopodobieństwo, że znajdzie się ona w dowolnej pozycji od i-9 do i + 9 nieskończonej mocy wyjściowej (chyba że ta pozycja byłaby ujemna ). Prawdopodobieństwa te nie muszą być takie same dla różnych pozycji wyjściowych ani nawet dla różnych pozycji wejściowych. W porządku, jeśli twoje rozwiązanie może również przetasować wartości do innej pozycji, która jest dalej.
Dlatego nie jest konieczne, aby twoje rozwiązanie mogło przetasować pierwszą wartość bardzo daleko w dół listy, lub aby mogło przetasować bardzo późną wartość do pierwszej pozycji, chociaż jest w porządku, jeśli tak, dopóki wszystkie pozycje 9 kroków od dane wejściowe są możliwe.
Na przykład, jeśli wziąłeś następujący ciąg jako dane wejściowe, ___
wskazuje wszystkie pozycje, które X
muszą być w stanie znaleźć się w wyniku:
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
Jeśli w Twoim języku nie ma wbudowanego generatora liczb losowych lub nie chcesz go używać, możesz wziąć dodatkową wartość początkową jako dane wejściowe i zaimplementować własny odpowiedni RNG za pomocą tego parametru. Ta strona może być do tego pomocna.
Bez względu na faktyczną dystrybucję, z której korzysta twoje rozwiązanie, prawie na pewno wygeneruje następną wartość po skończonym (ale arbitralnym) czasie.
Dołącz krótkie wyjaśnienie, w jaki sposób Twoje wdrożenie spełnia te wymagania.
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Tabela liderów
Pierwszy post z serii generuje tabelę wyników.
Aby mieć pewność, że Twoje odpowiedzi się pojawią, zacznij każdą odpowiedź od nagłówka, używając następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(Język nie jest obecnie wyświetlany, ale fragment go wymaga i analizuje, a w przyszłości mogę dodać tabelę wyników według języków).