Masalah:
Tugas Anda adalah memutuskan apakah dalam suatu urutan angka, setiap angka mengandung setidaknya satu digit dari angka yang mendahuluinya.
Misalnya, yang berikut harus mengembalikan yang benar:
[1, 12, 203, 0, 30]
^ ^ Contains a 0
^ Contains a 2
^ Contains a 1
Yang berikut harus mengembalikan falsey:
[1, 32, 23, 34]
^ Doesn't contain a 1, therefore false
Kiriman Anda dapat berupa fungsi atau program lengkap.
Memasukkan:
Input dapat berupa jenis urutan yang masuk akal. Array angka, array string, string angka yang dibatasi, dll.
Urutan penting, jadi struktur apa pun yang Anda pilih untuk diterima sebagai input jelas harus memiliki pemesanan yang pasti.
Input dapat diambil melalui stdin atau sebagai argumen.
Anda dapat mengasumsikan:
semua angka akan berupa bilangan bulat non-negatif
input akan selalu mengandung setidaknya 2 angka
angka input tidak akan mulai dengan 0
Keluaran:
Output akan berupa nilai truey atau falsey (seperti yang didefinisikan oleh bahasa Anda), mewakili apakah spesifikasi di atas terpenuhi atau tidak.
Nilai kebenaran / kepalsuan tidak perlu konsisten di antara pengujian.
Ini bisa berupa output ke stdout atau dikembalikan.
Kasus uji:
True cases:
[1, 1, 1, 11, 111, 11, 1]
[12, 23, 34, 45, 56]
[65, 54, 43, 32, 21]
[123, 29, 9, 59, 55, 52, 2017, 2]
[1234567890, 19, 95, 5012, 23]
False cases:
[1, 2, 3, 4, 5, 1, 11] (2 doesn't contain a 1)
[12, 23, 33, 45] (45 doesn't contain a 3)
[98, 87, 76, 11, 12, 23] (11 doesn't contain a 7 or 6)
Ini adalah kode-golf, sehingga jumlah byte terkecil yang menang.
JavaScript (ES6),
4744 *43 byteMenyimpan satu byte berkat @Neil
Mengambil input sebagai daftar string.
Cuplikan tes
Tampilkan cuplikan kode
* ( dicoret 44 masih tetap 44 )
sumber
`[${p}]`
bekerjaa=>a.reduce((l,r)=>`${l}`.match(`[${r}]`)&&r)
(yang juga berfungsi untuk input numerik).p&&
jika Anda aturp=1/19
?05AB1E , 10 byte
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
€Sü.å
- Saya berharap ini bekerja seperti yang saya kira.ü.å
atau€Süå
.CJam ,
181514 byteDisimpan 4 byte berkat Martin Ender
Cobalah online!
Penjelasan
sumber
Haskell,
514835 Bytes-3 byte terima kasih kepada @NickHansen! Saya benar-benar harus menjadi lebih baik dengan operator monad itu
-4 dan -9 byte masing-masing berkat @Laikoni dan @nimi!
Versi ini mengambil input sebagai array dari string, menghilangkan kebutuhan akan
show
, tetapi sejauh yang saya bisa lihat itu berfungsi sebagian besar dengan cara yang sama seperti versi yang lebih lama:(Saya cukup yakin saya diizinkan untuk mengirim fungsi anonim seperti ini, tetapi saya akan memperbaikinya jika perlu)
Pertama angkanya dikonversi menjadi string. Kemudian sihir monad
zip=<<tail
menciptakan fungsi yang zip daftar dengan dirinya sendiri yang memasangkan setiap entri dengan tetangganya. Kemudianall
memetakan lambda untuk setiap pasangan yang memeriksa apakah satu string berisi karakter dari yang lain dan akhirnya memeriksa bahwa mereka semua keluarTrue
.Versi lama yang pada dasarnya bekerja dengan cara yang sama:
sumber
and.(zipWith(any.flip elem)=<<tail).map show
["1234567890", "19", "95", "5012", "23"]
, sehingga Anda dapat menjatuhkannya.map show
.Mathematica
62 4735 byteDengan 12 byte disimpan berkat MartinE.
sumber
Ruby,
4948 byteOutput
nil
untuk false dan integer "acak" untuk true.sumber
Java 8,
949087 byteInput adalah array string yang mewakili angka. Dimulai dengan string kedua, ia melakukan perbandingan ekspresi reguler terhadap setiap string sebelumnya untuk melihat apakah mengandung karakter nya:
.*[previous string].*
.Golf:
Tidak Disatukan:
sumber
a->{for(int i=1;i<a.length;)if(!a[i].matches(".*["+a[i++-1]+"].*"))return 0>1;return 1>0;}
( 90 bytes )a->{int r=1;for(int i=0;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
a->{int r=1,i=0;for(;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
Jelly , 6 byte
Cobalah online!
Penjelasan
Ini paling jelas untuk digunakan di
2/
sini, tetapi menjalankan fungsi unary pada semua irisan ukuran 2."Ḋ
secara efektif menjalankan fungsi biner pada semua pasangan elemen yang berdekatan, yang berarti kita dapat menggunakanf
secara langsung (daripada perlu mengubahnya menjadi unary berfungsi sebagaif/
). Ini pada akhirnya meninggalkan elemen terakhir dari input, tetapi untungnya bahkan input 0 tidak menjadi daftar kosong ketika dikonversi menjadi desimal, sehingga tidak berpengaruh padaẠ
.sumber
Python 3 , 48 byte
Cobalah online!
sumber
Jelly , 8 byte
Cobalah online!
Bagaimana?
sumber
05AB1E , 5 byte
Kode:
Menggunakan pengkodean CP-1252 . Cobalah online! atau Verifikasi semua kasus uji! .
Penjelasan:
sumber
RüÃõå_
adalah apa yang saya hasilkan sendiri. Saya merasa terhormat telah begitu dekat dengan jawaban terbaik Anda, menghapus milik saya. Mengapa Anda tidak membutuhkannyaR
?R
itu? : pPowerShell , 87 byte
Cobalah online!
Bukan yang terpendek dengan ukuran apa pun, tetapi pendekatan yang sedikit berbeda dari yang lain gunakan, dan memamerkan
|?{}
fungsionalitas bagus .Ini mengambil input sebagai larik string ke dalam
$n
, kemudian loop dari1
hinggalength-1
. Kami menggunakanWhere-Object
(itu|?{...}
) untuk mengeluarkan indeks yang benar untuk kondisi tertentu. Anda dapat menganggap ini sepertifor
lingkaran kombinasi denganif
klausa.Klausa di sini adalah
[char[]]$n[($i=$_)-1]|?{$n[$i]-like"*$_*"}
. Yaitu, kami mengambil indeks saat ini$_
, mengaturnya menjadi$i
, dan mengurangi1
, dan menggunakannya untuk mengindeks$n
(yaitu, jadi kami mendapatkan elemen sebelumnya dalam array input kami). Itu kemudian dilemparkan sebagaichar
-array dan dikirim melaluiWhere-Object
prosedur lain .Klausa bagian dalam
$n[$i]-like"*$_*"
menentukan bahwa string pada indeks saat ini$i
adalah-like
karakter saat ini$_
dari indeks sebelumnya. Oleh karena itu, ini akan menampilkan setiap karakter yang sama antara dua elemen array. Jadi, klausa luar hanya akan benar jika ada karakter yang sama (karena array kosong adalah falsey di PowerShell), dan indeks hanya akan dipilih jika ada karakter yang sama.Kemudian, kami mengumpulkan semua indeks yang cocok dengan kriteria, dan memverifikasi bahwa
.count
itu-eq
sesuai dengan panjang larik input. Hasil Boolean itu ditinggalkan di jalur pipa, dan hasilnya tersirat.sumber
Perl 5 , 31 byte
Port jawaban Martin Ender yang indah .
30 byte kode +
-p
bendera.Cobalah online!
sumber
APL (Dyalog APL) , 9 byte
Cobalah online!
∧/
semua yang ada di daftar×
tanda-tanda≢
dari penghitungan¨
setiap2∩/
persimpangan berpasangan dari⎕
input?sumber
PHP,
6568ulangi semua angka dan hapus semua angka yang muncul di sebelumnya. Hitung seberapa sering sama dengan angka itu sendiri (tidak ada digit yang dihapus). Jika setidaknya satu sama dengan kami, kami tidak memiliki kecocokan di salah satu pasangan.
Memperbaiki kesalahan menggunakan
trim
insted ofstrtr
. Terima kasih kepada @ JörgHülsermannsumber
["filename",1,11,414]
tidak bekerja.trim
hanya berfungsi untuk karakter terkemuka dan tertinggal. Memperbaikinya.a&
alih-alihnull!==
(-5 byte).$argv[$i]
, karena "Jika dari dan memiliki panjang yang berbeda, karakter tambahan di yang lebih panjang dari keduanya diabaikan." (dari manual)PHP, 75 byte
mengambil angka dari argumen baris perintah; keluar dengan
1
untuk kepalsuan, dengan0
untuk kebenaran.Jalankan dengan
-r
atau coba online .$b
= angka yang mengandung semua digit$b
argumen$b
1
0
sumber
PHP, 77 Bytes
sumber
foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v)):1;echo$t;
:, 77 byte (belum diuji).$k--
ke--$k
dan melepaskan satu) setelah itu pendekatan Anda harus bekerja dan Anda harus menambahkan @ untuk peringatan$k--
. Saya secara khusus menggunakannya sehingga $ k masih 0 pada jalankan pertama. Dan peringatan itu tidak bisa diabaikan. Itu berarti kode sekarang adalah 76 byte, tetapi masih belum teruji.foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v):1;echo$t;
itu berfungsi sebagaimana mestinya. Pengujian dengan$argv = array(1, 12, 123, 3, 34, 45, 5, 5);
display1
dan pengujian dengan$argv = array(1, 12, 123, 3, 34, 45, 5, 6);
display0
, seperti yang diharapkan.MATL , 14 byte
Cobalah online!
Terima kasih @LuisMendo karena menyimpan byte. Penjelasan:
sumber
1)VG
oleh1&)
(dan ini menghindari pengulangan angka pertama))
memberikan nilai yang dipilih sebagai output pertama, dan kemudian nilai yang tersisa sebagai output keduaClojure, 71 byte
Fungsi anonim yang menerima urutan angka. Pengembalian
true
/false
.Saya suka membaca. Pasti ada beberapa area yang dapat diperbaiki di sini. Fungsi saya diteruskan ke
map
tidak dapat dengan mudah diubah sehingga tidak memerlukan fungsi makro, yang berarti seluruh fungsi tidak dapat menggunakan makro, yang kemungkinan menambahkan beberapa byte. Akan lebih baik jika saya bisa mencari cara yang lebih baik untuk membongkar nilai-nilai dalamevery?
predikat.sumber
SimpleTemplate, 124 byte
Wow, ini latihan!
Ini "sederhana" membuat regex menggunakan elemen lama, ditampilkan
1
sebagai nilai yang sebenarnya, atau tidak sama sekali.Tidak Disatukan:
sumber
JavaScript (ES6), 37 byte
Menerima input sebagai serangkaian angka yang dipisahkan oleh baris baru. Berdasarkan @ MartinEnder ♦ jawaban Retina yang luar biasa, tetapi melakukan seluruh tes dalam satu regexp karena lebih pendek dalam JavaScript seperti itu.
sumber
Pip ,
1210 byteMengambil input sebagai serangkaian argumen baris perintah. Keluaran adalah daftar kosong untuk kebenaran dan daftar kosong untuk falsey. Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan
sumber
Röda ,
4535 byteCobalah online!
Ini mirip dengan solusi Perl 5, yang merupakan port dari solusi Retina oleh Martin Ender. -10 byte terima kasih kepada @Neil.
Berikut solusi yang berbeda (
7372 byte):Ini adalah fungsi anonim yang menarik string dari aliran dan memeriksa bahwa string berturut-turut berisi karakter yang sama. Penjelasan:
Mungkin bisa bermain golf lebih ...
sumber
^(\S*(\S)\S* (?=\S*\2))+\S+$
.Utilitas Bash + Unix,
7169 byteCobalah online!
Input ada di stdin, satu nomor per baris.
Output dalam kode keluar: 0 untuk truey, 1 untuk falsey.
Ini mungkin bisa lebih banyak golf.
Agar kode di atas berfungsi, tidak ada file apa pun di direktori saat ini yang namanya satu digit. Jika ini tidak dapat diterima, ganti
[\1]
dengan program dengan'[\1]'
(dengan biaya 2 byte tambahan).Contoh dijalankan (test case terakhir yang disediakan dalam tantangan):
(1 di sini adalah falsey.)
Bagaimana itu bekerja:
Saya akan menunjukkan pada contoh yang dijalankan di atas.
Perintah sed mengubah input menjadi:
Perintah tr kemudian mengubahnya menjadi string:
String ini adalah perintah shell untuk melakukan operasi yang diinginkan, jadi saya menyalurkannya ke sh dan saya selesai.
sumber
Q, 57 byte
Catatan: 0 ditambahkan untuk memulai array input dalam fungsi. Ini dilakukan agar perbandingan elemen pertama bisa dilakukan tamtama. Jika tidak, karakter terakhir dari elemen pertama akan diambil untuk perbandingan. Namun dapat melakukan pengecekan tipe yang menambahkan 7 byte dari jumlah saat ini.
sumber