(([{}](((()))<>))<>){<>({}({}({})))}{}{}
ข้าวสาลีตัวช่วยสร้างและฉันมีการต่อสู้กับคำถามนี้ เมื่อเราตัดสินใจที่จะโพสต์โซลูชั่นของเราเราถูกผูกไว้ที่ 42 ไบต์ แต่ฉันพบ 2 ไบต์กอล์ฟของโซลูชั่นของเขา เราตัดสินใจว่าจะนับเป็นตัวแบ่งไทม์เมอร์ (โซลูชันของฉันอยู่ด้านล่าง)
ลองออนไลน์!
คำอธิบาย:
# Set up the stacks like this: -input
1 -input
1 1
(([{}](((()))<>))<>) ^
# Output 1 for triangular and 0 for non-triangular
{<>({}({}({})))}{}{}
สำหรับคำอธิบายทั้งหมดโปรดดูคำตอบข้าวสาลีของพ่อมด
(([({})])<>){(({}())<>{}({})){((<>))}{}{}}
เอาท์พุท0\n
(ขึ้นบรรทัดใหม่ตามตัวอักษร) เพื่อความจริงและสตริงว่างสำหรับเท็จ
แนวคิดคือการลบ 1 จากนั้น 2 จากนั้น 3 ไปจนถึงทางเข้า หากคุณกด 0 คุณจะรู้ว่านี่เป็นตัวเลขสามเหลี่ยมดังนั้นคุณสามารถหยุดตรงนั้นได้
ลองออนไลน์! (ความจริง)
ลองออนไลน์! (falsy)
# Push -input on both stacks. One is a counter and the other is a running total
(([({})])<>)
# Count up from -input to 0
{
# Push the new total which is: (counter += 1) + total (popped) + input (not popped)
# This effectively adds 1, then 2, then 3 and so on to the running total
(({}())<>{}({}))
# If not 0
{
# Push to 0s and switch stacks to "protect" the other values
((<>))
# End if
}
# Pop the two 0s, or empty the stack if we hit 0
{}{}
# End loop
}
นี่เป็นวิธีแก้ปัญหา 46 ไบต์ที่ฉันคิดว่าน่าสนใจ
{<>(({}())){({}[()]<>{(<({}[()])>)}{}<>)}{}<>}
เอาท์พุท0\n
(ขึ้นบรรทัดใหม่ตามตัวอักษร) สำหรับความจริงแล้วสตริงว่างสำหรับเท็จ
แนวคิดคือการนับถอยหลังจากการป้อนข้อมูลด้วยหมายเลขที่ต่อเนื่องกัน 1 ครั้ง input - (1) - (1,1) - (1,1,1)
เช่น ทุกครั้งที่เราลบถ้าเรายังไม่อยู่ที่ 0 เราจะทิ้งมูลค่าไว้ที่กอง ด้วยวิธีนี้ถ้าเราอยู่ที่ 0 และยังคงลบเมื่อเราป๊อปเราจะลบค่าสุดท้ายในสแต็ก ถ้าอินพุตเป็นตัวเลขสามเหลี่ยมเราจะสิ้นสุดที่ 0 และจะไม่ปรากฏ 0
ลองออนไลน์! ความจริง
ลองออนไลน์! falsy
# Implicit input (call it I)
# Until we reach 0, or the stack is empty
{
# Add 1 to the other stack and push it twice. This is our counter.
<>(({}()))
# While counter != 0
{
# counter -= 1
({}[()]
# if I != 0
<>{
# I -= 1, and push 0 to escape the if
(<({}[()])>)
# End if
}
# Pop from the stack with I. This is either the 0 from the if, or I
{}
# Get ready for next loop End while
<>)
# End While
}
# Pop the counter that we were subtracting from
{}<>
# End Until we reach 0, or the stack is empty.
}