?::`}:("(!@
perfect:
{:{:;%"}
+puts; "
}zero: "
}else{(:
"negI" _~
""""""{{{"!@
Các ký tự Latinh perfect puts zero else neg I
thực sự chỉ là ý kiến *.
tức là nếu đầu vào hoàn hảo thì a 0
được in, nếu không thì -1
là.
Hãy thử trực tuyến!
* vì vậy cái này hay cái này cũng hoạt động ...
?::`}:("(!@ ?::`}:("(!@
: BEWARE :
{:{:;%"} {:{:;%"}
+ ; " +LAIR; "
} : " } OF : "
} {(: }MINO{(:
" " _~ "TAUR" _~
""""""{{{"!@ """"""{{{"!@
Làm sao?
Lấy đầu vào là một số nguyên dương n
và đặt biến tích lũy -n
lên ngăn xếp phụ, sau đó thực hiện kiểm tra chia hết cho từng số nguyên từ n-1
xuống, và bao gồm 1
, thêm bất kỳ số nào chia n
cho bộ tích. Một khi điều này hoàn thành nếu biến tích lũy khác không a -1
là đầu ra, nếu không thì 0
là.
Việc ?::`}:(
này chỉ được thực hiện một lần, khi bắt đầu thực hiện:
?::`}:( Main,Aux
? - take an integer from STDIN and place it onto Main [[n],[]]
: - duplicate top of Main [[n,n],[]]
: - duplicate top of Main [[n,n,n],[]]
` - negate top of Main [[n,n,-n],[]]
} - place top of Main onto Aux [[n,n],[-n]]
: - duplicate top of Main [[n,n,n],[-n]]
( - decrement top of Main [[n,n,n-1],[-n]]
Hướng dẫn tiếp theo "
, là không có, nhưng chúng tôi có ba hướng dẫn lân cận để chúng tôi phân nhánh theo giá trị ở đầu Main, zero đưa chúng tôi về phía trước, trong khi khác không đưa chúng tôi đi đúng.
Nếu đầu vào là 1
chúng tôi sẽ chuyển tiếp vì đỉnh của Main bằng 0:
(!@ Main,Aux
( - decrement top of Main [[1,1,-1],[-1]]
! - print top of Main, a -1
@ - exit the labyrinth
Nhưng nếu đầu vào lớn hơn 1
chúng ta rẽ phải vì đỉnh Main không khác không:
:} Main,Aux
: - duplicate top of Main [[n,n,n-1,n-1],[-n]]
} - place top of Main onto Aux [[n,n,n-1],[-n,n-1]]
Tại thời điểm này, chúng tôi có một chi nhánh ba người hàng xóm, nhưng chúng tôi biết n-1
là khác không, vì vậy chúng tôi rẽ phải ...
"% Main,Aux
" - no-op [[n,n,n-1],[-n,n-1]]
% - place modulo result onto Main [[n,n%(n-1)],[-n,n-1]]
- ...i.e we've got our first divisibility indicator n%(n-1), an
- accumulator, a=-n, and our potential divisor p=n-1:
- [[n,n%(n-1)],[a,p]]
Chúng tôi đang ở một chi nhánh ba người hàng xóm khác tại %
.
Nếu kết quả %
là khác không, chúng ta sẽ đi bên trái để giảm số chia tiềm năng của mình p=p-1
và rời khỏi bộ tích lũy a
, như sau:
;:{(:""}" Main,Aux
; - drop top of Main [[n],[a,p]]
: - duplicate top of Main [[n,n],[a,p]]
{ - place top of Aux onto Main [[n,n,p],[a]]
- three-neighbour branch but n-1 is non-zero so we turn left
( - decrement top of Main [[n,n,p-1],[a]]
: - duplicate top of Main [[n,n,p-1,p-1],[a]]
"" - no-ops [[n,n,p-1,p-1],[a]]
} - place top of Main onto Aux [[n,n,p-1],[a,p-1]]
" - no-op [[n,n,p-1],[a,p-1]]
% - place modulo result onto Main [[n,n%(p-1)],[a,p-1]]
- ...and we branch again according to the divisibility
- of n by our new potential divisor, p-1
... nhưng nếu kết quả %
bằng 0 (chỉ cho lần đầu tiên khi n=2
chúng ta đi thẳng vào BÓNG, hãy thêm số chia vào bộ tích lũy của chúng tôi a=a+p
, VÀ làm giảm ước số tiềm năng của chúng tôi , p=p-1
:
;:{:{+}}""""""""{(:""} Main,Aux
; - drop top of Main [[n],[a,p]]
: - duplicate top of Main [[n,n],[a,p]]
{ - place top of Aux onto Main [[n,n,p],[a]]
: - duplicate top of Main [[n,n,p,p],[a]]
{ - place top of Aux onto Main [[n,n,p,p,a],[]]
+ - perform addition [[n,n,p,a+p],[]]
} - place top of Main onto Aux [[n,n,p],[a+p]]
} - place top of Main onto Aux [[n,n],[a+p,p]]
""""""" - no-ops [[n,n],[a+p,p]]
- a branch, but n is non-zero so we turn left
" - no-op [[n,n],[a+p,p]]
{ - place top of Aux onto Main [[n,n,p],[a+p]]
- we branch, but p is non-zero so we turn right
( - decrement top of Main [[n,n,p-1],[a+p]]
: - duplicate top of Main [[n,n,p-1,p-1],[a+p]]
"" - no-ops [[n,n,p-1,p-1],[a+p]]
} - place top of Main onto Aux [[n,n,p-1],[a+p,p-1]]
Tại thời điểm này nếu p-1
vẫn là khác không, chúng ta rẽ trái:
"% Main,Aux
" - no-op [[n,n,p-1],[a+p,p-1]]
% - modulo [[n,n%(p-1)],[a+p,p-1]]
- ...and we branch again according to the divisibility
- of n by our new potential divisor, p-1
... nhưng nếu p-1
đạt 0, chúng ta sẽ đi thẳng lên :
dòng thứ hai của mê cung (bạn đã xem tất cả các hướng dẫn trước đó, vì vậy tôi sẽ bỏ các mô tả của họ ra và chỉ đưa ra hiệu ứng của chúng):
:":}"":({):""}"%;:{:{+}}"""""""{{{ Main,Aux
: - [[n,n,0,0],[a,0]]
" - [[n,n,0,0],[a,0]]
- top of Main is zero so we go straight
- ...but we hit the wall and so turn around
: - [[n,n,0,0,0],[a,0]]
} - [[n,n,0,0],[a,0,0]]
- top of Main is zero so we go straight
"" - [[n,n,0,0],[a,0,0]]
: - [[n,n,0,0,0],[a,0,0]]
( - [[n,n,0,0,-1],[a,0,0]]
{ - [[n,n,0,0,-1,0],[a,0]]
- top of Main is zero so we go straight
- ...but we hit the wall and so turn around
( - [[n,n,0,0,-1,-1],[a,0]]
: - [[n,n,0,0,-1,-1,-1],[a,0]]
"" - [[n,n,0,0,-1,-1,-1],[a,0]]
} - [[n,n,0,0,-1,-1],[a,0,-1]]
- top of Main is non-zero so we turn left
" - [[n,n,0,0,-1,-1],[a,0,-1]]
% - (-1)%(-1)=0 [[n,n,0,0,0],[a,0,-1]]
; - [[n,n,0,0],[a,0,-1]]
: - [[n,n,0,0,0],[a,0,-1]]
{ - [[n,n,0,0,0,-1],[a,0]]
: - [[n,n,0,0,0,-1,-1],[a,0]]
{ - [[n,n,0,0,0,-1,-1,0],[a]]
+ - [[n,n,0,0,0,-1,-1],[a]]
} - [[n,n,0,0,0,-1],[a,-1]]
} - [[n,n,0,0,0],[a,-1,-1]]
""""""" - [[n,n,0,0,0],[a,-1,-1]]
- top of Main is zero so we go straight
{ - [[n,n,0,0,0,-1],[a,-1]]
{ - [[n,n,0,0,0,-1,-1],[a]]
{ - [[n,n,0,0,0,-1,-1,a],[]]
Bây giờ điều này {
có ba hướng dẫn lân cận, vì vậy ...
... Nếu a
là 0, nó sẽ là hoàn hảo n
, thì chúng ta sẽ đi thẳng:
"!@ Main,Aux
" - [[n,n,0,0,0,-1,-1,a],[]]
- top of Main is a, which is zero, so we go straight
! - print top of Main, which is a, which is a 0
@ - exit the labyrinth
... nếu a
là khác không, nó sẽ không hoàn hảo n
, thì chúng ta rẽ trái:
_~"!@ Main,Aux
_ - place a zero onto Main [[n,n,0,0,0,-1,-1,a,0],[]]
~ - bitwise NOT top of Main (=-1-x) [[n,n,0,0,0,-1,-1,a,-1],[]]
" - [[n,n,0,0,0,-1,-1,a,-1],[]]
- top of Main is NEGATIVE so we turn left
! - print top of Main, which is -1
@ - exit the labyrinth