Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą N. Wydrukuj listę wszystkich wyraźnych liczb dziesiętnych, które można zapisać dokładnie w N znakach, używając cyfr ( 0123456789
), miejsc dziesiętnych ( .
) i znaków ujemnych ( -
).
Na przykład, niektóre numery, które znajdować się na liście wyjściowej n = 4 to 1337
, 3.14
, .999
, -789
, -2.7
, i -.09
.
Liczby należy zapisywać w normalny sposób, ale w możliwie najkrótszej formie . To znaczy:
Kropkę dziesiętną należy podać tylko wtedy, gdy liczba nie jest liczbą całkowitą.
- np.
45.0
i45.
powinny być napisane jako proste45
-45.00
należy zapisać jako-45
- np.
Po lewej stronie przecinka dziesiętnego nie powinno być żadnych zer wiodących.
03
i003
powinny być napisane jako3
, ale30
i300
są w porządku, jakimi są0.3
i00.3
powinny być napisane jako sprawiedliwe.3
-03
należy zapisać jako-3
-0.3
należy zapisać jako-.3
Po prawej stronie przecinka dziesiętnego nie powinno być żadnych zer końcowych
.50
i.500
powinny być zapisane jako.5
900.090
należy zapisać jako900.09
Wyjątkiem od dwóch ostatnich reguł jest samo zero, które zawsze należy pisać jako zwykłe
0
.Znaków dodatnich (
+
) nie należy używać, ponieważ niepotrzebnie wydłużają liczbę.
Zauważ również, że znak ujemny ( -
) nie powinien być używany jako znak odejmowania. Powinien pojawiać się tylko jako pierwszy znak liczb mniejszych od zera.
Formatowanie
Kolejność wyjściowej listy liczb nie ma znaczenia. Może to być rosnąco, malejąco lub całkowicie pomieszane. Ważne jest tylko to, że obecne są wszystkie różne liczby, które można zapisać w N znakach.
Listę można sformatować w rozsądny sposób, używając spacji, znaków nowej linii, przecinków lub czegoś innego między liczbami, o ile są spójne. Wiodące i końcowe nawiasy kwadratowe (lub podobne) są w porządku, ale rzeczy takie jak cudzysłowy wokół liczb nie są. (tzn. nie mieszaj widocznie ciągów znaków i liczb całkowitych / zmiennoprzecinkowych na wyjściu.)
Na przykład, gdy N = 1, niektóre prawidłowe dane wyjściowe to:
0 1 2 3 4 5 6 7 8 9
[1, 2, 3, 4, 5, 6, 7, 9, 0]
ans = { 5 8 9 1 3 2 0 3 4 7 6 }
Ale byłoby to nieprawidłowe:
[0, 1, 2, 3, 4, "5", "6", "7", "8", "9"]
Przykłady
N = 1 -> 0 1 2 3 4 5 6 7 8 9
N = 2 -> -9 -8 -7 -6 -5 -4 -3 -2 -1 .1 .2 .3 .4 .5 .6 .7 .8 .9 10 11 12 ... 97 98 99
N = 3 -> -99 -98 ... -11 -10 -.9 -.8 ... -.2 -.1 .01 .02 ... .98 .99 1.1 1.2 ... 1.9 2.1 2.2 ... 2.9 3.1 ...... 9.9 100 101 ... 998 999
Listy są w porządku rosnącym, w niektórych miejscach są elipsowane dla wygody czytania.
Punktacja
Najkrótszy kod w bajtach wygrywa. W przypadku remisu wygrywa wyższa głosowana odpowiedź
-0
być prawidłowe wyjście?Also note that the negative sign (-) should not be used as a subtraction sign. It should only appear as the first character of numbers less than zero.
0
”.Odpowiedzi:
Pyth,
4745 bajtówDziękujemy FryAmTheEggman za zauważenie, że kolejność nie ma znaczenia.
Wypróbuj online.
Środowisko wykonawcze jest okropne, w zasadzie O (12 n ), ale przetestowałem go na
n
= 6 na moim komputerze (co zajęło 2 minuty). Uruchamianien
≥ 5 będzie limit czasu w Internecie.Ze względu na sposób, w jaki generuję znaki,
0123456789.-
wyniki są naprawdę dziwne.Można technicznie usunąć
{
koniec, ale spowodowałoby to złożoność O (19 n ). (Spowodowałoby to również powstanie wielu duplikatów, ale jest to dozwolone).Wyjaśnienie
Główna część kodu
".- \..*\. ^-?0. [.-]0*$"
zawiera wyrażenia regularne, których nie można dopasować do żadnego wyniku .źródło
Pyth, 57 bajtów
Wypróbuj go w tłumaczu online .
Zbyt długo i przy przerażającym środowisku uruchomieniowym (dla N = 4 trwa kilka sekund, nie zaleca się uruchamiania z N = 5).
Wyjaśnienie Regex:
źródło
*Q
coś do robienia permutacji przed,+
więc wpływa to tylko na cyfry, to powinno nieco poprawić wydajność. Może nawet pomóc zaoszczędzić niektóre bajty w wyrażeniu regularnym?Julia,
126117 bajtówJest to funkcja lambda, która przyjmuje liczbę całkowitą i zwraca tablicę ciągów. Aby go wywołać, przypisz go do zmiennej. Podejście tutaj jest takie samo jak odpowiedź Pyth Doorknob .
Nie golfowany:
źródło
MATL , 60 bajtów
Wypróbuj online!
Wykorzystuje to super brutalną siłę (poprzez siłę kartezjańską), a następnie filtruje (poprzez wyrażenie regularne). Wyjaśnię później.
Wyniki są wyświetlane na końcu programu. To może zająć chwilę. Jeśli chcesz zobaczyć wyniki podczas ich generowania, dodaj
D
na końcu :źródło