Tantangan
Sebuah repdigit adalah bilangan bulat non-negatif yang digit semua sama.
Buat fungsi atau program lengkap yang mengambil integer tunggal sebagai input dan output nilai kebenaran jika nomor input adalah repdigit di basis 10 dan nilai falsy sebaliknya.
Input dijamin menjadi bilangan bulat positif .
Anda dapat mengambil dan menggunakan input sebagai representasi string di basis 10 dengan impunitas.
Uji kasus
Ini semua repdigits di bawah 1000.
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
111
222
333
444
555
666
777
888
999
Daftar yang lebih besar dapat ditemukan di OEIS .
Kemenangan
Kode terpendek dalam byte menang. Itu tidak berarti bahwa jawaban yang cerdas dalam bahasa verbal tidak akan diterima.
code-golf
math
number
arithmetic
decision-problem
Aidan F. Pierce
sumber
sumber
Jawaban:
Brachylog , 1 byte
Cobalah online!
Ini bekerja pada bilangan bulat.
Dari
src/predicates.pl#L1151
:sumber
C (gcc) ,
333029 byteCobalah online!
sumber
return
(pikir saya akan mencuri yang terakhir untuk jawaban saya :)).-O0
akan menulis hasil akhirn
dari tepateax
, sehingga menjadikannya nilai pengembalian? Bisakah Anda menguraikan logika mengapa Anda tahu itu akan berhasil?return n
untuk menjadi nop, dan tidak ada alasan untuk menetapkan variabel lokal di akhir fungsi jika Anda tidak akan mengembalikan hasilnya.COBOL , 139 Byte
Saya merasa COBOL tidak suka bermain golf kode (mungkin karena tidak mungkin menang) tetapi begini:
A didefinisikan sebagai PIC 9 (4).
sumber
TRUE
danFALSE
untuk 1 dan 0 masing05AB1E , 1 byte
Cek apakah semua digit sama
Cobalah online!
sumber
Python 3,
25, 2419 byte.Varian kode kesalahan stdin =>.
Mengembalikan kode kesalahan 0 jika itu adalah repdigit - atau kesalahan pada kegagalan.
Terima kasih untuk Dennis yang telah membantu saya dalam komentar.
sumber
>1
daripada<2
. Memunculkan kesalahan aktual akan lebih pendek daripada menggunakanexit
btw.if python3 repdigit.py; then echo truthy; else echo falsy; fi
harus bekerja sesuai dengan definisi di luar, jadi 0 itu benar dan yang lainnya salah.*
membongkar iterable. Misalnya,{*'123'}
menghasilkan set{'1','2','3'}
.Mathematica, 27 byte
Itu tidak mengalahkan
Equal@@IntegerDigits@#&
, tetapi mengalahkan solusi Mathematica berbasis aritmatika lainnya.Repdigits adalah dari bentuk n = d (10 m -1) / 9 di mana m adalah jumlah digit dan d adalah digit yang diulang. Kita dapat memulihkan d dari n dengan mengambilnya modulo 10 (karena jika itu adalah digit rep, itu digit terakhir akan menjadi d ). Jadi kita bisa mengatur ulang ini sebagai m = log 10 (9 n / (n% 10) + 1) dan memeriksa apakah m adalah bilangan bulat.
sumber
Haskell , 15 byte
Cobalah online! Mengambil input string.
Setara dengan
\s->all(==head s)s
. Mengalahkan alternatif:sumber
f s=(s<*s)==(s*>s)
adalah ide yang sangat menarik, saya tidak menyadari perilaku ini<*
sebelumnya.C (gcc), 41 byte
Ini adalah fungsi yang mengambil input sebagai string dan mengembalikan
1
jika itu adalah repdigit dan0
sebaliknya.Ini dilakukan dengan memanfaatkan
strspn
fungsi, yang mengambil dua string dan mengembalikan panjang awalan terpanjang dari string pertama yang hanya terdiri dari karakter dari string kedua. Di sini, string pertama adalah input, dan string kedua adalah digit terakhir dari input, diperoleh dengan melewatkan sebuah pointer ke karakter terakhir dari string input.Jika inputnya adalah repdigit, maka hasil dari panggilan
strspn
itu adalahstrlen(s)
. Kemudian, pengindeksan kes
akan mengembalikan byte nol jika hal ini terjadi (str[strlen(str)]
selalu\0
) atau digit pertama yang tidak cocok dengan digit terakhir. Meniadakan ini dengan!
hasil apakahs
mewakili repdigit.Cobalah online!
Terima kasih kepada @Dennis karena secara tidak langsung mengingatkan saya pada trik assign-bukan-return melalui jawaban yang luar biasa mengesankan , menghemat 4 byte!
sumber
strlen
dan membuat string baru dari*s
:c;f(char*s){c=*s;c=!s[strspn(s,&c)];}
for 37.PHP,
252825hapus semua karakter dari kanan yang sama dengan karakter pertama dan cetak
1
jika semua karakter dihapus.sumber
R, 31 byte
Fungsi ini bekerja dengan input string dan menggunakan ekspresi reguler untuk menentukan apakah input tersebut adalah repdigit.
Contoh
sumber
/// , 110 byte
Cobalah online!
Bahasa /// tidak memiliki konsep truthy dan falsey, jadi ini menghasilkan "T" jika inputnya adalah repdigit, dan tidak menampilkan karakter apa pun jika inputnya bukan repdigit.
sumber
Jelly ,
21 byteCobalah online!
sumber
1
-9
hitung sebagai repdigits?Oktaf , 11 byte
Cobalah online!
Mengambil input sebagai string.
Ini memeriksa semua karakter untuk kesetaraan dengan karakter pertama. Jika semua sama, hasilnya akan menjadi vektor hanya
1
(true in Octave), jika tidak akan ada setidaknya satu0
(false dalam Octave). Ini buktinya .sumber
all(...)
untuk mendapatkan output nilai truthy / falsy?grep, 17 byte
Cocok dengan string apa pun yang merupakan pengulangan karakter pertama.
sumber
C #,
423328 bytei
harus berupa string.Banyak dicukur berkat @LethalCoder
sumber
i[0].ToString()
dapat disingkat menjadii[0]+""
,<1
lebih pendek dari==0
..Length<1
bisa saja==""
Braingolf , 6 byte
Cobalah online!
Sayangnya, input implisit Braingolf dari commandline args tidak dapat menerima input semua digit sebagai string, itu akan selalu melemparkannya ke angka, jadi alih-alih solusinya adalah melewatinya melalui STDIN, yang menambahkan 1 byte untuk membaca STDIN (
i
)Penjelasan:
Setelah
u
, panjang tumpukan sama dengan jumlah karakter unik dalam input, kurangi 1 artinya akan menjadi0
dan jika hanya ada 1 karakter unik dalam input,0
adalah satu-satunya angka falsey dalam Python, jadin
akan diganti0
dengan1
, dan yang lainnya0
.sumber
Japt , 4 byte
Cobalah online!
sumber
JavaScript (ES6),
2321 byteDisimpan 2 byte berkat Neil
Mengambil input sebagai integer atau string. Mengembalikan boolean.
Demo
Tampilkan cuplikan kode
sumber
test
bukannya!!exec
menyimpan 2 byte?Ohm , 4 byte
Cobalah online!
Penjelasan
sumber
Ul≤
harus bekerja.0
itu palsu dan setiap angka lainnya adalah benar. Saya hanya memperhatikan bahwa kita membutuhkan hal yang sebaliknya untuk tantangan ini (seringkali kita diizinkan untuk bertukar selama kita menyatakan kasus mana yang benar dan mana yang palsu). Kebenaran didefinisikan oleh "akan mengambil brench".Ul1E
juga harus bekerja (walaupun saya tidak tahu Ohm) karena tidak perlu menangani 0.APL, 5 byte
2 byte disimpan berkat @KritixiLithos
Cobalah online!
sumber
⊢≡1⌽⊢
.⊢
dengan⍕
untuk menangani string dan angka.Java, 21 byte:
l
adalahMutableList<Character>
dari koleksi gerhana.sumber
l
bisa juga menjadi CharAdapter.Kotlin ,
2819 byteCobalah online!
Mengambil input sebagai
String
karenaPenjelasan
Jika Anda tidak suka fakta dibutuhkan
String
, Anda dapat memiliki satu yang mengambilInt
untuk 24 byte .sumber
Regex (ECMAScript), 31 byte
Cobalah online!
Mengambil input di unary, seperti biasa untuk regex matematika (perhatikan bahwa masalahnya sepele dengan input desimal: adil
^(.)\1*$
).Penjelasan:
sumber
PHP, 30 byte
sumber
Neim , 1 byte
Cukup periksa bahwa semua elemen sama.
Tanpa builtin, 2 byte:
Penjelasan:
Ini bekerja karena hanya
1
dianggap benar di Neim, dan yang lainnya salah.Atau, untuk 4 byte:
Penjelasan:
Cobalah!
sumber
C, 38 byte
Secara rekursif berjalan seutas tali. Jika dua karakter pertama berbeda (
*s^s[1]
) maka kita berhasil hanya jika kita berada di akhir string (!s[1]
) kalau tidak kita ulangi tes di posisi berikutnya (f(s+1)
).Program uji
sumber
Java,
383323 byten
adalahString
, secara alami.Perhatikan bahwa tidak perlu untuk
^...$
dalam regex karena secara otomatis digunakan untuk pencocokan tepat (sepertimatch
metode), dibandingkan dengan menemukan dalam string.Cobalah!
Menghemat
String
karena "Anda dapat mengambil dan menggunakan input sebagai string dengan impunitas."sumber
matches
tidak memerlukan^$
karena cocok dengan seluruh String. Jadi +1 pasti dari saya. ;)R, 25 byte
Cobalah online
Solusi non-regex terbaik yang bisa saya buat adalah 36 byte:
sumber
rle(charToRaw(scan(,'')))$v[2]<1
Cubix , 15 byte
Cobalah online!
Tonton Jalankan
Keluaran 1 untuk kebenaran dan tidak ada untuk falsey
Sangat mudah dibaca membaca di input satu karakter sekaligus. Ini menghilangkan karakter saat ini dari sebelumnya. Jika bukan hasil nol maka segera berhenti. Kalau tidak, itu terus memasukkan dan membandingkan sampai EOI. Pada EOI (-1), negasikan dan keluar
sumber
QBasic 4.5, 55 byte
Saya sudah menghitungnya! FOR-loop memeriksa jumlah digit pada input, lalu membuat
c
, yang merupakan serangkaian panjang 1 sama dengan input. Angka kemudian adalah repdigit jika ia memodulasi satu-string == 0.Cobalah online! Perhatikan bahwa penerjemah online agak aneh dan saya harus menulis beberapa pernyataan bahwa IDE QBasic berbasis DOS akan berkembang secara otomatis.
sumber