javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

编程语言的表现力是什么意思?

当人们想要强调一种语言比另一种语言更好时,我会看到很多“表达性”一词。 但是我不明白它们到底是什么意思。

  • 它是冗长/简洁吗? 我的意思是,如果一种语言可以写下比另一种语言简短的内容,这是否意味着表达能力? 请参考我的其他问题-有关代码密度的文章,作为衡量编程语言能力的一种方法
  • 这是语言的力量吗? 保罗·格雷厄姆(Paul Graham)说,某种语言比另一种语言更强大,因为某种语言可以做到另一种语言无法做到的(例如,LISP可以用宏来执行另一种语言不能做到的事情)。
  • 仅仅是让生活更轻松的事情吗? 正则表达式可以是示例之一。
  • 是解决同一问题的另一种方式:像SQL这样的解决搜索问题的方法吗?

您如何看待编程语言的表现力? 您可以使用一些代码来显示表现力吗?

与表现力和DSL有什么关系? 人们想出DSL来获得表现力吗?

trans by 2020-02-19T17:30:45Z

oop-只写属性是否有实际应用?

我不知道为什么我开始考虑这个问题,但是现在我似乎无法停止。

在C#中-可能还有许多其他语言,我记得Delphi曾经也允许您这样做-编写此语法是合法的:

class WeirdClass
{
    private void Hello(string name)
    {
        Console.WriteLine("Hello, {0}!", name);
    }

    public string Name
    {
        set { Hello(name); }
    }
}

换句话说,该属性有一个setter但没有getter,它是只写的。

我想我想不出为什么这应该是非法的,但是我从来没有真正在野外看到过它,而且在野外似乎有些精妙/令人恐惧的代码。 似乎有一种代码气味; 似乎编译器应该给我警告:

CS83417:属性“名称”似乎完全无用且愚蠢。 不好的程序员! 考虑用一种方法代替。

但是也许我只是没有做足够长的时间,或者为了研究有效使用这种结构的任何例子而在一个狭窄的领域工作。

是否存在现实生活中只写属性的示例,这些示例要么不能被直接方法调用所取代,要么会变得不那么直观?

trans by 2020-02-19T01:01:21Z

调试-最难跟踪的错误类型?

您必须跟踪和修复的最讨厌,最困难的错误是什么?为什么?

在我们发言的过程中,我真的很好奇,并且深陷其中。 就像他们说的那样-痛苦喜欢陪伴。

trans by 2020-02-17T02:43:08Z

oop-在函数式编程中实现多态

我目前正在享受从面向对象的语言到功能性语言的过渡。 呼吸着新鲜空气,我发现自己的工作效率比以前高得多。

但是,在FP方面,我还没有看到OOP的一个令人满意的答案,那就是多态性。 即我有大量的数据项集合,当将它们传递到某些函数中时,需要以完全不同的方式进行处理。 为了争辩,我们说有多种因素驱动多态行为,因此潜在地以指数形式出现了许多不同的行为组合。

在OOP中,可以使用多态性相对较好地处理:通过组合+继承或基于原型的方法。

在FP中,我介于两者之间:

  • 编写或组成可通过分支每个数据项的值来有效实现多态行为的纯函数-就像在组装巨大的条件甚至是模拟虚拟方法表一样!
  • 将函数以类似于原型的方式放入纯数据结构中-似乎可行,但是否也违反了将纯函数与数据分开定义的想法?

对于这种情况,推荐的功能方法是什么? 还有其他好的选择吗?

trans by 2020-02-15T11:43:28Z

不可知的语言-分布式程序员缺少哪些工具?

我有一个改善分布式编程世界的梦想:)

特别是,我感觉缺乏必要的工具来调试,监视,理解和可视化分布式系统的行为(哎呀,我不得不编写自己的记录器和可视化程序来满足我的要求),并且我在写一些 在业余时间使用这些工具。

社区,您在这方面缺少哪些工具? 请为每个答案描述一个答案,并大致了解该工具的功能。 其他人可以指出这种工具的存在,或者有人可能会受到启发并编写它们。

trans by 2020-02-15T03:35:25Z

算法-如何找到两个最远的点?

这是我前段时间在面试中问到的一个问题。 而且我仍然不知道明智的答案。

问题是:

给定点集(x,y)。 找到2个最远的点。 彼此相距遥远。

例如,对于点:(0,0),(1,1),(-8、5)-最远的是:(1,1)和(-8,5),因为它们之间的距离大于 (0,0)-(1,1)和(0,0)-(-8,5)。

一种明显的方法是计算所有点之间的所有距离,并找到最大值。 问题在于它是O(n ^ 2),这对于大型数据集而言非常昂贵。

有一种方法是先在边界上跟踪点,然后为它们计算距离,前提是边界上的点比“内部”少,但它仍然很昂贵,在最坏的情况下会失败。

试图搜索网络,但没有找到任何明智的答案-尽管这可能仅仅是我缺乏搜索技能。

trans by 2020-02-12T09:46:32Z

安全性-语音记忆密码生成算法

背景

前几天,在体育馆里,我正在用密码锁工作,并意识到了一些对程序员有用的东西。 综上所述,我的组合是三个独立的数字集,听起来似乎很相似,或者具有一些其他关系,使它们易于记忆。 例如5-15-25、7-17-2、6-24-5。 这些示例似乎很容易记住。

我将如何实现类似的密码? 是的,它们应该很难破解,但对于最终用户来说也应该很容易记住。 组合锁通过混合具有相似声音的数字和具有相似属性的数字来做到这一点(7-17-23:所有素数,在7之后17立刻滚出舌头,而23是另一个素数,并且( 该组),“难”记住的)。

标准

  • 密码应该很容易记住。 !@#$%^&*();'{}_+<>?,./很容易记住,但是一旦攻击者知道您的网站给出了这种组合,它就将变得非常容易检查。
  • 单词或字母在大多数情况下应遵循相同的声音。
  • 至少8个字母
  • 不使用!@#$%^&*();'{}_+<>?,./这些标点符号虽然适用于“硬”密码,但没有“易于记忆”的声音。

资源资源

这个问题与语言无关,但是如果有C#的特定实现,我将很高兴听到它。

更新资料

一些用户说“这是不好的密码安全性”。 不要以为这是网站。 这可能只是我自己为自己创建一个根据这些规则生成密码的应用程序。 这是一个例子。

这些信   A-C-C-L-I-M-O-P“流程”,它们恰好是两个   常规词放在一起   (气候和拖把)。 进一步,   当用户说出这些字母时,或者   说他们一句话,这是真实的   为他们说。 容易记住,但是   难以破解(字典攻击,   明显)。

这个问题有两个部分的目标:

  1. 从听起来相似的字母(使用头韵)构造密码或
  2. 构造类似于普通单词的密码,以产生不在词典中的第三组字母。
trans by 2020-02-11T23:41:53Z

算法-如何在保留整数和的同时将浮点数舍入为整数?

假设我有一个浮点数数组,该数组以有序(假设升序)的顺序排列,其和已知为整数sum((in[i] - fn[i])^2)。我想将这些数字“四舍五入”为整数,同时保持它们的和不变。 换句话说,我正在寻找一种将浮点数数组(称为in[i] <= in[i+1])转换为整数数组(称为in)的算法,以便:

  1. 两个数组的长度相同
  2. 整数数组的总和为sum((in[i] - fn[i])^2)
  3. 每个浮点数sum((in[i] - fn[i])^2)和其对应的整数in[i] <= in[i+1]之间的差小于1(如果确实需要,则等于1)
  4. 鉴于浮点数已排序(sum((in[i] - fn[i])^2)),整数也将已排序(in[i] <= in[i+1]

鉴于满足了这四个条件,最好使用一种将舍入方差最小化的算法(sum((in[i] - fn[i])^2)),但这并不是什么大问题。

例子:

[0.02, 0.03, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14]
    => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[0.1, 0.3, 0.4, 0.4, 0.8]
    => [0, 0, 0, 1, 1]
[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
    => [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[0.4, 0.4, 0.4, 0.4, 9.2, 9.2]
    => [0, 0, 1, 1, 9, 9] is preferable
    => [0, 0, 0, 0, 10, 10] is acceptable
[0.5, 0.5, 11]
    => [0, 1, 11] is fine
    => [0, 0, 12] is technically not allowed but I'd take it in a pinch

要回答评论中提出的一些优秀问题:

  • 两个数组都允许重复的元素(尽管我也很想听听仅在浮点数组不包含重复的情况下才起作用的算法)
  • 没有一个正确的答案-对于给定的浮点输入数组,通常有多个满足四个条件的整数数组。
  • 我想到的应用程序是-这对MarioKart游戏中的顶尖选手来说是奇怪的分配点;-)我自己从未真正玩过该游戏,但是在观看其他人时,我注意到其中有24点分配 排在前四名的选手,我想知道如何根据完成时间分配分数(因此,如果某人以较大的领先优势完成比赛,他们会获得更大的分数)。 游戏将点的总和作为整数进行跟踪,因此需要这种舍入。

出于好奇,这里是我用来确定哪些算法起作用的测试脚本。

trans by 2020-02-11T18:02:28Z

语言不可知论-Code Golf:Tri

这是受此线程启发/从中获得的:[http://www.allegro.cc/forums/thread/603383]

问题

假设用户为您提供了从1到7的数字输入。应从控制台获取输入,而不太希望使用参数。

输入为1时,打印以下内容:

***********
 ********* 
  *******    
   *****   
    ***    
     *     

大于1的值应生成模式的倍数,以上面的1结尾,但要对称堆叠。 例如,3应该打印以下内容:

*********** *********** ***********
 *********   *********   ********* 
  *******     *******     *******  
   *****       *****       *****   
    ***         ***         ***    
     *           *           *     
      *********** ***********
       *********   ********* 
        *******     *******  
         *****       *****   
          ***         ***    
           *           *     
            ***********
             ********* 
              *******  
               *****   
                ***    
                 *     

如果您也打印反面则加分。

      *********** ***********
       *********   ********* 
        *******     *******  
         *****       *****   
          ***         ***    
           *           *     
            ***********
             ********* 
              *******  
               *****   
                ***    
                 *     
                 *     
                ***    
               *****   
              *******  
             ********* 
            ***********
           *           *     
          ***         ***    
         *****       *****   
        *******     *******  
       *********   ********* 
      *********** ***********

我们是否可以尝试让每种语言都回答一个问题,而我们都对此有所改进?

trans by 2020-02-11T03:20:14Z

算法-哈希表与平衡二进制

当我需要在哈希表或平衡二叉树之间进行选择以实现集合或关联数组时,应该考虑哪些因素?

trans by 2020-02-10T18:51:14Z

算法-在未排序的数组中找到等于给定总和的2个数字

我们需要在一个数组中找到总和等于给定值的一对数字。

A = {6,4,5,7,9,1,2}

总和= 10那么这对是-{6,4},{9,1}

我对此有两个解决方案。

  • 一个O(nlogn)解决方案-排序+带有两个迭代器(开始和结束)的校验和。
  • 一个O(n)解决方案-对数组进行哈希处理。 然后检查哈希表中是否存在sum-hash[i]

但是,问题在于,尽管第二个解决方案是O(n)时间,但也使用O(n)空间。

所以,我想知道我们是否可以在O(n)时间和O(1)空间中做到这一点。 这不是功课!

trans by 2020-02-09T19:35:18Z

数组-面试问题,他们想完成什么?

今天我正在接受技术面试,现在该给我一些编程练习了。我终于来到了最后一个问题:

给定数字:

116 104 105 115 32 105 115 32 99 111 114 114 101 99 ?

下一个数字是多少?

为了真正理解我的心态,我鼓励您停止阅读,并真正尝试找出下一个数字。 花几分钟,如果仍然无法解决问题,请继续阅读

首先,我花了5分钟寻找一个模式,但没有找到任何模式。我开始感到愚蠢。 提醒您,那个家伙盯着我,等待答案。 我有点傻。
所以我得到了一个线索。 This is not a mathematical question

我又花了5分钟,他说Think of the numbers as replacment for some sort of Alphabet

然后再过5分钟,他说Think of the numbers as replacment for some sort of Alphabet

再过5分钟,我还不知道最后一个数字是多少。他给出了最终的线索,让我解决了,这是Think of the numbers as replacment for some sort of Alphabet

现在,我鼓励您提出答案,但是我也想从人们那里知道,他为什么还要问这样的问题? 这与编程有什么关系,他看到我用20分钟的绝望痛苦思考,能做什么呢?

trans by 2020-02-09T14:13:02Z

语言不可知论-Code Golf:Happy Primes!

现在是星期天,是时候进行标准高尔夫比赛了!

挑战

根据字符数编写最短的源代码,以确定输入数字是“幸福的素数”,“悲伤的素数”,“幸福的非素数”还是“悲伤的非素数”。

输入值

输入应该是来自命令行参数或stdin的整数。 不必担心处理大数,但如果可以/想要,请这样做。 对于小于1的输入值,行为是不确定的,但是1的结果是确定的。

输出量

输出应打印数字类型:“快乐素数”,“悲伤素数”,“快乐非素数”或“悲伤非素数”。 尾随换行符是可选的。

例子

$ happyprime 139
happy prime
$ happyprime 2
sad prime
$ happyprime 440
happy non-prime
$ happyprime 78
sad non-prime

定义

以防万一您的大脑需要复习。

快乐号码

从维基百科,

一个快乐的数字是由   以下过程。 从任何开始   正整数,替换数字   由其平方的总和   数字,然后重复该过程,直到   该数字等于1(   停留),否则它会无限循环   不包括1.的循环   此过程结束的数字   1是快乐的数字,而那些是   不以1结尾的是不开心的数字   (或悲伤的数字)。

例如,

  • 139
  • 1 ^ 2 + 3 ^ 2 + 9 ^ 2 = 91
  • 9 ^ 2 + 1 ^ 2 = 82
  • 8 ^ 2 + 2 ^ 2 = 68
  • 6 ^ 2 + 8 ^ 2 = 100
  • 1 ^ 2 + 0 ^ 2 + 0 ^ 2 = 1

素数

质数是一个大于1的整数,并且正好有两个除数:1和它本身。

快乐总理

因此,幸福的素数既是幸福的又是素数。

答案选择

显然,答案将是按字符数计算的最短源代码,在我测试的所有情况下,该源代码都会输出指定的结果。 一旦下一次(由社区决定)高尔夫代码挑战赛来临,我将标记答案,因此我们可以将所有精力都集中在那个挑战上。 :)

决断

好吧,看来小镇上已经有一个新的代码高尔夫,并且自发布这个问题以来已经过去了大约一周的时间,所以我将最短的源代码标记为答案(g琐器的64个字符的Golfscript解决方案)。 也就是说,我既喜欢belisarius的99个字符的Mathematica解决方案,又喜欢Nabb的神秘的107字符dc解决方案。

对于其他所有人,辛苦了! 我的计算机上从来没有这么多编程语言环境。 我希望每个人都可以针对自己喜欢的语言学到一些新的,肮脏的技巧。

重用

我已经重新发布了这场比赛产生的一些代码,作为我编写的脚本的示例,该脚本用于针对自动分级的参考实现测试各种程序。 该目录中的README文件说明了源代码的来源,并指出所有代码均已根据CC BY-SA 2.5许可证(如SO的法律部分所述)重新使用。 提交时,每个目录都标有您的显示名称。

如果您对以这种方式或归因方式重复使用代码有疑问,请告诉我们,我将纠正错误。

trans by 2020-02-08T02:29:44Z

语言不可知-是否将“ if”语句视为方法?

关于是否将“ if”语句视为一种方法,我的同僚中引起了有趣的讨论。 尽管单词语句后附加了“ if”,但其行为仍类似于简单的非返回值方法。

例如:

if(myValue) //myValue is the parameter passed in
{
    //Execute
}

同样,方法可以执行相同的操作:

public void MyMethod(myValue)
{
    switch(myValue)
    {
        case true:
            //Logic
            break;
        case false:
            //Logic
            break;
    }
}

用编程语言将“ if”语句称为(简单的)简单的预定义方法是否准确?

trans by 2020-02-07T22:11:12Z

算法-运作方式如何? 河内奇怪的塔解决方案

当我发现河内塔的这种不寻常的迭代解决方案时,我迷失在互联网上:

for (int x = 1; x < (1 << nDisks); x++)
{
     FromPole = (x & x-1) % 3;
     ToPole = ((x | x-1) + 1) % 3;
     moveDisk(FromPole, ToPole);
}

这篇文章的答案之一中也有类似的Delphi代码。

但是,对于我的一生来说,我似乎找不到很好的解释说明为什么这样做有效。

谁能帮助我理解它?

trans by 2020-02-04T18:58:00Z

语言不可知-在Mac OS X上可以使用DYLD_LIBRARY_PATH吗? 而且,动态库搜索算法是什么?

我读了一些不鼓励使用DYLD_LIBRARY_PATH的文章,因为动态库的路径应使用-install_name,@ rpath和@loader_path进行固定。

就使程序在Linux和Mac OS X上均可运行而言,Mac OS X的DYLD_LIBRARY_PATH的作用与Linux的LD_LIBRARY_PATH的作用相同。 而且,我们可以共享(几乎)没有-install_name和@rpath的相同make文件。

  • 在Mac OS X上使用DYLD_LIBRARY_PATH是否可以?
  • 当二进制文件找不到动态库时,Mac OS X中的动态库搜索算法是什么? 当前目录-> DYLD_LIBRARY_PATH目录...?
trans by 2020-02-03T18:23:19Z

语言不可知论-Code Golf:点点滴滴

您可能还记得小时候的这些绘图,但是现在是时候让计算机绘制这些绘图了(以完整的ascii效果)。 玩得开心!

描述:

输入的是描述“字段”的多行(以换行符结尾)。 在此字段中散布着“数字”(由空格分隔)。 所有行都可以认为是相同的长度(您可以在行尾填充空格)。

  • 数字总是从1开始
  • 它们遵循自然数的顺序:每个“下一个数”都以1递增
  • 每个数字的左右两侧都被(至少)一个空格包围

任务:

在这些数字之间以自然顺序画线distance(x1,x2) == distance(y1,y2)(假设N <= 99)具有以下特征:

  1. 将数字替换为“ distance(x1,x2) == distance(y1,y2)”字符
  2. 对于水平线:使用“ distance(x1,x2) == distance(y1,y2)
  3. 对于垂直线:使用“ distance(x1,x2) == distance(y1,y2)
  4. 左右或上下移动:distance(x1,x2) == distance(y1,y2)
  5. 向左或向上或向右和向下移动:distance(x1,x2) == distance(y1,y2)

重要笔记:

  1. 当绘制类型4和5的线时,可以假定(给定与坐标x1,y1和x2,y2连接的点)distance(x1,x2) == distance(y1,y2)。换句话说(如jball用户评论):“连续的元素不在水平或垂直 对齐始终与斜杠或反斜杠的坡度对齐。”

  2. 重要的是要遵循点连接的顺序(较新的线条会击破较旧的线条)。

-样品输入1-

                                  8 

                                  7  6 
                      10       9       

                                        5            

                                     3  4        
                 11 

                   12                       13    
          1                          2                     

-样本输出1-

                                 +                                
                                /|                                
                               / +--+                             
                     +--------+      \                            
                    /                 \                           
                   /                   +                          
                  /                    |                          
                 /                  +--+                          
                +                   |                             
                 \                  |                             
                  +------------------------+                      
         +--------------------------+        

-样品输入2-

                        64          
                        63              



                    62 61                             
               1  65                                   
                 66    57 58                               
               2      56  59               45                
                   67  55                  46              
             3                               44           
                         54  60            47              
                          53 52   49      48              
             4                51 50       43            

           5                                42              
                                            41               
           6              23                                 
                          22 25  26       40              
                      20 21 24            34                 
              7 13 12                    33                    
                    19              27  32                     
                14                        35               
           8   15                                           
                16                                         
                                   39                        
                17  18         28  31 36                  
               9                     38                       
                10 11          29  30 37                       

-样本输出2-(独角兽参考)

                       +        
                      /+      
                     //          
                    //        
                   //           
                  /+--+        
              +  +     \         
              | +     +-\+          
              +  \   +   \                +         
             /    +   +   \               +\    
            +          \   \              | +       
            |           +   +             +/           
            |            +--+    +-------+/               
            +                +--+        +              
           /                              \              
          +                                +               
          |                                +                 
          +              +                /             
           \             +\ +---+        +           
            \        +--+  +     \      /+              
             + +--+ /             \    /+|             
            /  |  |+               +  /+ |                 
           /   +  ||              /  //  +            
          +   +   ||             /  //  /                
           \   +  ||            /  //  /              
            \  |  ||           /  +/  /                  
             \ +---+          +   +\ +                  
              +   |           |   | +|                 
               +--+           +---+  +               

优胜者:

最短的解决方案(按代码字符计数)。 可以通过标准输入读取输入。

trans by 2020-02-03T00:07:44Z

算法-检查二叉树是否是镜像或对称

测试树是否对称的基本算法是什么? 因为它是一个二叉树,所以我认为它是一个递归的排序定义

正式的问题如下:

如果二叉树的左右子树是相同的镜像,即二叉树是对称的,则二叉树就是其自身的镜像。最好用几个例子来解释。

  1
 / \
2   2

真正

   1
  / \
 2   2
  \
   3

     1
   /   \
  2     2
 / \   / \
4   3 3   4

真正

       1
     /   \
    2     2 
   / \   / \
  3   4 3   4

       1
     /   \
    2     2
   /       \
  3         3

真正

在选择的编程语言中,定义BTree类/ C结构和关联的方法以检查树是否为镜像。 对于静态类型的语言,您可以假定节点值都是整数。

Class/structure definition
BTree {
  BTree left;
  BTree right;
  int value;
}

假定调用者跟踪树的根,并在其上调用isMirror()函数。

另外,如果定义一个类,请确保提供一个无参数的构造函数以及如果不能公开访问数据元素的getter / setter方法。

trans by 2020-02-02T10:09:11Z

语言不可知论-编程中单例的目的

诚然,这是一个相当宽松的问题。 我对单例的当前理解是,它们是您以仅创建一个实例的方式设置的类。

在我看来,这听起来像是一个静态类。 主要区别在于,对于静态类,您不能/不能实例化它,而仅使用它,例如firstSingleton == secondSingleton。对于单例类,您仍然需要做类似的事情

singleton firstSingleton = new singleton();
firstSingleton.set_name("foo");

singleton secondSingleton = new singleton();

如果我错了,请纠正我,但现在是firstSingleton == secondSingleton,是吗?

secondSingleston.set_name("bar");
firstSingleton.report_name(); // will output "bar" won't it?

请注意,我正在独立询问这种语言,更多地是关于这个概念。 因此,我实际上并不担心如何编写这样的类,而是担心您为什么不想这样做以及需要考虑什么。

trans by 2020-02-01T07:32:12Z

算法-如何从以单词形式写的数字中读取值?

众所周知,数字既可以用数字写成,也可以用名字来称呼。 尽管有很多将123转换为123的示例,但我找不到如何将123转换为123的良好示例。

一些警告:

  1. 基数/标称或序数:“一个”和“第一”
  2. 常见的拼写错误:“四十” /“四十”
  3. 百/千:2100->“二十一”,还有“二十一百”
  4. 分隔符:“一百一十二点二十五”,也可以是“一百一十二点五十二”或“一百一十二点五十二”等
  5. 口语:“三十多岁”
  6. 分数:“三分之一”,“五分之二”
  7. 通用名称:“一打”,“半个”

而且可能还有更多未列出的警告。假设算法需要非常健壮,甚至可以理解拼写错误。

我应该阅读哪些领域/论文/研究/算法以学习如何编写所有这些内容?信息在哪里?

PS:我的最终解析器实际上应该理解3种不同的语言,英语,俄语和希伯来语。 也许稍后会添加更多语言。 希伯来语也有男性/女性数字,例如“一个男人”和“一个女人”具有不同的“一个”,即“ ehad”和“ ahat”。 俄语也有其自身的复杂性。

Google在这方面做得很好。 例如:

[http://www.google.com/search?q=十进制中的两个+千+和+一个+一百+加+五+十二+和+四个+五+

(也可以相反[http://www.google.com/search?q=999999999999+in+english)]

trans by 2020-01-29T13:39:46Z

1 2 3 4 5 6 7 8 9 10 11 12 13 下一页 共13页