Biorąc pod uwagę nieujemną liczbę całkowitą ( n
), utwórz funkcję zwracającą się n
w kolejności alfabetycznej, zgodnie z literalną pisownią każdej cyfry w n
.
Przykłady:
Input: 101
>> one, zero, one
>> one, one, zero
Output: 110
Input: 31948
>> three, one, nine, four, eight
>> eight, four, nine, one, three
Output: 84913
Input: 5544
>> five, five, four, four
>> five, five, four, four
Output: 5544
Input: 1234567890
Output: 8549176320
Uwaga: operacje w tym przykładzie mają jedynie charakter ilustracyjny i nie muszą być uwzględniane w danych wyjściowych. Należy zwrócić tylko posortowaną alfabetycznie liczbę.
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach.
Edycja: dane wejściowe można zapisać w dowolnym formacie, który najlepiej odpowiada Twojemu językowi, a dane wyjściowe można wygenerować podobnie, wracając z funkcji lub drukowania. Dane wejściowe zawsze będą liczbami naturalnymi (w tym 0) i nie będą zawierać wiodących zer.
Odpowiedni wpis OEIS (A057846) znaleziony przez @DomHastings
00
....849
, czy oznacza to , że możemy wydrukować numer,849
ale nie ciąg"849"
? IMO to po prostu nieporęczny format I / O (zły!), Który stanowi doskonałe wyzwanie.001
wynik? Jeśli są znaczące, a wynik nie jest taki1
, większość języków będzie wymagała ciągów jako danych wejściowych, ponieważ jest to prosty, niepraktyczny i zwykle prawie nie można poprosić parsera o zachowanie wiodących zer w liczbach podstawowych 10.Odpowiedzi:
Perl 6 ,
3228 bajtówWyjaśnienie:
Test:
źródło
05AB1E,
121110 bajtówWyjaśnił
Wypróbuj online
Zaoszczędzono 1 bajt dzięki Adnanowi
źródło
JavaScript (ES6), 54
Edytuj tę samą liczbę znaków, ale unikaj zmiennej globalnej
z
Wejście / wyjście jako ciągi
Test
źródło
z
...Haskell,
62 5144 bajtówJak sugeruje @nimi, użycie rozumienia listy jest krótsze niż komponowanie funkcji:
Dla odniesienia moja wersja:
Wersja pointfree jest nieco dłuższa:
Prosto: Filtruj cyfry we właściwej kolejności, a następnie połącz wynik.
źródło
Pyth,
1210 bajtówNie jestem pewien, czy można dalej grać w golfa. Dane wejściowe należy ująć w cudzysłów.
2 bajty zapisane dzięki @isaacg!
W pythonowym pseudokodzie:
Sprawdź to tutaj .
źródło
549176320
zC" Ȁ\0
\0
. To prawdopodobnie problem, na który natrafiłeś.Perl, 37 bajtów
Kod 36 bajtów + 1 bajt wiersz poleceń (-F)
Przykład użycia:
źródło
MATL , 19 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka, 11 bajtów
Wypróbuj tutaj.
Wyjaśnienie
źródło
Mathematica
35 7847 bajtów31 bajtów zapisanych dzięki sugestii LIAMnYP!
IntegerDigits
dzieli liczbę na cyfry, które są następnie sortowane według ich nazw w języku angielskim.FromDigits
łączy cyfry w liczbę podstawową 10.8549176320
źródło
FromDigits@SortBy[IntegerName]@IntegerDigits@#&
Interpreter
Jest również boleśnie powolny, więc jest to dodatkowy bonus.C,
142141117Przejść parametr w
long long *
celuf()
; funkcja modyfikuje parametr:long long
jest konieczne, ponieważ ostatni przypadek testowy przepełnił sięint
podczas sortowania.źródło
Python 2 - 95 bajtów
Próba dalszego gry w golfa ... Myślę, że linia 2 jest niepotrzebna i może to być 1 lambda.
EDYCJA: 49 znaków w komentarzach, dzięki xnor i vaultah za pomoc.
źródło
lambda n:''.join(sorted(`n`,key="8549176320".find))
8
tak, abyfind
daje -1.lambda n: "".join(sorted(n,key="549176320".find))
, to bardzo podobne do tego, co zasugerowałeś, vaultah. Powinieneś to opublikować!- Oracle 11 (SQL): 164 bajty
Długa forma i wyjaśnienie
Uzyskaj dane wejściowe jako parametr do skryptu:
„twórz” wiersze za pomocą Connect przez na podstawie długości danych wejściowych:
Oderwij każdą cyfrę z łańcucha dla każdej pozycji:
Konwertuj cyfrę na datę Juliana i wróć do Char, aby uzyskać pisownię:
Sprawdź zero - przypadek specjalny.
Użyj funkcji LISTAGG, aby połączyć wiersze z powrotem w listę pojedynczych wierszy, rozdzielaną przecinkami, uporządkowaną alfabetycznie
Zawsze fajnie jest poprawiać SQL dla takich rzeczy ... :) naprawdę testuje moją wiedzę na temat buggera ...
źródło
Rubinowy, 60 bajtów
źródło
Rakieta,
142130 bajtówOd konwersji, które są
bardziej niżprawie połowę długości (7664 bajtów).źródło
(+ 1 answer)
do rakiety!TSQL, 260 bajtów
Użyto odwróconego sortowania bąbelkowego, aby uniknąć odniesienia do długości, aby zaoszczędzić niektóre bajty
Gra w golfa:
Nie golfowany:
Nalegając na użycie typów całkowitych jako danych wejściowych i wyjściowych dodano 37 bajtów
źródło
DECLARE @ varchar(99)=101
0. o czy101
automatycznie zmienia się w ciąg?stuff
jest obiektywnie okropna nazwa funkcji.squash
lubshove
lubpack
byłoby lepiej: Pstuff
ponieważ to właśnie funkcje: robią różne rzeczy. Wówczas twój kod może wyglądać następującostuff(stuff(4, 5, stuff), stuff(stuff()).(stuff())()); stuff(stuff)
ClojureScript, 45 bajtów
Wykorzystuje konwersję screwy string-> int z wycieku JavaScript, więc nie jest to poprawne Clojure.
źródło
Firebird, 317 bajtów
Gra w golfa:
Nie golfowany:
W Firebird nie ma podzielonej funkcjonalności. Zamiast tego utworzyłem zapytanie rekurencyjne, aby uzyskać kolejny znak w kółko. Następnie wybierz je ponownie, sortując według naszej właściwej kolejności. Na koniec połącz wyniki z powrotem na liście. Zastąp domyślny separator przecinkiem spacją. Mógłbym zaoszczędzić 11 bajtów, tworząc nowy fikcyjny stół zamiast,
rdb$database
ale pomyślałem, że może to być niezgodne z regułami.źródło
ZX Spectum, kod maszynowy,
5348474544 bajtówconvtab defb 249 ; zero defb 244 ; one defb 248 ; two defb 247 ; three defb 2+205 ; four defb 1+205 ; five defb 246 ; six defb 245 ; seven ; defb 0 ; eight ; defb 3 ; nine ; last 2 conversions hidden in call-command
źródło
Współczynnik, 128
Brawo dla wbudowanych! :RE
źródło
PHP, 126 bajtów
O ile wiem, php nie ma żadnych wbudowań, które naprawdę by w tym pomogły (najlepsze, co mogłem zrobić przy użyciu usortu (str_split ()) było o 5 bajtów dłużej), więc jedyną rzeczą, którą cieszę się w tej odpowiedzi, jest gry rozgrywane za pomocą $ i, aby zaoszczędzić kilka bajtów na iteracji.
źródło
APL, 23 bajty
Wyjaśnienie:
n←⍕⍵
: pobierz reprezentację ciągun
i zapisz jąn
'8549176320'⍋
: znajdź permutacjęn
tego rodzaju,n
biorąc pod uwagę kolejność8549176320
.n[
...]
: zmiana kolejnościn
według tej permutacji⍎
: oceń wynik (aby zamienić go z powrotem w liczbę)źródło
⍎
i⍕
. Konwersja do tradfn usuwając{
a}
i podstawiając⍞
do⍵
. Na koniec usuń0
jako niepubliczne sortowania na końcu:n['854917632'⍋n←⍞]
Clojure, 53 bajty
Cóż, pomysł na zrozumienie listy z rozwiązania Haskell wydaje się być najkrótszy:
Moje oryginalne podejście jest dłuższe o 1 bajt:
Możesz zobaczyć obie funkcje online tutaj: https://ideone.com/afac5n
źródło
Common Lisp, 104
Bez golfa
Konwertuj liczbę całkowitą na ciąg, sortuj znaki przy użyciu
string<=
porównania, używając:key
funkcji niestandardowej, która konwertuje dany znak jako angielską reprezentację reprezentowanej przez niego wartości liczbowej. Zwykle nie używałbym funkcji kluczowej, która działa tak samo jak ta, ale kosztuje mniej bajtów niż dekorowanie / sortowanie / undecorate.źródło
Python 3, 234 bajty
To jest bezpośrednie tłumaczenie mojej odpowiedzi Factor , dla zabawy.
Semantyka oceny „leniwych” map i obiektów zip jest najbardziej subtelnym, trudnym do znalezienia, powodującym błędy, fragmentem prawdziwych odchodów koni we wszechświecie. Czasami
s = map(f, x)
nie pozwalas
na prawidłowe użycie lub wcale.źródło
Pyke, 14 bajtów
Wypróbuj tutaj!
źródło
C, 80 bajtów
Pobiera ciąg zawierający liczbę w podstawie 10 i drukuje
stdio
:źródło
Python 2.7.11, 67 bajtów
Pobiera ciąg jako dane wejściowe i wyprowadza ciąg.
źródło
Python 3, 74 bajty
źródło
PHP , 107 bajtów
Wypróbuj online!
Korzysta ze zdefiniowanej przez użytkownika funkcji porównania, aby dostosować porządek sortowania.
Wydajność
źródło