Rok 2013 miał ciekawą właściwość: cyfry są sortowane po kolei (0123). Nazwijmy ten typ liczbą liczbą możliwą do sortowania: nieujemną liczbą całkowitą, której 10-cyfrowe cyfry są następujące po sortowaniu. Niestety, powtórzy się to dopiero w 2031 r., A potem dopiero w 2103. Wyzwanie polega na napisaniu programu lub funkcji, która, gdy otrzyma nieujemną liczbę całkowitą za pomocą dowolnej standardowej metody, wyświetli lub zwróci następną możliwą do sortowania liczbę.
Zasady
- Wejście i wyjście musi być w bazie 10.
- Dane wyjściowe mogą być w dowolnym rozsądnym formacie (literał liczbowy, literał łańcuchowy, tablica jednopunktowa, ...).
- Twój kod musi wygenerować poprawny wynik w ciągu 1 minuty dla wszystkich danych wejściowych do 98764.
Przypadki testowe
0 -> 1
1 -> 2
9 -> 10
10 -> 12
11 -> 12
99 -> 102
233 -> 234
234 -> 243
243 -> 312
2016 -> 2031
2031 -> 2103
2103 -> 2130
2130 -> 2134
2134 -> 2143
9876 -> 10234
98764 -> 98765
Numery sortowalne tworzą A215014 . Lista wszystkich wpisów do 98765 znajduje się tutaj .
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Odpowiedzi:
Python 2 , 61 bajtów
Wypróbuj online!
źródło
'0123456789'
być czymś takim1./81
, ale to nie do końca działa.1./81.0000001
co nadal nie działa poprawnie i jest dłuższe1./81-1e-10
ale nadal ma 10 bajtów i nadal będziesz musiał go obciąć.Galaretka ,
11109 bajtówZwraca tablicę singletonów. Wypróbuj online!
Jak to działa
źródło
MATL , 8 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
JavaScript (ES6),
6454 bajtówOszczędność ogromnych 10 bajtów dzięki Neilowi
Przypadki testowe
Pokaż fragment kodu
źródło
map
wywołania zwrotnego jest sama tablica, ale możesz dalej robić znacznie lepiej:f=n=>[...++n+''].sort().some((v,i,a)=>v-i-a[0])?f(n):n
Pyth -
1110 bajtówPakiet testowy
źródło
PowerShell v2 +,
716867 bajtówWypróbuj online!
Iteracyjne rozwiązanie, które działa niemal natychmiast na moim komputerze.
Tak, to jest pętla
do
/until
w golfie kodowym. Przepraszam, nie przepraszam. Zasadniczo zapętlamy w górę od naszego wejścia,$n
aż$n|sort
ed regex-match
przeciw0123456789
. Następnie umieszczamy$n
w potoku, a wynik jest niejawny.Zapisano bajt, zdając sobie sprawę, że
-join(0..9)
jest on o jeden bajt krótszy niż ciąg literalny0123456789
.źródło
Mathematica, 63 bajty
Zastępuje
#+1
następną wartością, o ileDifferences@Sort@IntegerDigits@x~MatchQ~{1...}
ma wartość false, co jest warunkiem sortowania bieżącej wartości.Oto kolejny zabawny pomysł, który niestety okazał się zbyt długi:
W tym pierwszym generuję wszystkie sortowalne lata, a następnie wybieram pierwszy, który jest większy niż nakład.
Kilka innych pomysłów, które nie okazały się krótsze niż pierwsza próba:
źródło
PHP,
10510389 bajtówNowa wersja 89 bajtów dzięki Titusowi:
Stosowanie:
Poprzednia wersja 103 bajtów dzięki Xanderhall:
Poprzednia 105 bajtów wersja:
Zastosowanie:
sortable-years.php?n=9000
wyjścia9678
.Wersja bez golfa z przypadkami testowymi:
Przetestuj online! (Nowa wersja 89 bajtów)
Przetestuj online! (Poprzednia wersja 103 bajtów)
Przetestuj online! (Poprzednia wersja 105 bajtów)
Czas wykonania może wynosić <= 1 sekundę dla wszystkich przypadków testowych.
źródło
break
(exit
w wersji golfowej), znalazłeś to! Świetny.$i=0
jest niepotrzebne (-4).join
jest aliasem dlaimplode
(-3).echo$n
jest wystarczająca moc wyjściowa (-5).$argv[1]
zamiast$_GET[n]
pozwala,-r
co pozwala pominąć<?
znacznik (-2).join
jako aliasuimplode
! O tymphp -r
parametrze użyłem w przeszłości, ale ostatnio go nie używam, ponieważ (nie wiem dlaczego) czasami nie mogę sprawić, aby działał poprawnie w niektórych przypadkach.Perl 6 , 49 bajtów
Wyjaśnienie
Test:
źródło
C #,
153130101 bajtów (1229983 z wyłączeniem deklaracji przestrzeni nazw)-23 bajty dzięki pinkfloydx33
kolejne -29 dzięki Link Ng (naprawdę powinienem wiedzieć, że nie muszę konwertować go na tablicę)
Cholerne konwersje.
(Dodano bonus, który jest zaskakująco szybki)
źródło
$"{n}".ToCharArray()
lub(""+n).ToCharArray()
i nie potrzebujesz po tym czasie nawiasów:while(!s.Contains...)n++;
lub lepiej jeszcze połącz je i pozostaw pustąwhile(!s.Contains(.....$"{n++}".ToCharArray()....);return n;
var s="... "
while(!"0123456789".Contains(...
n++
i zamiast tego połączyć go z powyższym i zrobić$"{++n}".ToCharArray()
use System;
i użyjstring
zamiastString
11 bajtów. Użyjstring.Concat
zamiaststring.Join
i zachowaj tylko drugi parametr dla 1 bajtu. Zmień""+ ++n
na++n+""
na 1 bajt. Pozostawiony tobie jako ćwiczenie: można usunąć jeszcze 14 bajtów.Befunge , 117 bajtów
Wypróbuj online!
Sposób, w jaki sprawdzamy, czy rok jest sortowany, polega na utworzeniu „tablicy” (zapisanej w literale ciągu w linii piątej) i dla każdej cyfry w roku ustawiamy ten indeks na tablicę na 1. Po tym, jak wszystkie cyfry zostaną przetworzone, zliczamy, ile jeden z nich jest po kolei, a jeśli liczba ta jest równa długości roku, możemy założyć, że rok jest posortowany.
Szczegółowe wyjaśnienie
źródło
Rubinowy, 51 bajtów
źródło
Python 2, 68 bajtów
Dobrze pobity przez @Dennis, ale i tak opublikowany jako alternatywna metoda.
źródło
C #, 127 bajtów
Pokonaj bieżące przesłanie C # o 3 bajty: pPobity jużwiem Wiem, że odpowiedź zostanie łatwo pobrana ...
repl.it demo
Nie golfił
źródło
05AB1E ,
109 bajtów-1 dzięki Emignie.
Wypróbuj online!
Nowy opis pojawi się, kiedy będę miał czas.
źródło
[>D{žhså#
dla 9 bajtów.Python 2,
118 117 114108 bajtówEDYTOWAĆ:
-1 bajtów dzięki @ Gábor Fekete
-6 Bajtów dzięki @Zachary T.
źródło
sorted
funkcji.PHP,
908988 bajtówzupełnie inne podejście:
Uruchom z
-r
.awaria
źródło
Clojure,
1049691 bajtówDługie nazwy metod nie są takie krótkie ... Przynajmniej
map-indexed
i-
wykonuj główne obliczenia w zgrabny sposób.Edycja 1 : Zgrabne, zapomniałem też o
=
wielu argumentach, więc nie muszę sprawdzać, czy liczba różnych wartości wynosi 1.Edycja 2 : Nie musisz biegać
(sort(seq(str %)))
,(sort(str %))
działa równie dobrze.Nie golfowany:
źródło
R, 87 bajtów
Jak zwykle, jeśli chodzi o dzielenie liczb na cyfry, R nie ma natywnego sposobu na zrobienie tego. W związku z tym musimy zmusić dane wejściowe do postaci, podzielić na wektor znaków, a następnie przekonwertować z powrotem na dowolny typ liczbowy.
Wypróbuj online
źródło