Rozwiń liczbę
Twoim zadaniem jest rozwinięcie liczby całkowitej większej niż 0 w następujący sposób:
Podziel liczbę na cyfry dziesiętne i dla każdej cyfry wygeneruj listę zgodnie z następującymi zasadami:
- jeśli cyfra jest nieparzysta, lista zaczyna się od cyfry i spada do 1;
- jeśli cyfra jest parzysta, lista zaczyna się od cyfry i rośnie do 9.
- jeśli cyfra to 0, lista jest pusta.
Zapisz listy liczb nieparzystych poniżej cyfr, a powyżej liczb parzystych. Następnie wyrównaj do góry kolumny i zbierz cyfry w każdym rzędzie, aby uzyskać liczby całkowite. Jako ostatni krok dodaj liczby, aby znaleźć rozszerzenie liczby.
Oto przykład powyższych reguł stosowanych do 34607:
9
8
79
68
57
346 7 -> 399 7 -> 3997 -> 9418
2 6 288 6 2886
1 5 177 5 1775
4 66 4 664
3 5 3 53
2 4 2 42
1 1 1
Oto przypadki testowe:
1: 1
2: 44
3: 6
44: 429
217: 1270
911: 947
2345: 26114
20067: 3450
34875632: 70664504
9348765347634763: 18406119382875401
To jest golf golfowy , więc wygrywają najkrótsze odpowiedzi w bajtach w każdym języku.
Odpowiedzi:
Galaretka , 13 bajtów
Monadyczny link przyjmujący i zwracający dodatnie liczby całkowite.
Wypróbuj online! lub zobacz zestaw testowy .
W jaki sposób?
źródło
Perl 6 ,
6866 bajtówSpróbuj
Spróbuj
Rozszerzony:
źródło
APL (Dyalog) , 39 bajtów
Pełna treść programu. Monity o wejście z STDIN. Wyświetla wynik do STDOUT.
Wypróbuj online!
Aby wyświetlać ostatnim przypadku testu prawidłowo
⎕FR
( F loating punktów R ePresentation) została ustawiona na 128-bitowej dziesiętne i⎕PP
( P rukuj P recision) został ustawiony do 34 cyfr.⍞
monit o wprowadzenie tekstu z STDIN⍎¨
wykonaj każdą (pobiera każdą cyfrę jako liczbę){
…}¨
Dla każdego elementu zastosuj następującą funkcję, w której argument jest reprezentowany przez⍵
:2|⍵:
jeśli nieparzysty (litera „jeśli” dzieląca pozostała po podzieleniu przez 2), to:⌽
rewers⍳
z ɩ ntegers od 1 do⍵
argument⋄
jeszcze×⍵:
jeśli argument jest dodatni (lit. „if” signum), to:⌽
rewers⍵
argument,
śledzony przez⍵
argument↓
elementy usunięte z⍳9
The ɩ ntegers od 1 do 9⋄
jeszcze⍬
pusta lista↑
zmieszaj (połącz) tę listę list w jedną macierz, dopełniając zerami po prawej stronie⍉
transponować↓
podziel tę macierz na listę list0~⍨¨
usuń wszystkie zera z każdej listy10⊥¨
przekonwertować każdy z base-10 na liczby normalne (zbiera to cyfry)+/
zsumuj liczbyźródło
JavaScript (ES6),
888382 bajtówUwaga
9 - k < x || 9
zapisuje bajt ponad,9 - k >= x && 9
ale generuje1
zamiast,0
jeśli nierówność zostanie zweryfikowana. Byłoby to problemem, gdyby prowadził do1 > k
niewłaściwej ścieżki w trójskładniku zewnętrznym. Ale to oznaczałoby, żek = 0
i dlatego9 - k = 9
nie możemy mieć9 - k < x
jednocześnie.Przypadki testowe
Uwaga: Usunięto ostatni przypadek testowy, który przekracza dokładność liczby JS.
Pokaż fragment kodu
źródło
Japt , 18 bajtów
Wypróbuj online!
źródło
Java 11,
210209191181 bajtówOk, zajęło to sporo czasu (głównie dlatego, że na początku popełniłem błąd, więc musiałem zapisywać każdy krok, aby lepiej zrozumieć, co zrobiłem źle). Najprawdopodobniej można trochę zagrać w golfa.
-18 bajtów dzięki @ceilingcat .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Pip , 28 bajtów
Wypróbuj online!
Wyjaśnienie
Jak postępują kroki
34607
jako argument:źródło
Pyth - 23 bajty
Pakiet testowy .
źródło
Haskell ,
106104 bajtówWypróbuj online!
źródło
R ,
153146 bajtówWypróbuj online!
Czasami nie mogę powiedzieć, czy jestem tylko śmieciem podczas gry w golfa, czy też R jest ....To zdecydowanie ja, zaoszczędziłem 7 bajtów dzięki użytkownikowi2390246, który przypomniał mi o innym sposobie wyodrębniania cyfr (który zasugerowałem sobie) .Można wymienić
strtoi
zas.double
dostać się18406718084351604
do przypadku ostatniego testu (co jest źle); R ma tylko 32-bitowe liczby całkowite.źródło
character->int
kiedy zadzwoniłem,:
a potem użyłemstrtoi
!Perl 5 , 120 + 1 (
-a
) = 121 bajtówWypróbuj online!
źródło
Python 2 , 131 bajtów
Wypróbuj online!
źródło
05AB1E , 16 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Lub alternatywnie:
Wyjaśnienie:
źródło
Burleska , 39 bajtów
Wypróbuj online!
źródło