오픈 소스 소프트웨어로서 Rebol의 임박한 릴리스에 대한 오래, 오래, 오랜 기한 발표를 감안할 때 , 나는 이 빙고 문제 를 해결하기 위해 애완 동물 방언으로 돌아 왔습니다 . 곧 Rebmu를 자체의 작은 GPL 패키지로 배포 할 수있을 것입니다. :)
간결한 표기법에서 :
rtZ5[GisGpcRaZisGaAPgPCaSB6zAPv'*]l5[AgL5[apGfAsk+A5]]hd+Gu[raGin-NTrM'*fisGv5]p"BINGO!"
방언은 트릭 I 전화 사용 mushing 상의 설명 Rebmu 페이지를 . 파서를 속이지 않는다는 의미에서 "합법적"이다. 이것은 유효한 Rebol입니다 ... 실제로 일반 코드뿐만 아니라 "긴 형식"의 Rebmu와 자유롭게 혼합 될 수 있습니다 ... BTW는 141 자입니다.
[rt z 5 [g: is g pc r a z is g a ap g pc a sb 6 z ap v '*] l 5 [a: g l 5 [ap g f a sk+ a 5]] hd+ g u [ra g in- nt r m '* fis g v 5] p "BINGO!"]
(압축이 자동화 또는 컴파일의 도움없이 수행 할 수있는 트릭이라고 주장하기 때문에 실제로는 코드를 숨겨진 형태로 개발합니다. 어렵지는 않습니다.)
실제로 매우 간단하고 특별한 것은 없습니다. 다른 Rebol 프로그래머가 문제를 해결할 수 있다고 확신합니다. 일부 주석 처리 된 소스는 GitHub 에 있지만 내가 사용하는 주요 트릭은 긴 시리즈 ( "목록", "배열", 무엇을 가지고 있는지)로 가능한 모든 솔루션을 작성하는 것입니다. 입력 루프 중에 대각선 솔루션을 작성합니다. 헤드에서 5 개의 삽입과 꼬리에서 5 개의 추가가 이루어 지므로 이미 5 개의 반복 루프가 진행 중입니다.
모든 것이 Rebol 코드에 쉽게 매핑되며, 아직 "매트릭스 라이브러리"를 Rebmu에 던져 넣지 않았습니다. 언젠가 나는 그렇게 할 것이지만 지금은 레볼 자체의 매체에 비교적 가깝게 일하려고 노력하고 있습니다. 암호처럼 보이는 것들 :
[g: is g pc r a z is g a ap g pc a sb 6 z ap v '*]
... 단순하다 :
[
; assign the series pointer "g" to the result of inserting
; the z'th element picked out of reading in some series
; from input that was stored in "a"...this pokes an element
; for the forward diagonal near the front of g
g: insert g (pick (readin-mu a) z)
; insert the read-in series "a" from above into "g" as well,
; but *after* the forward diagonal elements we've added...
insert g a
; for the reverse diagonal, subtract z from 6 and pick that
; (one-based) element out of the input that was stored in "a"
; so an element for the reverse diagonal is at the tail
append g (pick a (subtract 6 z))
; so long as we are counting to 5 anyway, go ahead and add an
; asterisk to a series we will use called "v" to search for
; a fulfilled solution later
append v '*
]
참고 : 명확성을 위해 위에 괄호를 추가했습니다. 그러나 영어 사용자와 같은 Rebol 프로그래머는 일반적으로 의사 소통에서 문법을 나타내는 추가 구조 설명을 적용하지 않고 다른 응용 프로그램을 위해 저장합니다.
이것이 실제로 얼마나 흥미로운지를 보여주는 추가 보너스처럼, 나는 보드를 합치기 위해 일반적인 코드를 섞어 넣을 것입니다. 프로그래밍 스타일은 실제로 다음과 호환됩니다.
rtZ5[GisGpcRaZisGaAPgPCaSB6zAPv'*]
temp-series: g
sum: 0
loop 5 * 5 [
square: first temp-series
if integer! == type? square [
sum: sum + square
]
temp-series: next temp-series
]
print ["Hey grandma, the board sum is" sum]
l5[AgL5[apGfAsk+A5]]hd+Gu[raGin-NTrM'*fisGv5]p"BINGO!"
그것은 유효한 Rebmu이며, Bingo를 플레이하기 전에 좋은 보드 합계를 제공합니다. 주어진 예에서는이라고 말합니다 Hey grandma, the board sum is 912. 아마 맞을 것입니다. 그러나 당신은 요점을 얻습니다. :)
row하나의 문자 이름으로 바꿀 수 있습니다. 테스트되지 않은 : 시도i in'*'*5]및 교체[x=='*']와 함께[x==i].