这是一个看似简单的问题:给定一个按升序生成整数序列的迭代器列表,编写一个简洁的生成器,只生成每个序列中出现的整数.
在昨晚阅读了几篇论文之后,我决定在Python中破解一个完全最小的全文索引器,如此处所示(尽管该版本现在已经很老了).
我的问题在于search()
函数,它必须迭代每个发布列表并仅产生每个列表上显示的文档ID.正如您从上面的链接中看到的那样,我当前的非递归"工作"尝试非常糟糕.
示例:
postings = [[1, 100, 142, 322, 12312],
[2, 100, 101, 322, 1221],
[100, 142, 322, 956, 1222]]
Run Code Online (Sandbox Code Playgroud)
应该产量:
[100, 322]
Run Code Online (Sandbox Code Playgroud)
至少有一个优雅的递归函数解决方案,但我想尽可能避免这种情况.但是,一个涉及嵌套生成器表达式,itertools
滥用或任何其他类型的代码高尔夫的解决方案非常受欢迎.:-)
应该可以安排函数只需要与最小列表中的项目一样多的步骤,并且不将整个整数集吸入内存.将来,这些列表可能从磁盘读取,并且大于可用RAM.
在过去的30分钟里,我对我的舌尖有了一个想法,但我无法将其纳入代码中.请记住,这只是为了好玩!
(编辑:什么是Code Golf:Code Golf是用你喜欢的任何语言按字符数最短的代码解决特定问题的挑战. 更多关于Meta StackOverflow的信息.)
Code Golfers,这是对字符串操作的挑战.
电子邮件地址验证,但当然没有正则表达式(或类似的解析库).这不是关于电子邮件地址,而是你可以写下下面给出的不同字符串操作和约束的时间.
规则如下(是的,我知道,这不符合RFC,但这些将成为此挑战的5条规则):
在@之前,该组中至少有1个字符:
A-Z, a-z, 0-9, . (period), _ (underscore)
Run Code Online (Sandbox Code Playgroud)@必须存在,恰好一次
john@smith.com
^
Run Code Online (Sandbox Code Playgroud)句点(.)必须在@之后恰好存在一次
john@smith.com
^
Run Code Online (Sandbox Code Playgroud)@和以下之间至少有1个[AZ,az]字符.(期)
john@s.com
^
Run Code Online (Sandbox Code Playgroud)决赛后至少2个[AZ,az]字符.期
john@smith.ab
^^
Run Code Online (Sandbox Code Playgroud)请发布方法/函数,这将采用字符串(建议的电子邮件地址),然后返回布尔结果(true/false),具体取决于有效的电子邮件地址(true)或无效(false).
Samples:
b@w.org (valid/true) @w.org (invalid/false)
b@c@d.org (invalid/false) test@org (invalid/false)
test@%.org (invalid/false) s%p@m.org (invalid/false)
j_r@x.c.il (invalid/false) j_r@x.mil (valid/true)
r..t@x.tw (valid/true) foo@a%.com (invalid/false)
Run Code Online (Sandbox Code Playgroud)
祝好运!
河内之塔是一个难题,如果你不熟悉它,它的工作原理如下:
游戏区域包括3个杆和x个盘,每个盘下一个比前一个更大.可以将这些磁盘放在杆上,这些规则如下:
最后-游戏领域STARTS是这样的:
游戏的目标是将原始"堆叠"的磁盘移动到另一根杆上,即 - 将所有磁盘放在另一根杆上,因此(再次)最大的是在底部,最小的在顶部
您的目标是使用您选择的编程语言编写程序,接受输入(如下所述)并输出解决位置所需的步骤.
一如既往,尽量让它尽可能短.
输入
输入示例:
4-3,7-6-5,2-1
Run Code Online (Sandbox Code Playgroud)
输入是一个字符串,由3个部分组成,以逗号分隔.这些部件是3根杆上每个杆上的磁盘列表.它们也是分开的,这次是连字符( - ),每个子部分都是一个数字,数字越大,磁盘越大.
所以 - 对于上面的输入,这将是一个直观的表示:
. . .
| =====|===== |
===|=== ======|====== =|=
====|==== =======|======= ==|==
ROD 1 ROD 2 ROD 3
Run Code Online (Sandbox Code Playgroud)
产量
正如您在上面的表示中所看到的那样 - 输入的最左侧部分是第一个杆,中间是第二个杆,最后一个是第3个杆.
程序的输出应如下所示:
12,23,31,12,23,13
Run Code Online (Sandbox Code Playgroud)
一个数字列表,用逗号分隔,用于定义应该取出磁盘的磁带,以及磁盘应放在的磁带上.只有3个杆,因此只有6种可能的组合(因为盘必须移动到另一个杆,而不是相同的杆):
12
13
21
23
31
32
Run Code Online (Sandbox Code Playgroud)
输入不必描述处于"原始"状态的字段 - 它可以是中间求解的.
您的程序无法生成空输出.如果输入IS处于原始状态,只需将磁盘放入不同的杆.
输入可以有一个空杆,如下所示:
2-1,3,
,,1
4-3,,2-1
Run Code Online (Sandbox Code Playgroud)
如果输入的格式不是这样,则程序可能会产生未定义的行为.因此,如果输入无效(例如较小的磁盘,丢失的磁盘,无法解决),它就可以. …
有效的数独网格填充数字1到9,在9,行或列的每个子块中没有数字出现多次.如果您不熟悉这个流行的谜题,请阅读本文以获取更多详细信息.
挑战是编写最短的程序来验证可能未满的Sudoku网格.
输入将是一行9行,每行9个字符,代表网格.空单元格将由a表示.
.您的输出应该是Valid
网格有效,否则输出Invalid
.
123...789
...456...
456...123
789...456
...123...
564...897
...231...
897...564
...564...
Run Code Online (Sandbox Code Playgroud)
Valid
Run Code Online (Sandbox Code Playgroud)
123456789
987654321
123456789
123456789
987654321
123456789
123456789
987654321
123456789
Run Code Online (Sandbox Code Playgroud)
Invalid
Run Code Online (Sandbox Code Playgroud)
请以解决此问题的任何语言发布您的最短代码.输入和输出可以通过stdin和stdout或您选择的其他文件来处理.
获胜者将是在发布此问题之前存在实现的语言中最短的解决方案(按字节数).因此,虽然您可以自由地使用您刚刚编写的语言来提交一个0字节的解决方案,但它不会计算,您可能会得到downvotes.
好的,今天的目标是建立一个图灵机模拟器.对于那些不知道它是什么的人,请参阅维基百科文章.我们今天使用的状态表位于该页面的正式定义的末尾.
代码将采用一系列"0"和"1"字符串字符,一个表示机器开始的字符的整数,以及一个表示程序状态的整数(无特定顺序),并输出最终结果字符串上的操作,以及最终位置.例子:
例1:
1010 state A(0)
^ (3)
1011 state B(1)
^ (2)
1011 state B(1)
^ (1)
1111 state A(0)
^ (2)
1111 state C(0)
^ (3)
1111 HALT
^ (2)
Run Code Online (Sandbox Code Playgroud)
例2:
110100 state B(1)
^ (3)
110100 state B(1)
^ (2)
111100 state A(0)
^ (3)
111100 state C(2)
^ (4)
111110 state B(1)
^ (5)
1111110 state A(0)
^ (6, tape has been extended to right)
1111111 state B(1)
^ (5)
1111111 state …
Run Code Online (Sandbox Code Playgroud) 如果该单词中的字母可以重新排列以形成不同的单词,则单词是字谜.
使用代码标尺
--------- -------- 10 20 -------- -------- 30 40 -------- ---- 50 ---- -------- 60 70 -------- -------- 80 90 -------- 100 ------- 110- ------ 120
一个单词的列表,从一个新行分隔每个字标准输入.
例如
A
A's
AOL
AOL's
Aachen
Aachen's
Aaliyah
Aaliyah's
Aaron
Aaron's
Abbas
Abbasid
Abbasid's
Run Code Online (Sandbox Code Playgroud)
所有组的字谜,每组由一条单独的线分隔.
示例运行:
./anagram < words
marcos caroms macros
lump's plum's
dewar's wader's
postman tampons
dent tend
macho mocha
stoker's stroke's
hops posh shop
chasity scythia
...
Run Code Online (Sandbox Code Playgroud)
我有一个149 char perl解决方案,我会在几个人发布后发布:) …
编写一个程序,将其源代码的反转输出为字符串.如果来源是
abcd
efg
Run Code Online (Sandbox Code Playgroud)
(即C字符串"abcd\nefg"
)
那么输出应该是
gfe
dcba
Run Code Online (Sandbox Code Playgroud)
(即C字符串"gfe\ndcba"
)
使用诸如brainf*ck等深奥语言的加分点.
*编辑:**删除了不必要的\ 0字符.+
使用中间方法生成一系列(伪)随机数的字符数最短的代码.
约翰冯·诺伊曼于1946年首次提出了(伪)随机数生成的中间方法,其定义如下:
R n + 1 = mid((R n)2,m)
例如:
3456 2 = 11943936
mid(11943936)= 9439
9439 2 = 89094721
mid(89094721)= 0947
947 2 = 896809
mid(896809)= 9680
9680 2 = 93702400
mid(93702400)= 7024
另一个例子:
843 2 = 710649
mid(710649)= 106
106 2 = 11236
mid(11236)= 123
123 2 = 15129
mid(15129)= 512
512 2 = 262144
mid(262144)= 621
621 2 = 385641
mid(385641)= 856
856 2 = 732736
mid(732736)= 327
327 …
不久之前做了一些数据结构工作时提出了这个问题,虽然它是一个很好的代码高尔夫:给定一个包含ascii艺术矩形的二维字符数组,生成一个矩形的坐标和大小列表.
+
(虽然+
可能不仅仅是矩形的一部分)-
或|
在其中.例子:
" "
" +-+ | "
" | | \-"
" +-+ "
(2,1;3,3)
"+--+ +--+"
"| | | |"
"+--+ +--+"
(0,0;4,3), (6,0;4,3)
" +---+ "
"->|...| "
" +---+ "
(2,0;5,3)
"+-+ +--+ +--+"
"| | | | | |"
"+-+ | | + -+"
" | | "
" +--+ +-+ "
" +--+ | "
" +--+ +-+ "
(0,0;3,3), (4,0;4,5) …
Run Code Online (Sandbox Code Playgroud) 0 = A
1 = B
...
25 = Z
26 = AA
27 = AB
...
701 = ZZ
702 = AAA
Run Code Online (Sandbox Code Playgroud)
我想不出任何不涉及loop-bruteforce的解决方案:-(
我期待一个函数/程序,它接受一个十进制数并返回一个字符串作为结果.