Tujuan dari tugas ini adalah untuk mengidentifikasi, membersihkan, dan menandai semua wajah dalam 'gambar' tertentu.
Apa yang ada di wajah?
Wajah akan menjadi kotak ZxZ di mana Z adalah bilangan bulat ganjil yang lebih besar dari 1. Sudut kiri dan kanan atas dan pusat akan menjadi karakter 'O', dan garis bawah akan menjadi '\' dan '/' di sekitarnya cukup karakter '_' untuk mengisi sisa baris. Contoh:
wajah 3x3:
O O
O
\_/
wajah 5x5:
O O
O
\___/
wajah 7x7:
O O
O
\_____/
dll.
Memasukkan
Input akan berada di STDIN dan akan terdiri dari sejumlah string karakter dengan panjang yang sama.
Keluaran
Keluaran harus berupa input dengan semua wajah yang dikenali dibersihkan (yaitu semua karakter kecuali mata, hidung dan mulut harus dikeluarkan dari batas wajah) dan kemas (dikelilingi oleh karakter +, -, dan |). Di mana dua atau lebih wajah tumpang tindih keduanya harus dibersihkan dan dikotakkan tetapi prioritas harus diberikan pada wajah yang lebih besar (harus ditempatkan di atas); jika kedua muka berukuran sama, prioritas diserahkan pada kebijaksanaan pelaksana. Jika input tidak memiliki wajah, output harus sama dengan input.
Beberapa contoh
Memasukkan:
*******
*******
**O*O**
***O***
**\_/**
*******
*******
Keluaran:
*******
*+---+*
*|O O|*
*| O |*
*|\_/|*
*+---+*
*******
Input (wajah tidak lengkap):
*******
*******
**O*O**
*******
**\_/**
*******
*******
Keluaran:
*******
*******
**O*O**
*******
**\_/**
*******
*******
Input (wajah bersarang):
*******
*O***O*
**O*O**
***O***
**\_/**
*\___/*
*******
Keluaran:
+-----+
|O O|
| |
| O |
| |
|\___/|
+-----+
Input (banyak wajah):
~{$FJ*TBNFU*YBVEXGY%
FOCO$&N|>ZX}X_PZ<>}+
X$OOPN ^%£)LBU{JJKY%
@\_/$£!SXJ*)KM>>?VKH
SDY%£ILO(+{O:HO(UR$W
XVBFTER^&INLNLO*(&P:
>?LKPO)UJO$£^&L:}~{&
~@?}{)JKOINLM@~}P>OU
:@<L::@\___/GER%^*BI
@{PO{_):<>KNUYT*&G&^
Keluaran:
+---+*TBNFU*YBVEXGY%
|O O|&N|>ZX}X_PZ<>}+
| O |N ^%£)LBU{JJKY%
|\_/|£+-----+M>>?VKH
+---+I|O O|HO(UR$W
XVBFTE| |LO*(&P:
>?LKPO| O |&L:}~{&
~@?}{)| |@~}P>OU
:@<L::|\___/|ER%^*BI
@{PO{_+-----+YT*&G&^
Input (batas dekat):
~{$FJ*TBNFU*YBVEXGY%
OCO$&N|>ZX}X_PZ<>}+^
$OOPN ^%£)LBU{JJKY%{
\_/$£!SXJ*)KM>>?VKHU
SDY%£ILO(+{8:HO(UR$W
XVBFTER^&INLNLO*(&P:
>?LKPO)UJ^$£^&L:}~{&
~@?}{)JKOINLM@~}P>OU
:@<L::@BJYT*GER%^*BI
@{PO{_):<>KNUYT*&G&^
Keluaran:
---+J*TBNFU*YBVEXGY%
O O|&N|>ZX}X_PZ<>}+^
O |N ^%£)LBU{JJKY%{
\_/|£!SXJ*)KM>>?VKHU
---+£ILO(+{8:HO(UR$W
XVBFTER^&INLNLO*(&P:
>?LKPO)UJ^$£^&L:}~{&
~@?}{)JKOINLM@~}P>OU
:@<L::@BJYT*GER%^*BI
@{PO{_):<>KNUYT*&G&^
Input (wajah yang tumpang tindih):
~{$FJ*TBNFU*YBVEXGY%
FXC£$&N|>ZX}X_PZ<>}+
X$*OPN O%£)LBO{JJKY%
@:U%$£!SXJ*)KM>>?VKH
SDY%£OLO(+{P:HO(UR$W
XVBFTER^&IOLNLO*(&P:
>?L\___/JR$£^&L:}~{&
~@?}{)JKOINLM@~}P>OU
:@<L::@\_____/R%^*BI
@{PO{_):<>KNUYT*&G&^
Keluaran:
~{$FJ*TBNFU*YBVEXGY%
FX+---+-------+Z<>}+
X$|O |O O|JJKY%
@:| | |>?VKH
SD| O| |(UR$W
XV| | O |*(&P:
>?|\__| |:}~{&
~@+---| |}P>OU
:@<L::|\_____/|%^*BI
@{PO{_+-------+*&G&^
Jawaban:
Ruby,
304298295 karakterKanan bawah lebih disukai pada tumpang tindih jika wajah memiliki ukuran yang identik. Misal untuk input
itu mengakui keempat wajah dan hasil
Sunting 1: Seperti yang diusulkan Lowjacker, kita dapat mengganti
index
dengan pertandingan regex (-3 karakter). Selain itu,+1
dapat dikompensasi oleh char dummy tambahan sebelum pencocokan yang menyimpan char lain (-2 untuk+1
, +3 untuk char dummy, -2 karena kurung tidak diperlukan lagi). Dua lagi karena kita dapat menulis rentang juga tanpa tanda kurung.Sunting 2: Dua karakter lainnya disimpan dengan mengganti keduanya
if
dengan&&
dan yang lain menghapus kisaran sepenuhnya.sumber
(O=~/$/)
alih-alihO.index($/)
pada baris ketiga (menyimpan 3 karakter).if
pernyataan dengan&&
.Python -
1199941Saya menemukan masalah yang cukup menarik, jadi saya menyelesaikannya dengan Python. Ini kode terkompresi.
Berikut kode yang lebih mudah dibaca:
sumber