Saya bermain-main dengan beberapa angka dan menemukan urutan yang, tentu saja, ada di OEIS. Ini adalah A005823 : Angka-angka yang ekspansi ternernya mengandung angka 1 . Kelanjutannya:
a (2n) = 3 * a (n) +2
a (2n + 1) = 3 * a (n + 1)
a (1) = 0
a = 0,2,6,8,18,20,24,26,54 ....
Saya menulis program CJam yang menghasilkan n pertama dari angka-angka ini dengan mengubah indeks menjadi biner, mengganti angka 1 dengan angka 2, dan mengkonversi dari ternary ke desimal.
Saya juga memperhatikan bahwa angka genap dapat diperoleh dengan mengambil jumlah dua angka dalam urutan (kadang-kadang angka itu sendiri).
Tantangan:
Dengan diberi nomor genap non-negatif sebagai input, output indeks dari dua angka dalam urutan yang menjumlahkannya. (Perhatikan bahwa terkadang beberapa pasangan dimungkinkan.)
Aturan:
- Tentukan apakah Anda menggunakan pengindeksan 0 atau 1.
- Jika Anda menghasilkan sebagai string, letakkan pembatas di antara kedua indeks.
- Anda diizinkan untuk menghasilkan angka yang kompleks.
- Jika Anda menginginkannya, Anda dapat menampilkan setiap pasangan yang valid.
- Golf Kode: jawaban terpendek menang
Uji Kasus
Saya menggunakan pengindeksan 0. Di sini saya daftar setiap kemungkinan output untuk setiap input, tetapi Anda hanya perlu output satu.
0: [0 0] 2: [1 0] 4: [1 1] 6: [2 0] 8: [2 1] [3 0] 10: [3 1] 12: [2 2] 14: [3 2] 16: [3 3] 18: [4 0] 30: [6 2] 32: [6 3] [7 2] 46: [7 5] 50: [7 6] 120: [10 10] 338: [19 18] 428: [30 23] [31 22] 712: [33 27] [35 25] [41 19] [43 11] [51 9] [57 3] [59 1] 1016: [38 37] [39 36]Terima kasih kepada @Luis Mendo untuk bantuan uji kasus.
Terkait: Apakah itu dalam set Cantor?
sumber
Jawaban:
Sekam ,
211413 byte-7 byte, terima kasih untuk jawaban JS @ Neil
-1 byte terinspirasi oleh jawaban Parradoc betaveros
Menggunakan pengindeksan 0
Cobalah online!
Penjelasan
Solusi 21 byte sebelumnya
Pertama kali saya melihat ada gunanya
»
.Cobalah online!
Lebih lama, karena saya berurusan dengan membawa
sumber
JavaScript (ES6),
7571 bytePenjelasan: Membagi input dan elemen-elemen A005823 dengan 2 tidak mengubah masalah, namun itu membuat solusi lebih sederhana karena representasi ternary sekarang hanya menggunakan 0s dan 1s dan oleh karena itu tidak ada carry untuk dipertimbangkan. Ia juga menyimpan langkah ketika mengkonversi dari elemen ke indeksnya (setiap terner elemen adalah dua kali biner dari indeksnya). Contoh:
sumber
Jelly ,
26, 22, 21 byteCobalah online!
Satu byte disimpan berkat @JonathanAllan!
Penjelasan:
sumber
Œc
. Dan ya, Dennis menjelaskan masalahnyaS=¥
kepada saya.Python 2 , 51 byte
Cobalah online!
Tugas dapat dilakukan seperti ini:
Kita dapat melakukan pemisahan dalam (3) dengan mengonversi
0->0,1->1,2->1
untuk satu daftar dan0->0,1->0,2->1
untuk yang lainnya. Artinya, dengan memeriksa apakah nilainya di atas ambang 0 atau 1.Dua nilai dapat ditemukan oleh fungsi rekursif masing-masing:
Fungsinya
f
menggabungkan keduanya dalam daftar pemahaman. Ini membuatnya tidak efisien karena percabangan eksponensial.Jika bilangan kompleks bisa menjadi keluaran, kita bisa menghemat 10 byte dengan:
sumber
J,
3532 byteCobalah online!
Diindeks 0 dan input diberikan secara monadik. Mengembalikan semua penjumlahan yang mungkin ke nilai (itu memperlakukan
a b
danb a
sebagai penjumlahan yang mungkin berbeda).Mengubah dari matriks boolean ke indeks membutuhkan banyak kode ...
Saya juga ingin menghapus garpu di sebelah kiri jadi saya tidak harus menggunakan banyak tanda kurung dan
@
-ats, tapi saya tidak tahu cara yang baik untuk melakukannya (pendekatan alternatif saya tidak menyimpan byte apa pun ).Penjelasan
Untuk tujuan menjelaskan dan ungolfing, pertimbangkan komponen fungsi utama berikut
valid_nums menghasilkan matriks boolean di mana indeks adalah indeks dari nilai urutan yang dijumlahkan. Jika ada satu di indeks itu, itu berarti bahwa kedua angka dijumlahkan ke nilai input.
indices_of_ones adalah idiom J untuk memberikan koordinat koordinat dalam matriks boolean rank sewenang-wenang
Fungsi utama terdiri cukup sederhana
valid_nums
indexes_of_ones
,
-perjalanan bekerja dalam hal ini dengan bergabung setiap baris ke yang berikutnya.Kita dapat melihat bahwa jika ini adalah matriks boolean, koordinat yang dapat ditemukan dengan menginterpretasikan indeks matriks yang di-raveled sebagai angka-angka di dasar bentuk matriks itu menggunakan sebanyak mungkin frasa preposisional untuk membingungkan para pembaca miskin. .
sumber
MATL ,
22211917 byteOutput berbasis 1. Program ini menghasilkan semua pasangan solusi. Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Pyth , 37 byte
Diindeks 0
Tentu saja tidak bermain golf sebaik mungkin.
Cobalah online!
sumber
hfqQ+@Jmi:.Bd\1\23QeT@JhTsmm,dkUQU
. Pasti bisahfqQ+@Jmi:.Bd\1\23QeT@JhTsmm,dkUQ
Pyth , 29 byte
Yang ini mengembalikan semua pasangan indeks yang memungkinkan.
Coba di sini.
Pyth , 30 byte
Coba di sini.
Ini mengembalikan pasangan indeks sebagai
[LowerIndex, HigherIndex]
.Bagaimana cara kerjanya?
sumber
Paradoc (v0.2.10), 11 byte (CP-1252)
Cobalah online!
Secara algoritma ini sangat mirip dengan jawaban ES6 Neil . Pada tingkat yang lebih rendah, juga sangat mirip dengan jawaban Husk H.PWiz . Saya senang bahwa kami harus menggunakan ketiga kelebihan
B
.Mengambil bilangan bulat di tumpukan, meninggalkan daftar dua bilangan bulat di tumpukan.
Penjelasan:
sumber
Python 3 ,
122120 byte-2 byte terima kasih kepada Tn. Xcoder!
Diindeks 0
Tidak Terkumpul:
Cobalah online!
sumber
Mathematica, 94 byte
1-diindeks
sumber
JavaScript,
120101 byteCobalah online!
Diindeks 0.
Ini mengembalikan pasangan indeks di mana satu indeks adalah yang terkecil yang mungkin (misalnya dalam kasus
428
itu kembali22,31
).sumber
Brain-Flak ,
220166 byte-54 byte dengan mencari fungsi modulo pada wiki, memungkinkan beberapa perubahan struktural
Cobalah online!
Diindeks 0.
Penjelasan
Seperti banyak solusi lain, ini menghitung ekspansi ternary dari
n/2
dan mengubahnya menjadi dua angka biner.Langkah 1: Bagi input dengan 2
Langkah 2: hitung ekspansi terner
Langkah 3: Konversi ke solusi
sumber
JavaScript (ES6), 70
72byte(0-diindeks, dan tampaknya solusi yang hampir sama dengan @Neil bahkan jika saya belum melihat jawabannya)
Saya mulai dengan mendapatkan kembali indeks dari angka menggunakan proses kebalikan: stringify dengan basis 3, ganti setiap
2
dengan1
, parsing dengan basis 2.Untuk mendapatkan dua angka, dan itu untuk setiap angka satu, kita hanya setengah dari input - tetapi sekarang, juga
1
digit dapat terjadi. Jadi kami menggantinya dengan0
dalam satu nomor dan2
dalam nomor lainnya, yang tidak mengubah jumlah keduanya, sebelum langkah ganti dan parsing. Inilah yang saya buat (melakukan dua penggantian,1
-> 0-atau-2 dan2
->1
dalam satu langkah):Tentu saja dua peta pengganti (string) hanya berbeda dalam satu indeks, jadi kita harus dapat mempersingkat array literal dengan hanya mengganti
1
dan2
dengand == 2 ? 1 : x
. Ataud-1 || x
. Dimana-1
melakukan hal yang sama dengan dua operator unary - tetapi mereka terlihat lebih menakutkan :-)Mencoba menghindari array literal dan tanda kurung di sekitar
n/2
saya juga muncultapi hasilnya tidak membuahkan hasil.
sumber
["001","011"]
versinya juga (nah nama variabel saya berbeda).replace(/./g,d=>d>>1|x)
menghemat 2 byte.d="0"
danx=1
- digitnya harus tetap0
Pyth, 22 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber