Zainspirowany niefortunnym sortowaniem liczb-cyfr-bez-użycia-macierzy , ale pomyślałem, że to lepszy kod do gry w golfa niż pytanie SO.
Biorąc pod uwagę dodatnią liczbę całkowitą, posortuj cyfry w tej liczbie całkowitej.
Najniższy wynik wygrywa!
- Zacznij od 0 punktów.
- Dodaj jeden punkt na znak.
- Dodaj 20 punktów za każdą używaną tablicę.
- Dodaj 10 punktów za każdy ciąg wieloznakowy w kodzie. (Z wyjątkiem początkowego wejścia, o ile jest ono konwertowane na liczbę całkowitą bez żadnych innych operacji na nim wykonanych).
- Dodaj 32 punkty, jeśli maksymalna liczba cyfr obsługiwanych przez Twój program jest ograniczona przez Twój program (w przeciwieństwie do maszyny).
- Odejmij 10 punktów, jeśli Twój kod może zmienić kierunek sortowania, podając inny argument (cokolwiek chcesz, ale na przykład 0 dla sortowania malejącego i 1 dla rosnąco).
Każdy język jest inny, ale chodzi o to, by unikać wszelkiego rodzaju hackerów z cyframi wielokrotnymi.
Przykład:
Wejście : 52146729
Wyjście : 97654221 lub 12245679
Uwagi:
- Użyj wbudowanych funkcji sortowania dostępnych w języku programowania, ale jeśli ta funkcja sortowania obejmuje łańcuchy lub tablice, weź karę!
- Możesz napisać rozwiązanie jako funkcję, która pobiera liczbę całkowitą bezpośrednio, lub jako program, który pobiera argument z argv, pliku lub strumienia i konwertuje go na liczbę całkowitą. Tak długo, jak natychmiast zamienisz go na liczbę całkowitą i odrzucisz oryginalne wejście char * bez wykonywania dalszych operacji na nim, nie będzie obowiązywać kara.
- Kary mają zastosowanie nie tylko do literałów łańcuchowych w tekście programu, ale także do dowolnej części funkcji programu, która prawdopodobnie wprowadza lub wyprowadza ciąg znaków lub jest iterowalna. Na przykład JavaScript
String.prototype.split
ma co najmniej jeden ciąg jako input (this
) i tablicę jako wynik, więc +30 za użycie tego. - Starałem się, aby te reguły kierowały zasadą projektowania algorytmów, a nie początkowymi / końcowymi operacjami wejścia / wyjścia (stąd uwaga 2). Nie sądzę, że kara powinna obowiązywać,
int(input())
nawet jeśliinput
podpis mówi, że zwraca ciąg znaków, o ile to wyrażenie jest początkowym punktem wejścia programu. Podobnie, jeśli końcowym wyjściem programu jestprint(x)
ix
musi być ciąg, kara nie dotyczy operacji odlewania ciągu z ostatniego rowu. To powiedziawszy, ja nigdy nie powiedziałem, że to musi być program, albo skąd I / O musiało pochodzić lub iść. Funkcja, która przyjmujeint
i zwraca anint
, służyłaby i nie cierpiałaby z powodu tych dwuznaczności.
" "
liczy się jako ciąg wieloznakowy ? Pojedyncza postać nie byłaby uważana za „multi” ...