Language agnostic 制作一个应用程序,确定是否对数字序列进行排序
作为前一个版本的每周代码保龄球游戏的另一部分已经有一周多的历史了,到目前为止已经得到了很好的探索。作为复习: 代码保龄球是一项挑战 写下最晦涩、最未优化的, 骇人听闻的下流代码 可能的基本上,准确 代码高尔夫的对面 挑战:Language agnostic 制作一个应用程序,确定是否对数字序列进行排序,language-agnostic,sequence,Language Agnostic,Sequence,作为前一个版本的每周代码保龄球游戏的另一部分已经有一周多的历史了,到目前为止已经得到了很好的探索。作为复习: 代码保龄球是一项挑战 写下最晦涩、最未优化的, 骇人听闻的下流代码 可能的基本上,准确 代码高尔夫的对面 挑战: $ ./myprogram 1 2 7 10 14 true $ ./myprogram 7 2 0 1 false 创建一个接受数字序列的程序,并确定它们是否按升序排列 示例: $ ./myprogram 1 2 7 10 14 true $ ./myprogram
$ ./myprogram 1 2 7 10 14
true
$ ./myprogram 7 2 0 1
false
创建一个接受数字序列的程序,并确定它们是否按升序排列
示例:
$ ./myprogram 1 2 7 10 14
true
$ ./myprogram 7 2 0 1
false
规则:
$ ./myprogram 1 2 7 10 14
true
$ ./myprogram 7 2 0 1
false
真的没有。它可以是一个控制台应用程序,可以是一个网页,可以是任何东西。它只需要是一个接受数字并返回数字的独立程序。格式和方法完全由您决定
所以,玩得开心,让我们看看你能想出什么卑鄙的解决方案 #包括
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv){
int a, b;
if (argc > 2){
sscanf(argv[1], "%d", &a);
sscanf(argv[2], "%d", &b);
if (a<=b)
return main(argc-1, argv+1);
printf("false");
exit(0);
};
printf("true");
return 0;
};
#包括
int main(int argc,字符**argv){
INTA,b;
如果(argc>2){
sscanf(argv[1]、“%d”、&a);
sscanf(argv[2]、“%d”、&b);
if(a此解决方案具有最坏情况下的性能O(n!),其工作原理是生成列表的所有可能排列,然后计算一个数字(请参见函数“值”),该数字对于顺序列表(升序或降序)具有最小值
def值(列表):
总和=0
对于范围内的i(len(列表)-1):
总和=总和+(列表[i]-列表[i+1])**2.0
回报金额
def液滴(lst,i):
如果i+1>=len(lst):
返回lst[:i]
其他:
返回lst[:i]+lst[i+1:]
类别列表排列:
定义初始(自我,lst):
self.lst=lst
self.i=-1
self.subiter=None
定义(自我):
回归自我
def next(自我):
如果len(self.lst)==1:
如果self.i==-1:
self.i=self.i+1
返回self.lst
其他:
提升停止迭代()
如果self.subiter!=无:
尝试:
返回[self.lst[self.i]]+self.subiter.next()
除停止迭代外:
self.subiter=None
如果self.subiter==无:
self.i=self.i+1
如果self.i>=len(self.lst):
提升停止迭代()
其他:
self.subiter=list_permute(drop(self.lst,self.i))
返回self.next()
def测试(列表):
给定=值(列表)
对于列表中的i\u排列(列表):
如果值(i)<给定:
返回错误
#假阳性试验
如果列表[0]>list[len(list)-1]:
返回错误
返回真值
列表=[]
打印“给我你的号码(以^C结尾)”
尝试:
尽管如此:
尝试:
list.append(int(原始输入())
除值错误外:
打印“南”
除了(键盘中断,EOFError):
通过
打印测试(列表)
这里有一个简单的方法。有趣的是,它应该仍然非常有效,因为它只对术语进行一次迭代。它只能对0到255之间的数字起作用
array_shift($argv);
$str = str_repeat(chr(0), 256);
foreach ($argv as $key => $element) {
$str[(int) $element] = chr($key + 1);
}
$str = str_replace(chr(0), '', $str);
$hex = unpack('H*', $str);
for ($i = 1; $i < strlen($str); $i++) {
if (substr($hex[1], $i * 2 - 2, 2) != dechex($a)) {
echo "False\n";
die();
}
}
echo "True\n";
这个解决方案并非没有选择,但它是模糊的、可怕的、卑鄙的
/* Either #define macros FIRST, SECOND, THIRD, etc. here, or do so on the
* command line when "compiling" i.e.
* $ gcc -D FIRST=1 -D SECOND=5 -D THIRD=42
*/
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
#define pairsorted(X, Y) (min((X), (Y)) == (X) ? 1 : 0)
#if defined (FIRST) && defined (SECOND) && pairsorted(FIRST, SECOND)
#if defined (THIRD) && pairsorted(SECOND, THIRD)
#if defined (FOURTH) && pairsorted (THIRD, FOURTH)
#if defined (FIFTH) && pairsorted (FOURTH, FIFTH)
#error "Sorted!"
#elif !defined (FIFTH)
#error "Sorted!"
#else /* FIFTH is defined and < FOURTH */
#error "Not sorted!"
#endif /* FIFTH */
#elif !defined (FOURTH)
#error "Sorted!"
#else /* FOURTH is defined and < THIRD */
#error "Not sorted!"
#endif /* FOURTH */
#elif !defined (THIRD)
#error "Sorted!"
#else /* THIRD is defined and < SECOND */
#error "Not sorted!"
#endif /* THIRD */
#elif !defined (SECOND)
#error "Sorted!"
#else /* SECOND is defined and < FIRST */
#error "Not sorted!"
#endif /* SECOND */
#ifndef SECOND
#error "I need at least two values to compare"
#endif
耶,Python!
def IsSorted(lst):
return sorted(lst) == lst
我第一次用动态编程让事情变得更糟
它的时间和空间复杂度为O(n²)
#包括
int main(int argc,字符**argv)
{
整数为[1000][1000];
国际清单[1000];
int i,j;
对于(i=1;i
这使用了一种我称之为“父排序”的方法。对于大于1的列表,您必须向妈妈或爸爸询问每对数字。这很有趣,因为妈妈可能会让您去问爸爸,而爸爸可能会让您去问妈妈。如果堆栈功能无限,则可以永远运行
function askMom($num1, $num2) {
$chance = mt_rand(0,2);
if ($chance>1) {
return askDad($num1, $num2);
} else {
return $num1 <= $num2;
}
}
function askDad($num1, $num2) {
$chance = mt_rand(0,4);
if ($chance>1) {
return askMom($num1, $num2);
} else {
return $num1 <= $num2;
}
}
function parentSort(array $numbers) {
for ($i = 0; $i < count($numbers)-1; $i++) {
$chance = mt_rand(0,1);
if ($chance) {
if (askMom($numbers[$i], $numbers[$i+1])) {
} else {
return false;
}
} else {
if (askDad($numbers[$i], $numbers[$i+1])) {
} else {
return false;
}
}
}
return true;
}
函数askMom($num1,$num2){
$chance=mt_rand(0,2);
如果($chance>1){
返回askDad($num1,$num2);
}否则{
返回$num1(1){
返回askMom($num1,$num2);
}否则{
返回$num1 Hrmm。我可以在最佳情况O(n!)或更糟的情况下执行此操作。很容易。嗯,我认为我的解决方案是最坏情况O(n!).我不确定n^2是从哪里来的。我想我认为1+2+3+4+…而不是1*2*3*4*…但我离题了。让我们看看你的解决方案,然后?codegolf.stackexchange.com,一个为code golf和类似编程挑战提供服务的SE网站,将在三天内进行私人测试。一旦它进入公开测试,我强烈建议你将这类问题发布到在那个网站上。
#include <stdio.h>
int main (int argc, char **argv)
{
int is_ordered[1000][1000];
int list[1000];
int i,j;
for(i = 1; i < argc; i++)
sscanf(argv[i],"%d", &list[i-1]);
for (i = 0; i < argc -2; i++)
{
if (list[i] < list[i+1])
is_ordered[i][i+1] = 1;
else
is_ordered[i][i+1] = 0;
}
for (i = 2; i < argc -1; i++)
for (j = 0; j < (argc - 1 - i); j++)
{
if (is_ordered[j+1][i+j] && is_ordered[j][i+j-1])
is_ordered[j][j+i] = 1;
else
is_ordered[j][j+i] = 0;
}
if(is_ordered[0][argc-2])
printf("True\n");
else
printf("False\n");
return 0;
}
function askMom($num1, $num2) {
$chance = mt_rand(0,2);
if ($chance>1) {
return askDad($num1, $num2);
} else {
return $num1 <= $num2;
}
}
function askDad($num1, $num2) {
$chance = mt_rand(0,4);
if ($chance>1) {
return askMom($num1, $num2);
} else {
return $num1 <= $num2;
}
}
function parentSort(array $numbers) {
for ($i = 0; $i < count($numbers)-1; $i++) {
$chance = mt_rand(0,1);
if ($chance) {
if (askMom($numbers[$i], $numbers[$i+1])) {
} else {
return false;
}
} else {
if (askDad($numbers[$i], $numbers[$i+1])) {
} else {
return false;
}
}
}
return true;
}