내가 가장 좋아하는 수학 오락 중 하나는 사각형 격자를 그린 다음 해당 격자에 표시되는 모든 사각형을 찾는 것입니다. 여기 에이 질문을 가지고 자신을 위해 모험하십시오!
당신은 사각형의 수를 셀 수 있습니까?
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
이 4 x 4 minichess 보드 의 총 직사각형 수 는 정확히
100
맞습니까?
관련 수학 : 8 × 8 바둑판에는 몇 개의 사각형이 있습니까?
도전
환상 체가 아닌 격자 / 이미지 에서 보이는 사각형의 총 개수를 세는 가장 짧은 함수 / 프로그램 을 작성하십시오 .
관련 과제 : 고유 사각형을 세어보세요! , 2 차원 어레이의 바이트 직사각형 번호 찾기 .
입력 형식
함수 또는 프로그램은 텍스트 기반 입력 또는 그래픽 입력과 작동하도록 선택할 수 있습니다.
텍스트 기반 입력
격자는 다음 문자로 구성된 m x n ( m 행, n 열) ASCII 격자입니다.
- 공백,
-
수평선 세그먼트의 일부
|
수직선 세그먼트의 일부
+
코너.
이 ASCII 표를 다음과 같은 형식으로 프로그램 / 기능의 입력 / 인수로 소개 할 수 있습니다.
- 줄 바꿈으로 구분 된 단일 문자열
- 줄 바꿈은 없지만 그리드의 크기를 인코딩하는 하나 또는 두 개의 정수가있는 문자열 또는
- 문자열 배열
주 : 텍스트 기반 입력을 적어도 포함 1 행과 적어도 1 컬럼.
그래픽 입력
대안 적으로, 그리드는 5 * n 픽셀 폭 및 5 * m 픽셀 높이 의 흑백 PNG 이미지 로 인코딩된다 . 각 이미지는 다음과 같은 방법으로 ASCII 입력에 해당하는 5px * 5px 블록으로 구성 됩니다.
- 공백은 흰색 블록으로 변환됩니다. 이러한 블록을 공백 블록 이라고합니다 .
- 선분과 모서리는 공백 이 아닌 블록으로 변환됩니다 . 이러한 블록의 중앙 픽셀은 검은 색입니다.
- 편집 : 두 개의 모서리 (ASCII 입력)가 선 세그먼트로 연결된 경우 해당 블록 중심 (그래픽 입력)도 검은 선으로 연결해야합니다.
즉, 각 블록은 (더 큰 이미지를 보려면 여기를 클릭하십시오 . ) 에서만 선택할 수 있습니다 .
참고 : 파란색 경계는 설명 목적으로 만 사용됩니다. 그래픽 입력이 최소 인 5 넓은 PX 및 5 PX 높은. 그래픽 입력을 다른 이미지 파일 형식의 단색 이미지로 변환 할 수 있습니다. 변환하기로 선택한 경우 답변에 지정하십시오. 전환에 대한 처벌은 없습니다.
출력 형식
프로그램을 작성하는 경우 입력의 총 사각형 수를 나타내는 음수가 아닌 숫자를 표시해야합니다.
함수를 작성하는 경우 입력의 총 사각형 수를 나타내는 음수가 아닌 숫자도 반환해야합니다.
사례 사례
사례 1, 그래픽 : ( 30 PX * 30 픽셀), ASCII ( 6 행 6 COLS)
+--+
| |
| ++-+
+-++ |
| |
+--+
예상 출력 : 3
사례 2, 그래픽 : ( 20 PX * 20 픽셀), ASCII ( 4 행 4 COLS)
++-+
|+++
+++|
+-++
예상 출력 : 6
사례 3, 그래픽 : ( 55 PX * 40 픽셀), ASCII ( 8 행 11 COLS)
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
예상 출력 : 9
사례 4, 그래픽 : ( 120 픽셀 * 65 픽셀), ASCII ( 13 행, 24 COLS)
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
예상 출력 : 243
사례 5, 그래픽 : ( 5 PX * 5 . 픽셀 예, 그것은 이다 ASCII!이) : 그냥 하나의 공간.
예상 출력 : 0
사례 6, 그래픽 : ( 35 px * 20 픽셀), ASCII ( 4 행 7 COLS)
+--+--+
|++|++|
|++|++|
+--+--+
예상 출력 : 5
가정
보다 쉽게 생활 할 수 있도록 다음을 보장합니다.
- 존재함으로써 비 환상 , 격자가 가로 또는 세로 중 포장하지 않는다.
- 느슨한 끝이 없습니다. 예 :
+---
또는) +- -+
. 모든 선분에는 두 개의 끝이 있습니다.
+
해당 지점에서 만나는 두 선이 서로 교차해야합니다.
- 유효하지 않은 입력에 대해 걱정할 필요가 없습니다.
표준 허점에 대한 규칙이 적용됩니다. 사각형을 사각형으로 취급하십시오. 선택적으로 그리드의 각 행에서 후행 공백을 제거 할 수 있습니다.
이것은 코드 골프입니다 이므로 가능한 한 짧게 입력하십시오. 텍스트 기반 및 그래픽 솔루션은 서로 경쟁합니다.
리더 보드
var QUESTION_ID=137707,OVERRIDE_USER=11933;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>