学习一些关于T-SQL的知识,并认为一个有趣的练习就是用它生成一个Mandelbrot集.
原来已经有人(最近出现了).我会让其他人发布它作为答案,但我很好奇可以做出哪些优化.
或者,您会如何使代码更具可读性?
我将选择最可读(但相当紧凑)的版本作为已接受的答案(太糟糕了,我们还没有代表奖励!)除非有人真的带来了很好的优化.
奖金指向那些教我一些关于T-SQL的答案.
-亚当
问题:
>>> a = dict(a=1,b=2 )
>>> b = dict( b=3,c=2)
>>> c = ???
c = {'a': 1, 'b': 5, 'c': 2}
Run Code Online (Sandbox Code Playgroud)
所以,这个想法是两个以最短的形式通过int/float值添加到字典.这是我设计的一个解决方案,但我不喜欢它,因为它很长:
c = dict([(i,a.get(i,0) + b.get(i,0)) for i in set(a.keys()+b.keys())])
Run Code Online (Sandbox Code Playgroud)
我认为必须有一个更短/更简洁的解决方案(可能与reduce和操作员模块有关吗?itertools?)...任何想法?
更新:我真的希望找到更优雅的东西,比如"reduce(operator.add,key = itemgetter(0),a + b)".(显然这不是真正的代码,但你应该得到这个想法).但似乎这可能是一个梦想.
更新:仍然需要更简洁的解决方案.也许groupby可以帮忙吗?我用"reduce"/"groupby"提出的解决方案实际上并不简洁:
from itertools import groupby
from operator import itemgetter,add
c = dict( [(i,reduce(add,map(itemgetter(1), v))) \
for i,v in groupby(sorted(a.items()+b.items()), itemgetter(0))] )
Run Code Online (Sandbox Code Playgroud) 这应该很容易.
这是我的数组(相反,一种生成代表性测试数组的方法):
>>> ri = numpy.random.randint
>>> ri2 = lambda x: ''.join(ri(0,9,x).astype('S'))
>>> a = array([float(ri2(x)+ '.' + ri2(y)) for x,y in ri(1,10,(10,2))])
>>> a
array([ 7.99914000e+01, 2.08000000e+01, 3.94000000e+02,
4.66100000e+03, 5.00000000e+00, 1.72575100e+03,
3.91500000e+02, 1.90610000e+04, 1.16247000e+04,
3.53920000e+02])
Run Code Online (Sandbox Code Playgroud)
我想要一个字符串列表,其中'\n'.join(list_o_strings)将打印:
79.9914
20.8
394.0
4661.0
5.0
1725.751
391.5
19061.0
11624.7
353.92
Run Code Online (Sandbox Code Playgroud)
我想空间垫的左侧和右侧(但没有超过必要的).
如果小数点后面的所有内容,我想在小数点后面加零.
我不想要科学记谱法.
..我不想丢失任何有效数字.(在353.98000000000002中2表示不重要)
是的,很高兴想要..
Python 2.5 %g, %fx.x等等要么迷惑我,要么无法做到.我还没有尝试过import decimal.我看不出NumPy是这样做的(虽然,array.__str__和array.__repr__十进制对齐(但有时会返回科学).
哦,速度很重要.我在这里处理大阵列.
我目前的解决方案是:
似乎应该有一些现成的解决方案......(但不是必需的)
最佳建议失败,何时dtype是float64: …
鉴于以下产出git ... --stat:
3 files changed, 72 insertions(+), 21 deletions(-)
3 files changed, 27 insertions(+), 4 deletions(-)
4 files changed, 164 insertions(+), 0 deletions(-)
9 files changed, 395 insertions(+), 0 deletions(-)
1 files changed, 3 insertions(+), 2 deletions(-)
1 files changed, 1 insertions(+), 1 deletions(-)
2 files changed, 57 insertions(+), 0 deletions(-)
10 files changed, 189 insertions(+), 230 deletions(-)
3 files changed, 111 insertions(+), 0 deletions(-)
8 files changed, 61 insertions(+), 80 deletions(-)
Run Code Online (Sandbox Code Playgroud)
我想生成数字列的总和,但保留行的格式. 为了通用性,我制作了这个awk脚本,它自动对任何数字列求和并生成一个摘要行:
{
for (i …Run Code Online (Sandbox Code Playgroud) 当编码:
Latin1文本作为输入,大概是英语.
您的程序必须输出可以表示的消息
范围内的140个代码点U+0000-U+10FFFF
排除非字符:
U+FFFEU+FFFFU+nFFFE,这里是- 十六进制U+nFFFFn110U+FDD0- U+FDEFU+D800- U+DFFF(代理代码点).它可以以您选择的任何合理编码输出; GNUiconv支持的任何编码都被认为是合理的,您的平台本机编码或区域编码可能是一个不错的选择.
当解码:
输出文本应该是人类可读的,也可能是英语.
encode或decode设置模式. …我写了一些邮件合并代码的一天,虽然它的作品我是一个用代码关闭.我想看看它看起来像在其他语言.
因此,对于输入,例程采用联系人列表
Jim,Smith,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Erica,Johnson,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Abraham,Johnson,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Marge,Simpson,6388 Lake City Way,,Burnaby,British Columbia,Canada,V5A 3A6
Larry,Lyon,52560 Free Street,,Toronto,Ontario,Canada,M4B 1V7
Ted,Simpson,6388 Lake City Way,,Burnaby,British Columbia,Canada,V5A 3A6
Raoul,Simpson,6388 Lake City Way,,Burnaby,British Columbia,Canada,V5A 3A6
Run Code Online (Sandbox Code Playgroud)
然后它将具有相同地址和姓氏的行合并到一个记录中.假设行未排序).代码还应该足够灵活,以便可以按任何顺序提供字段(因此需要将字段索引作为参数).对于一个两口之家,它连接两个名字字段.对于三个或更多的家庭,名字设置为"the",姓氏设置为"surname family".
Erica and Abraham,Johnson,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Larry,Lyon,52560 Free Street,,Toronto,Ontario,Canada,M4B 1V7
The,Simpson Family,6388 Lake City Way,,Burnaby,British Columbia,Canada,V5A 3A6
Jim,Smith,2681 Eagle Peak,,Bellevue,Washington,United States,98004
Run Code Online (Sandbox Code Playgroud)
我的C#实现是这样的:
var source = File.ReadAllLines(@"sample.csv").Select(l => l.Split(','));
var merged = HouseholdMerge(source, 0, 1, new[] {1, 2, 3, 4, 5});
public static …Run Code Online (Sandbox Code Playgroud) 我试图在这里解决这个问题: - https://www.spoj.pl/problems/PHIVAL/
这些问题要求您输出尽可能多的黄金比例(1 + sqrt(5))/ 2的十进制数字,并尝试最小化代码长度.
这就是我现在所拥有的.这段代码可以缩短吗?
from decimal import *
getcontext().prec=7050
print(1+Decimal(5).sqrt())/2
Run Code Online (Sandbox Code Playgroud) 以下32位x86 Linux程序打印一个任意长度的字符串(只要程序可以,无论如何),exit(0)然后执行:
.global _start ; notice on entry here, all regs but %esp are zero
_start:
call .L0 ; offset == strlen, provided by your assembler
.byte 'H','e','l','l','o',',',' ','W','o','r','l','d'
.L0:
pop %ecx ; ret addr is starting addr of string
mov -4(%ecx),%edx ; argument to `call`, 4 bytes: strlen
inc %ebx ; stdout == 1
movb $4, %al ; SYS_write == 4
int $0x80
xchg %eax,%ebp ; %ebp is still zero
xchg %eax,%ebx ; SYS_exit == 1, return …Run Code Online (Sandbox Code Playgroud) 我经常使用以下内容:
New-Object psobject -Property @{a=1; b=2; c=3; d=4}
Run Code Online (Sandbox Code Playgroud)
我想让它尽可能短,甚至可能是1个字符?使用上面的属性创建新的psobject的最短方法是什么?
我的愿望是我可以用类似这样的语法来做到这一点:
#{a=1; b=2; c=3; d=4}
Run Code Online (Sandbox Code Playgroud)
请注意,我用新的'特殊'符号替换了@.
请注意,如果这被认为是偏离主题,我会移动它.
这是一个有趣的问题,需要用最少量的代码来解决.我希望递归解决方案最受欢迎.
我们有一个被定义为人物地图的迷宫,其中=是墙,空间是路径,+是你的起点,#是你的终点.一个非常简单的例子是这样的:
====
+ =
= ==
= #
====
Run Code Online (Sandbox Code Playgroud)
您能编写一个程序,以尽可能少的代码找到以这种方式解决迷宫的最短路径吗?
如果它适用于所有迷宫输入,例如那些路径跨越自身或具有大量分支的迷宫点,则奖励积分.该程序应该能够适用于大型迷宫(例如,1024x1024 - 1 MB),以及如何将迷宫传递给程序并不重要.
"玩家"可以沿对角线移动.输入迷宫将永远不会有对角线通道,因此您的基本动作组将是向上,向下,向左,向右.对角线移动只是向前看一点,以确定是否可以合并上/下和左/右.
输出必须是迷宫本身,使用星号字符(*)突出显示最短路径.
code-golf ×10
python ×3
assembly ×1
awk ×1
compression ×1
dictionary ×1
formatting ×1
fractals ×1
maze ×1
numpy ×1
powershell ×1
t-sql ×1
twitter ×1
unicode ×1