Negara-negara memiliki serangkaian wilayah di dunia 1D. Setiap negara diidentifikasi secara unik oleh suatu angka. Kepemilikan wilayah dapat diwakili oleh daftar sebagai berikut:
1 1 2 2 1 3 3 2 4
Kami mendefinisikan teritori edgemost suatu negara sebagai dua teritori yang paling dekat dengan kedua sisi. Jika daftar di atas nol diindeks, 1
wilayah edgemost negara terjadi di posisi 0
dan 4
.
Suatu negara mengelilingi yang lain jika sublist antara dua wilayah edgemost-nya berisi semua wilayah negara lain. Dalam contoh di atas, sublist antara 2
wilayah edgemost negara adalah:
2 2 1 3 3 2
Dan kita melihat bahwa semua wilayah negara 3
berada di antara wilayah negara yang paling tinggi 2
, sehingga negara 2
mengelilingi negara 3
.
Negara dengan hanya satu elemen tidak akan pernah mengelilingi yang lain.
Tantangan
Ambil daftar bilangan bulat sebagai masukan (dalam format apapun) dan output truthy nilai jika negara manapun dikelilingi oleh yang lain, dan falsy nilai sebaliknya.
Anda dapat mengasumsikan bahwa daftar input tidak kosong, hanya berisi bilangan bulat positif, dan tidak 'melewatkan' angka apa pun: misalnya, 1 2 1 5
akan menjadi input yang tidak valid.
Uji Kasus
+----------------------+--------+
| Input | Output |
+----------------------+--------+
| 1 | False |
| 2 1 3 2 | True |
| 2 1 2 1 2 | True |
| 1 2 3 1 2 3 | False |
| 1 3 1 2 2 3 2 3 | True |
| 1 2 2 1 3 2 3 3 4 | False |
| 1 2 3 4 5 6 7 8 9 10 | False |
+----------------------+--------+
Jawaban:
Pyth, 7 byte
Jalankan kode pada test case.
Satu-satunya cara untuk menghindari sekitarnya adalah agar wilayah paling kiri negara itu diurutkan dalam urutan yang sama dengan wilayah paling kanan mereka. Jika dua negara ditukar dalam urutan ini, satu memiliki wilayah yang lebih kiri dan lebih jauh dari yang lain, dan sekitarnya.
Untuk mendapatkan negara unik dalam urutan wilayah paling kiri, kami cukup deduplicate, yang mempertahankan pesanan ini. Hal yang sama dilakukan untuk wilayah paling kanan dengan membalik, menduplikasi, lalu membalikkan lagi. Jika ini memberikan hasil yang berbeda, maka suatu negara dikelilingi.
sumber
Retina ,
6160 byteLebih lama dari yang saya inginkan ...
Mencetak jumlah negara yang mengelilingi setidaknya satu negara lain.
Cobalah online.
Ini adalah implementasi yang sangat mudah dari spec: kami mencari pola
A...B...A
sedemikian rupa sehinggaB
tidak muncul sebelum atau setelah pertandingan.sumber
Python, 64 byte
Satu-satunya cara untuk menghindari sekitarnya adalah agar wilayah paling kiri negara itu diurutkan dalam urutan yang sama dengan wilayah paling kanan mereka. Jika dua negara ditukar dalam urutan ini, satu memiliki wilayah yang lebih kiri dan lebih jauh dari yang lain, dan sekitarnya.
Fungsi memeriksa bahwa mengurutkan wilayah berdasarkan tampilan paling kiri dan penampilan paling kanan memberikan hasil yang sama. Sayangnya, daftar Python tidak memiliki
rindex
analog denganrfind
, jadi kami membalikkan daftar, lalu membalikkan output yang diurutkan.Panjang yang sama (64) dengan fungsi bantu:
sumber
C #, 113 byte
Tidak Disatukan:
Menggunakan
LINQ
pendekatan ringkas .sumber
int
kecuali Anda mengatakan sebaliknya". +1 untuk algoritme dan implementasi..ToArray()
.using System.Linq;
+n=>!n.Distinct().SequenceEqual(n.Reverse().Distinct().Reverse())
(sayangnya impor Linq wajib). Cobalah online. Jawaban yang bagus, +1 dari saya!CJam (
1413 bytes)Demo online
Terima kasih kepada Martin Büttner untuk penghematan sekali pakai.
sumber
Japt, 12 byte
Cobalah online!
Terima kasih kepada @xnor untuk mencari tahu algoritmenya. Array input disimpan secara otomatis
U
,â
uniqify,w
terbalik, dan¦
sedang!=
.¬
bergabung dengan string kosong ([1,2,3] => "123"
); ini diperlukan karena perbandingan JavaScript menghitung dua array sebagai tidak sama kecuali mereka adalah objek yang sama. Misalnya (kode JS, bukan Japt):Jika ini bukan masalahnya, kami dapat menghapus dua byte dengan tidak bergabung dengan setiap array:
sumber
ES6,
76756564 bytePort langsung jawaban @ xnor.
Sunting: Disimpan 1 byte dengan mengganti
a.lastIndexOf(x)==i
dengana.indexOf(x,i+1)<0
.Sunting: Disimpan 10 byte berkat @ user81655.
Sunting: Disimpan 1 byte dengan mengganti
r||i
denganr|i
.sumber
a=>(f=r=>a.filter((x,i)=>a.indexOf(x,r&&i+1)==(r||i))+a)()!=f(-1)
~
sama dengan>=0
.05AB1E , 4 byte
Cobalah secara online atau verifikasi semua kasus uji .
Jawaban Port dari xxor Pyth .
Penjelasan:
sumber
Java, 281 Karakter
sumber
Python 3, 90 byte
Fungsi ini yang mengambil input sebagai daftar Python. Sayangnya, daftar Python tidak secara langsung mendukung pencarian dari akhir seperti halnya string
rindex()
, tetapi oh well.sumber