Sebuah repdigit adalah nomor alami yang dapat ditulis sendiri oleh mengulangi angka yang sama. Misalnya, 777
adalah repdigit, karena hanya terdiri dari digit yang 7
diulang tiga kali.
Ini tidak terbatas pada angka desimal (basis 10) saja, namun:
- Setiap angka Mersenne (dalam bentuk M n = 2 n -1 ) adalah repdigit ketika ditulis dalam biner (basis 2).
- Setiap angka sepele adalah repdigit ketika ditulis dalam unary (basis 1).
- Setiap angka
n
juga dapat ditulis sepele sebagai repdigit11
dalam basisn-1
(misalnya,17
ketika ditulis dalam heksadesimal (basis 16) adalah11
, dan3
ketika ditulis dalam biner (basis 2) juga11
).
Tantangannya di sini adalah menemukan pangkalan - pangkalan lain di mana nomor input mungkin merupakan repdigit.
Memasukkan
Bilangan bulat positif x > 3
, dalam format apa pun yang nyaman.
Keluaran
Bilangan bulat positif b
dengan di (x-1) > b > 1
mana representasi x
dalam basis b
adalah repdigit.
- Jika tidak
b
ada, output0
atau nilai falsey . - Jika ada beberapa
b
, Anda dapat menampilkan salah satu atau semuanya.
Aturan
- The
(x-1) > b > 1
batasan adalah untuk mencegah konversi sepele untuk unary atau "salah satu kurangi" dasar. Nomor output dapat ditulis dalam unary atau basis yang nyaman, tetapi basis itu sendiri tidak boleh menjadi salah satu konversi sepele. - Input / output dapat melalui metode yang sesuai .
- Batasan celah standar berlaku.
Contohnya
In --> Out
11 --> 0 (or other falsey value)
23 --> 0 (or other falsey value)
55 --> 10 (since 55 is 55 in base 10)
90 --> 14 (since 90 is 66 in base 14 ... 17, 29, 44 also allowed)
91 --> 9 (since 91 is 111 in base 9 ... 12 also allowed)
code-golf
base-conversion
AdmBorkBork
sumber
sumber
b ≤ 36
(fungsi konversi basis bawaan banyak bahasa tidak semakin tinggi)?b ≤ 36
sangat membatasi ruang lingkup masalah ini, dan semua jawaban yang ada benar menangani basis yang lebih besar, jadi saya akan mengatakan tidak, Anda tidak dapat mengasumsikan batas atasb
melampaui apa yang diberikan.Jawaban:
Jelly,
119 byteMengembalikan daftar pangkalan, yang kosong (falsy) jika tidak ada. Cobalah online!
Bagaimana itu bekerja
sumber
Pyth,
1110Rupanya Pyth's unary
q
memeriksa daftar yang memiliki semua nilai unik sekitar 10 hari yang lalu. Rupanya menyelidiki bug Pyth meningkatkan skor golf.Memfilter daftar
[2..input-1)
jika kumpulan unik dari input pada basis itu adalah panjang 1.Test Suite
Penjelasan:
sumber
Ruby,
876963 byteSaya harus menerapkan konversi basis dengan tangan, karena bawaan Ruby hanya naik ke basis 36 ...
Pengembalian
nil
karena tidak ditemukan.sumber
Python, 71
7278byteTanpa rekursi, coba saja semua pangkalan dan hasilkan serangkaian yang berfungsi.
Sangat menggoda untuk menyandikan
b
dand
dalam satu nomor, tetapi terlalu banyak ekspresi yang diurung untuk mengekstraknya. 77 byte:72 byte:
Keluarkan yang pertama
b
berfungsi, atau0
jika tidak ada yang berhasil.Sebuah rep unit
x
darid
digitc
dalam basisb
memiliki nilaix==c*(b**d-1)/(b-1)
. Setarax*(b-1)==c*(b**d-1)
,.Nilainya
c
harusx%b
, digit terakhir. Saya tidak melihat cara untuk menentukan secarad
hitung, jadi kode mencoba semua kemungkinan untuk melihat apakah ada yang berfungsi.Disimpan 5 byte dengan menyalin trik Dennis untuk memberikan output falsey ketika
b
mencapaix-1
dengan mengambil modulo outputx-1
. Byte lain yang disimpan dari Dennis mengingatkan saya bahwa eksponensial tidak dapat dijelaskan memiliki prioritas lebih tinggi dari itu~
.Solusi dengan panjang yang sama dengan
in
bukannyaany
.sumber
Ruby, 50 byte
Saya benar-benar ingin menghapus ruang yang menjengkelkan itu tetapi sebagai pendatang baru di ruby, saya masih tidak terbiasa dengan kebiasaan sintaksisnya.
sumber
b?
akan menjadi nama metode yang valid, sehingga Anda tidak dapat menghilangkan ruang.Emojicode , 214 byte
(77 karakter):
Mencetak hasil dalam basis 9.
Saya bermaksud melakukan golf kode dengan emojicode selama beberapa minggu sekarang, tetapi bahasanya baru-baru ini menjadi cukup stabil untuk benar-benar bekerja dengan 😉. Sebagai bonus, pertanyaan ini memanfaatkan emojicode fungsionalitas yang benar-benar bagus di: mewakili bilangan bulat di basis lain.
Tidak Digubah (👴 adalah komentar baris dalam emojicode)
sumber
Python 2, 79 byte
Cobalah di Ideone .
Ide
Setiap digit x basis b> 1 dan digit d <b memenuhi yang berikut.
Karena d <b , peta (b, d) ↦ cb + d bersifat injeksi.
Juga, karena b, x> 1 , kita memiliki c <x , jadi cb + d <cb + b = (c + 1) b ≤ xb .
Ini berarti bahwa, untuk menemukan nilai yang sesuai untuk c dan d untuk basis b yang diberikan , kita dapat mengulangi semua i di [0, ..., bx) dan memeriksa apakah (b - 1) x == (i% b) (b i / b - 1) .
Kode
Tes lambda f yang bernama apakah (b - 1) x ada di set {(i% b) (b i / b - 1) | 0 ≤ i <bx} , dimulai dengan nilai b = 2 .
Jika tes berhasil, kami mengembalikan b .
Lain lagi, kita memanggil f lagi, dengan x dan b yang sama bertambah 1 .
Karena b akhirnya dapat mencapai x - 1 , kami mengambil hasil akhir modulo x - 1 untuk mengembalikan 0 dalam kasus ini. Perhatikan bahwa ini tidak akan terjadi jika b = 2 memenuhi syarat, karena dikembalikan tanpa berulang. Namun, pertanyaannya menjamin bahwa b = 2 <x - 1 dalam kasus ini.
sumber
Perl 6,
454342 byteDijelaskan (semacam)
Untuk referensi, variabel
$^x
dalam{ ... }
sama dengan melakukan-> $x { ... }
Polymod (TL; DR):
$n.polymod($b xx *)
memberi Anda daftar digit / 'digit' terbalik untuk$n
dalam basis$b
Polymod (Nyata): Metode polymod hampir seperti versi
divmod
fungsi python yang lebih kuat .$n.polymod(*@args)
Membagi $ n dengan setiap nilai dalam * @ args, menambahkan sisanya ($n mod $x
) ke daftar yang dikembalikan, dan menggunakan hasil bagi untuk divisi berikutnya. Saya merasa saya menjelaskannya dengan buruk jadi inilah beberapa contoh (ditulis dalam perl 6, tetapi cukup bersih untuk dimengerti oleh sebagian besar saya harap):sumber
grep
metode alih-alihfirst
metode.Dyalog APL , 28 byte
{
...⍵
...}
fungsi anonim untuk diterapkan kex
(diwakili oleh⍵
)b←1+⍳⍵-3
bilangan bulat dari 2 - ⍵-2 disimpan sebagaib
⍵{
...}¨
untuk setiap elemen dalam b (⍵
), terapkan fungsi{
...}
dengan x sebagai argumen kiri,⍺
⍵⊥⍣¯1⊢⍺
konversi x ke basis itu1=≢∪
adalah 1 sama dengan penghitungan digit unik?b/⍨
elemen b di mana benar (bahwa hanya ada satu digit unik).Contoh kasus
Jika tidak ada basis, output kosong (yang falsey), seperti yang dapat ditunjukkan oleh program ini:
Ini mencetak 'Salah'
sumber
Pyth,
2619 byteCoba di sini!
Akan menambahkan penjelasan setelah saya bermain golf ini.Lihatlah jawaban ini untuk implementasi dan penjelasan yang lebih singkat.sumber
90
dan91
dalam contoh saya!MATL ,
1514 byteIni berfungsi dengan versi saat ini (14.0.0) dari bahasa / kompiler.
Jika tidak ada basis, output kosong (yang falsey).
Cobalah online!
sumber
Mathematica, 55 byte
Fungsi anonim, tidak terlalu rumit. Cukup filter basis berdasarkan repdigit-ness.
sumber
Python 2, 75 byte
Port jawaban ruby saya. Mencetak semua basis yang valid jika ada.
sumber
Julia, 45 byte
Ini adalah fungsi anonim yang menerima integer dan mengembalikan array integer. Untuk menyebutnya, tetapkan ke variabel. Ini akan mengembalikan semua basis yang berlaku atau array kosong. Tidak ada masalah dengan pangkalan besar.
Pertama kita menghasilkan rentang inklusif [2, n - 2], di mana n adalah input. Kami kemudian
filter
daftar hanya bilangan bulat b yang n di basis b memiliki kurang dari 2 digit unik. Untuk melakukan ini, untuk setiap bilangan bulat b dalam rentang, kita mendapatkan digit n di basis b sebagai array menggunakandigits
, mendapatkan item unik menggunakan∪
, dan mendapatkan indeks elemen terakhir (yaitu panjang) menggunakanendof
.sumber
Brachylog , 12 byte
Cobalah online! (sebagai generator!)
Mengambil input melalui variabel input dan mengeluarkan basis melalui variabel output dalam hal ini mungkin, gagal sebaliknya. Pada saat yang sama, ini juga berfungsi sebagai generator yang menampilkan daftar semua pangkalan, di mana daftar itu bisa kosong.
Idealnya ini bisa terlihat seperti
ḃ↙.=&>>
, mungkin mengorbankan fungsionalitas generator dalam bentuk itu atau yang serupa (karena akhirnya akan mencapai unary), tetapi sampai sekarang 12 byte adalah yang terpendek yang saya tahu cara mendapatkannya.sumber
Ruby ,
4643 byteMenggunakan digit # Integer diperkenalkan di Ruby 2.4 untuk menghindari keharusan membagi secara manual.
-3 byte terima kasih kepada @Jordan.
Cobalah online!
sumber
05AB1E , 7 byte
Keluarkan semua nilai yang mungkin, atau daftar kosong sebagai nilai falsey (walaupun secara teknis output yang valid juga falsey, karena hanya
1
benar di 05AB1E, dan yang lainnya falsey).Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Perl 5
-Minteger -na
, 63 byteCobalah online!
Keluarkan semua jawaban yang mungkin atau tidak sama sekali jika tidak ada solusi.
sumber