Konstanta Champernowne adalah angka yang dibangun dengan menggabungkan n
angka pertama , dengan n
cenderung tak terhingga. Itu terlihat seperti ini:
0.123456789101112131415161718192021222324252627282930...
Sekarang, saya akan menjelaskan kepada Anda nomor Rien . Ini dapat dianggap sebagai minimalisasi konstan Champernowne sebagai bilangan bulat. Saya akan merujuk ke nomor Rien dengan n
digit pertama sebagai Ri ( n ). Inilah cara merumuskannya:
n
Bilangan asli pertama (urutan {1,2,3, ...}) digabungkan.- Hasil ini kemudian disortir, sesuai dengan nilai digit. Jadi
1..12
akan terlihat seperti011111223456789
. - Karena angka Rien tidak dapat memiliki angka nol di depan, kami memindahkan semua angka
0
sehingga menjadi signifikan, sambil menjaga angka tersebut diminimalkan, menghasilkan, katakanlah101111223456789
,. Ini adalah Ri ( n ), dalam hal ini, Ri (12).
Berikut ini beberapa hasil untuk Ri ( n ):
n Ri ( n ) 1 1 2 12 3 123 7 1234567 9 123456789 10 10123456789 15 101111111223344556789 34 10001111111111111222222222222223333333334444555666777888999 42 100001111111111111122222222222222233333333333333444444455556666777788889999 45 1000011111111111111222222222222222333333333333333444444444454555556666777788889999 55 10000011111111111111122222222222222223333333333333344444444444444445555555555556666677777778888899999 100 10:00 999100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Objective Diberikan angka 1 ≤ n
<10000 sebagai input (melalui argumen, STDIN, atau hardcoding jika bahasa Anda tidak mendukung input konvensional), output / return Ri ( n
).
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Anda dapat menggunakan bahasa yang dibuat setelah kontes ini, selama itu tidak dibuat untuk menjawab tantangan ini. (Tentu saja, Anda dapat menggunakannya, jika memberikan solusi yang menarik, tetapi tandai jawaban Anda sebagai tidak bersaing.)
Implementasi referensi
Saya menguji ini di IE, jadi seharusnya tidak ada masalah. Jika ada adalah masalah, ada solusi mudah: mendapatkan browser waras.
function min(n) {
var seq = [];
for(var i = 1; i <= n; i++) seq.push(i);
seq = seq.join("").split("").map(Number);
var to;
if(seq.indexOf(1) >= 0) to = seq.splice(seq.indexOf(1), 1);
seq.sort(function(a, b) {
return a - b;
});
if(to) seq = to.concat(seq);
return seq.join("");
}
t.onchange = t.onkeyup = function() {
h.innerHTML = min(this.value)
}
* {
font-family: Consolas, monospace;
}
input {
border: 2px dotted #aaaaaa;
border-radius: 5px;
margin: 10px;
}
<input id="t" type="number">
<div id="h">
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0
adalah nomor rien .1
di depan0
, ya?Jawaban:
Pyth, 8
Buat daftar
[1, .. , input]
lalu hapus yang terkemuka, gabung dan susun, lalu tambahkan 1.Test Suite
sumber
Perl,
4442413331 byteYaaay, posting pertama yang pernah ada!
Berkat primo untuk menyimpan 2 byte.
Seperti yang dilakukan orang lain, menghapus 1 dan menambahkannya secara manual berfungsi.
Cobalah online
sumber
print 1,sort"@{[2..<>]}"=~/\d/g
Japt,
1412 byteCobalah online!
Bagaimana itu bekerja
sumber
Retina , 78 byte
Saatnya memamerkan beberapa fitur Retina baru (masih belum terlalu kompetitif, tetapi sebelum hari ini mungkin sudah mendekati 300 byte).
Cobalah online.
Penjelasan
Meskipun mungkin untuk mengkonversi antara desimal dan unary cukup nyaman sekarang, ini masih cukup lama karena saya harus mengkonversi bolak-balik beberapa kali karena beberapa operasi lebih dapat dilakukan dalam desimal daripada di unary dan sebaliknya.
Mari kita mulai dengan mengubah input menjadi unary. Ini bekerja dengan mencocokkan input dan kemudian menggunakan
$*1
pengulangan mana1
yang berkali-kali (fitur pengulangan ini baru pada hari ini).Selanjutnya, kami menghasilkan rentang dari
1
hinggaN
di unary. Saya telah menjelaskan mengapa ini bekerja dalam jawaban FizzBuzz saya .Kami mengonversi setiap angka dalam rentang kembali ke desimal sehingga kami dapat bekerja dengan angka desimal. Hal ini dilakukan dengan mencocokkan masing-masing angka unary sehingga masing-masing
1
menghasilkan tangkapan terpisah. Kemudian kami menggantinya dengan jumlah tangkapan grup satu, menggunakan sintaks jumlah tangkapan baru$#1
.Ini menghilangkan yang terdepan
1
serta semua spasi dari string sehingga kita hanya memiliki digit (kecuali untuk satu1
).Kami mengonversi kembali ke unary dan menambahkan
1
ke setiap digit (untuk memastikan bahwa bahkan0
tidak kosong). Kami juga menyisipkan spasi di depan setiap digit untuk memastikan bahwa mereka dipisahkan.Kami berulang kali mencocokkan sejumlah kecil yang diawali dengan jumlah yang lebih besar dan menukar mereka. Itu semacam gelembung di Retina. :)
Aaa dan kembali ke desimal.
Akhirnya, kami menyisipkan satu
1
di depan untuk memperhitungkan yang sudah kami hapus sebelumnya.sumber
Haskell, 44 byte
Sayangnya
sort
dalamData.List
, yang 17 byte!sumber
JavaScript (ES6),
65625452 byteDisimpan 3 byte berkat edc65
Buat string dari semua angka dari 2 hingga
x
, lalu pisahkan, urutkan, bergabung, dan tambahkan 1 ke awal. Ini mungkin masih bisa golf; saran diterima!sumber
Array(x-1).map((_,y)=>y+2)
?Array(n).fill().map(...
(lihat kiat ES6)n=>1+[...[...Array(n-1)].map(_=>++n,n=1).join``].sort().join``
(1 byte lebih pendek, ini adalah pemecahannya).split()
terasa sangat aneh ...n=>1+[...[...Array(n+1).keys()].slice(2).join``].sort().join``
CJam, 9
Cobalah online
Kalau tidak:
sumber
Mathematica, 52 byte
Sekali lagi, pemrosesan string terjadi ...
sumber
IntegerDigits
utas di atas daftar sehingga Anda tidak perlu memetakannya.APL (17)
Penjelasan:
Uji:
sumber
∊
akan meratakan array dan memberi Anda sebuah string. Senang mendengarnya.Python 2, 60 byte
sumber
ClojureScript, 48 byte
Sama seperti yang lainnya, cukup banyak. REPL tersedia di sini .
sumber
Ruby, 48 byte
Fungsi anonim. Pada dasarnya hanya Ruby menemukan beberapa jawaban lain di sini ..
sumber
Brachylog ,
7641 byteMengambil nomor sebagai input.
Solusi ini berfungsi dengan beberapa perubahan yang saya buat pada predikat Findall bawaan
f
. OP tampaknya baik-baik saja dengan menggunakan bahasa yang lebih tua dari jawaban jadi saya pikir ini baik-baik saja (perubahan yang saya buat sudah lama, saya hanya memotivasi diri saya untuk melakukannya karena tantangan ini).Penjelasan
sumber
Smalltalk, 76 byte
Seperti biasa di Smalltalk, secara konseptual sangat singkat, tetapi secara tekstual sangat bertele-tele ...
Tambahkan ini sebagai metode kelas untuk
String
dan memanggil seperti ini, misalnya untuk 20,String f: 20
sumber
Utilitas Bash + GNU, 58
Cobalah online.
sumber
Bash,
3534 byteIni didasarkan pada jawaban @DigitalTrauma dan @OlivierDulac . Cobalah online dengan Ideone .
Bagaimana itu bekerja
seq 2 $1
mencetak semua bilangan bulat dari 2 ke yang ditentukan pada baris perintah.fold -1
membungkus semua garis dengan lebar 1, yaitu, menempatkan setiap karakter pada barisnya sendiri.-1
tampaknya merupakan fitur tidak berdokumen.sort
mengurutkan karakter berdasarkan nilai numeriknya.printf %d 1`...`
menambahkan huruf 1 ke baris pertama dan mencetak setiap baris sebagai integer (%d
), tanpa pemisahan.Ini mengambil keuntungan dari implementasi printf Bash yang penasaran, yang mengulangi string format berulang-ulang, sampai semua argumen dikonsumsi.
sumber
JavaScript ES6,
4946 BytesBerkat edc65 untuk 2 byte
sumber
Julia, 33 byte
Ini adalah fungsi lambda yang menerima integer dan mengembalikan string. Untuk menyebutnya, tetapkan ke variabel.
Kami membangun rentang
2:n
, yang akan kosong untukn
<2, menggabungkannya menjadi string, memercikkan string ke dalam array karakter, mengurutkannya, menggabungkannya ke dalam string, dan mengawali 1.sumber
APL, 21 byte
Ini adalah fungsi monadik tanpa nama yang menerima integer di sebelah kanan dan mengembalikan sebuah string. Untuk menyebutnya, tetapkan ke variabel.
Penjelasan:
Cobalah online
sumber
Python 2, 60 byte
Pengindeksan untuk kemenangan. :-)
Python 2, 60 byte
Hanya sebuah alternatif.
sumber
Bima Sakti 1.6.4 , 22 byte (tidak bersaing)
Saya harus menambahkan opcode penyortiran untuk tantangan ini.
Penjelasan
sumber
Serius, 10 byte
Hex Dump:
Cobalah secara Online
Penjelasan:
sumber
Alat Bash dan GNU,
5852 bytesumber
PowerShell,
6159 byteMengambil input
param($a)
dan kemudian menggunakannya untuk mengindeks ke dalam array dengan[$a-eq1]
. Jika benar, kami mengindeks elemen dan output kedua1
. Kalau tidak, kita menggabungkan"1"
denganjoin
ed array yang dibuat oleh 1) mendefinisikan rentang baru2..$a
yang telahjoin
disatukan bersama, 2) casting itu sebagai char-array, dan 3) mengirimkannya melaluiSort-Object
cmdlet, yang semuanya kemudian output.Sunting1 - Disimpan 2 byte dengan menggerakkan
-join
operator dalam .sumber
Gogh ,
97 byteAnda dapat menjalankan ini menggunakan:
sumber
Jelly , 8 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Oracle SQL 11.2,
222211 byteTidak bermain golf
sumber
MATL , 17 byte
Menggunakan versi saat ini (7.0.0) bahasa / kompiler.
Terinspirasi oleh jawaban FryTheEgggman .
EDIT (29 Juli 2016): Anda dapat mencobanya secara online dengan beberapa modifikasi agar sesuai dengan perubahan dalam bahasa.
Contoh
Penjelasan
sumber
05AB1E , 6 byte
Catatan: Kiriman ini menggunakan fitur yang menunda tantangan ini dan karena itu tidak kompetitif
Kode:
Penjelasan:
Menggunakan penyandian ISO 8859-1
sumber
Mathcad, 86 "byte"
Fungsi s (n) menggunakan loop for untuk membangun "integer" Champernowne dengan mengonversi setiap angka ke bentuk stringnya dan menggabungkannya menjadi satu. String kemudian dikonversi ke vektor yang setara dengan kode ASCII dan diurutkan. Fungsi ini kemudian menukar sembarang nol terkemuka dengan yang pertama, akhirnya mengubah vektor kembali menjadi string.
Untuk memeriksa fungsinya, saya menempatkan test case ke dalam vektor vn, lalu menerapkan s ke vn menggunakan operator vectorize. Saya kemudian memeriksa hasilnya terhadap nilai test case yang diberikan.
Mathcad adalah aplikasi matematika berdasarkan lembar kerja 2D yang terdiri dari "wilayah" yang masing-masing dapat berupa teks, ekspresi matematika, program, plot, atau komponen skrip.
Instruksi matematika atau pemrograman dipilih dari bilah alat palet atau dimasukkan menggunakan pintasan keyboard. Untuk tujuan bermain golf, operasi ("byte") diambil sebagai jumlah operasi keyboard yang diperlukan untuk membuat nama atau ekspresi (misalnya, untuk mengatur variabel a menjadi 3, kita akan menulis: = 3. Operator definisi : = adalah penekanan tombol tunggal ":", seperti a dan 3 yang memberikan total 3 "byte". Pemrograman untuk operator memerlukan mengetik ctl-shft- # (atau satu klik pada bilah alat pemrograman) sehingga sekali lagi setara dengan 1 byte.
sumber