在英语中,名词可以采取两种不同的形式,取决于它们是单数(一)还是复数(任何其他)。例如,我们可以说“一只狗”,“两只狗”,"0只狗“,"57只狗”等等。
俄语有三大类。而不是"1只狗,2只狗,5只狗“,在俄语中是"1собака,2собаки,5собак”。
这些类别按照以下逻辑划分:
挑战
给定范围0,000中的整数输入,如果它属于“单数”类别,则返回1;如果它属于“少数”类别,则返回2;如果属于“多”类别,则返回5。
您的程序可能是一个函数,也可以使用STDIN。您可以打印到STDOUT或从函数返回一个值。
这是一个代码高尔夫挑战,所以以最少的字节数的解决方案获胜。
发布于 2017-05-31 17:38:39
lambda n:'5521'[n%~9/-3>>n/10%~9/-9]相同长度的算术:
lambda n:5/(n%~9/-3>>n/10%~9/-9or 1)让我们先看看不考虑青少年的更简单的代码。
lambda n:'5521'[n%~9/-3]在这里,我们希望将一个数字映射到一个工作如下的输出
[5, 1, 2, 2, 2, 5, 5, 5, 5, 5][n%10]但是,与其使用n模10 (%10),我们还可以做n%-10,它映射到[-9..0]的间隔,以给出余数:
> [n%~9 for n in range(10)]
[0, -9, -8, -7, -6, -5, -4, -3, -2, -1]这是很有希望的,因为前两个条目0和-9相距很远,它们需要发送到不同的输出。同时,-10也可以缩短为~9。
从这里开始,由/-3划分的地板给出了3块的正确的起始位置。
> [n%~9/-3 for n in range(10)]
[0, 3, 2, 2, 2, 1, 1, 1, 0, 0]为了获得所需的输出,我们现在只需要映射0->5, 1->5, 2->2, 1->1,这是通过字符串选择'5521'[_]完成的。
现在,我们还需要以11到15结尾的数字来始终给出5。我们首先通过检测十位数是否为1来实现这一点。取n/10删除最后一个数字,然后像以前一样应用%~9来获得结果。
[0, -9, -8, -7, -6, -5, -4, -3, -2, -1]各自的最后数字。我们要检测的数字1被映射到极值-9。地板除以-9使它变成1,其他一切变成0。
> [k%~9/-9 for k in range(10)]
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]最后,我们将这个指示符设为1,总是给出输出5,这是通过将n%~9/-3的结果右移到指示器上来完成的。0,1,2,3的结果总是将位移到0或1,这给出了一个所需的输出5。
发布于 2017-06-01 12:11:17
e:slx x0
mov x0 acc
dst 2 0
tlt acc 11
-tgt acc 14
-jmp v
+dgt 0
teq acc 1
+mov 1 x1
+jmp e
tlt acc 5
+mov 2 x1
v:-mov 5 x1TiO不支持这种语言,这是在Zachtronics游戏深圳I/O中使用的,所以没有链接来测试这个语言。
这是一个通过XBus端口x0接收输入,并通过端口x1输出的函数。在MC4000上执行它太长了,但是很好地适应了MC6000的内存。对于那些不熟悉的人来说,XBus端口允许传输离散的数字数据包。
在MCxxxx程序集中,测试指令设置了一个标志,指示应该使用哪个分支。只有在最近的测试返回true时才执行以+开头的行,而以-开头的行只有在测试为false时才执行。
逐行:
e:slx x0 # Label this line e, then sleep until input is available on XBus port x0
mov x0 acc # Move the input into register acc
dst 2 0 # Set the leftmost digit of the input to 0
tlt acc 11 # Test if the value in acc is less than 11
-tgt acc 14 # If it's not, check if it's greater than 14
-jmp v # If it's not, jump to the line labeled v (the last line)
+dgt 0 # If either of the previous tests returned true,
# set acc to the value of acc's rightmost digit
teq acc 1 # Test if acc equals 1
+mov 1 x1 # If it does, return 1
+jmp e # Then jump to label e, which ends execution
tlt acc 5 # Test if acc is less than 5
+mov 2 x1 # If it is, return 2
v:-mov 5 x1 # If the previous test is false, return 5关于评分的注意事项: MCxxxx程序集本身没有函数,但它尽可能接近于一个函数--它适合于单个执行节点,通过一个端口接收输入,通过另一个端口输出。因此,我像一个函数一样对此进行了打分(即,不计算生成有效MCxxxx模拟器文件所需的字节)。
https://codegolf.stackexchange.com/questions/123750
复制相似问题