双方有 16 种可能性——每一方都有两种可能性,每个决定都独立于其他,所以你将这些数字相乘,得到2*2*2*2=16。
您可以只存储0 和15 之间的整数。要获得左侧的选择,请计算n & 1,其中n 是存储的数字。 (“&”符号在许多计算机语言中表示“按位与”。)结果1 表示虚线,而0 表示实线。要得到右边,计算n & 2,顶部是n & 4,底部是n & 8。请注意,这些公式中的“幻数”是 2**0、2**1、2**2 和 2**3。
您可以轻松地走另一条路。如果您以0 或1 表示的选择是a,b,c,d,那么n = 1*a + 2*b + 4*c + 8*d。请注意与上一段中相同的幻数。
如果您知道二进制数系统,那么这些公式是显而易见的。如果您想了解更多信息,请在“二进制数”上进行网络搜索。
当然,解决问题的另一种方法是存储 string 值而不是整数。例如,您可以存储
"left=dashed, right=solid, top=solid, bottom=dashed"
并使用您的语言的字符串处理工具来解析字符串。这个过程比我的第一个方法更长,并且使用更多的内存来存储,但它的优点是对任何检查数据的人来说更加透明和易于理解。
您在评论中使用像"1101" 这样的短字符串的想法是一个很好的想法,并且根据实现,它甚至可能比我的第一个解决方案使用更少的内存。它显示的信息量与我的第一个解决方案相同,但少于我的第二个解决方案。您的想法和其他想法的实现取决于语言以及如何将每一方的决定存储在变量中。在 Python 中,如果 n 是存储的(字符串)值,并且每一边的决策都是布尔变量 a,b,c,d(True 表示虚线,False 表示实线),那么您的代码可能是
a = (n[0] == '1')
b = (n[1] == '1')
c = (n[2] == '1')
d = (n[3] == '1')
在 Python 中有一些更短的方法可以做到这一点,但它们对于非 Python 程序员来说不太容易理解。