6
\$\开始组\$

事实证明,如果一个数字是以奇数为基数写的,那么需要用它的每个数字来确定它的奇偶校验。

您的程序应该将输入作为一个介于2和36之间(含2和36)的数字,以及一个由基数组成的非空字符串0-9a-z(字母为小写)和一个缺失/未知数字,可以是任何其他字符(让我们使用?应对这一挑战)。

您的程序应该为以下内容生成一致、不同的输出:

  1. 数字在给定的基数中是偶数,无论缺少什么数字。

  2. 无论缺少什么数字,给定基数中的数字都是奇数。

  3. 模糊:例如,由于缺少数字,无法确定数字的奇偶校验(10, 123?)(15, ???2).

  4. 语法错误:数字包含基数中不允许的数字,例如2二进制,或以10为基数的字母。

示例:

E=偶数O=奇数A=模糊S=语法错误10、123->O15,ee->E2、101->O3、101->东2, 1?1->O3, 1?1->A25, ?2345->A10, ?????? -> A类10, ??????502->东9, ??????502->安36,ppcg->E10,ppcg->S5,5->S4, ??????3->O4, ??????5->S
\$\端组\$
4
  • \$\开始组\$ 建议的测试用例:4, ???5???0-->秒 \$\端组\$ 评论 6月25日21:02
  • 15
    \$\开始组\$ 请不要求输入验证 \$\端组\$ 评论 2天前
  • 2
    \$\开始组\$ 建议的测试用例:3, ?x?->S公司,以涵盖评估顺序(如果通过以下方式检查模糊性,则所有现有测试都将通过?位置和基本奇偶校验,然后不要继续检查数字是否在基本域中)。 \$\端组\$ 评论 2天前
  • \$\开始组\$ 建议案例2, ?这是奇怪的还是A? \$\端组\$ 评论 昨天

6个答案6

重置为默认值
6
\$\开始组\$

Python 3.8(预发行版),61字节

λb,s,a=0:[a:=c<'0'或b%2*a^int(c,b)%-2对于s][-1]%3

在线试用!

使用*(或代码点<48的任何字符)表示未知数字。输出2/0/1用于奇数/偶数/模糊。引发语法错误。

从空(0)开始a=0,[a:=对于c in s]计算运行平价a:c<'0'缺少数字:不明确或int(c,b)否则验证,%-2奇偶校验,a^基数奇数:xorb%2*base偶数:丢弃[-1]最终奇偶校验%3折叠模糊输出
\$\端组\$
5
\$\开始组\$

Python 2,48字节

如下所示,只需/而不是//(我们需要一个整数作为第二个参数整数)

在线试用!


蟒蛇3, 56 55 50 49字节

-5字节,感谢阿尔伯特·朗格(使用最大值转换以36为基数的最大字符并与基数进行比较,而不是替换通配符并从基数进行转换b).

-1字节感谢自动变速箱(飞溅的args代替并恢复使用?作为通配符)。

λn,b:int(n[b%2-1:],b//(b>int(max(n),36))%2

接受非空字符串的未命名函数,n个,第页,共页0-9a-z*(通配符)和整数,b,来自\$[2,36]\$和:

  • 返回整数\$0\$如果n个在基础上是明确的b
  • 返回整数\$1\$如果n个基数明显奇怪b
  • 引发值错误如果n个在基中具有不明确的奇偶校验b
  • 引发ZeroDivision错误如果n个在基础中无法分析b

在线试用!

(通配符实际上可以是小于0)

怎么用?

λn,b:int(n[b%2-1:],b//(b>int(max(n),36))%2lambda n,b:#接受字符串n和整数bb%2-1#b模式2减1#->如果b是奇数:0#其他:-1n[:]#从该索引中切片n#->如果b是奇数:n#else:n的最后一个字符#(我们称之为X)max(n)#n中的最大字符数int(,36)#从基数36转换#->如果n只是通配符#(一例模棱两可)#然后:提升ValueError#else:以36为基数的n的最大字符值(b>)#b比这个大吗?b//#b整数除以#->如果n的任何数字太大#(即无法分析)#然后:b//False->引发ZeroDivisionError#else:b//真->bint(,)#从基数b转换X#->如果X中存在通配符#(即模棱两可)#然后:提升ValueError%2#那个模2#->如果是偶数:#然后:0#其他:1
\$\端组\$
4
\$\开始组\$

Python 3.8(预发行版), 119 109字节

-10字节: 如果'0'>n[-1]或(b%2和'/'in)else如果'/'在n[-(~b%2):]else中.

lambda b,n:'if max(i<'0'或int(i,36)for i in n)>=b else[]if'/'in n[-(~b%2):]else int(n.replace('/','0'),b)%2

接受如下输入打印(f(10,“//////502”),其中/是未知字符。
退换商品''如果字符串无效,[]如果奇偶校验不明确,0对于偶数,以及1对于奇数。

在线试用!

新贡献者
平方根12621是此网站的新贡献者。请注意要求澄清、评论和回答。查看我们的行为准则.
\$\端组\$
2
\$\开始组\$

JavaScript(ES6),76字节

期望(基础)(字符串),使用.缺少数字。

退换商品0对于语法错误,1对于即使,2对于古怪的对于模棱两可的.

b=>s=>eval(“对于(m=i=0;!(q=i.toString(b))[s.length];)m|=!!q.match(s)<<i++%2”)

在线试用!


递归版本,67字节

相同的I/O格式。

(b,i=0)=>g=s=>(q=i.toString(b))[s.length]||!!q.匹配<<i++%2|g

在线试用!

评论

(b,//b=基础i=0//i=计数器) =>            //g=s=>//s=输入字符串(q=//将q设为…的表示。。。i.toString(b)//。。。以b为基数的i)[s.length]//如果q的第n个(0索引)字符存在,则停止,//其中n是s的长度//如果是,则必须为“0”(真实但为零)//对最终结果没有影响||//否则,!!q.match(s)//如果q匹配s(解释为正则表达式),<<i++%2//根据奇偶校验设置位#0或位#1|//第i页;之后增加ig(s)//对递归调用的结果执行逐位“或”运算
\$\端组\$
0
\$\开始组\$

木炭,4331字节

θ≔⍘⁻η?θ⍘ιθζ¿⊙⌕A⮌η?∨←θ²A§EOζ

在线试用!链接指向详细版本的代码。输出/E类/A类但抛出无效输入。说明:

θ

输入底座。

≔⍘⁻η?θ⍘ιθζ

尝试转换数字,使用?s从给定基数中删除,但如果存在任何不允许的数字,则抛出(Charcoal的基数转换通常允许过大的数字,但显式指定数字字符会覆盖此值)。

¿⊙⌕A⮌η?∨¨¨θ²A

如果字符串的反面包含?如果基址是奇数,或者其中一个位于反向字符串的开头,则奇偶校验不明确。

§EOζ

否则,使用基本转换结果来确定奇偶校验。

\$\端组\$
0
\$\开始组\$

05AB1E型,3128字节

L<我不知道。;Aá9+бD¹бPi¹βEier 2]é

订单中的输入\$base,输入\$,其中\$输入\$是一个以空格作为填充符的字符列表。
输出[0]/[1]/[0,1]/[2]对于E类//A类/S公司分别是。

在线试用验证所有测试用例.

说明:

L#推送范围[1中的列表,第一个(隐式)input-integer]<#将每个值减少1至范围[0,input-integer)I#按下第二个输入列表#弹出并计算其中有多少空格¨#获取前面列表的笛卡尔幂和此计数#(如果计数为0,则列表将为`[[]]`,因此它仍将#继续在地图内)ε#该值列表的映射:ð#输入空格字符s#交换,使当前映射列表位于堆栈顶部.;     #  在第二个(隐式)输入列表中,逐个替换每个空格#包含当前地图列表中的值A#按小写字母φ#按范围[1,length]内的列表(不弹出):[1,26]9+#每个增加9:[10,35]#将所有字母音译为这些值D#复制生成的列表#检查每个值是否小于第一个输入Pi#如果这对所有人来说都是真的:ccoβ#将列表从基数firstInput转换为基数为10的整数埃#弹出并检查它是否奇怪¨#其他:2#将2作为Synthax错误值]#关闭if-else语句并映射#对结果值进行排序和取消确认#(之后隐式输出结果)
\$\端组\$

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.