Tahun 2013 memiliki properti yang menarik: digitnya berurutan ketika diurutkan (0123). Sebut jenis nomor ini nomor yang dapat diurutkan: integer non-negatif yang basis-10 digitnya berurutan setelah pengurutan. Sayangnya, ini tidak akan terjadi lagi sampai 2031, dan setelah itu, tidak sampai 2103. Tantangan Anda adalah menulis sebuah program atau fungsi yang, ketika diberi bilangan bulat non-negatif melalui metode standar apa pun, mengeluarkan atau mengembalikan nomor yang dapat diurutkan berikutnya.
Aturan
- Input dan output harus dalam basis 10.
- Output dapat dalam format apa pun yang wajar (angka literal, string literal, array item tunggal, ...).
- Kode Anda harus menghasilkan output yang tepat dalam 1 menit untuk semua input hingga 98764.
Uji kasus
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
Angka-angka yang dapat diurutkan membentuk A215014 . Daftar semua entri hingga 98765 dapat ditemukan di sini .
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Jawaban:
Python 2 , 61 byte
Cobalah online!
sumber
'0123456789'
menjadi seperti itu1./81
, tetapi itu tidak berhasil.1./81.0000001
yang masih tidak berfungsi dengan baik dan lebih lama1./81-1e-10
tetapi masih 10 byte dan Anda masih harus memotongnya.Jelly ,
11109 byteMengembalikan array tunggal. Cobalah online!
Bagaimana itu bekerja
sumber
MATL , 8 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
JavaScript (ES6),
6454 byteMenyimpan 10 byte besar, terima kasih kepada Neil
Uji kasus
Tampilkan cuplikan kode
sumber
map
panggil balik adalah array itu sendiri, tetapi Anda dapat melanjutkan untuk melakukan jauh lebih baik:f=n=>[...++n+''].sort().some((v,i,a)=>v-i-a[0])?f(n):n
Pyth -
1110 byteTest Suite
sumber
PowerShell v2 +,
716867 byteCobalah online!
Solusi berulang yang berjalan cukup instan di mesin saya.
Ya, itu a
do
/until
loop dalam kode-golf. Maaf, tidak menyesal. Pada dasarnya kita loop ke atas dari input kita$n
sampai$n|sort
ed-match
melawan0123456789
. Kemudian kami menempatkan$n
pada pipeline, dan output tersirat.Menyimpan byte dengan menyadari bahwa
-join(0..9)
satu byte lebih pendek dari string literal0123456789
.sumber
Mathematica, 63 byte
Mengganti
#+1
dengan nilai berikutnya asalkanDifferences@Sort@IntegerDigits@x~MatchQ~{1...}
salah, yang merupakan kondisi bahwa nilai saat ini dapat diurutkan.Ini ide lain yang menyenangkan, yang sayangnya terlalu panjang:
Dalam yang ini, saya menghasilkan semua tahun yang dapat disortir pertama dan kemudian saya memilih yang pertama yang lebih besar dari input.
Beberapa gagasan lain yang ternyata tidak lebih pendek dari upaya pertama:
sumber
PHP,
10510389 byteVersi baru 89 byte berkat Titus:
Pemakaian:
Versi 103 byte sebelumnya berkat Xanderhall:
Versi 105 byte sebelumnya:
Pemakaian:
sortable-years.php?n=9000
output9678
.Versi tidak dikoleksi dengan kasus uji:
Tes online! (Versi 89 byte baru)
Tes online! (Versi 103 byte sebelumnya)
Tes online! (Versi 105 byte sebelumnya)
Waktu pelaksanaan mungkin <= 1 detik untuk semua kasus uji.
sumber
break
(exit
pada versi golf), Anda menemukannya! Besar.$i=0
tidak perlu (-4).join
adalah alias untukimplode
(-3).echo$n
cukup output (-5).$argv[1]
alih-alih$_GET[n]
memungkinkan-r
yang memungkinkan Anda untuk menghilangkan<?
tag (-2).join
alias aliasimplode
! Mengenaiphp -r
parameternya, saya pernah menggunakannya di masa lalu tetapi belakangan ini saya tidak menggunakannya karena (saya tidak tahu mengapa) kadang-kadang saya tidak dapat membuatnya berfungsi dengan baik dalam beberapa kasus.Perl 6 , 49 byte
Penjelasan
Uji:
sumber
C #,
153130101 byte (1229983 tidak termasuk deklarasi namespace)-23 byte berkat pinkfloydx33
lain -29 terima kasih kepada Link Ng (saya benar-benar seharusnya tahu saya tidak perlu mengubahnya menjadi array)
Konversi sialan.
(Bonus tambahan ini sangat cepat)
sumber
$"{n}".ToCharArray()
atau(""+n).ToCharArray()
dan Anda tidak perlu tanda kurung setelah beberapa saat:while(!s.Contains...)n++;
atau lebih baik menggabungkannya dan meninggalkan tubuh loop kosong:while(!s.Contains(.....$"{n++}".ToCharArray()....);return n;
menyatakan s denganvar s="... "
atau menghapus seluruhnya:while(!"0123456789".Contains(...
n++
dan sebaliknya menggabungkannya dengan yang di atas dan lakukan$"{++n}".ToCharArray()
use System;
dan gunakanstring
bukanString
untuk 11 byte. Gunakanstring.Concat
alih-alihstring.Join
dan simpan hanya parameter ke-2 untuk 1 byte. Ubah""+ ++n
ke++n+""
untuk 1 byte. Ditinggalkan sebagai latihan: 14 byte lebih dapat dihapus.Befunge , 117 byte
Cobalah online!
Cara kami menguji apakah satu tahun diurutkan adalah dengan membuat "array" (ditulis ke dalam string literal pada baris lima) dan untuk setiap digit dalam tahun tersebut, kami menetapkan indeks ke dalam array menjadi 1. Setelah semua digit telah diproses, kami menghitung berapa banyak 1s yang ada secara berurutan, dan jika jumlah itu sama dengan panjang tahun kami dapat menganggap tahun itu diurutkan.
Penjelasan detail
sumber
Ruby, 51 byte
sumber
Python 2, 68 byte
Dipukul dengan baik oleh @ Dennis tetapi hanya diposting sebagai metode alternatif pula.
sumber
C #, 127 byte
Kalahkan pengajuan C # saat ini sebanyak 3 byte: pSudahdikalahkan Saya tahu jawaban ini akan dikalahkan dengan mudah ...
demo repl.it
Tidak disatukan
sumber
05AB1E ,
109 byte-1 terima kasih kepada Emigna.
Cobalah online!
Deskripsi baru datang ketika saya punya waktu.
sumber
[>D{žhså#
untuk 9 byte.Python 2,
118 117 114108 BytesEDIT:
-1 Byte berkat @ Gábor Fekete
-6 Bytes berkat @Zachary T
sumber
sorted
fungsinya.PHP,
908988 bytependekatan yang sama sekali berbeda:
Jalankan dengan
-r
.kerusakan
sumber
Clojure,
1049691 byteNama metode panjang tidak membuat ini sesingkat ... Setidaknya
map-indexed
dan-
menyelesaikan perhitungan utama dengan rapi.Sunting 1 : Rapi, saya lupa juga
=
dapat mengambil beberapa argumen jadi saya tidak perlu memeriksa apakah jumlah nilai yang berbeda adalah 1.Sunting 2 : Tidak perlu dijalankan
(sort(seq(str %)))
,(sort(str %))
berfungsi sama baiknya.Tidak Disatukan:
sumber
R, 87 byte
Seperti biasa dalam hal membagi angka menjadi angka, R tidak memiliki cara asli untuk melakukan ini. Akibatnya, kita harus memaksa input menjadi karakter, membelah menjadi vektor karakter dan kemudian mengkonversi kembali ke jenis numerik apa pun.
Cobalah online
sumber