标签: code-golf

加入一组有序整数的Python迭代器

这是一个看似简单的问题:给定一个按升序生成整数序列的迭代器列表,编写一个简洁的生成器,只生成每个序列中出现的整数.

在昨晚阅读了几篇论文之后,我决定在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分钟里,我对我的舌尖有了一个想法,但我无法将其纳入代码中.请记住,这只是为了好玩!

python iterator join code-golf generator

17
推荐指数
3
解决办法
2094
查看次数

Code Golf:没有正则表达式的电子邮件地址验证

(编辑:什么是Code Golf:Code Golf是用你喜欢的任何语言按字符数最短的代码解决特定问题的挑战. 更多关于Meta StackOverflow的信息.)

Code Golfers,这是对字符串操作的挑战.

电子邮件地址验证,但当然没有正则表达式(或类似的解析库).这不是关于电子邮件地址,而是你可以写下下面给出的不同字符串操作和约束的时间.

规则如下(是的,我知道,这不符合RFC,但这些将成为此挑战的5条规则):

请发布方法/函数,这将采用字符串(建议的电子邮件地址),然后返回布尔结果(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)

祝好运!

code-golf rosetta-stone

17
推荐指数
6
解决办法
2208
查看次数

Code Golf:河内的塔楼

规则

河内之塔是一个难题,如果你不熟悉它,它的工作原理如下:

游戏区域包括3个杆和x个盘,每个盘下一个比前一个更大.可以将这些磁盘放在杆上,这些规则如下:

  • 一次只能移动一个磁盘,并且必须在另一个磁带的顶部移动
  • 磁盘必须从杆的顶部取出
  • 磁盘可以某处移动,如果在目标棒的最上面的磁盘是更大的一个比要被移动

最后-游戏领域STARTS是这样的:

  • 一个带有x个磁盘的杆,按顺序分类,使最大的位于底部,最小的位于顶部
  • 一根空杆
  • 一根空杆

游戏的目标是将原始"堆叠"的磁盘移动到另一根杆上,即 - 将所有磁盘放在另一根杆上,因此(再次)最大的是在底部,最小的在顶部

履行

您的目标是使用您选择的编程语言编写程序,接受输入(如下所述)并输出解决位置所需的步骤.

一如既往,尽量让它尽可能短.

输入

输入示例:

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)

如果输入的格式不是这样,则程序可能会产生未定义的行为.因此,如果输入无效(例如较小的磁盘,丢失的磁盘,无法解决),它就可以. …

code-golf towers-of-hanoi

17
推荐指数
1
解决办法
1997
查看次数

Code Golf:验证Sudoku Grid

介绍

有效的数独网格填充数字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.

algorithm code-golf sudoku

17
推荐指数
4
解决办法
2673
查看次数

图灵机代码高尔夫

好的,今天的目标是建立一个图灵机模拟器.对于那些不知道它是什么的人,请参阅维基百科文章.我们今天使用的状态表位于该页面的正式定义的末尾.

代码将采用一系列"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)

interpreter code-golf turing-machines rosetta-stone

16
推荐指数
3
解决办法
3319
查看次数

Code golf:查找所有字谜

如果该单词中的字母可以重新排列以形成不同的单词,则单词是字谜.

任务:

  • 按字符排序的最短源代码,用于查找给定单词列表的所有字符集集.
  • 空格和新行应计为字符
  • 使用代码标尺

    --------- -------- 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解决方案,我会在几个人发布后发布:) …

code-golf anagram

16
推荐指数
3
解决办法
4257
查看次数

Code golf:反向quine

编写一个程序,将其源代码的反转输出为字符串.如果来源是

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字符.+

code-golf

13
推荐指数
7
解决办法
3101
查看次数

Code Golf:MSM随机数生成器

挑战:

使用中间方法生成一系列(伪)随机数的字符数最短的代码.

约翰冯·诺伊曼于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 …

language-agnostic random code-golf rosetta-stone

13
推荐指数
3
解决办法
1862
查看次数

Code Golf:识别ascii艺术盒

不久之前做了一些数据结构工作时提出了这个问题,虽然它是一个很好的代码高尔夫:给定一个包含ascii艺术矩形的二维字符数组,生成一个矩形的坐标和大小列表.

  • 任何简单的可转换输入或输出格式都很好(例如:char**,字符串列表,标准输入上的行;四个整数列表,结构,固定数量+/-表示大小;等等).
  • 同样,输出不必按任何特定顺序排列.
  • 对于无效输入或格式错误的矩形,您没有任何有用的东西,但是您不应该为输入中不存在的矩形生成有效的坐标.
  • 没有两个有效的矩形共享一个+(虽然+可能不仅仅是矩形的一部分)
  • 您可以假设所有矩形至少为3x3:每个边都有一个-|在其中.

例子:

"        "
"  +-+ | "
"  | | \-"
"  +-+   "
(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)

language-agnostic code-golf ascii-art

13
推荐指数
5
解决办法
1958
查看次数

将十进制数转换为类似于excel-header的数字

0 = A
1 = B
...
25 = Z
26 = AA
27 = AB
...
701 = ZZ
702 = AAA
Run Code Online (Sandbox Code Playgroud)

我想不出任何不涉及loop-bruteforce的解决方案:-(

我期待一个函数/程序,它接受一个十进制数并返回一个字符串作为结果.

language-agnostic code-golf

13
推荐指数
1
解决办法
1953
查看次数