Diberikan tumpukan jerami persegi panjang dengan ukuran setidaknya 2x2 yang terdiri dari semua karakter ASCII yang dapat dicetak, mengeluarkan lokasi (dihitung dari kiri atas) dari jarum yang merupakan karakter yang berbeda.
Misalnya, jika tumpukan jerami berikut ini dimasukkan:
#####
###N#
#####
#####
Outputnya harus 3,1
ketika indeks-nol (apa yang akan saya gunakan dalam tantangan ini) atau 4,2
ketika indeks-satu.
Tumpukan jerami dapat terdiri dari karakter ASCII yang dapat dicetak:
^^^
^^^
^N^
^^^
^^^
^^^
keluaran: 1,2
dan jarumnya adalah karakter ASCII lainnya yang dapat dicetak:
jjjjjj
j@jjjj
jjjjjj
keluaran 1,1
Mungkin juga ada jarum di sudut:
Z8
88
keluaran 0,0
88
8Z
keluaran 1,1
atau memiliki jarum di ujung:
>>>>>>>>>>
>>>>>>>>>:
>>>>>>>>>>
keluaran 9,1
Aturan dan Klarifikasi
- Input dan output dapat diberikan dengan metode apa pun yang mudah . Ini berarti Anda dapat mengambil input sebagai daftar daftar karakter, sebagai string tunggal, dll.
- Anda dapat mencetak hasilnya ke STDOUT atau mengembalikannya sebagai hasil fungsi. Silakan sebutkan dalam kiriman Anda apa urutan output (yaitu, horisontal kemudian vertikal, seperti yang digunakan dalam tantangan, atau sebaliknya).
- Program lengkap atau fungsi dapat diterima.
- Kamu lakukan tidak bisa memilih karakter mana yang akan digunakan. Itulah tantangannya.
- Tumpukan jerami ini dijamin setidaknya berukuran 2x2, sehingga tidak ambigu yang merupakan jarum dan yang merupakan jerami.
- Hanya ada satu jarum di input, dan hanya ada satu karakter dalam ukuran.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
88\n8Z
(dengan dua karakter saja).("########N###########", 5)
Jawaban:
R ,
494744 byteCobalah online!
Mengambil input sebagai matriks, mengembalikan koordinat 1-diindeks
sumber
which
penugasan memalukan halus.Perl 6 ,
41 3837 byte3 byte disimpan berkat @nwellnhof.
1 byte disimpan berkat Jo King.
Cobalah online!
Penjelasan
Dibutuhkan input sebagai daftar daftar karakter dan mengembalikan daftar panjang 2 yang berisi koordinat X dan Y berbasis jarum nol.
Ia bekerja dengan menerapkan blok
{[+] ^∞ Z* !<<.&[Z~~]}
pada input dan pada transposnya..&[Z~~]
menelusuri semua kolom argumen dan kembaliTrue
jika semua elemennya sama,False
jika tidak. Kami kemudian meniadakan semua nilai (jadi kami memiliki daftar dengan satu bool per kolom, di mana bool menjawab pertanyaan "Apakah jarum di kolom itu?"), Kalikan dengan elemen-elemen dengan urutan 0,1,2 ,. .. (True = 1
danFalse = 0
) dan jumlahkan daftar, sehingga hasil dari seluruh blok adalah angka berbasis-0 dari kolom tempat jarum itu ditemukan.Pendekatan Nwellnhof yang lebih baik, Perl 6 , 34 byte
Cobalah online!
Penjelasan
Umumnya pendekatan yang sama, hanya lebih efektif. Masih menggunakan blok pada array dan transposnya, tetapi sekarang blok mengubah semua baris menjadi
Sets
dan memeriksa jumlah elemen. Thefirst
Fungsi kemudian memberikan indeks (karena:k
) dari baris pertama yang berisi lebih dari 1 elemen. Karena itu, urutan$_
dan.&[Z]
perlu ditukar.sumber
first(:k)
,Set
dan.&[Z]
..&[Z]
.).&[op]
tampaknya tidak setara dengan[op] $_
tetapi berfungsi denganZ
beberapa alasan.Python 2 , 57 byte
Cobalah online!
Port ini ke Python 3 bisa 62 byte :
Pemahaman daftar,,
[len(set(v))for v in a]
lebih pendek dari peta ganda dengan dua byte sekarang karena perlu dilemparkan ke daftar sepertilist(map(len,map(set,a)))
Cobalah online!
sumber
Brachylog , 20 byte
Cobalah online!
Keluaran
[I,J]
, di manaI
indeks baris danJ
indeks kolom, keduanya diindeks 0.Sangat panjang, tetapi mendapatkan indeks di Brachylog biasanya sangat bertele-tele.
Penjelasan
sumber
PHP ,
9985 byteMenggunakan string tanpa baris baru dan lebar (atau tinggi
('########N###########', 5
) sebagai input.Cobalah online!
Tidak Disatukan:
Keluaran:
sumber
chr
: Jika parameter kedua untuk strpos adalah bilangan bulat, itu akan ditafsirkan sebagai kode ASCII. -> -5 byte. 2) Dua parameter fungsi$s,$w
dapat menyimpan 9 byte lainnya.05AB1E ,
96 byteDisimpan 3 byte beralih format input.
Input diambil sebagai string dan panjang baris.
Output adalah daftar formulir berbasis nol
[y, x]
Cobalah online! atau sebagai Test Suite
Penjelasan
sumber
.m
...m
sebelumnya, tapi saya cukup yakin saya pernah melihatnya di beberapa titik :)Python 3 + NumPy ,
7566 byte-9 byte berkat hanya @ ASCII
Cobalah online!
Ini mengasumsikan bahwa input adalah array NumPy. Outputnya adalah indeks-nol, dan pertama vertikal, kemudian horizontal.
Itu mengkonversi input dari
char
untukint
kemudian menghitung median array, yang akan menjadi karakter tumpukan jerami. Kami kurangi itu dari array, yang menjadikan jarum sebagai satu-satunya elemen yang tidak nol. Akhirnya, kembalikan indeks elemen itu dengannumpy.where()
.sumber
uint8
kurang dari satu byte?uint8
kode ASCII yang benar . Saya berasumsi ini karena Python3 menggunakan Unicode sebagai format input standar untuk string.Jelly , 5 byte
Output [tinggi, lebar] (1-diindeks).
Cobalah online!
Jelly , 5 byte
Cobalah online!
sumber
Jelly , 4 byte
Mungkin ini bisa saja menjadi komentar untuk Tn. Xcoder itu sangat mirip ...
Tautan monadik yang menerima matriks karakter yang menghasilkan daftar satu item, 1-diindeks (baris, kolom) berkoordinasi dari kiri atas.
(... Sebagai program lengkap yang diberi argumen yang diformat sedemikian rupa sehingga menguraikan hasil dalam daftar daftar karakter - yaitu daftar string dalam format Python - koordinat tunggal dicetak.)
Cobalah online!
Bagaimana?
sumber
EƇ
pintar.JavaScript (ES6), 55 byte
Cobalah online!
JavaScript (ES6),
6564 byteDisimpan 1 byte berkat @Neil
Cobalah online!
Bagaimana?
sumber
~y&1
menyimpan byte lebihy&1^1
.Java 8,
132111 byte-8 byte (dan -13 lebih implisit) berkat @dana .
Input sebagai karakter-matriks.
Cobalah online.
Penjelasan:
sumber
return
pernyataan terakhir tidak boleh dipukul. Mungkin ada cara yang lebih baik untuk membuat loop luar terus berjalan?return"";
tidak terjangkau dan dapat dihapus juga. : D Jadi -21 byte, terima kasih.unreachable code
kesalahan. Tidak tahu bahwa menghapus finalreturn
adalah perbaikannya.i--
dan>
. :) Lihat jawaban SO ini untuk info lebih lanjut. Jadii > 0
dieksekusi pertama, memeriksa apakahi
lebih besar dari 0. Dan kemudiani
dikurangi dengan 1i--
, sebelum memasuki tubuh loop.MATL ,
128 byteCobalah online!
Menggunakan
mode
fungsi sebagai detektor mayoritas. Mengembalikan indeks berbasis 1.-4 karakter terima kasih kepada @LuisMendo
sumber
find
, bahkan di MATLAB. (Hai, btw!)Bahasa Wolfram
3758 byteEntri saya sebelumnya tidak benar menangani kasus di mana "karakter aneh keluar" berada di sudut kiri atas matriks. Ini tidak.
Counts@Flatten@#
daftar berapa banyak setiap karakter dalam array#
,.TakeSmallest[...,1]
mengembalikan hitungan yang paling jarang, dalam bentuk aturan asosiasi seperti<| "Z"->1|>
Keys...[[1]]
mengembalikan "kunci" ke satu-satunya item dalam asosiasi, yaitu karakter yang paling sedikit digunakan. ("Z" dalam kasus ini)#~Position~...
mengembalikan posisi tombol dalam matriks asli#
,.sumber
Perl 5
-p00
,5245 byte45 byte
52 byte
Bagaimana
-p00
: suka-n
tetapi juga cetak, mode paragraf/^(.)(\1* )*(\1*)|^/
: cocok dengan baik$1
: karakter pertama,:$2
pengulangan (tidak digunakan)$3
,: karakter sebelum "jarum" di baris,$&
seluruh pertandingan$_=
: untuk menetapkan variabel input / argumen default$&=~y/ //
jumlah baris baru dari$&
.$".
: concatenate with$"
(karakter spasi secara default) dan concatenatelength$3
: panjangnya$3
sumber
R 42 byte
Cobalah online!
Input: matriks tumpukan jerami
m
Output:
(row,col)
vektor - indeks mulai dari1
sumber
f=
dapat dihilangkan dari jumlah byte, tetapi bukanfunction(m)=
.C # (Visual C # Interactive Compiler) ,
109108107 bytePertama () => Terakhir () untuk -1 byte
currying untuk -1 byte terima kasih kepada Perwujudan Ketidaktahuan
Cobalah online!
sumber
J , 22 byte
Cobalah online!
NB. mengembalikan jawaban dalam format (baris, kolom).
sumber
Python 2 ,
5347 byteCobalah online!
Panggil sebagai
f("########N###########", 5)
(diizinkan dalam komentar ). Keluaran(y, x)
.Erik menyimpan 6 byte, menyarankan mengatur ulang output + menggunakan
divmod
. Terima kasih!sumber
divmod
builtin .PowerShell ,
107988277 byteCobalah online!
Mengambil string splatted dengan LFs. Mengembalikan lokasi yang diindeks nol x, y. Belum dibuka:
sumber
Python 3 , 93 byte
Cobalah online!
Input diambil sebagai string multiline. Output diindeks 0
sumber
Oktaf , 40 byte
Port dari jawaban MATL @ sundar . Output adalah vektor dua elemen dengan indeks kolom dan baris berbasis 1.
Cobalah online!
sumber
Retina 0.8.2 , 41 byte
Cobalah online! Diindeks 0. Penjelasan:
Izinkan
.
untuk mencocokkan baris baru. Ini biaya 3 byte (byte ketiga adalah?
sebelum¶
) tetapi menyimpan 6 byte.Cari dua karakter yang sama.
\1
kemudian menjadi jerami.Hitung jumlah baris baru sebelum jarum.
Tangkap jerami di sebelah kiri jarum.
Pastikan jarumnya bukan jerami atau baris baru.
Cocokkan sisa jerami sehingga hasilnya menggantikannya.
Keluarkan lebar jerami kiri dan jumlah baris baru.
sumber
C # (Visual C # Interactive Compiler) , 82 byte
Terima kasih kepada dana untuk mencukur 6 byte!
Cobalah online!
Solusi lama, 106 byte
Keduanya mengambil input sebagai string dan bilangan bulat yang menentukan jumlah kolom.
Cobalah online!
sumber
Enumerable.Last()
menerima delegasi, terima kasihJava 8, 104 Bytes
Input adalah array char, dan integer yang mengindikasikan lebar baris.
Output berbasis nol, vertikal kemudian horisontal (yaitu, nomor baris kemudian nomor kolom)
Penjelasan:
sumber
Python 3 ,
93898558 byteMasukan penulisan ulang lengkap menjadi
concatenated string, width
:Cobalah online!
Jawaban asli:
EDIT: Disimpan 4 byte dengan menukar linebreak / indentasi untuk titik koma. Disimpan 4 byte lagi dengan menggunakan
divmod
(terima kasih @JonathanFrech).Cobalah online!
Saya tahu ini bisa menjadi jauh lebih pendek, tetapi saya hanya ingin mencoba pendekatan seputar
dict
pemahaman ini .sumber
divmod
akan menghemat lima byte.MATL , 11 byte
Output adalah baris, lalu kolom; Berbasis 1.
Cobalah online!
Penjelasan
sumber
Pyth,
151412 byteMengambil input sebagai panjang baris dan input tanpa garis dan output sebagai [baris, kolom].
Coba di sini
Penjelasan
Pendekatan lama
Coba di sini
Penjelasan
sumber
Arang , 40 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Saya pasti melakukan sesuatu yang salah karena ini hampir sepanjang jawaban Retina. Penjelasan:
Periksa apakah karakter kedua di string pertama juga merupakan karakter pertama, dan ambil karakter pertama dari string pertama jika demikian sebaliknya karakter pertama dari string kedua jika tidak. Ini adalah jerami.
Teruslah membaca senar hingga ditemukan senar yang jeraminya kurang dari panjangnya.
Keluarkan posisi elemen yang tidak cocok dan kemudian jumlah string yang sebelumnya dibaca.
sumber
MATLAB,
6822 byte[r,c]=find(v~=v(1));if size(r,1)>1 disp([1,1]);else disp([r,c]);end;
Jika saya bisa mengecualikan satu kasus, seperti[1,1]
dalam solusi ini, saya bisa menyelamatkan beberapa byte.Solusi terbaru :
Terima kasih kepada @sundar karena telah membantu saya dengan masalah kasus khusus dan menghemat 42 byte! Juga, terima kasih kepada @Luis_Mendo untuk sarannya dan hemat saya 2 byte lagi!
sumber
[1,1]
kasus dengan menggunakanmode(v(:))
bukanv(1)
.v
. Juga, Anda mungkin bisa mengganti~=
dengan-
, dan menghapus final;
Röda , 81 byte
Cobalah online!
Mengambil input sebagai string yang berisi baris yang diakhiri baris baru. Mengembalikan aliran yang berisi indeks horizontal dan vertikal yang diindeks 0.
sumber