Baru-baru ini saya mengikuti tes Matematika dan memperhatikan bahwa angka tertentu pada tes tersebut cocok dengan pola yang menarik. Angka ( 28384
) cocok dengan urutan digit umum yang terlihat seperti ini
(n)(x)(n+1)(x)(n+2)(x)(n+3) etc...
di mana n
dan x
bilangan bulat satu digit. Urutan dapat dimulai dengan salah satu x
atau n
dan diakhiri dengan salah satu x
atau n+y
.
Tugas Anda adalah, diberi bilangan bulat positif multi-digit, menampilkan nilai true atau falsey, tergantung pada apakah input cocok dengan pola. Input akan antara 4 dan 18 digit. Anda dapat mengambil input sebagai representasi string dari integer. Input tidak akan mulai dengan 0 tetapi dapat berisi atau diakhiri dengan 0s.
n+y
akan selalu menjadi angka satu digit (karenanya mengapa batas panjangnya adalah 18).
Uji Kasus
Ini harus menghasilkan nilai yang benar
182838485868788898
4344
85868
12223242526
Dan ini harusnya palsu
12345
6724013635
36842478324836
1222232425
5859510511
Seperti halnya semua kode golf, kode terpendek menang! Semoga sukses dan semoga peluangnya, selalu menguntungkan Anda!
x
dann
bukan nol untuk angka yang sesuai dengan aturan?Jawaban:
Python 2 ,
84818079 byte-1 byte berkat ovs
Cobalah online!
Python 3 ,
82797877 byteCobalah online!
Sedikit lebih pendek di Python 3, tapi saya pikir itu tidak pantas jawabannya sendiri.
Penjelasan
Kami mengatur fungsi
g
yang mengambil string dan indeks (baik 1 atau 0).g
kemudian mengembalikan apakah atau tidaklen(set(x[a::2]))
, yaitu jumlah digit unik di setiap posisi lain, sama dengan(x[a==0::2]in"123456789")
, apakah digit lainnya berada dalam urutan menaik atau tidak. Jika digit dalam urutan menaik, ini mengembalikan apakah semuanya sama atau tidak, jika tidak akan bertanya apakah set kosong, yang tidak bisa, sehingga selalu kembali salah.sumber
x[a<1::2]in"123456789"
bisa"0"<x[a<1::2]<":"
(membandingkan karakter membandingkan karakter)a<1
? Sepertinya itu bisa adila
.Jelly ,
1311 byteCobalah online!
Penjelasan:
sumber
05AB1E , 15 byte
Cobalah online!
Penjelasan
Ini seharusnya bekerja (test case berhasil) tetapi jika Anda menemukan kekurangan tolong beri tahu saya.
14 Bytes jika tidak ada output yang dianggap palsu:
sumber
D, 117 byte
Jelas suboptimal, tetapi berfungsi dengan baik
Cobalah secara Online!
sumber
Haskell,
1081139795 byteContoh panggilan:
f "182838485868788898"
hasilTrue
Versi tidak dikoleksi dengan penjelasan:
sumber
isPrefixOf
tidak ada di Pendahuluan, jadi Anda harus memasukkanimport Data.List
dalam kode Anda atau menggunakan alternatif, misalnyaand(zipWith(==)(n:r)[n..])
.x/=y
bisa saja1>0
karena jika tidakx/=y
makax==y
kasus pertama menangkapnya.where
, mendefinisikanc
dand
sebagai fungsi tambahan di luarf
tidak masalah.f
kemudian dapat disingkat menjadif s@(_:n:_)=c s||c(n:s)
.;
. Itu jumlah byte yang sama tetapi meningkatkan keterbacaan kode.JavaScript (ES6),
666360 byteMengambil input sebagai string.
Uji kasus
Tampilkan cuplikan kode
sumber
C (gcc), 123 byte
Cobalah online!
sumber
Python 3 ,
99 9689 byteall()
fungsi&
|
dan mengganti variabel tambahan dengank<1
Cobalah online!
Penjelasan:
Pertama-tama pisahkan string menjadi dua daftar: satu dengan indeks yang aneh dan yang lainnya dengan elemen indeks yang rata. Dua daftar A dan B seharusnya sedemikian rupa sehingga:
ATAU justru sebaliknya
Kondisi berturut-turut diperiksa oleh:
a in '123456789'
Kondisi nomor yang sama diperiksa oleh:
all(i=a[x] for i in a)
sumber
i
dengank<1
dan meletakkani
argumen bersama-sama.&
sebagai gantinyaand
. Andaor
juga bisa diganti|
.PHP , 68 byte
Cobalah online!
Keluarkan bagian dari string pencarian mulai dari dan termasuk kemunculan input pertama hingga akhir string pencarian sebagai nilai sebenarnya dan tidak ada yang salah untuk falsy
untuk 2 Bytes lebih banyak, Anda dapat menggantinya
echo$s;
dengan!!echo$s;
untuk mendapatkan1
nilai kebenaranTemukan kemunculan input di salah satu string berikut dalam array
sumber
JavaScript (ES6), 54 byte
Mengambil input sebagai string.
sumber
MATL , 15 byte
Cobalah online!
Dengan bantuan @LuisMendo dalam obrolan. Perhatikan bahwa, jika output kosong + kesalahan juga dianggap 'salah', maka
X
dapat diabaikan, sehingga skor menjadi 14 byte .sumber
Mathematica, 121 byte
sumber
Pyth , 20 byte
Output
[]
ketika nomor cocok dengan pola digit, apa pun sebaliknya.Cobalah online!
Penjelasan (contoh dengan input
85868
)sumber
Pyth, 17 byte
Coba di sini
Algoritma yang sama dengan jawaban Jelly saya.
Penjelasan:
sumber
Python 3 ,
167 161 157 131106 byte-55 byte berkat saran @ WheatWizard
Cobalah online!
sumber
set(c)
sama dengan{*c}
. (setidaknya dalam python 3)[t[z]for z in range(0,len(t),2)]
juga hanya sambatan daftar. Anda dapat melakukannya hanya dengant[::2]
. Jika Anda tidak terbiasa dengan sintaks ini, saya sarankan untuk memeriksa dokumen, karena ini sangat berguna.Java (OpenJDK 8) ,
128119118108107104 byteCobalah online!
Penjelasan:
sumber
Retina , 47 byte
Cobalah online!
Output 1 jika cocok dengan pola, 0 jika tidak
Penjelasan
Konversi setiap digit n ke n + 1 di unary, dipisahkan oleh titik koma
(Trailing newline) mengonversi setiap digit menjadi perbedaan antara dirinya dan satu 2 tempat sebelumnya
(Mengikuti baris baru) menghapus 2 digit pertama
Menghitung jumlah kecocokan dari pola ini, yang memeriksa bolak 0 dan 1
sumber