출처 : Wikipedia
이 문제를 해결 하려면 위 이미지 의 그림과 배경 과 유사한 두 개의 프로그램을 작성하여 하나는 인쇄 figure
하고 다른 하나는 인쇄해야 합니다 ground
. 구체적으로 :
- 입력을받지 않고 문자열을 인쇄하는 프로그램을 작성하십시오
figure
. 프로그램에서 허용되는 공백 문자 는 공백 (코드 포인트 0x20)과 줄 바꿈 (캐리지 리턴, 0x0D, 줄 바꿈, 0x0A 또는이 둘의 조합)입니다. -
줄 바꿈을 무시하고 공백 문자 (코드 포인트 0x20)와 공백이 아닌 문자의 수는 같아야합니다. 예를 들어, 이것은 유효한 프로그램입니다 (가설 적 언어로).
ab c d e f
첫 줄에는 후행 공백이 있습니다.
-
n 번째 공백 문자를 공백이 아닌 n 번째 문자로 바꾸면 프로그램이
ground
대신 인쇄되어야 합니다. 위의 예에서 프로그램은 다음과 같습니다.a b cde f
두 번째와 세 번째 줄에는 후행 공백이 있습니다.
양쪽 그림 과 접지 솔루션은 STDOUT로 인쇄 같은 언어로 전체 프로그램이어야한다. 두 경우 모두 하나의 선택적 후행 줄 바꿈을 인쇄 할 수 있습니다. STDOUT이 올바른 한 STDERR에 원하는 것을 출력 할 수 있습니다.
모든 프로그래밍 언어를 사용할 수 있지만 이러한 허점 은 기본적으로 금지되어 있습니다.
이것은 code-golf 이므로 바이트 단위로 측정 된 가장 짧은 유효한 답변이 이깁니다.
도우미 스크립트
이 CJam 스크립트 를 사용 하여 그림 과 지면 프로그램 사이를 변환 할 수 있습니다 . 둘 중 하나를 입력 필드에 붙여 넣기 만하면 프로그램이 실행됩니다. 또한 공간 수와 비 공백 수가 일치하지 않는지 알려줍니다.
리더 보드
function answersUrl(a){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(a,b){return"http://api.stackexchange.com/2.2/answers/"+b.join(";")+"/comments?page="+a+"&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(a){answers.push.apply(answers,a.items),answers_hash=[],answer_ids=[],a.items.forEach(function(a){a.comments=[];var b=+a.share_link.match(/\d+/);answer_ids.push(b),answers_hash[b]=a}),a.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(a){a.items.forEach(function(a){a.owner.user_id===OVERRIDE_USER&&answers_hash[a.post_id].comments.push(a)}),a.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(a){return a.owner.display_name}function process(){var a=[];answers.forEach(function(b){var c=b.body;b.comments.forEach(function(a){OVERRIDE_REG.test(a.body)&&(c="<h1>"+a.body.replace(OVERRIDE_REG,"")+"</h1>")});var d=c.match(SCORE_REG);d?a.push({user:getAuthorName(b),size:+d[2],language:d[1],link:b.share_link}):console.log(c)}),a.sort(function(a,b){var c=a.size,d=b.size;return c-d});var b={},c=1,d=null,e=1;a.forEach(function(a){a.size!=d&&(e=c),d=a.size,++c;var f=jQuery("#answer-template").html();f=f.replace("{{PLACE}}",e+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link),f=jQuery(f),jQuery("#answers").append(f);var g=a.language;g=jQuery("<a>"+g+"</a>").text(),b[g]=b[g]||{lang:a.language,lang_raw:g,user:a.user,size:a.size,link:a.link}});var f=[];for(var g in b)b.hasOwnProperty(g)&&f.push(b[g]);f.sort(function(a,b){return a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase()?1:a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase()?-1:0});for(var h=0;h<f.length;++h){var i=jQuery("#language-template").html(),g=f[h];i=i.replace("{{LANGUAGE}}",g.lang).replace("{{NAME}}",g.user).replace("{{SIZE}}",g.size).replace("{{LINK}}",g.link),i=jQuery(i),jQuery("#languages").append(i)}}var QUESTION_ID=101275,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",OVERRIDE_USER=8478,answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\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:350px;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="language-list"> <h2>Shortest Solution 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><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><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>
답변
젤리 , 20 바이트
그림
“¦ĠȮ“©ụd» Ṃ
9 개의 후행 공백. 온라인으로 사용해보십시오!
바닥
“ ¦ĠȮ“©ụd»Ṃ
후행 공백이 없습니다. 온라인으로 사용해보십시오!
작동 원리
첫째, 공백은 원자가 아니므로 문자열 리터럴 외부의 공백 문자는 프로그램에 영향을 미치지 않습니다.
문자열 리터럴은 Jelly의 내장 사전 기반 문자열 압축 을 사용하여 원하는 단어를 생성합니다. 압축 된 문자열의 문자로 시작 “
하여, 단부 »
, 및 사용 “
문자열의 배열을 생성하기 위해 내부적.
에서는 도 프로그램 “¦ĠȮ“©ụd»
문자열 수득 쌍 ( “인물”, “바닥”) 및 원자 Ṃ
선택하는 사전적인 최소값, 즉, “그림” .
지상 프로그램에서는 대신 “ ¦ĠȮ“©ụd»
문자열 쌍 ( “logicallyAbacs”, “ground”)이 생성 됩니다. 사전 최소값은 이제 “ground” 이며 이는 Ṃ
엄밀히 선택됩니다.
두 경우 모두 인터프리터는 마지막 반환 값 (즉, 선택된 최소값)을 STDOUT에 자동으로 인쇄합니다.
답변
파이썬 2, 53 바이트
교체 ·
두 답변의 공간 :
····················
print'······figureground'[6:12]#
인쇄 figure
합니다.
print'figureground'[
······6:12]#····················
인쇄 ground
합니다.
답변
05AB1E , 15 14 바이트
그림
'ŠÂ,'í¶
바닥
' ŠÂ,'í¶
CP-1252 인코딩을 사용합니다 . 후행 공백에 유의하십시오. 에서 그림 프로그램이 오류없이 정상 프로그램입니다. 다음 단어를 압축 해제합니다.
'ŠÂ -> figure
'í¶ -> ground
쉼표는 팝을 인쇄하고 figure
줄 바꿈으로 단어를 인쇄합니다 . 무언가가 인쇄되었으므로 더 이상 스택 상단이 인쇄되지 않습니다.
에 접지 프로그램,이 경우에 편리합니다 몇 가지 오류가 있습니다. 다음 부분 :
'<space>
스택 맨 위에 공백 문자를 넣습니다. 는 Š
인수에 대응 갖는 스택, 회전 3 . 스택에 요소가 하나만 있고 입력이 없으므로 스택을 지우는 예외가 발생합니다. 은 Â
스택의 상단을 두 갈래 있지만, 이것은 회전 연산자와 같은 스토리를 갖는다. 따라서 기본적으로 ,
명령은 아무것도 인쇄하지 않습니다.
즉, 프로그램은 여전히 스택의 맨 위에있는을 출력합니다 'í¶
. 로 결과 ground
.
답변
망막 , 31 바이트
그림:
| 그림 | 지상
바닥:
| 그림 | 바닥
그림 과 접지 . 두 프로그램 모두 유효한 도형 또는 지상 프로그램이 되려면 STDIN을 비워 두어야합니다.
답변
Pyth, 30 바이트
그림
"figure" "ground
14 개의 후행 공백.
바닥
후행 공백이 없습니다.
" figure""ground
작동 원리
오히려 유용하게도 공백은 Pyth에서 인쇄를 억제하는 반면 문자열 리터럴은 닫히지 않습니다. "
이 은 암시 적으로 닫힙니다.
제 프로그램 따라서 두 문자열로 구성 "figure"
하고 "ground "
. 첫 번째 문자열은 암시 적으로 인쇄되고 두 번째 문자열의 인쇄는 억제 figure
되어 인쇄됩니다.
두번째 프로그램은 두 개의 문자열로 구성 " figure"
하고 "ground"
. 첫 번째의 인쇄는 억제되고 두 번째의 인쇄는 암시 적으로 인쇄됩니다. 즉, ground
인쇄 만됩니다.
답변
MATL , 37 바이트
첫 번째 프로그램
'figure'
%x'ground'
각 줄에는 9 개의 후행 공백이 있습니다.
두 번째 프로그램
'figure'%
x'ground'
여기에는 통행 공간이 없습니다.
설명
정말 멋진 것은 없습니다 …
- 문 사이의 공백과 줄 바꾸기는 MATL에 의해 무시됩니다.
%
주석 줄이며 나머지 줄은 무시합니다.x
스택의 상단을 삭제합니다.- 스택은 프로그램 끝에서 암시 적으로 인쇄됩니다.
답변
자바, 180 바이트
.
공간으로 교체하십시오 .
“그림”을 인쇄합니다.
class
A{public
static
void
main(String[]a){System.out.println(
//"ground"
//
.....
........
......
....
...................................
..
........
..........
....
"figure");}}
“접지”를 인쇄합니다.
.....
........
......
....
...................................
..........
..
class
A{public
static
void
main(String[]a){System.out.println(
//
"ground"
//"figure"
);}}
............