Diberikan integer non-negatif ( n
), buat fungsi yang mengembalikan n
dalam urutan abjad, sesuai dengan ejaan literal dari setiap digit n
.
Contoh:
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
Catatan: operasi dalam contoh hanya ilustratif dan tidak perlu dimasukkan dalam output. Hanya nomor yang diurutkan berdasarkan abjad yang perlu dikembalikan.
Ini adalah kode-golf, jadi kode terpendek dalam byte menang.
Sunting: input dapat diambil dalam format yang diinginkan yang paling sesuai dengan bahasa Anda, dan output dapat diproduksi dengan cara yang sama dengan kembali dari fungsi atau pencetakan. Masukan akan selalu berupa bilangan asli (termasuk 0) dan tidak akan berisi awalan 0.
Entri OEIS yang relevan (A057846) ditemukan oleh @DomHastings
00
....849
, apakah itu berarti kita diizinkan untuk mencetak nomor849
tetapi bukan string"849"
? IMO ini hanya format I / O yang rumit (buruk!) Selain tantangan yang sangat bagus.001
dihasilkan? Jika mereka signifikan dan hasilnya tidak1
, sebagian besar bahasa akan membutuhkan string sebagai input untuk fakta sederhana itu kasar, tidak praktis dan hampir tidak mungkin untuk meminta parser untuk melestarikan nol terkemuka di basis 10 angka literal.Jawaban:
Perl 6 ,
3228 bytePenjelasan:
Uji:
sumber
05AB1E,
121110 byteDijelaskan
Cobalah online
Disimpan 1 byte berkat Adnan
sumber
JavaScript (ES6), 54
Edit jumlah char yang sama, tetapi hindari variabel global
z
Input / output sebagai string
Uji
sumber
z
...Haskell,
62 5144 byteSeperti yang disarankan @nimi, menggunakan pemahaman daftar lebih pendek daripada menyusun fungsi:
Untuk referensi versi saya:
Versi pointfree sedikit lebih lama:
Mudah: Saring angka dalam urutan yang benar dan kemudian gabungkan hasilnya.
sumber
Pyth,
1210 byteTidak yakin apakah bisa bermain golf lebih lanjut. Input harus dilampirkan dalam tanda kutip.
2 byte disimpan berkat @isaacg!
Dalam pseudocode pythonic:
Uji di sini .
sumber
549176320
denganC" Ȁ\0
\0
. Itu mungkin masalah yang Anda temui.Perl, 37 byte
36 byte kode + 1 byte command line (-F)
Contoh penggunaan:
sumber
MATL , 19 byte
Cobalah online!
Penjelasan
sumber
Jelly, 11 byte
Coba di sini.
Penjelasan
sumber
Mathematica
35 7847 byte31 byte disimpan berkat saran oleh LIAMnYP!
IntegerDigits
memecah nomor menjadi digit yang kemudian diurutkan sesuai dengan namanya dalam bahasa Inggris.FromDigits
merakit digit menjadi nomor basis-10.8549176320
sumber
FromDigits@SortBy[IntegerName]@IntegerDigits@#&
Interpreter
sangat lambat, jadi itu bonus tambahan.C,
142141117Lewati parameter
long long *
kef()
; fungsi memodifikasi parameter:long long
diperlukan karena test case terakhir meluapint
ketika diurutkan.sumber
Python 2 - 95 byte
Mencoba bermain golf lebih lanjut ... Saya pikir jalur 2 tidak perlu dan ini bisa menjadi 1 lambda.
EDIT: 49 versi char dalam komentar, thx to xnor dan vaultah untuk bantuan.
sumber
lambda n:''.join(sorted(`n`,key="8549176320".find))
8
sehinggafind
memberi -1.lambda n: "".join(sorted(n,key="549176320".find))
, yang benar-benar mirip dengan apa yang Anda sarankan, vaultah. Anda harus mempostingnya!- Oracle 11 (SQL): 164 byte
Bentuk dan penjelasan panjang
Dapatkan input sebagai parameter ke skrip:
"buat" baris dengan menggunakan koneksi dengan berdasarkan pada panjang input:
Lepaskan setiap digit dari string untuk setiap posisi:
Ubah digit menjadi tanggal Julian, dan kembali ke Char untuk mendapatkan ejaan:
Periksa nol - kasing khusus.
Gunakan fungsi LISTAGG untuk menggabungkan baris kembali ke daftar baris tunggal, dibatasi koma, diurutkan berdasarkan abjad
Selalu menyenangkan mencoba untuk men-tweak SQL untuk hal-hal seperti ini ... :) benar-benar menguji pengetahuan saya tentang bugger ...
sumber
Ruby, 60 byte
sumber
Racket,
142130 byteDari konversi yang
lebih darihampir setengah dari panjang (7664 byte).sumber
(+ 1 answer)
untuk Racket!TSQL, 260 byte
Digunakan semacam gelembung terbalik untuk menghindari merujuk pada panjang, untuk menyimpan beberapa byte
Golf:
Tidak Disatukan:
Bersikeras menggunakan jenis integer sebagai input dan output ditambahkan 37 byte
sumber
DECLARE @ varchar(99)=101
0.o apakah101
bisa beralih ke string secara otomatis?stuff
adalah nama fungsi yang secara objektif mengerikan.squash
ataushove
ataupack
akan lebih baik: Pstuff
karena itulah fungsi yang dilakukan: mereka melakukan banyak hal. Maka kode Anda dapat terlihat sepertistuff(stuff(4, 5, stuff), stuff(stuff()).(stuff())()); stuff(stuff)
ClojureScript, 45 byte
Menggunakan beberapa konversi string-> int yang rumit dari Javascript, jadi itu bukan Clojure yang valid.
sumber
Firebird, 317 byte
Golf:
Tidak Disatukan:
Tidak ada fungsi pemisahan di Firebird. Alih-alih, saya membuat kueri rekursif untuk mendapatkan karakter berikutnya berulang-ulang. Kemudian pilih kembali mereka sambil menyortir dengan urutan yang tepat. Akhirnya gabungkan hasil-hasil itu kembali bersama dalam daftar. Timpa pembatas koma default dengan kosong. Saya bisa menghemat 11 byte dengan membuat tabel boneka baru alih-alih
rdb$database
tetapi saya pikir itu mungkin melanggar aturan.sumber
ZX Spectum, kode mesin,
5348474544 byteconvtab 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
sumber
Faktor, 128
Hore untuk builtin! : D
sumber
PHP, 126 byte
Sejauh yang saya tahu php tidak memiliki builtin yang akan sangat membantu dengan ini (yang terbaik yang bisa saya lakukan dengan menggunakan usort (str_split ()) adalah 5 byte lebih lama) jadi satu-satunya hal yang saya senang dalam jawaban ini adalah game yang dimainkan dengan $ i untuk menyimpan beberapa byte pada itteration.
sumber
APL, 23 byte
Penjelasan:
n←⍕⍵
: dapatkan representasi stringn
dan simpan din
'8549176320'⍋
: menemukan permutasin
semacam itun
diberi perintah8549176320
.n[
...]
: memesan ulangn
dengan permutasi itu⍎
: mengevaluasi hasilnya (untuk mengubahnya kembali menjadi angka)sumber
⍎
dan⍕
. Dikonversi ke tradfn dengan menghapus{
dan}
dan menggantikannya⍞
untuk⍵
. Akhirnya, hapus0
jenis yang tidak terdaftar di akhir:n['854917632'⍋n←⍞]
Clojure, 53 byte
Nah, daftar gagasan pemahaman dari solusi Haskell tampaknya menjadi yang terpendek:
Pendekatan asli saya adalah 1 byte lebih lama:
Anda dapat melihat keduanya berfungsi online di sini: https://ideone.com/afac5n
sumber
Common Lisp, 104
Tidak disatukan
Konversi integer sebagai string, urutkan karakter menggunakan
string<=
perbandingan sambil menggunakan:key
fungsi kustom yang mengubah karakter yang diberikan sebagai representasi bahasa Inggris dari nilai numerik yang diwakilinya. Biasanya saya tidak akan menggunakan fungsi kunci yang melakukan sebanyak ini, tetapi harganya lebih murah dalam byte daripada menghias / mengurutkan / undecorate.sumber
Python 3, 234 byte
Ini adalah terjemahan langsung dari jawaban Factor saya , hanya untuk bersenang-senang.
Semantik dari evaluasi "malas" peta dan objek zip adalah yang paling sulit-menemukan-bug-inducing kotoran kuda asli di alam semesta. Terkadang,
s = map(f, x)
tidak memungkinkans
untuk digunakan dengan benar atau tidak sama sekali.sumber
Pyke, 14 byte
Coba di sini!
sumber
C, 80 byte
Mengambil string yang berisi angka dalam basis 10 dan mencetak ke
stdio
:sumber
Python 2.7.11, 67 byte
Mengambil string sebagai input dan menghasilkan string.
sumber
Python 3, 74 byte
sumber
PHP , 107 byte
Cobalah online!
Menggunakan fungsi perbandingan yang ditentukan pengguna untuk menyesuaikan urutan penyortiran.
Keluaran
sumber