Anda harus menulis program atau fungsi.
Input adalah 'peta' angka. Anda dapat memilih untuk mengambil peta sebagai string dengan karakter baris baru ( \n
) atau array string 2D.
Semua peta adalah 5 karakter dengan 5 karakter, dan karakter selalu berupa digit lebih besar dari 0 atau spasi.
Berikut ini contoh peta:
12 45
11233
233
1
2 899
Tugas Anda adalah menemukan komponen yang terhubung di peta. Komponen yang valid adalah serangkaian setidaknya tiga digit identik yang terhubung secara horizontal dan / atau vertikal ( bukan diagonal ) ( bukan spasi ). Anda kemudian perlu mengganti karakter dari komponen terhubung yang valid dengan x
s dan mencetak atau mengembalikan hasil itu.
Jadi, output untuk contoh di atas adalah:
x2 45
xx2xx
2xx
1
2 899
Berikut ini adalah test case lainnya (terima kasih kepada Martin Ender):
Input:
2 3
4
1 5
111 6
11 7
Output:
2 3
4
x 5
xxx 6
xx 7
Ini adalah kode golf sehingga kode terpendek dalam byte menang!
sumber
Jawaban:
JavaScript (ES6),
171161139137136133132 byteIni adalah terjemahan dari jawaban Python saya. I / O sebagai array karakter.
Sayang sekali tidak ada cara efisien untuk melakukan
sum
...sumber
Python 3,
238237200199192181 byteMenentukan fungsi
f(a)
yang mengambil input sebagai array karakter dan mengembalikan array yang sama dimodifikasi. ( Susunan karakter dapat diterima sebagai string secara default. )Tidak diganggu dengan penjelasan
Kode yang dimodifikasi bersifat rekursif, tetapi berfungsi sama.
sumber
Ruby, 304 byte
contoh penggunaan:
kode menggunakan kembali metode 'blot' untuk menghitung panjang jalur.
variabel / metode:
Cobalah penjelasan yang lebih terperinci:
buat salinan string input, yang kami gunakan untuk menemukan panjang jalur dari titik tertentu di peta.
mendefinisikan fungsi anonim 'ps' (panjang jalur) (lambda) yang mengambil indeks peta i sebagai argumen. mengembalikan panjang jalan dari titik itu. ia melakukan ini dengan memanggil metode 'b' (blot) untuk memasukkan x pada salinan peta asli dan kemudian menghitung jumlah x dalam string yang dikembalikan.
bagian berikut ini mengulangi setiap karakter dalam peta (indeks i, karakter s [i]). ia memanggil fungsi 'b' (blot) pada posisi peta i jika panjang jalur dari posisi i lebih besar dari 2, dan jika itu bukan spasi atau karakter baris baru.
fungsi b (blot) mengambil string peta dan indeks sebagai argumen. ini menginisialisasi @v (array yang dikunjungi) dan memanggil fungsi pembantu b2.
fungsi b2 mengambil string peta, posisi peta (i), dan karakter di jalur saat ini (c). itu menyebut dirinya secara rekursif untuk mengganti bagian digit yang terhubung dengan karakter 'x'. mengembalikan string input (ini agar fungsi ps dapat memanggil pemindaian () pada nilai kembali).
pernyataan if ini memeriksa bahwa posisi peta (i) yang diberikan adalah dalam batas-batas string (0 ... s.ukuran) dan bahwa karakter pada s [i] sama dengan karakter awal. juga @v [i] diperiksa untuk menghindari rekursi tak terbatas.
ini adalah bit yang menggantikan karakter pada index (i) dengan karakter 'x'. itu juga menandai indeks itu sebagai dikunjungi.
ini adalah di mana b2 menyebut dirinya secara rekursif mencari jalan. i + 1 adalah satu karakter ke kanan, i-1 adalah satu karakter ke kiri, i + 6 adalah satu baris ke bawah (5 digit + 1 baris baru = 6 karakter), i-6 adalah satu baris ke atas.
sumber
C (Ansi),
243233179188 BytesGolf:
Dengan Anotasi:
}
Memasukkan:
Harapkan baris baru di awal dan akhir string.
Input Contoh:
Contoh Output:
Memperbarui
Membuat grid diperbaiki memungkinkan saya untuk mencukur hampir 60 byte.
sumber
Mathematica, 180 byte
Penjelasan:
Fungsi murni yang menerima
5x5
array.
adalah karakter penggunaan pribadi 3 byte yangU+F3C7
mewakili operator transpos postfix\[Transpose]
.(f=Flatten@#;p=Partition)
: Ratakan daftar input dan simpan dif
. Setp = Partition
dan kembalikan.g=p[r,5]
: Array{{1,2,3,4,5}, ..., {21,22,23,24,25}}
(ini karenar
disetel keRange@25
).Join[g=p[r,5],g]
: daftar baris dan kolomg
.p[#,2,1]&
: Fungsi murni yang memecah daftar#
menjadi daftar panjang2
dengan tumpang tindih1
; yaitu, daftar pasangan yang berdekatan di#
.##&@@p[#,2,1]&
: Sama seperti di atas kecuali ia mengembalikan aSequence
.##&@@p[#,2,1]&/@Join[g=p[r,5],g]
: Memetakan fungsi sebelumnya dari baris dan kolomg
untuk mendapatkan daftar semua entri yang berdekatan dig
. Naluriku mengatakan ada cara yang lebih pendek untuk melakukan ini.r~Graph~Cases[...]
: Grafik yang simpulnya adalah bilangan bulat1, ..., 25
dan ujung-ujungnya adalah tepi antara entri yang berdekatang
yang memiliki entri terkait yang sama dalam array input (selain" "
){a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" "
: Pola yang cocok{a,b}
sehinggaf[[a]] == f[[b]]
(nilai yang sama dalam array input) dan yang tidak sama dengan" "
. SetelA = f[[a]]
untuk menyimpan1
byte....:>a<->b
: Ganti setiap kecocokan dengan ujung yang tidak terarah dari a ke b.VertexComponent
: Mengembalikan komponen yang terhubung dari argumen kedua (titik) di argumen pertama (grafik).Tr[1^VertexComponent[...]]
: Ukuran komponen yang terhubung. Menghemat1
byte dariLength@VertexComponent[...]
.If[Tr[...]<3,f[[#]],"x"]&
: Fungsi Pure yang mengambil sebuah entri#
dig
. Jika ukuran komponen yang terhubung kurang dari3
, ganti dengan entri yang sesuai di input. Kalau tidak, ganti dengan"x"
.(f=Flatten@#;p=Partition)[...,5]
: Dan akhirnya membentuk kembali hasilnya menjadi sebuah5x5
array.sumber
Clojure, 188 byte
Ini cukup luar biasa: D
Disebut seperti ini (dibutuhkan 1D vektor karakter):
Terlalu malas untuk ungolf itu tetapi pada dasarnya
for[m(range 30)]
mengunjungi setiap indeks dan untuk setiap indeks bagian dalamlet[n(for[p[-1 -6 1 6]...(+ m p))]
membuat daftar elemen 0 sampai 4 yang daftar lokasi yang memiliki nilai yang sama (1 - 9) sebagai lokasi tengah. Jika lebih dari 1 tetangga cocok dengan bagian tengah itu berarti bahwa semua ini membentuk sebuah cluster, sehingga lokasi tersebut ditambahkan ke set yang digunakan di(if((set(flatten(...)))i)
. Jika indeksi
ditemukan dari himpunan maka\x
dipancarkan dan nilai aslinya sebaliknya. Itu:when( ... )
cukup menarik ...sumber