Memasukkan
Baris pertama adalah string tertentu yang diulang beberapa kali. Misalnya, bisa jadi abcabcabcabc
, [];[];[];
, dll dapat dipotong; misalnya: 1231231231
. Selalu temukan string terpendek; misalnya, jika garisnya adalah 22222
, maka stringnya adalah 2
, bukan 22
atau 22222
atau apa pun. String akan selalu diulang setidaknya 2 kali penuh.
Semua baris berikutnya akan menjadi pola yang diimbangi dengan angka apa pun. Misalnya, bisa jadi:
abcabcabc
cabcabcab
bcabcabca
(diimbangi dengan 1), atau bisa juga:
abcdefabcdefabcdefabc
cdefabcdefabcdefabcde
efabcdefabcdefabcdefa
(diimbangi dengan 4).
Salah satu karakter dalam input akan salah. (Dijamin tidak berada di baris pertama.) Misalnya, dalam input ini:
a=1a=1a=1
=1a=1a=1a
1a=11=1a=
a=1a=1a=1
=1a=1a=1a
yang 1
pada baris 3 adalah aneh keluar.
Keluaran
Anda harus mengeluarkan koordinat (berbasis nol, mulai dari kiri atas) dari yang aneh. Misalnya, dalam input di atas, output yang sesuai adalah 4,2
. Anda juga dapat menampilkan 4 2
, atau "4""2"
, atau bahkan [[4],[2]]
, atau format lainnya, selama Anda dapat mengetahui seperti apa seharusnya hasil tersebut.
Uji kasus
Memasukkan:
codegolfcodegolfco
egolfcodegolfcodeg
lfcodegolfcodegoff
odegolfcodegolfcod
golfcodegolfcodego
fcodegolfcodegolfc
Keluaran: 16,2
Memasukkan:
][[][][[][][[][][[][][[
[][][[][][[][][[][][[][
[][[][][[][][[][][[][][
[[][][[]]][[][][[][][[]
Keluaran: 8,3
Memasukkan:
...
. .
...
Keluaran: 1,1
Memasukkan:
ababa
babab
ababb
babab
Keluaran: 4,2
abc/cab/abc
- dan output di0 2
sini?Jawaban:
BashPerl,23122921817816416613810674 byteScript mengharuskan menggunakan
-n
switch, yang menyumbang dua byte.Gagasan menambahkan dua salinan dari semua pengulangan penuh dari pola telah diambil dari jawaban MT0 .
Berbeda dengan semua jawaban lain, pendekatan ini mencoba mengekstraksi pola jalur input saat ini di setiap iterasi; itu akan gagal pada baris yang berisi karakter aneh (dan menggunakan pola baris sebelumnya sebagai gantinya). Ini dilakukan untuk memasukkan ekstraksi pola dalam loop, yang berhasil menghemat beberapa byte.
Versi tidak disatukan
Contoh
Untuk test case
output dari versi golf adalah
artinya karakter aneh memiliki koordinat
16,2
.Pelanggaran terang-teranganini mengambil keuntungan dari format keluaran liberal.Tepat sebelum keluar, isi dari beberapa variabel khusus Perl adalah:
(
$n
berisi kecocokan dari subpola yang dapat diakses melalui backreference\n
.)sumber
^((.*?)(.*?))(?=\1+\2$)
Perl,
212191181168 byteschomp
bukannyachop
harus digunakan.Versi lama, 212 byte:
Versi tidak disatukan:
sumber
chop
tidak perlu- harus dihapus. finalexit print
dapat diganti dengandie
(tambahkan,$/
untuk menyembunyikan hal-hal tambahan (jika diperlukan)). jugalength$_
dapat diganti dengany///c
chop
, karena$
cocok sebelum baris baru di akhir string. Menyembunyikan hal-hal tambahandie
melalui baris baru yang ditambahkan tampaknya perlu bagi saya. Jugay///c
jauh lebih pendek darilength$_
dan satu byte lebih pendek daripadalength
tanpa yang tidak perlu$_
.C, 187 byte
Keterbatasan.
Versi golf
Versi tidak disatukan
sumber
Python,
303292Input melewati stdin. Saya akan menjelaskannya jika ada permintaan, tapi sepertinya saya tidak akan menang.
sumber
Perl,
157154Sunting : -3 terima kasih atas saran ardnew.
Butuh beberapa waktu (hidup dan mati, tentu saja, bukan 5 hari ;-)), dan gagasan tentang algoritma pada awalnya sulit dipahami (meskipun saya merasa itu ada di sana), tetapi akhirnya (dan tiba-tiba) semuanya menjadi jelas.
Jika panjang string adalah kelipatan dari panjang pola, dan bahkan jika string tidak dimulai dengan awal dari pola, string yang digabungkan dengan dirinya sendiri akan menghasilkan pola di tempat penggabungan (bayangkan pengulangan tak terbatas kata pada pita melingkar - tempat dari pengelasan tidak penting). Jadi, idenya adalah untuk memotong garis ke beberapa satuan panjang dan menyatukan aslinya. Hasilnya, bahkan untuk string yang berisi karakter yang salah, dijamin cocok dengan pola setidaknya sekali. Dari sana mudah untuk menemukan posisi karakter yang menyinggung.
Baris pertama dipinjam tanpa malu-malu dari jawaban Heiko Oberdiek :-)
sumber
/.{$n}/;$_=$&.$_;
dengans/.{$n}/$&$&/;
JavaScript (ES6) -
147133136 KarakterMengharapkan string yang akan diuji dalam variabel
s
dan output hasilnya ke konsol.Test Case 1
Keluaran
Test Case 2
Keluaran
Test Case 3
Keluaran
Test Case 4
Keluaran
Test Case 5
Keluaran
Test Case 6
Keluaran
sumber
s="xyxy\nyyxy"
,. Untuk baris kedua,match[4]
akan menjadiyy
; itu harus adily
.abab
polaababaababa
; Anda perlu menggunakan^…$
./^…\n/
bekerja atau/^…$/m
^
(setidaknya tidak untuk 6 test case yang saya daftarkan - tetapi mungkin ada contoh yang berlawanan di mana ia melakukannya sehingga saya meninggalkannya).