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ę 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 .
Chociaż mam szereg pomysłów w szeregu, przyszłe wyzwania nie są jeszcze ustalone. Jeśli masz jakieś sugestie, daj mi znać w odpowiednim poście z piaskownicą .
Hole 4: The Bertrand Paradox
Bertrand paradoksem jest ciekawy problem, który pokazuje, jak różne metody zbierania losowe akordy w kółko może dawać różne dystrybucje akordów, ich środkowych i ich długości.
W tym wyzwaniu należy wygenerować losowe akordy koła jednostkowego, stosując metodę „właściwą”, tj. Taką, która wytwarza rozkład akordów niezmienny przy skalowaniu i translacji. W powiązanym artykule w Wikipedii „Metoda 2” jest taką metodą.
Oto dokładne zasady:
- Powinieneś wziąć jedną dodatnią liczbę całkowitą,
N
która określa liczbę akordów, które powinny zostać zwrócone. Wyjściem powinna być listaN
akordów, każdy określony jako dwa punkty na okręgu jednostki, podany przez ich kąt biegunowy w radianach. - Twój kod powinien mieć możliwość zwrócenia co najmniej 2 20 różnych wartości dla każdego z dwóch kątów . Jeśli dostępne RNG ma mniejszy zasięg, musisz najpierw zbudować RNG o wystarczająco dużym zasięgu na górze wbudowanego lub musisz wdrożyć własny odpowiedni RNG . Ta strona może być do tego pomocna.
- Dystrybucja akordów musi być nie do odróżnienia od tej wyprodukowanej przez „Method 2” w powiązanym artykule Wikipedii. Jeśli wdrażasz inny algorytm do wybierania akordów, dołącz dowód poprawności. Niezależnie od tego, jaki algorytm wybierzesz do wdrożenia, teoretycznie musi on być w stanie wygenerować dowolny prawidłowy akord w okręgu jednostki (z wyjątkiem ograniczeń bazowego PRNG lub typów danych o ograniczonej precyzji).
- Wdrożenie powinno wykorzystywać i zwracać albo liczby zmiennoprzecinkowe (o szerokości co najmniej 32 bity), albo liczby o stałym punkcie (o szerokości co najmniej 24 bity), a wszystkie operacje arytmetyczne powinny być dokładne z dokładnością do co najmniej 16 ul .
Możesz napisać pełny program lub funkcję i pobrać dane wejściowe za pomocą STDIN (lub najbliższej alternatywy), argumentu wiersza poleceń lub argumentu funkcji i wygenerować wynik za pomocą STDOUT (lub najbliższej alternatywy), wartości zwracanej funkcji lub parametru funkcji (wyjściowej).
Dane wyjściowe mogą być w dowolnym dogodnym formacie listy lub ciągu, o ile poszczególne liczby są wyraźnie rozróżnialne, a ich całkowita liczba jest zawsze równa.
To jest kod golfowy, więc wygrywa najkrótsze przesłanie (w bajtach). I oczywiście najkrótsze zgłoszenie na użytkownika wejdzie również do ogólnej tabeli liderów serii.
Wyobrażanie sobie
Możesz użyć poniższego fragmentu, aby wyrenderować wygenerowane linie i sprawdzić ich rozkład. Wystarczy wkleić listę par kątów w polu tekstowym. Fragment powinien być w stanie obsłużyć prawie każdy format listy, o ile liczby są prostymi liczbami dziesiętnymi (bez notacji naukowej). Zalecam użycie co najmniej 1000 linii, aby uzyskać dobry pomysł na dystrybucję. Podałem również kilka przykładowych danych dla różnych metod przedstawionych w poniższym artykule.
Przykładowe dane wygenerowane za pomocą metody 1.
Przykładowe dane wygenerowane za pomocą metody 2.
Przykładowe dane wygenerowane za pomocą metody 3.
Tabela liderów
Pierwszy post z serii generuje tabelę wyników.
Aby upewnić się, ż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).