มันจะลอยหรือไม่


10

ความท้าทาย

รับสาย 2d ที่แสดงด้านล่างของเรือเป็นอินพุตคุณต้องพิจารณาว่าเรือจะลอยหรือไม่ สตริง 2D นี้สามารถอยู่ในรูปแบบใดก็ได้ที่สะดวกที่สุด (สตริงที่มีการขึ้นบรรทัดใหม่รายการของสตริงรายการของตัวอักษร ฯลฯ ) พิมพ์ค่าจริงถ้ามันจะลอยและค่าเท็จถ้ามันจะจม

เรือจะหงายท้องถ้าก้นมีความหนาแน่นไม่คงที่ดังนั้นตัวละครทุกตัวจะต้องเหมือนกัน นอกจากนี้ถ้าเรือมีรูขนาดใหญ่แสดงด้วยช่องว่างมันจะจมดังนั้นเรือของคุณจะต้องไม่มีรูที่มีพื้นที่มากกว่า 4 นี่คือตัวอย่าง:

########
#   ####
########
#  ## ##
#  #####
########

เรือลำนี้ใช้ได้เพราะหลุมที่ใหญ่ที่สุดในนั้นมีพื้นที่ 4 เรือนี้:

########
########
#     ##
#  #####
########

ไม่ถูกต้องเนื่องจากมีรูที่มีพื้นที่ 7 คุณสามารถสันนิษฐานได้อย่างปลอดภัยว่าภายนอกของอินพุตทุกอันจะเป็นรูปสี่เหลี่ยมผืนผ้าที่มั่นคงโดยไม่มีรู นี่คือการทดสอบเพิ่มเติม:

$$$$$$$$
***$$$$$
***$$$$$
***$$$$$
$$$$$$$$
Invalid density. Sink.

%%%%%%%%
%    % %
%%%%%  %
%    % %
%%%%%%%%
None of the holes are larger than 4. Float.

OOOOOOOO
OOOOOOO 
OOOOOOOO
OOOOOOOO
OOOOOOOO
The outside border is not solid. Undefined.

&&&&&&&&&&&&&
& & & & & & &
&& & & & & &&
& & & & & & &
&& & & & & &&
& & & & & & &
&&&&&&&&&&&&&
Although I would not be comfortable riding in this boat myself, 
none of the holes are larger than 4. It floats.

@@@@@
@   @
@   @
@   @
@@@@@
It sinks.

กฎระเบียบ

  • IO สามารถอยู่ในรูปแบบที่สมเหตุสมผล
  • ช่องโหว่มาตรฐานใช้
  • คำตอบที่สั้นที่สุดในการชนะไบต์
  • สตริงที่กำหนดจะประกอบด้วย ASCII ที่พิมพ์ได้ทั้งหมด

อะไรคือสิ่งที่ด้านล่าง ? อะไรคือสิ่งที่กรอบ ?
ข้อบกพร่อง

@flawr ด้านล่างเป็นสตริงที่คุณใช้เป็นอินพุต กรอบเป็นทางเลือกที่ดีของการใช้ถ้อยคำที่ฉันจะแก้ไขออก
James

A "สตริง 2d"? คุณหมายถึงรายการสตริงหรือไม่?
คดีฟ้องร้องกองทุนโมนิก้า

ฉันคิดว่ามี&เรือ
l4m2

เรือจะหงายท้องถ้าก้นมีความหนาแน่นไม่คงที่ดังนั้นตัวละครทุกตัวจะต้องเหมือนกัน " หากเส้นขอบด้านนอกเป็นตัวละครตัวเดียวและการตกแต่งภายในเป็นตัวละครที่แตกต่างกันมันจะมีความหนาแน่นที่ไม่สอดคล้องกัน
Jerry Jeremiah

คำตอบ:


3

Matlab, 106 ไบต์

s=input('');im=~(s-32);c=bwconncomp(im,4);disp(~nnz(cellfun(@nnz,c.PixelIdxList)>3)&nnz(unique(s(~im)))<2)

อินพุตเป็นเมทริกซ์ของอักขระเช่นสำหรับกรณีทดสอบครั้งแรก:

`['$$$$$$$$';'***$$$$$';'***$$$$$';'***$$$$$';'$$$$$$$$']`

คำอธิบาย:

s=input('');           %read input
im=~(s-32);            %convert input to bw image (space = black)
c=bwconncomp(im,4);    %calculate the connected components (4 connectivity)

disp(
     ~nnz(cellfun(@nnz,c.PixelIdxList)>3) %find out whether we have components that have more at least 4 pixels
     &nnz(unique(s(~im)))<2)              %find out if we have more than 1 non-space character
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.