Tantangan ini terinspirasi oleh iklan Wendy ini dari tahun 1984.
Ilustrasi oleh TS Rogers
Tugas Anda adalah menemukan 0xBEEF heksadesimal pada roti biner.
'Daging sapi' terdiri dari pola berikut:
1 0 1 1 (0xB)
1 1 1 0 (0xE)
1 1 1 0 (0xE)
1 1 1 1 (0xF)
Dan 'roti' terdiri dari matriks biner 12x12, seperti:
1 1 1 0 0 1 1 1 1 1 1 0
1 1 0 1 0 0 1 0 0 0 0 0
0 1 0 0 0 1 1 1 1 1 0 1
1 0 0 1 0 0 1 0 0 1 0 0
1 0 0 1 0 1 1 0 0 1 1 1
1 1 1 1 1 1 0 0 0 0 1 0
1 1 0 1 1 1 0 0 0 0 0 1
1 0 0 1 1 1 1 0 0 0 0 1
1 0 0 1 1 1 0 1 1 1 1 1
1 1 1 1 1 0 0 1 1 1 1 1
1 0 0 0 0 1 0 1 0 1 1 1
1 1 0 0 1 1 0 0 0 0 1 1
Memasukkan
Program atau fungsi Anda akan menggunakan matriks biner sebagai input. Format matriks sangat fleksibel, tetapi harus dijelaskan dengan jelas dalam jawaban Anda.
Misalnya:
string biner tunggal, dengan atau tanpa pemisah di antara baris:
"111001111110 110100100000..."
atau:
"111001111110110100100000..."
array string biner:
["111001111110", "110100100000", ...]
array angka (setiap angka yang menggambarkan satu baris setelah dikonversi kembali ke biner dan diisi dengan nol):
[3710, 3360, ...]
Keluaran
Koordinat (X, Y)
'daging sapi', (0, 0)
menjadi sudut kiri atas roti.
Atau, Anda dapat menggunakan koordinat berbasis 1 (tetapi bukan campuran dari kedua format, seperti berbasis 0 untuk X dan berbasis 1 untuk Y).
Untuk contoh di atas, jawaban yang diharapkan adalah (3, 4)
(berbasis 0) atau (4, 5)
(berbasis 1):
00 01 02 03 04 05 06 07 08 09 10 11
00 1 1 1 0 0 1 1 1 1 1 1 0
01 1 1 0 1 0 0 1 0 0 0 0 0
02 0 1 0 0 0 1 1 1 1 1 0 1
03 1 0 0 1 0 0 1 0 0 1 0 0
04 1 0 0 [1 0 1 1] 0 0 1 1 1
05 1 1 1 [1 1 1 0] 0 0 0 1 0
06 1 1 0 [1 1 1 0] 0 0 0 0 1
07 1 0 0 [1 1 1 1] 0 0 0 0 1
08 1 0 0 1 1 1 0 1 1 1 1 1
09 1 1 1 1 1 0 0 1 1 1 1 1
10 1 0 0 0 0 1 0 1 0 1 1 1
11 1 1 0 0 1 1 0 0 0 0 1 1
Sekali lagi, format apa pun yang masuk akal akan berfungsi selama itu ditentukan dalam jawaban Anda. Harap sebutkan juga jika Anda menggunakan koordinat berbasis 0 atau 1.
Aturan
- Anda dapat dengan aman berasumsi bahwa selalu ada persis satu 'daging sapi' pada roti. Kode Anda tidak diperlukan untuk mendukung kasus dengan lebih dari satu daging sapi atau tanpa daging sapi sama sekali.
- Pola daging sapi akan selalu muncul seperti yang dijelaskan. Itu tidak akan pernah diputar atau dicerminkan dengan cara apa pun.
- Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang. Celah standar dilarang.
Uji kasus
Dalam kasus uji berikut, setiap baris matriks dinyatakan sebagai representasi desimalnya.
Input : [ 3710, 3360, 1149, 2340, 2407, 4034, 3521, 2529, 2527, 3999, 2135, 3267 ]
Output: [ 3, 4 ]
Input : [ 1222, 3107, 1508, 3997, 1906, 379, 2874, 2926, 1480, 1487, 3565, 633 ]
Output: [ 3, 7 ]
Input : [ 2796, 206, 148, 763, 429, 1274, 2170, 2495, 42, 1646, 363, 1145 ]
Output: [ 6, 4 ]
Input : [ 3486, 3502, 1882, 1886, 2003, 1442, 2383, 2808, 1416, 1923, 2613, 519 ]
Output: [ 1, 1 ]
Input : [ 3661, 2382, 2208, 1583, 1865, 3969, 2864, 3074, 475, 2382, 1838, 127 ]
Output: [ 8, 8 ]
Input : [ 361, 1275, 3304, 2878, 3733, 3833, 3971, 3405, 2886, 448, 3101, 22 ]
Output: [ 0, 3 ]
Input : [ 3674, 2852, 1571, 3582, 1402, 3331, 1741, 2678, 2076, 2685, 734, 261 ]
Output: [ 7, 7 ]
(1,1)
)?y
,x
(yaitu urutan terbalik)?Jawaban:
Jelly ,
201716 byteInput dalam bentuk matriks Boolean, output adalah pasangan indeks berbasis 1 (Y, X) .
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
ṡ4Z€Ḅw€“Ье‘ĖUṀ
ṡ€4ḄZjw“¿ÇÇБ’d24
dengan pengindeksan berbasis 0, tapi sayangnya, satu byte lebih lama.vim,
126807776Mengharapkan input dalam formulir
Dan output (dengan indeks berbasis 1) sebagai
Terima kasih kepada Jörg Hülsermann karena secara tidak langsung menghemat 46 byte dengan membuat saya sadar bahwa regex saya sangat bodoh, dan untuk DJMcMayhem selama 3 byte lebih.
sumber
Yp
lebih baik daripadayyp
(meskipun saya tahu Anda keberatanY
: P) 2) spasi putihexec 'norm Go'
tidak diperlukan. Dan 3)kd{
lebih pendek darikdgg
. (Belum diuji itu)Y
karena saya memilikinya rebound di vimrc saya. : P Bahkan,kdgg
itu setara dengan adild{
, yang, secara mengejutkan, tidak menghapus baris saat ini.{
berubah menjadi gerakan karakter; jadi saya telah melakukan sesuatu seperti{d''
menghapus seluruh baris.JavaScript (ES6),
636056 byteMengambil input sebagai string karakter-dibatasi-ruang 155-karakter dari 12 string biner 12-digit, mengembalikan nilai indeks-nol. Sunting: Disimpan 3 byte berkat @ JörgHülsermann. Disimpan 4 byte berkat produk @ETH.
sumber
s.search(r)
bukanr.exec(s).index
?s=>[
menjadi(s,i)=>[
, karena Anda perlu mendefinisikan saya di suatu tempat: /C,
146177173163 byteTerima kasih kepada Numberknot untuk memperbaiki kode (menggeser tiga baris bawah).
Menyimpan 4 byte dengan mengganti
>>=1
dengan/=2
di 4 tempat. Menyimpan 10 byte lebih banyak dengan membiarkanx
dany
menjadi global dan defaultint
berkat MD XFTidak Disatukan:
Mengembalikan x, y (berbasis-0) dalam nibble tinggi dan rendah dari byte.
Pemakaian:
sumber
#define T(i,n)if((A[y+i]&15)==n)
dan bagian ifT(0,11)T(1,14)T(2,14)T(3,15)return
untuk menyimpan 6 byte. Ubah juga tanda tangan fungsiint b(int*A)
menjadi 4 byte lebih yang disimpan.MATL ,
2221 byteInput adalah matriks biner, dengan
;
pemisah baris. Output 1-berbasis di urutan terbalik:Y X
.Cobalah online! Atau verifikasi semua kasus uji dengan format input desimal.
Penjelasan
Pola terdeteksi menggunakan konvolusi 2D. Untuk ini,
1, -1
bukan1, 0
. Karena pola memiliki ukuran 4 × 4, kemunculannya terdeteksi oleh entri yang sama dengan16
dalam keluaran konvolusi.Juga, karena konvolusi memperkenalkan offset pada indeks yang terdeteksi, ini perlu diperbaiki dalam output.
sumber
Mathematica, 62 byte
Mengembalikan semua posisi matriks BEEF, diindeks 1. Input harus berupa matriks digit biner. Namun, x dan y pada output diaktifkan.
sumber
x
dany
beralih.Tergelincir , 28 byte
27 byte kode, +1 untuk
p
opsi.Membutuhkan input sebagai persegi panjang multiline dari 1 dan 0 tanpa spasi. Coba di sini (dengan testcase ketiga sebagai input).
Penjelasan
Slip adalah bahasa dari tantangan Pencocokan Pola 2-D . Sp3000 bisa mengatakan lebih banyak tentang hal itu daripada yang saya bisa, tetapi pada dasarnya ini merupakan bentuk regex yang diperluas dengan beberapa perintah arah yang memungkinkan Anda mencocokkan dalam dua dimensi. Kode di atas menggunakan perintah "slip" eponymous
\
, yang tidak mengubah arah match pointer tetapi bergerak menyamping dengan satu karakter. Itu juga menggunakan "grup stasioner"(?|...)
, yang cocok dengan sesuatu dan kemudian mengatur ulang pointer ke lokasi sebelumnya.Kode rusak sebagai berikut:
Ini cocok dengan
0xBEEF
kotak. Thep
pilihan output koordinat pertandingan, 0-diindeks.sumber
1011>001>1(11>){3}1>1
1(11>){3}
.PHP, 87 Bytes
string biner sebagai input tanpa pemisah, mengembalikan nilai yang diindeks nol.
array angka sebagai input 128 Bytes
14 Bytes disimpan oleh @Titus Terima Kasih
sumber
,
sebagai ganti.
diecho
dan Anda bisa menghapus tanda kurung. (-4)PREG_OFFSET_CAPTURE
: tambahkan,256
kepreg_match
parameter, hapus^(.*)
dari regex,$c[0][1]
bukanstrlen($c[1])
(-6)Java 7,
182177 byteSaya mengirim jawaban Karl Napf C ke JAVA Dan Terima kasih kepada Karl Napf karena telah menyelamatkan 5 byte dengan mengingatkan saya pada Bit magic. (Btw saya juga menemukan ide ini tetapi @KarlNapf mengembalikan ide bagian adalah milik Anda bukan milik saya). Maaf jika saya tidak menyenangkan Anda.
(Berbasis-0)
Tidak disatukan
sumber
a[y++]>>=1)
danif((a[y]&15)==
. Btw, saya menghitung 182 byte, bukan 183? : S...a[y++]/=2)
danif((a[y]&15)==...
.Retina, 47 byte
Saya ingin mengawali ini dengan permintaan maaf. Saya pikir ini mungkin mengerikan dan contoh buruk tentang bagaimana menggunakan bahasa, tetapi karena saya menggunakan Regex untuk jawaban Perl saya, saya pikir saya akan mencoba Retina. Saya tidak terlalu baik. :( Cuplikan di github sangat membantu saya!
Terima kasih kepada @ wullzx untuk komentarnya pada jawaban Perl saya untuk -3 byte dan @ Taemyr untuk menunjukkan masalah dengan metode saya!
Mengharapkan input sebagai string biner yang dipisahkan ruang dan output mengoordinasikan ruang yang dipisahkan.
Cobalah online!
Verifikasi semua tes sekaligus.
sumber
You can safely assume that there is always exactly one 'beef' on the bun. Your code is not required to support cases with more than one beef or no beef at all.
? Itu dapat diatasi dengan pengubah ungreedy jika perlu sekalipun(.{12})*?(.)*?
.Scala, 90 byte
Penjelasan:
(a -> b) andThen (b -> c)
menghasilkan suatu(a -> c)
fungsi, itu seperti kebalikan dari menulis, tetapi membutuhkan lebih sedikit anotasi jenis dalam scala. Dalam hal ini, dibutuhkan string angka biner sebagai input dan mengembalikan tuple indeks berbasis nol.sumber
J,
3129 byteInput diformat sebagai array 2d dari nilai biner, dan outputnya adalah koordinat berbasis nol sebagai array
[y, x]
.Konversi rata dan dasar untuk menemukan indeks adalah sesuatu yang saya pelajari dari komentar oleh Dennis.
Pemakaian
Penjelasan
sumber
Python 2,
989592 byteInput adalah daftar string, output adalah string XY (indeks berbasis 1).
Uji di Ideone .
sumber
Perl, 54 byte
53 byte kode +1 untuk
-n
. Penggunaan-E
tanpa biaya tambahan.Menggunakan indeks berbasis 0. Mengharapkan input sebagai string dari
1
s dan0
s dan ruang output koordinat terpisah.Terima kasih kepada @ wullxz dan @ GabrielBenamy karena membantu saya menghemat 9 byte, dan atas komentar @ Taemyr pada jawaban Retina saya karena menunjukkan masalah!
Pemakaian
sumber
(.{8}1110){2}
alih-alih.{8}1110.{8}1110
length$`
menjadi$-[0]
\1
tetapi tidak berhasil, tidak berpikir untuk mencoba{2}
! Terima kasih!$-[0]
adalah offset dari awal pertandingan yang sukses terakhir.$-[n]
Adalah offset dari awal substring yang dicocokkan oleh sub-pola ke-n, atauundef
jika subpola tidak cocok." from: perldoc.perl.org/perlvar.html (cari@-
)Scala, 318 Bytes
Solusi ini dapat ditingkatkan lebih lanjut ... tapi saya tetap bisa dibaca dan memungkinkan input menjadi multi-line spaced matrix.
Solusi Aktual jika Array dari String biner
Contoh Bekerja
sumber
Python, 137 byte (menurut Linux (terima kasih ElPedro))
Bukan bytecount yang kompetitif, tetapi algoritmenya sedikit menarik. Mengambil input sebagai string nilai biner.
sumber
Ruby , 62 byte
Ini mengharapkan string
0
dan1
dan mengembalikan array Y dan X, berbasis nol.Coba ideone .
sumber
F # - 260 byte
Program lengkap, termasuk perancang EntryPoint yang diperlukan (jadi hitung lebih sedikit jika Anda mau).
Input: setiap baris sebagai string terpisah: "111001111110" "110100100000" "010001111101" "100100100100100" "100101100111" "111111000010" "11011100001" "100111100001" "100111011111" "111110011111" "100001010111" 1100 "
Kode:
Bukan solusi yang paling elegan, tetapi saya ingin tetap menggunakan string, jadi inilah yang saya lakukan. Saya hampir mendapatkannya menjadi satu baris dan lebih kecil menggunakan pipa, tetapi ada sesuatu dengan blok double if yang membuat saya tidak bisa menyelesaikannya. Oh, baiklah!
Saya juga berpikir tentang memasukkan jawaban Karl ke F # karena itu jawaban yang bagus, dan mungkin masih melakukan itu untuk bersenang-senang sebagai pendekatan lain, tetapi ingin tetap dengan yang ini agar berbeda.
sumber
Dyalog APL,
2927 byteMengambil array biner 12x12 sebagai input pengguna dan mengembalikan koordinat dalam urutan terbalik, indeks mulai dari 1.
Terima kasih kepada @ Adám karena telah menghemat banyak byte. -2 Bytes karena saya bodoh dan meninggalkan semuanya dalam suatu fungsi tanpa alasan.
sumber
~2 8 12∊⍨4 4⍴⍳16
dengan15 7 15 9⊤⍨4/2
. Catatan yang0~⍨∊{⍵×⍳⍴⍵}
dapat diganti dengan⍸
dari versi 16.0 (kode Anda hanya berfungsi di Dyalog APL).⍸
sedang ditambahkan dari v16, saya tidak dapat menemukan daftar primitif GNUAPL.Elemen , 130 byte
Cobalah online!
Mengambil input sebagai satu string panjang 1s dan 0s tanpa pembatas. Output seperti
3 4
(pengindeksan berbasis 0).Ini bekerja dengan menempatkan input data ke dalam "array" (pada dasarnya kamus dengan kunci integer) dan kemudian, untuk setiap nilai awal yang mungkin, menguji bit pada offset tertentu (kesemuanya 16 dari mereka dalam proses yang sangat melelahkan).
sumber