Latar belakang: Terlalu banyak imigran gelap dari Blandia menyeberangi perbatasan ke Astan. Kaisar Astan telah menugaskan Anda dengan menggali parit untuk mengusir mereka, dan Blandia harus membayar biayanya. Karena semua juru ketik telah diketik hingga parit diatur, kode Anda harus sesingkat mungkin. *
Tugas: Diberikan peta 2D perbatasan antara Astan dan Blandia, membuat Blands membayar (dengan tanah) untuk parit perbatasan.
Sebagai contoh: Dengan sel-sel Astanian ditandai A
, sel-sel Blandic ditandai B
dan sel-sel parit ditandai +
(bingkai peta hanya untuk kejelasan):
┌──────────┐ ┌──────────┐
│AAAAAAAAAA│ │AAAAAAAAAA│
│ABAAAAAABA│ │A+AAAAAA+A│
│ABBBAABABA│ │A+++AA+A+A│
│ABBBAABABA│ │A+B+AA+A+A│
│ABBBBABABA│→│A+B++A+A+A│
│ABBBBABBBB│ │A+BB+A++++│
│ABBBBABBBB│ │A+BB+A+BBB│
│ABBBBBBBBB│ │A+BB+++BBB│
│BBBBBBBBBB│ │++BBBBBBBB│
└──────────┘ └──────────┘
Detail: Peta akan memiliki setidaknya tiga baris dan tiga kolom. Baris atas sepenuhnya menjadi Astania dan baris bawah sepenuhnya Blandic.
Anda dapat menggunakan tiga nilai untuk mewakili wilayah Astania, wilayah Blandic, dan parit perbatasan, selama input dan output konsisten.
Formulasi otomat: Sel Blandic dengan setidaknya satu sel Astanian di lingkungan Moore menjadi sel parit perbatasan.
Uji kasus
[
"AAAAAAAAAA",
"ABAAAAAABA",
"ABBBAABABA",
"ABBBAABABA",
"ABBBBABABA",
"ABBBBABBBB",
"ABBBBABBBB",
"ABBBBBBBBB",
"BBBBBBBBBB"
]
menjadi:
[
"AAAAAAAAAA",
"A+AAAAAA+A",
"A+++AA+A+A",
"A+B+AA+A+A",
"A+B++A+A+A",
"A+BB+A++++",
"A+BB+A+BBB",
"A+BB+++BBB",
"++BBBBBBBB"
]
[
"AAA",
"AAA",
"BBB"
]
menjadi:
[
"AAA",
"AAA",
"+++"
]
[
"AAAAAAAAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAABBBAAA",
"AAAAAAAAAA",
"BBBBBBABBB",
"BBBBBBAABB",
"BBBAAAAABB",
"BBBBBBBBBB"
]
menjadi:
[
"AAAAAAAAAA",
"AAAA+++AAA",
"AAAA+B+AAA",
"AAAA+++AAA",
"AAAAAAAAAA",
"++++++A+++",
"BB++++AA+B",
"BB+AAAAA+B",
"BB+++++++B"
]
* PERNYATAAN: TANGGAPAN APAPUN TERHADAP GEOPOLITIK AKTUAL ADALAH COINCIDENTAL PURELY!
<sup><sub><sup><sub><sup><sub><sup><sub>
:-Ppass
Rencana untuk membangun parit perbatasan menyebabkan shutdown pemerintah dan tidak ada yang terjadi.Jawaban:
Bahasa Wolfram (Mathematica) , 15 byte
Cobalah online!
Atau (39 byte):
Cobalah online!
Apa lagi yang kita harapkan dari Mathematica? Karakter yang digunakan adalah
{Astan -> 0, Blandia -> 1, Trench -> 2}
.sumber
MATL ,
118 byteTerinspirasi oleh @ flawr ini Octave jawaban dan @ lirtosiast ini Mathematica jawaban .
Input adalah matriks dengan Astan diwakili oleh
0
dan Blandia oleh1
. Parit diwakili dalam output oleh2
.Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES7),
8482 byteDisimpan 2 byte berkat @Shaggy
Cobalah online!
Berkomentar
sumber
K (ngn / k) , 23 byte
Cobalah online!
gunakan
0 1 2
untuk"AB+"
{
}
berfungsi dengan argumenx
~
logis tidak2{
}/
dua kali0,x,0
surround dengan 0-s (atas dan bawah matriks)3'
tiga kali lipat dari baris berturut-turut+/'
jumlah masing-masing+
mengubah urutanx&
logis danx
denganx+
tambahkanx
kesumber
APL (Dyalog Unicode) , 11 byte SBCS
ini didasarkan pada solusi 12-byte @ dzaima dalam obrolan . kredit ke @ Adám sendiri karena berpikir untuk menggunakan
∊
di dfn, dan ke @ H.Wiz untuk mengingatkan kita untuk menggunakan pengkodean yang sama untuk input dan outputCobalah online!
mewakili masing
'AB+'
-2 0 1
masing{
}⌺3 3
menerapkan fungsi pada setiap wilayah input 3 × 3 yang tumpang tindih, termasuk wilayah yang memanjang 1 unit di luar matriks, diisi dengan 0s2∊⍵
Apakah 2 hadir dalam argumen? kembalikan 0/1 boolean⊢⌈
maks per-elemen itu dan matriks aslisumber
display
yang saya lupa hapus. dihapus sekarangPowerShell , 220 byte
Ini tidak sekecil kiriman lainnya, tapi saya pikir saya akan menambahkannya untuk referensi. [DEPAN!]
Cobalah online!
sumber
0..$h|%{-join$(foreach($j in 0..$w){if ($a[$_][$j]-eq'B'-and($a[(m $_ $h)]|?{$_[(m $j $w)]-match'A'})){'+'}else{$a[$_][$j]}})}
207 byte?Oktaf ,
37 3126 byteFungsi ini melakukan erosi morfologis pada bagian Astan (
1-b
) dari "gambar" menggunakan , dan kemudian menggunakan beberapa aritmatika untuk membuat ketiga area simbol yang berbeda. Terima kasih @LuisMendo untuk -5 byte!conv2
imerode
Cobalah online!
sumber
J , 28 byte
Cobalah online!
'AB+'
->2 0 1
Terinspirasi oleh solusi APL ngn. 12 byte hanya untuk mengisi matriks dengan nol ...
sumber
⌺
(Stensil) melakukannya secara otomatis: "Persegi panjang dipusatkan pada elemen Y yang berurutan dan (kecuali ukuran persegi panjangnya 1), diisi dengan elemen isian."Arang , 20 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Bergabunglah dengan array input dengan carriage return daripada newlines biasa. Ini diperlukan agar karakter dapat dicetak secara individual.
Cetak string input tanpa menggerakkan kursor.
Ulangi setiap karakter dari string input.
Jika lingkungan Moore berisi
A
, dan karakter saat ini adalahB
...... lalu timpa
B
dengan+
...... jika tidak, cetak karakter saat ini (atau pindah ke baris berikutnya jika karakter saat ini adalah carriage return).
sumber
JavaScript, 85 byte
Lemparkan ini bersama tadi malam dan lupakan itu. Mungkin masih ada ruang untuk perbaikan di suatu tempat.
Input dan output adalah sebagai array dari digit array, digunakan
3
untuk Astan,0
untuk Blandia &1
untuk parit.Cobalah secara online (Untuk kenyamanan, peta dari & kembali ke format I / O yang digunakan dalam tantangan)
sumber
Javascript,
126118 byteLewati salah satu array string dari pertanyaan, dan Anda akan mendapatkan array array karakter
string(terima kasih @Shaggy!) Dengan menggunakan 0 untuk parit. Dapat mungkin akan golfed lebih (tanpa beralih ke array numerik), tapi aku tidak bisa memikirkan apa pun saat ini.sumber
Retina 0.8.2 ,
9280 byteCobalah online! Secara longgar didasarkan pada jawaban saya untuk Akankah saya keluar tepat waktu? Penjelasan: Apa pun
B
yang tepat di atas atau di bawahA
diubah menjadia
s. Ini kemudian mengurangi masalah untuk memeriksaB
s ke kiri atau kananA
s ataua
s. Itua
sendiri juga perlu diubah menjadi+
tentu saja, tetapi untungnyai
benderaT
hanya mempengaruhi pertandingan regex, bukan transliterasi yang sebenarnya, sehinggaA
tetap tidak terpengaruh.sumber
05AB1E , 29 byte
Matriks tidak benar-benar setelan kuat 05AB1E (juga bukan setelan kuat saya) .. Tapi pasti bisa bermain golf lagi.
Terinspirasi oleh @ ngn's K (ngn / k) jawaban , jadi juga menggunakan I / O dari matriks integer 2D dengan masing
012
-AB+
masing.Cobalah online . (Catatan kaki di TIO adalah mencetak hasil cetak dengan cantik. Jangan ragu untuk menghapusnya untuk melihat keluaran matriks.)
Penjelasan:
sumber
C # (Visual C # Interactive Compiler) , 187 byte
Alih-alih chaining
Take()
s,Skip()
s, danSelect()
s, alih-alih ini menggunakan double untuk loop untuk menemukan tetangga. Penurunan byte BESAR, dari 392 byte menjadi 187. Linq tidak selalu yang terpendek!Cobalah online!
sumber
Perl 5,
5846 byteTIO
-12 byte terima kasih kepada @Grimy
TIO
-p
suka-n
tapi cetak juga-00
mode paragraf/.\n/
cocok dengan karakter terakhir dari baris pertama@{-}
susunan khusus posisi awal pertandingan dari kelompok yang cocok sebelumnya, dipaksa sebagai string (elemen pertama)s/../+/s&&redo
ganti pertandingan dengan+
pertandingan saat/s
panji, sehingga.
cocok dengan karakter baris baruA(|.{@{-}}.?.?)\KB
cocokAB
atauA
diikuti oleh (lebar-1) hingga (lebar + 1) karakter diikuti olehB
\K
untuk menjaga kiriB
tidak berubahB(?=(?1)A)
,(?1)
dirverting recursive, untuk referensi ekspresi sebelumnya(|.{$m,$o})
(?=..)
lookahead, untuk mencocokkan tanpa mengkonsumsi inputsumber
/. /,@m=@-while s/A(|.{@m}.?.?)\KB|B(?=(?1)A)/+/s
(baris baru literal di regex pertama). TIO/. /;s/A(|.{@{-}}.?.?)\KB|B(?=(?1)A)/+/s&&redo
. TIOJava 8,
169145 byte-24 byte terima kasih kepada @ OlivierGrégoire .
Menggunakan
0
bukannyaA
dan1
bukannyaB
, dengan input berupa matriks integer 2D. Memodifikasi input-matriks alih-alih mengembalikan yang baru untuk menghemat byte.Sel-sel diperiksa sama seperti dalam jawaban saya untuk tantangan All the single eights .
Cobalah online.
Penjelasan:
sumber
m[i+k/3-1][j+k%3-1]
? 145 bytePowerShell ,
8680 byteCobalah online!
Peta adalah string dengan baris baru. Script ini menggantikan
B
untuk+
dengan regexp(?<=A(.?.?.{$MapWidth-1})?)B|B(?=(.?.?.{$MapWidth-1})?A)
.Skrip Tes yang kurang golf:
Keluaran:
sumber
Ruby , 102 byte
Cobalah online!
input / output sebagai string yang dipisahkan baris baru
sumber
Python 2 ,
123119 byteCobalah online!
I / O adalah daftar daftar
sumber
TSQL, 252 byte
Memisahkan string sangat mahal, jika string dipecah dan sudah dalam tabel jumlah byte akan menjadi 127 karakter. Script termasuk di bagian bawah dan sangat berbeda. Maaf telah mengambil ruang sebanyak ini.
Golf:
Tidak Disatukan:
Cobalah
TSQL, 127 byte (Menggunakan variabel tabel sebagai input)
Jalankan skrip ini di studio manajemen - gunakan "kueri" - "hasil ke teks" agar dapat dibaca
Cobalah - output peringatan dipilih dan tidak dapat dibaca. Dapat dibaca dengan cetak, tetapi itu tidak mungkin menggunakan metode ini
sumber