Catatan, ketika saya mengatakan "negate", maksud saya ganti semua yang dengan nol (yaitu negasi bitwise)
Urutan Thue-Morse berjalan seperti 01101001
Cara Anda menghasilkannya adalah:
Mulailah dengan mengambil 0. Meniadakan apa yang tersisa dan menambahkannya sampai akhir.
Jadi, ambil 0
. Negasikan dan tambahkan itu sampai akhir -01
Kemudian ambil itu dan negasikan dan tambahkan itu sampai akhir - 0110
Dan seterusnya.
Properti lain yang menarik dari ini adalah bahwa jarak antara nol menciptakan string "irasional" dan tidak berulang.
Begitu:
0110100110010110
|__|_||__||_|__|
2 1 0 2 01 2 <------------Print this!
Bisakah Anda menulis sebuah program yang, ketika menginput n, akan menampilkan n digit pertama dari string yang akan dicetak?
Ini adalah kode golf, sehingga jumlah byte terpendek menang!
Jawaban:
Jelly, 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python
32,104928884 byteIni adalah solusi yang sangat sederhana berdasarkan pada membangun urutan Thue-Morse ternary dari awal. Urutan ini identik dengan yang diminta, meskipun orang lain harus menulis penjelasan yang lebih menyeluruh tentang mengapa itu. Bagaimanapun, urutan ini hanya modifikasi sepele dari yang ini, A036580 .
Sunting: Mengubah loop for menjadi daftar pemahaman, berubah dari fungsi ke program, dan mengubah semuanya menjadi Python 2. Terima kasih kepada Dennis untuk bantuan golf.
sumber
Julia,
5650 byteIni adalah fungsi anonim yang menerima integer dan mengembalikan array integer. Untuk menyebutnya, tetapkan ke variabel.
Kami menghasilkan bit-bertukar Thue-Morse urutan dengan memulai dengan integer
m = 1
, maka kita tambahkan1-m
kem
sebagai arrayn+1
kali, di manan
adalah input. Ini menghasilkan lebih banyak istilah daripada yang kita butuhkan. Kami kemudian menemukan yang menggunakanfind(m)
, mendapatkan perbedaan antara menggunakan nilai berturut-turutdiff
, dan mengurangi 1 elemen. Mengambiln
syarat pertama dari array yang dihasilkan memberi kita apa yang kita inginkan.Disimpan 6 byte dan memperbaiki masalah berkat Dennis!
sumber
PowerShell, 102 byte
Sedikit cara komputasi yang berbeda. PowerShell tidak memiliki cara mudah untuk "mendapatkan semua indeks dalam array ini di mana nilai pada indeks itu sama dengan ini -dan-itu ", jadi kita perlu sedikit kreatif.
Di sini kita menggunakan A001969 , "angka dengan angka genap 1s dalam ekspansi biner mereka", yang sepenuhnya secara kebetulan memberikan indeks 0s dalam urutan Thue-Morse. ;-)
The
filter
menghitung jumlah itu. Misalnyax 4
mau memberi9
. Kami kemudian hanya loop dari0
ke input kami$args[0]
, mengurangi1
karena kami diindeks nol, dan setiap iterasi dari loop mencetak perbedaan antara angka berikutnya dan nomor saat ini. Output ditambahkan ke pipeline dan secara implisit output dengan baris baru.Contoh
sumber
Haskell, 42 byte
Contoh penggunaan:
(`take`l) 7
->[2,1,0,2,0,1,2]
.Ini merupakan implementasi
a036585_list
dari A036585 bergeser ke0
,1
dan2
. Golf:concat (map f l)
adaf =<< l
danf 0=[0,1,2]; f 1=[0,2]; f 2=[1]
sedang([[0..2],[0,2],[1]]!!)
.Catatan:
l
adalah urutan yang tak terbatas. Dibutuhkan 10 byte atau sekitar 25% untuk mengimplementasikan fitur take-n
first - elemen.sumber
Mathematica,
796870 bytesumber
n<3
.MATL ,
1411 byteCobalah online!
Seperti yang ditunjukkan oleh @TimmyD dalam jawabannya , urutan yang diinginkan diberikan oleh perbedaan berturut-turut A001969 . Yang terakhir pada gilirannya dapat diperoleh sebagai urutan Thue-Morse ditambah 2 * n . Oleh karena itu urutan yang diinginkan diberikan oleh (perbedaan berurutan dari urutan Thue-Morse) ditambah satu .
Di sisi lain, urutan Thue-Morse dapat diperoleh sebagai jumlah yang dalam representasi biner dari n , mulai dari n = 0.
sumber
05AB1E ,
1413 byteKode:
Penjelasan:
Cobalah online!
sumber
Python, 69 byte
The
i
jangka th urutan ini1+t(i+1)-t(i)
, di manat
adalah fungsi Thue-Morse. Kode mengimplementasikannya secara rekursif, yang lebih pendek darisumber
Mathematica, 65 byte
Mengalahkan jawaban saya yang lain, tetapi tidak mengalahkan versi golf ekstra
pedas. Sekarang biasanya saya menempelkan kode saya pada tanda kutip, kemudian menariknya keluar karena Mathematica suka menambahkan spasi pada kode Anda (yang tidak melakukan apa-apa) tetapi tidak pernah mengacaukan string, tetapi itu tidak berfungsi untuk kode yang memiliki tanda kutip ...Apa pun, aku hanya menggunakan sihir bawaan untuk ini. Output adalah string.
sumber
Mathematica, 58 byte
sumber
1;;#
dapat diganti dengan sederhana;;#
.Position
.)Perl, 45 + 2 = 47 byte
Membutuhkan
-p
dan-a
menandai:Port of @ Sherlock9 menjawab
Disimpan 9 byte berkat Ton
sumber
-a
pilihan memberi Anda salinan gratis dari input, sehingga$_=2;s/./(1,20,210)[$&]/ge until/.{@F}/;$_=$&
-p
dengan-E
:say$&
pada akhirnya jika kita mengasumsikan bahwa Perl> v5.18JavaScript (ES6),
7367 bytePort of @ Sherlock9 menjawab.
sunting: Disimpan 6 byte berkat @WashingtonGuedes.
sumber
!s[n]
bekerja di tempats.length<n
? Atau mungkin hanyas[n]
dengan?:
terbalik?CJam (19 byte)
Demo online
Ini menggunakan pendekatan incrementing perbedaan berturut-turut antara elemen dari urutan Thue-Morse.
Pendekatan terpendek saya menggunakan aturan penulisan ulang adalah 21 byte:
(Peringatan: lambat). Ini mengkodekan aturan penulisan ulang
sebagai
sumber
Ruby, 57 byte
Port jawaban Python xnor. Perubahan sebagian besar terletak pada pernyataan ternary
t
di tempatand
karena0
menjadi benar di Ruby, dan menggunakan(1..n).map
dan1+t[i]-t[i-1]
menyimpan byte vs mengimpor daftar pemahaman secara langsung.sumber
0
apakah itu benar? Bagaimana cara kerjanya??Mathematica (
hampirnonverbal),107110 byteUrutan dihasilkan dengan berulang kali menerapkan aturan penggantian. Aturan lain mengubahnya menjadi output yang diinginkan. Jika cukup banyak orang yang tertarik, saya akan jelaskan secara terperinci.
versi non-alfanumerik
seperti yang disarankan oleh CatsAreFluffy.
sumber
$
dan ganti0
denganx-x
(di mana x adalah urutan yang tidak digunakan$
) (dan digunakan(x-x)!
untuk 1 (ditto)), kami bebas dari alfanumerik.{x__}
sebagai ganti_[x__]
$[_]:=-/;
(keduanya dengan emulasi mesin pencacah)