给定一个整数数组,编写一个程序来确定它是否按升序排序。
请记住,这是一个代码拖曳问题。
我正在寻找人们提出的最有趣的方式。
多数投票的答案是成功的。
这个问题的灵感来自候选人在面试中给我的“创造性”解决方案:)
“创意”解决方案是这样的:
因为对于排序数组
- 所有元素左侧的所有元素都必须较小
- 任何元素右侧的所有元素必须更大
因此,对所有元素运行一个主循环,并通过在主循环中运行两个嵌套循环来检查以上两个条件(一个用于左侧,一个用于右侧)
我感到震惊!!。
给定一个整数数组,编写一个程序来确定它是否按升序排序。
请记住,这是一个代码拖曳问题。
我正在寻找人们提出的最有趣的方式。
多数投票的答案是成功的。
这个问题的灵感来自候选人在面试中给我的“创造性”解决方案:)
“创意”解决方案是这样的:
因为对于排序数组
- 所有元素左侧的所有元素都必须较小
- 任何元素右侧的所有元素必须更大
因此,对所有元素运行一个主循环,并通过在主循环中运行两个嵌套循环来检查以上两个条件(一个用于左侧,一个用于右侧)
我感到震惊!!。
Answers:
所有人都知道:排序非常慢,并且需要很多周期(您可以做的最好的事情是使用n log(n)
)。因此,很容易检查数组是否已排序。您所要做的就是比较排序数组和排序数组的运行时间。
array = [1, 5, 4, 2, 3]
## measure the time needed to sort the array 1m times
tstart = Time.now
1000000.times {
array.sort
}
trun = Time.now - tstart
## now do a reference measurement on a sorted array
array.sort!
tstart = Time.now
1000000.times {
array.sort
}
treference = Time.now - tstart
## compare run times
if trun > treference
print "array was not sorted"
else
print "array was sorted"
end
treference <= trun
对于每种已排序的情况,由于其他不确定性,这不太可能出现) 。从理论上讲,对于已排序的案例,您似乎会得到大约50%的假阴性?
array = prompt("Give the array");
while (true) {
sorted = prompt("Is it sorted?");
if (/yes|Yes/.test(sorted)) {
alert("The array is sorted.");
break;
} else if (/no|No/.test(sorted)) {
alert("The array is not sorted.");
break;
} else {
alert("Dear user:\n\nPlease refer to the manual (RTFM) to observe how to use the system accordingly to the defined business rules.\nNow, try again.");
}
}
欢迎使用Stack Overflow!这是一个很好的第一个问题,因为它甚至困扰了一些资深编码人员。在分发代码之前,让我给您一些背景信息:
乍一看,确定排序可能是一项艰巨的任务。对于任何长度为n的集合,都有n!订购的可能方式。这些称为置换。如果您的数组具有不同的元素,则仅对其中一种可能性进行排序!要找到已排序的一个,您必须对它们全部进行筛选,直到找到正确的(可能是唯一的)一个,然后丢弃所有其他。
n的算法!对于较大的输入,复杂度需要很长时间,但是通过一些工作,我们可以解决这个问题,并降低整个复杂度。那仍然是指数时间,但是比阶乘好得多。
为此,我们只需要考虑以下数学事实:如果对数组进行排序,则其(相对排序)子集的每个子集也会被排序。您可以向数学专家寻求正式证明,但这是直觉上的事实。例如,对于该集合123
,适当的子集为1 2 3 12 13 23
。您可以看到它们都是有序的。现在,如果原始文档为213
,您将拥有2 1 3 21 23 13
,并且马上就可以看到该21
文档已损坏。
之所以重要,是因为远远少于n!子集。实际上,我们只需要查看2 n -2个子集。我们可以排除包含整个原始数字数组的集合以及空集合。
尽管如此,2 n -2 仍然是很多工作。与大多数超过多项式时间的事物一样,分治法在这里效果很好。最简单的方法?递归!
基本步骤很简单。对于输入的每个子集,您都会生成较小的子集。然后,对于每一个,您执行相同的操作。一旦子集缩小到2,您只需检查哪个更大。由于您每次都缩小子集的大小,因此实际上比您预期的要快。
这里的关键事实是,一旦您发现一个混乱的子集,便可以提早退出。你不具备通过他们所有的搜索。如果一个人坏了,那么整个团体都是坏人。您在许多其他答案中都没有看到这是速度方面的考虑。
我已经用Java做到了这一点,因为它是一种流行的语言并且易于阅读。递归的优雅应该显而易见:
import java.util.ArrayList;
public class SortChecker {
static final Integer[] input = {1, 2, 3, 4, 5};
public static void main(String[] args) {
if(isSorted(input))
System.out.println("The array is sorted properly.");
else
System.out.println("The array was not sorted properly.");
}
public static boolean isSorted(Integer[] in){
if(in.length == 1)
return true;
if(in.length == 2)
return (in[0] <= in[1]);
ArrayList<Integer[]> subsets = getSubsets(in);
for(Integer[] next : subsets){
if(!isSorted(next))
return false;
}
return true;
}
public static ArrayList<Integer[]> getSubsets(Integer[] in){
ArrayList<Integer[]> subsets = new ArrayList<Integer[]>();
int bitmasks = (1 << in.length) - 1;
for (int i = 1; i < bitmasks; i++){
ArrayList<Integer> subset = new ArrayList<Integer>();
for (int j = 0; j < in.length; j++)
if ((i & (1 << j)) > 0)
subset.add(in[j]);
subsets.add(subset.toArray(new Integer[1]));
}
return subsets;
}
}
记录下来,我在等待15分钟以排序12个元素的数组后感到无聊并杀死了它。它将在45秒内完成11个元素。当然,对于未排序的,它确实确实会更早退出,所以,很好。
更新:重新启动后,它将在13分钟内执行12个元素。13耗时将近3个小时,而14耗时20个小时。
O(big)
。
大家都知道,蛮力方法总是最快的。
bool issorted(std::vector<int>& list)
{
switch (list.size()) {
case 0: case 1: return true;
case 2: return list[0]<=list[1];
case 3: return list[0]<=list[1] && list[1]<=list[2];
case 4: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3];
case 5: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4];
case 6: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5];
case 7: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6];
case 8: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7];
case 9: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8];
case 10: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9];
case 11: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10];
case 12: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11];
case 13: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12];
case 14: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13];
case 15: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14];
case 16: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15];
case 17: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16];
case 18: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17];
case 19: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18];
case 20: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19];
case 21: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20];
case 22: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21];
case 23: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22];
case 24: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23];
case 25: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24];
case 26: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25];
case 27: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26];
case 28: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27];
case 29: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28];
case 30: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29];
case 31: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30];
case 32: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31];
case 33: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32];
case 34: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33];
case 35: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34];
case 36: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35];
case 37: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36];
case 38: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37];
case 39: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38];
case 40: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39];
case 41: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40];
case 42: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41];
case 43: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42];
case 44: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43];
case 45: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43] && list[43]<=list[44];
case 46: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43] && list[43]<=list[44] && list[44]<=list[45];
case 47: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43] && list[43]<=list[44] && list[44]<=list[45] && list[45]<=list[46];
case 48: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43] && list[43]<=list[44] && list[44]<=list[45] && list[45]<=list[46] && list[46]<=list[47];
case 49: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43] && list[43]<=list[44] && list[44]<=list[45] && list[45]<=list[46] && list[46]<=list[47] && list[47]<=list[48];
case 50: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43] && list[43]<=list[44] && list[44]<=list[45] && list[45]<=list[46] && list[46]<=list[47] && list[47]<=list[48] && list[48]<=list[49];
case 51: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43] && list[43]<=list[44] && list[44]<=list[45] && list[45]<=list[46] && list[46]<=list[47] && list[47]<=list[48] && list[48]<=list[49] && list[49]<=list[50];
case 52: return list[0]<=list[1] && list[1]<=list[2] && list[2]<=list[3] && list[3]<=list[4] && list[4]<=list[5] && list[5]<=list[6] && list[6]<=list[7] && list[7]<=list[8] && list[8]<=list[9] && list[9]<=list[10] && list[10]<=list[11] && list[11]<=list[12] && list[12]<=list[13] && list[13]<=list[14] && list[14]<=list[15] && list[15]<=list[16] && list[16]<=list[17] && list[17]<=list[18] && list[18]<=list[19] && list[19]<=list[20] && list[20]<=list[21] && list[21]<=list[22] && list[22]<=list[23] && list[23]<=list[24] && list[24]<=list[25] && list[25]<=list[26] && list[26]<=list[27] && list[27]<=list[28] && list[28]<=list[29] && list[29]<=list[30] && list[30]<=list[31] && list[31]<=list[32] && list[32]<=list[33] && list[33]<=list[34] && list[34]<=list[35] && list[35]<=list[36] && list[36]<=list[37] && list[37]<=list[38] && list[38]<=list[39] && list[39]<=list[40] && list[40]<=list[41] && list[41]<=list[42] && list[42]<=list[43] && list[43]<=list[44] && list[44]<=list[45] && list[45]<=list[46] && list[46]<=list[47] && list[47]<=list[48] && list[48]<=list[49] && list[49]<=list[50] && list[50]<=list[51];
}
}
实际的例程更长(去std :: npos),但是我在这里的发布限制为30000个字符。
Inform是用于为经典的Infocom Z-machine解释器编写交互式小说游戏的语言。为了避免破坏,我先给出程序的结果,然后给出源代码。
编辑:我做了一个小小的修订,以允许将数字添加到数组,并包括一个迷人的房间描述。
Sorted
An Interactive Fiction by Jonathan Van Matre
Release 1 / Serial number 140301 / Inform 7 build 6G60 (I6/v6.32 lib 6/12N) SD
Sorting Room
You are in the Sorting Room, a sterile expanse of pure white. Translucent
lucite walls leak a lambent clinical light into the spotless room.
You can see a safe (closed), a flask of poison, a radioactive isotope
attached to a radiation detector that triggers a hammer, an array (empty)
and Erwin Schrodinger here.
>open safe
You open the safe.
>put flask in safe
(first taking the flask of poison)
You put the flask of poison into the safe.
>put isotope in safe
(first taking the radioactive isotope attached to a radiation detector
that triggers a hammer)
You put the isotope detector assembly into the safe, carefully placing
the hammer next to the fragile glass of the flask of poison.
>get array
Taken.
>put numeral 1 in array
(first taking the numeral 1)
You put the numeral 1 into the array.
>put 2 in array
(first taking the numeral 2)
You put the numeral 2 into the array.
>put 3 in array
(first taking the numeral 3)
You put the numeral 3 into the array.
>examine array
In the array are a numeral 3, a numeral 2 and a numeral 1.
>put array in safe
You put the array into the safe.
>ask Erwin about whether the array is sorted
Erwin grumbles and complains, "You haven't finished the experiment"
>close safe
You close the safe.
>ask Erwin about whether the array is sorted
Erwin beams and proudly announces, "Indeterminate!"
以及源代码:
"Sorted" by Jonathan Van Matre
The Sorting Room is a room. "You are in the Sorting Room, a sterile expanse of pure white. Translucent lucite walls leak a lambent clinical light into the spotless room."
The safe is a container. The safe is in the Sorting Room. The safe is openable. The safe is closed.
There is a flask of poison in the Sorting Room.
There is a radioactive isotope attached to a radiation detector that triggers a hammer in the Sorting Room.
There is an array in the Sorting Room. The array is a container.
There is a numeral 1 in the Sorting Room. The numeral 1 is undescribed.
There is a numeral 2 in the Sorting Room. The numeral 2 is undescribed.
There is a numeral 3 in the Sorting Room. The numeral 3 is undescribed.
There is a numeral 4 in the Sorting Room. The numeral 4 is undescribed.
There is a numeral 5 in the Sorting Room. The numeral 5 is undescribed.
There is a numeral 6 in the Sorting Room. The numeral 6 is undescribed.
There is a numeral 7 in the Sorting Room. The numeral 7 is undescribed.
There is a numeral 8 in the Sorting Room. The numeral 8 is undescribed.
There is a numeral 9 in the Sorting Room. The numeral 9 is undescribed.
In the Sorting Room is a man called Erwin Schrodinger.
Understand the command "ask" as something new.
Understand "ask [someone] about [text]" as asking it about.
After inserting the isotope into the safe:
If the safe encloses the flask, say "You put the isotope detector assembly into the safe, carefully placing the hammer next to the fragile glass of the flask of poison.";
Instead of asking Erwin about something:
If the safe is closed and the safe encloses the flask and the safe encloses the array and the safe encloses the isotope, say "Erwin beams and proudly announces, 'Indeterminate!' ";
Otherwise say "Erwin grumbles and complains, 'You haven't finished the experiment' ";
首先,您必须运行此安装代码
class Array;alias ruby sort;end
def self.method_missing x,*a;x;end
def very x;$a=x;end
def many x;$b=$a.send x;end
def wow;puts $a==$b;end
然后只需将数组存储在一个名为的变量中coding
并运行:
very coding
many ruby
so algorithm
wow
并会打印出您的答案(对或错)。
请同时添加总督代码以实现最佳性能:
#~! SET DOGE=1 PERFORMANCE=OPTIMAL ONERROR=nil PIC=
# ***=*
# **===*
# ***=-=& &&**&
# **==--= ***===*
# &***=---* $*=------*&
# &***=---=* $**=----;;=&
# &**==----=& &*===---;;;-*
# &**==----=* &**=-==--;;;;=
# ****=-----=* &&*==--=---;;;;-
# **===------=& $&*==-------;;;;-
# **===-------=*&$$ &*==------;;;;;;;-
# **==----==-====***&&&&&&&&$$ &*==-;;---;;;;;;;;-&
# &*=---=====================*******=---;---;;;;;;;-;;=
# *=======*=========================---;;--;;;;;;;;;;;*
# *===***=======================------;;--;;""""";;;;;=
# *=*****========================;--;;;;--;;""""";;;;;*
# &*********====-----===============;;;;;----;"","";-;;-&
# ***********====----================-;;;;----;",,";;----
# &************===---====================-;;;;;;",,"";----=
# &*************===---=====================-;;;;",,,";-----*
# ******=*******===--=======================--;",,,"";-----&
# &**************==--=========================-;"","";----;-
# ****************==---====****=====-===========--;";;-;;;";=
# ****************==----==*******===--=============--;----;--=
# &*****=;"";==***===----==*******===----=============------;-=$
# &&&***;"",,"-**====---==********=====-===============----;;;-&
# &&&&&*=-;;";";*==========****=***======--=========***==---;;;-&
# $&&&&&&=="",,,-===**=======***==-;-=================**===--;;;;*
# &&&&&&&-="",,"==***==***======-",,,";=-===================--";;=
# &&&&&**=-""";==****=***===---;"-=-,,,"--===================-;;;=&
# &&&&&&***--;=***********=---;,,-*",,,,,"--==================--;--*
# &&&&&***=*=*************=-;;","=-,,,,,,"-====================----=$
# &&&&&&*******************==--","-;,,,,,"-====*****=============-===&
# $&&&&&&******************===---",";"""";=******************=====-===*
# &&&&&&&&&*****************======--;;--==********************=========&
# &&&&&&&&&&&******=**********===========*==*****&&************=========*
# &&&&&&&&*=---;--==**********==============*********************=======*&
# &&&&&&&-""""";;"";=**********==**=========*****&&&**************=======*
# &&&&&&&*,,,,,,,,,,,"-****&************=*******&&&&&&&************========&
# &&**&&&=,,,,,,,,,,,,;*&&&&***********************&&&&&&***********=======*
# &&&*&&&*",,,,,,,,,,,;*&&&*************&&**********&**************========*&
#&&&&&&&&-"",,,,,,,,,,-*&&&**********&**&&&&&&&******************==========**
#&&&&&&&*=,,,,,,,,,,,"-***************&&&&&&&&&*****************====--======*&
#&&***&&*=;,,,,,,,,,";=*==*****************&&&***************=======--=======&
#*&&&&**=-;",,,,,,"";-=*********=**&*********&&**************=======--======**
#&&&&&**=-""",,,,,"";==**==***===**********************======***===---=======*&
#&&&&&**=-;"""""","";;=-===*======*********************==******====----======*&
#*&&&&**=-;""""""""";=-============*****************==*********====---==--===**
#&&&&&***=",,,,,,"""";--=============*******==****************====----=--====**&
#&&&&&****"",,,,,,,,,;-=========--===****====******************====--==-======*&
#&&&&&&&&*-"",,,,,,,,,"--==--;"""";====**===********************======--======**
#&&&&&&***=-;",,,,,,,,,,,;",,,""";-=======********************===-------=======*
#&&&&&&&****=;""""""""",,,"""";;--==**====*******************=====--------=====*
# &&&&&&&***=-;;;;;;;;;"";;;;;---==***====*****************=====--=--------====*$
# &&&&&&*****=-;-----=--------=====*=======****************====-==---------=====&
# &&&&&******==-==-=============***========*************======----=--------====&
# &&&&************==========================***********=====----------------===*
# $&&&&***************====================***********=*======-------------=--==*
# &&*&************=====================**************======--------------=====*
# &******************=================**************=========-----------======*
# &***********=*****================************==========------;-------=====*
# &*****************================***********=============---------========*
# &*************===================**********==***========--------========***
# **************==================********====**===*=====--------=======****
# &************=============================*****=*=====--------=======*****
# &****=*******=============================**============--=======*=******
# $*****=====**===========================***===================**********&
# &*****=====================-====-====*=*=====*=======--==***************
# &*****===========---==--===============**=**=*========*****************
# &*****====---=---------========********======***===*******************
# *****=======-=-------======*******=**==****==*==*********************
# $***======================******===**********************************
# &***===================*******==***=******************************=&
# &***=========-=========*************==***************************=&
# ******===*=======*=*****************==*************************==&
#~! END
这是最简单的方法。
(ASCII艺术是由我编写的脚本生成的,该脚本是从该图像派生的。)
您会喜欢以下解决方案的简便性和直接性。此编码杰作中使用的总体概念和最先进的功能将使您立即跻身世界顶级开发商的精英行列。
function is_sorted($input) {
mysql_connect('localhost', 'name', 'password');
mysql_select_db('database');
mysql_query('
CREATE TEMPORARY TABLE sorting_table (
`value` int NOT NULL
)');
foreach ($input as $value) {
mysql_query('INSERT INTO sorting_table VALUES (' . $value . ')');
}
$i = 0;
$result = 'SORTED';
$query = mysql_query('SELECT * FROM sorting_table ORDER BY value ASC');
while ($value = reset(mysql_fetch_row($query))) {
if ($input[$i++] != $value) {
$result = 'NOT SORTED';
break;
}
}
mysql_query('DROP TABLE sorting_table');
return $result;
}
print is_sorted(array(10, 20, 30, 40, 50));
解决此问题的真正需要做的是以使解决方案显而易见的方式重新构造问题。因为这基本上是一个“真假”类型的问题,所以您实际上要问的是“如何才能100%确定该数组已排序?” 如果从这个问题中弹出一个词,那就是“确定”一词。衡量确定性的最佳方法是什么?知道了:统计资料。
这里的其他答案仅检查数组是否按一个方向排序。此解决方案同时测试升序和降序。诀窍是获取一个已经排序的大小相同的数组(易于自己制作),然后找出每个数组的顺序与另一个数组的相关程度。计算Kendall tau等级相关系数是最简单的方法:
using System;
namespace Homework
{
class Example
{
static void Main(string[] args)
{
int[] n1 = { 23, 50, 16, 57, 19, 60, 40, 7, 30, 54 };
int[] n2 = { 7, 16, 19, 23, 30, 40, 50, 54, 57, 60 };
int[] n3 = { 60, 57, 54, 50, 40, 30, 23, 19, 16, 7 };
Console.WriteLine(isSorted(n1));
Console.WriteLine(isSorted(n2));
Console.WriteLine(isSorted(n3));
}
static string isSorted(int[] a)
{
double t = 0;
int n = a.Length;
//Build a 'known' sorted array.
int[] k = new int[n];
for (int i = 1; i < n; i++)
{
k[i] = i;
}
//Find the Kendall's tau coefficient.
//First the numerator...
for (int i = 1; i < n; i++)
{
for (int j = 0; j < i; j++)
{
t += Math.Sign(a[i] - a[j]) * Math.Sign(k[i] - k[j]);
}
}
//...then the denominator.
int d = n * (n-1) / 2;
//This gives the correlation coefficient.
double sortedness = t / d;
//1 is perfect correlation (ascending), -1 is perfectly non-correlated (descending).
if (Math.Abs(sortedness) == 1)
{
return "Sorted";
}
else
{
return "Unsorted";
}
}
}
}
输出:
Unsorted
Sorted
Sorted
此功能也很容易扩展其功能,因为添加诸如“大多数排序”或“更多排序”或“完全随机”之类的功能很简单。
编辑
几乎忘记了算法的效率。当前是O(7)。方法名称中有一个,每个“ for”关键字中有一个,在“ double”声明中一个,在变量“ sortedness”的使用中有两个。您可以通过重命名该函数,将double更改为十进制,取消将“ sortedness”分解为“ srtdnss”并将for循环转换为O(0)(尽可能低)来将其改进到最低。 while循环。
O(7)
是个玩笑
以下策略最终将揭示数组是否已排序:
在线版本进行测试。
class Array
def is_sorted?
permutations = permutation.to_a
self == permutations.max || self == permutations.min
end
end
此代码可能有效。
static bool isSorted(int[] s)
{
var rnd = new Random();
for (var i = 0; i < s.Length * s.Length * s.Length; i++)
{
var i1 = rnd.Next(0, s.Length);
var i2 = rnd.Next(0, s.Length);
if (i1 < i2 && s[i1] > s[i2] || i1 > i2 && s[i1] < s[i2])
return false; // definitely not sorted
}
return true; // probably sorted
}
蟒蛇
如果列表已排序,则每个数字都小于或等于下一个数字。因此,删除最左边的数字将提高平均值,否则列表将不排序。我们将其循环以检查每个数字
def is_sorted(lst):
def _avg(lst):
return sum(lst)/(1.0*len(lst))
for i in range(len(lst)-1):
if _avg(lst[i:]) > _avg(lst[i+1:]):
return False
return True
is_sorted([1,2,3])#真
is_sorted([3,2,1])#
False is_sorted([1,4,3,2,0,3,4,5])#False
细心的读者会注意到它并不完全像那样工作。
is_sorted([1,4,3,2,0,3,4,11])#False
is_sorted([1,4,3,2,0,3,4,12])#
真is_sorted([1,2 ,1,2,1,2,1,2,99])#True
重击
mkdir -p nums
mynums=(1 2 3 4)
for i in "${mynums[@]}"
do
touch "nums/$i"
done
result=`ls -v nums`
resultarray=(${result})
for i in "${!resultarray[@]}"
do
if [ ${resultarray[$i]} != ${mynums[$i]} ]; then
echo "not sorted!"
rm -rf nums/*
exit 1
fi
done
echo "sorted!"
rm -rf nums/*
为数组中的每个元素触摸一个文件,将其放在目录中,然后将ls结果与原始数组进行比较。
我对bash不太满意,我只想尝试一下:)
“较小”或“较大”的概念在2013年是如此之多。真正的程序员只能使用modulo
运算符!
private static void Main()
{
List<int> list = new List<int> { 1, 5, 7, 15, 22};
List<int> list2 = new List<int> { 1, 5, 15, 7, 22 };
bool a = IsSorted(list); // true
bool b = IsSorted(list2); // false
}
private static bool IsSorted(List<int> list)
{
for(int i = 0; i % list.Count != list.Count() - 1; i++)
{
if (list[i] % list[i + 1] != list[i] &&
list[i] != list[i + 1])
{
return false;
}
}
return true;
}
检查数组是否排序很容易!只需检查第一个元素是否小于第二个即可。然后排序其余部分,看看它们是否相等。
不幸的是,分类是一个困难的问题。没有很多众所周知的或有效的算法可以对数组进行排序。实际上,这是当前计算机科学知识现状中的一个巨大盲点。因此,我提出了一种简单的算法:随机排列数组,然后检查它是否已排序,这已经很容易了!继续改组直到排序。
object Random {
def isSorted(list: List[Int]): Boolean = {
if (list.size <= 1) {
true
} else {
sort(list.tail) == list.tail && list.head <= list.tail.head
}
}
def sort(list: List[Int]): List[Int] = {
val rand = new scala.util.Random()
var attempt = list
do {
attempt = rand.shuffle(attempt)
} while (!isSorted(attempt))
attempt
}
def main(args: Array[String]): Unit = {
println(isSorted(List(1, 2, 3)))
println(isSorted(List(1, 3, 2)))
println(isSorted(List(1, 2, 3, 4, 5, 6, 7, 8)))
}
}
我假设这输出“ true,false,true”。它已经运行了一段时间了...
整数排序数组具有以下属性:每个子数组(例如,数组中的元素n至m)也是整数排序数组。这显然意味着最好的方法是递归函数:
bool isSorted_inner(const std::vector<int> &array, int start, int length){
if (length == 2){
if (array[start] < array[start+1]){
return true;
}else{
return false;
}
}else{
return isSorted_inner(array, start, length-1) && isSorted_inner(array, start+1, length-1);
}
}
bool isSorted(const std::vector<int> &array){
return isSorted_inner(array, 0, array.size());
}
它可能不是最快的方法,但是对于列表是否已订购,还是非常准确的测试。它也很容易阅读和理解,因为它使用了FUNCTIONAL范式,因此免除了状态更改和迭代循环的恐惧。
希望这对您有用。
对于排序的数组,最长递增子序列的长度等于数组的长度。我从这里复制了算法,只是将其修改为不减少而不是增加。
static bool isSorted(int[] s)
{
return s.Length == LongestIncreasingSeq(s);
}
static public int LongestIncreasingSeq(int[] s)
{
int[] l = new int[s.Length]; // DP table for max length[i]
int[] p = new int[s.Length]; // DP table for predeccesor[i]
int max = int.MinValue;
l[0] = 1;
for (int i = 0; i < s.Length; i++)
p[i] = -1;
for (int i = 1; i < s.Length; i++)
{
l[i] = 1;
for (int j = 0; j < i; j++)
{
if (s[j] <= s[i] && l[j] + 1 > l[i])
{
l[i] = l[j] + 1;
p[i] = j;
if (l[i] > max)
max = l[i];
}
}
}
return max;
}
石碑(c)LMSingh-0减(4102回文)。
以下内容是用Stonescript(c)编写的,Stonescript(c)是我几个世纪前受版权保护和使用的语言,即在Midgetframes之前的较早时期。注意:它是梵文的先驱。
1. Find a very straight stick in the jungle.
2. Sum up all the values of the array elements and find that many equal sized stones.
3. Line up all the values of the array along the side of straight stick from step 1. Each value is to be represented by number of stones for each array element like so...
具有8个元素的数组的示例。降序排列:-)
o
oo
oo
oooo
ooooo
ooooo
ooooo
oooooo
ooooooo
oooooooo
========
12345678
-代码继续。
4. E-ball-uate. (In Shakespearean English that means Eye ball it.)
4.1 Run your eye from array position 1 top towards array position 8 top.
4.2 If it looks sorted, then it is.
4.2.1 Start jumping up and down and thumping chest.
4.2.2 Go to happy end.
4.3 If something isn't quite right, like in case of example below then it isn't.
4.3.1 Kick the stones in frustration and anger! Cuz it really is not sorted!
4.3.2 Go to sad end.
具有8个元素的数组的示例。未排序:-(
o
oo
oo
oo o
ooooo
ooooo
ooooo
oooooo
ooooooo
oooooooo
========
12345678
-代码继续。
5. Sad end.
5.1 Eat an apple.
5.2 Fall from grace to next line.
6. Happy end.
=-=-=-=-=-==
在进一步优化中,第4步打孔可以用以下打孔替换。
=-=-=-=-=-=
4. Roll a stone from top of position 1 towards top of position 8, pushing the rolling stone towards the top stone for each position while moving to the right.
4.1 If rolling stone reaches the position 8 then it's sorted.
4.1.1 Start jumping up and down and thumping chest.
4.1.2 Go to happy end.
4.2 If the rolling stone gets stuck in a trough, then it isn't.
4.3.1 Kick the stones in frustration and anger!
4.3.2 Go to sad end.
= - = - = - = - = - =
因为你所有的代码侦探和电源调试器在那里,我有意添加的错误步骤4的上述第二变化你能找到它吗?
4.3.*
应该是4.2.*
这就是让您对“创造力”感到震惊的原因:
因为对于排序数组
* all the elements on the left side of any element must be smaller * all the elements on the right side of any element must be bigger
因此,对所有元素运行一个主循环,并通过在主循环中运行两个嵌套循环来检查以上两个条件(一个用于左侧,一个用于右侧)
因此,我给出了上述算法的javascript实现:
function checkArraySorted(array) {
for (a = 0; a < array.length; a++) {
for (b = 0; b < a; b++) {
if (array[b] > array[a]) return false;
}
for (b = a + 1; b < array.length; b++) {
if (array[b] < array[a]) return false;
}
}
return true;
}
让我们测试一下:
checkArraySorted([]);
> true
checkArraySorted([1]);
> true
checkArraySorted([1, 2]);
> true
checkArraySorted([2, 1]);
> false
checkArraySorted([1, 2, 3]);
> true
checkArraySorted([1, 2, 3, 4]);
> true
似乎工作完美!它的复杂度为O(n²)
,对于应该采用的算法来说是理想的选择O(n)
,但是这样做O(n²)
会变得更有效率,因为这是一种效率的度量,因此O(n²)
比效率更高O(n)
。
下文中,“排序”是指“以升序排序”。
数组未排序 a[i]>a[i+1]
因此,如果让x=a[i]-a[i+1]
,x
如果数组未排序,则为正。
为了测试是否x
为正,我们可以将其分为两部分:x
不为负,并且x
不为零
一个简单的检验是否x
为负的方法就是检验是否x*x
等于x*abs(x)
。如果x
为负,则此条件应该为假,因为(-1)*(-1)==1
。
要测试零,我们可以使用另一个简单的测试:0./(float)x
is Not a Number iffx
为零时,。
所以这是完整的代码:(假设数组有5个元素)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int i, a[5];
for(i=0;i<5;i++) scanf("%d",&a[i]);
int sorted=1;
for(i=0;i<4;i++) {
int x=a[i]-a[i+1];
if(x*x==x*abs(x)&&!isnan(0./(float)x)) {
sorted=0;
break;
}
}
puts(sorted?"sorted":"not sorted");
return 0;
}
a[i]-a[i+1] > 0
已经存在问题。不需要做所有这些事情。
这完全取决于您希望成为什么样的人。由于不确定,因此以下实际上是非常好的性能。下面的代码给出了一个很好的猜测,但是如果您确定应该重复执行几次该函数。如果您确实希望确定,则应循环运行它并执行十次。完美的可扩展性!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
static const int size = 100;
int issorted(int *array, int size)
{
int idx = random() % size;
return (array[idx] >= array[0]);
}
void check_array(int *array, int size)
{
if (issorted(array, size)) {
puts("The array is sorted but I am not 100% sure.");
} else {
puts("The array is definitely not sorted in ascending order.");
}
}
int main(void)
{
int *array = malloc(sizeof(int) * size);
int i = 0;
srand(time(NULL));
for (i = 0; i < size; i++) {
array[i] = random();
}
check_array(array, size);
for (i = 0; i < size; i++) {
array[i] = i + 1;
}
check_array(array, size);
free(array);
return 0;
}
这不是请客吗?
该函数不仅仅可以告诉您数组是否已排序。它告诉您在正确的位置有多少个元素。它可以用于任何类型的数据。
注意使用描述性变量名使代码易于理解的重要性。另一方面,我们不需要声明变量i,因为它必然要在程序的其他位置声明。
int sortcheck(array_to_be_checked[10])
{
int number_of_elements_in_right_place=0;
for (i = 1; i = 10; i++)
number_of_elements_in_right_place += i == array_to_be_checked[i];
return number_of_elements_in_right_place;
}
编辑:这是较大数组的更好方法。这样做的好处是,它类似于人类进行检查的方式。
int sortcheck(array_to_be_checked[32767])
{
i=rand(); j=rand();
while( (array_to_be_checked[i] > array_to_be_checked[j]) = (i > j) )
{
printf("I think it's sorted");
i=rand(); j=rand();
};
printf("It wasn't sorted");
}
我非常喜欢@Cominterm建议的解决方案。但是,与已经排序的列表相比?那是作弊!
取而代之的是,我计算数组的自相关性(数组与数组之间的相关性向左移动一个位置)。然后,我对数组进行了很多次混洗,每次都将其新的自相关与原始自相关进行比较。如果对数组进行排序,则大多数时候原始自相关将是最高的!
奖励:如果您的p值<0.05,则输出将自动执行声称已为您排序数组的任务。你还能要求什么呢?
Bonus2:尽管此实现为方便起见使用JavaScript的O(n)数组函数,但该方法可以使用采样在恒定时间内运行!
<form name="out"><textarea name="put" cols="80" rows="3">Press the button</textarea></form>
<button onclick="startstop();">The button</button>
<script>
var iid=input=0, my=document.forms, isit={'true':0.5,'false':0.5}, ownAutocorr;
function startstop(){
if(iid){
clearInterval(iid);
if(1 - isit.true / (isit.true+isit.false)<0.05){my.out.put.value+="\nYour array is sorted! (p<0.05)";}
iid=input=0;isit={'true':0.5,'false':0.5}
}
else {
input=JSON.parse("["+prompt("Comma separated integers")+"]");
ownAutocorr=pearsonCorrelation(input,cloneShiftArray(input));
iid=setInterval(trial,50);
}
}
function trial(){
var newArr=shuffle(input.slice(0));
var newAutocorr=pearsonCorrelation(newArr,cloneShiftArray(newArr));
isit[newAutocorr<ownAutocorr]++;
my.out.put.value="Your array is sorted with probability " + (isit.true / (isit.true+isit.false)).toFixed(2);
}
function cloneShiftArray(oldArr){
var newArr=oldArr.slice(0); //clone the array
var len=oldArr.length;
//shift the array one
for(var l=0;l<len-1;l++){
//performance is important so we'll use bitwise operators
newArr[l]^=newArr[l+1];
newArr[l+1]^=newArr[l];
newArr[l]^=newArr[l+1];
}
newArr[l]+=newArr[l-1 ];
return newArr;
}
function pearsonCorrelation(p1, p2) { //Borrowed from teh interwebs
var len = p1.length;
var sum1=sum2=sum1Sq=sum2Sq=pSum = 0;
for (var l = 0; l < len; l++) sum1 += p1[l];
for (var l = 0; l < len; l++) sum2 += p2[l];
for (var l = 0; l < len; l++) sum1Sq += Math.pow(p1[l], 2);
for (var l = 0; l < len; l++) sum2Sq += Math.pow(p2[l], 2);
for (var l = 0; l < len; l++) pSum += p1[l] * p2[l];
var num = pSum - (sum1 * sum2 / len);
var den = Math.sqrt((sum1Sq - Math.pow(sum1, 2) / len) *
(sum2Sq - Math.pow(sum2, 2) / len));
if (den == 0) return 0;
return num / den;
}
function shuffle(array) {//also borrowed
var currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
</script>
此解决方案不使用<,<=,>或> =比较器。我试图使它读得尽可能少,就像排序函数一样。
在阅读此非常糟糕的代码的过程中,我添加了以下面部表情。
<body>
<svg id="dial" height="400" width="400" transform=""></svg>
</body>
sunDialsort = function (values)
{
var twas = values.toString();
var brillig = twas.match(/,/g).length + 1; //<1>
//find the sig figs we are working with (longest number)
var and = [], the = 0;
for (var jabberwock = 0; jabberwock < twas.length; jabberwock++)
{
switch (twas.charAt(jabberwock))
{
case ("."):
break; //dont count
case (","):
and.push(the);
the = 0;
break;
default:
the++;
}
}
and.push(the);
var slithy = Math.max.apply(Math, and);
//assume did/toves based on number of characters
var toves = Math.pow(10, slithy);
var did = toves * -1;
console.log(did + "," + toves + "," + brillig);
//for each number make a horizontal svg line of length (jabberwock*acuuracy)
var gyre = 1 / brillig;
var gimble, wabe, all, mimsy, were, borogoves, mome, raths;
var outgrabe = true;
for (jabberwock = 0; jabberwock < brillig; jabberwock++)
{
gimble = document.createElementNS('http://www.w3.org/2000/svg', 'path');
gimble.setAttribute("stroke", "blue"); //green is not a creative colour
gimble.setAttribute("d", "M0 20 h " + (jabberwock * gyre));
wabe = (values[jabberwock] - did) / (toves - did);
mimsy = 90 - (wabe * 180);
gimble.setAttribute("transform", "rotate(" + mimsy + ")");
document.getElementById("dial").appendChild(gimble);
borogoves = document.getElementById("dial").getBBox();
if (mome)
{
raths = (borogoves.width != all && were == borogoves.x);
console.log("test " + raths);
all = borogoves.width;
if (!raths)
{
outgrabe = false
}
}
else
{
were = borogoves.x;
all = borogoves.width;
mome = true;
}
}
return outgrabe
};
alert(sunDialsort([1, 2, 3, 3, 4341, 556]));
如果有人要测试,这里有一个带有可读变量名的版本。 http://jsfiddle.net/outRideACrisis/r8Awy/
由于二进制搜索仅对排序后的数组有效,因此要检查数组是否已排序,我们要做的就是验证二进制搜索对数组的所有元素均有效。如果找不到任何元素,我们知道该数组未排序。
传递的命令行参数必须全部为不带前导零的十进制整数。
#include <stdlib.h>
#include <string.h>
int compar(const void *a, const void *b) {
char *const *sa = a, *const *sb = b;
int cmp = strlen(*sa) - strlen(*sb);
if (cmp == 0) cmp = strcmp(*sa, *sb);
if (cmp == 0) cmp = sa - sb;
return cmp;
}
int main(int argc, char *argv[]) {
if (argc-- && argv++) {
for (int i = 0; i != argc; i++) {
if (bsearch(argv+i, argv, argc, sizeof *argv, compar) != argv+i) {
return 1;
}
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include <stddef.h>
#include<string.h>
int main(){
int arr[100],i,j,temp;
int a[] = {1,2,3,4,5,6,7,8,9,10};
char b[256];
printf("Loading the program please wait...");
int s = sizeof(a)/sizeof(a[0]);
for(i=0; i<999999999; i++);//best way to make the program more realistic
system("cls");
for(i=0;i<s; i++ )
arr[i] = a[i];
for(i=0;i<s;i++){
for(j=i;j<s;j++){
if(arr[i] < arr[j]){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
} //sorting array in descending order
int p = 0;
for(i=0; i<s; i++)
{
if (a[s-i-1] != arr[i])
p++;
}
if(p>0)
printf("No");
else
printf("yes");
getch();
}
这个算法似乎可以用,但是有点慢。可能有更快的排序方式,但我还没有找到。
OrderedQ
)。以下代码仅在18秒内对列表进行了排序。
a = {23, 50, 16, 57, 19, 60, 40, 7, 30, 54};
n = 1;
Timing[While[! OrderedQ[a], a = RandomSample[a]; n++]]
n
a
{18.581763,为空}
8980699
{ 7,16,19,23,30,40,50,54,57,60 }
OrderedQ
只是为了娱乐而使用二次时间),并在末尾添加了支票“现在我们已经进行了排序,这是我们开始的吗?”
function isSorted(arr) {
if (arr.length === 1 && typeof arr[0] !== 'number' || arr[0].toString().indexOf('.') !== -1 || arr[0] > (-1 >>> 0) || arr[0] !== arr[0] || arr[0] === Infinity) {
// Return false in the case of one non-number element.
// isSorted returns false for arrays containing non-numbers for consistency
// with PHP, but that doesn’t work for one element, so that’s the purpose
// of this check.
return false;
}
var obj = {};
var i;
for (i = arr.length; i--;)
obj[arr[i]] = true;
for (var x in obj)
if (arr[++i] != x) return false;
return true;
}
该函数可能会false
错误地返回,但在现代浏览器中却不会。您可以进行检查,并在必要时提供较慢的后备时间(如问题所述):
var isModern = /chrome/i.test(typeof navigator === 'object' && navigator.userAgent);
if (!isModern) {
isSorted = function() {
// I develop on good browsers, so the implementation is left as an exercise
// to the reader if he or she wants to support outdated browsers.
};
}
他们说,这给负数带来了无法预测的结果,但实际上取决于您对事物的预测能力。
在此实现中,我克隆了原始数组并对排序的实例进行排序。然后,计算Levenshtein距离。如果为零,则对原始数组进行排序。
注意:getLevenshteinDistance()实现取自Jakarta Commons Lang,并进行了修改,可用于int []而不是CharSequence。
import java.util.Arrays;
public class CheckSorting {
public boolean isSorted(int[] array) {
int[] sortedArray = Arrays.copyOf(array, array.length);
Arrays.sort(sortedArray);
return CheckSorting.getLevenshteinDistance(array, sortedArray) == 0;
}
public static int getLevenshteinDistance(int[] s, int[] t) {
int n = s.length;
int m = t.length;
if (n == 0) {
return m;
} else if (m == 0) {
return n;
}
if (n > m) {
int[] tmp = s;
s = t;
t = tmp;
n = m;
m = t.length;
}
int p[] = new int[n + 1];
int d[] = new int[n + 1];
int _d[];
int i;
int j;
int t_j;
int cost;
for (i = 0; i <= n; i++) {
p[i] = i;
}
for (j = 1; j <= m; j++) {
t_j = t[j - 1];
d[0] = j;
for (i = 1; i <= n; i++) {
cost = s[i - 1] == t_j ? 0 : 1;
d[i] = Math.min(Math.min(d[i - 1] + 1, p[i] + 1), p[i - 1] + cost);
}
_d = p;
p = d;
d = _d;
}
return p[n];
}
}