Sejumlah bahasa pemrograman membangun bilangan bulat besar melalui 'menyatukan' digit ke akhir angka yang ada. Misalnya, Labirin , atau Beradaptasi . Dengan menyatukan angka sampai akhir, maksud saya, jika angka yang ada adalah , dan angka itu adalah , angka hasilnya adalah .
Angka yang dikonstruksi adalah angka yang dapat dibangun dengan cara ini melalui penggunaan kelipatan angka satu digit: AKA merupakan elemen dalam salah satu dari 9 sekuens ini:
Untuk memberikan contoh bagaimana urutan dibangun, berikut adalah cara urutan untuk dibangun:
dan dimasukkan untuk menunjukkan kapan . Sebuahbanyakdari angka putus-putus untuk ruang.
Mungkin masih belum jelas bagaimana urutan ini dibangun, jadi inilah dua cara berbeda untuk memahaminya:
Setiap urutan dimulai dari satu digit. Istilah berikutnya ditemukan dengan mengambil kelipatan berikutnya dari digit itu, mengalikan istilah sebelumnya dengan dan menambahkan kelipatan tersebut. Secara urutan:
di mana adalah satu digit ( hingga )
Masing-masing dari elemen pada setiap titik dalam urutan (mengambil misalnya) adalah kelipatan dari ke , di mana dibangun oleh
Jadi nilai pertama adalah , yang kedua adalah , yang ketiga , dll.
Tugas Anda adalah untuk mengambil nomor yang dibangun sebagai input dan untuk menghasilkan angka awal yang digunakan untuk membangunnya. Anda dapat berasumsi bahwa input akan selalu berupa angka yang dikonstruksi, dan akan lebih besar dari . Mungkin satu digit, yang memetakan kembali ke dirinya sendiri.
Anda dapat mengambil input dengan cara apa pun yang masuk akal, termasuk sebagai daftar digit, sebagai string, dll. Dapat diterima (meskipun tidak disarankan) untuk mengambil input secara unary, atau pangkalan lain yang Anda pilih.
Ini adalah kode-golf sehingga kode terpendek menang!
Uji kasus
u_n => a
37035 => 3
6172839506165 => 5
5 => 5
246913580244 => 2
987654312 => 8
61728395061720 => 5
1111104 => 9
11111103 => 9
111111102 => 9
2469134 => 2
98760 => 8
8641975308641962 => 7
atau sebagai dua daftar:
[37035, 6172839506165, 5, 246913580244, 987654312, 61728395061720, 1111104, 11111103, 111111102, 2469134, 98760, 8641975308641962]
[3, 5, 5, 2, 8, 5, 9, 9, 9, 2, 8, 7]
Ketika saya memposting tantangan ini, saya tidak menyadari itu bisa disederhanakan begitu banyak dengan metode yang digunakan dalam jawaban Grimy , dan karena itu akan sangat tertarik pada jawaban yang mengambil pendekatan yang lebih matematis untuk menyelesaikan ini, daripada 'digit' trick (Jelas semua jawaban yang valid sama-sama valid, hanya apa yang saya tertarik melihatnya).
Jawaban:
05AB1E ,
754 byteCobalah online!
sumber
a * (((10**n - 1) / 9 - n) / 9)
. Kalikan dengan 9 dan tambahkana*n
, dan Anda dapatkana * ((10**n - 1) / 9)
, alias digit yang diulang n kali. Ternyata menambahkan 9 alih-aliha*n
bekerja untuk n = 1, dan untuk lebih besar n perbedaan konstan diabaikan di samping pertumbuhan eksponensial.MathGolf , 6 byte
Cobalah online!
Sayangnya, tidak ada
head
operasi di MathGolf, jadi saya harus puas dengan▒├Þ
mengonversi ke string, muncul dari kiri dan buang semua kecuali bagian atas tumpukan.sumber
Jelly , 5 byte
Cobalah online!
Menggunakan pendekatan Grimy .
sumber
Stax , 5 byte
Jalankan dan debug itu
sumber
Japt
-g
,765 byte-1 byte terima kasih kepada Shaggy
Mengambil input sebagai string
Cobalah | Uji beberapa input
sumber
Arang , 7 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. @ Metode Grimy tentu saja. Berikut ini adalah pendekatan matematika 27 byte:
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Gangguan pada input yang tidak valid. Penjelasan:
Masukkan nomor yang dibangun.
Menafsirkan daftar sebagai angka dalam basis 10, kalikan dengan semua angka dari
0
ke9
, dan lihat apakah nomor yang dikonstruksi muncul.Dorong panjang daftar ke dirinya sendiri. Oleh karena itu daftar menjadi bentuk
[0, 1, 2, ..., n]
.Buat kembali angka-angka yang dikonstruksi tetapi kali ini temukan dan keluarkan indeks tempat nomor input muncul.
sumber
Labyrinth ,
28 2220 byteMenerapkan metode berbasis digit yang dijelaskan oleh Grimy dengan pembagian bilangan bulat berulang sepuluh hingga nol ditemukan.
Cobalah online!
sumber
Spasi , 108 byte
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Jawaban Port @Grimy pada 05AB1E , kecuali bahwa saya tidak memiliki builtin untuk mendapatkan angka pertama. ;)
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Penjelasan dalam pseudo-code:
sumber
Python 3 , 22 byte
Cobalah online!
Pelabuhan Kotor 's jawaban 05AB1E
Python 3 , 74 byte
Cobalah online!
Penjelasan
Fungsi rekursif. Ulangi urutan untuk setiap digit
l
, mulai dari1
. Jika inputi
sama dengan iterasi saat inij
, digit yang sesuail
dikembalikan. Lain, jika nilai saat inij
dalam urutan melebihi nilai inputi
, itu akan menambah digitl
dan memulai dari awal. Argumenk
digunakan untuk meningkatkan faktor multiplikasi.sumber
JavaScript (ES6),
1615 byteTerima kasih kepada @Grimy karena telah mengangkat kendala 32-bit yang saya miliki dengan versi sebelumnya.
Menggunakan mantra magis Grimy . Mengambil input sebagai string.
Cobalah online!
JavaScript (ES6), 53 byte
Pendekatan brute force naif.
Cobalah online!
sumber
-~n*9
bisan*9+9
, yang merupakan bytecount yang sama tetapi harus menyingkirkan batasan 32-bit jika saya mengerti dengan benar.14808
n=>n
bekerja untuk semua input.Java 8, 23 byte
Jawaban Port dari @Grimy 's 05AB1E , jadi pastikan untuk membesarkan hatinya!
Cobalah online.
Tetapi karena saya agak merasa tidak enak untuk @cairdCoinheringaahing , berikut ini pendekatan brute-force dengan sedikit lebih banyak kemampuan ( 83 byte ):
Cobalah online.
Penjelasan:
sumber
PHP , 20 byte
Cobalah online!
Namun port jawaban Grimy yang lain !
sumber
Jelly , 8 byte
Cobalah online!
Program lengkap yang mengambil integer dan mencetak digit starter. Tidak menggunakan metode cerdik Grimy! Sangat tidak efisien untuk input yang lebih besar. Versi berikut menangani semua kasus uji tetapi satu byte lebih lama:
Jelly , 9 byte
Cobalah online!
sumber
Hy , 44 byte
Menggunakan metode Grimy
Cobalah online!
sumber
Tong
-rr
, 4 byteCobalah online!
Tentu saja, gunakan pendekatan yang sama dengan jawaban 05AB1E. Juga menggunakan yang baru
-rr
bendera (terbalik dan cetak mentah).Transpile ke:
sumber
Gelisah , 30 byte
Hanya sebagian besar jawaban.
Cobalah online!
sumber