用10行简单的代码能做的最酷的事情是什么?帮我启发初学者吧!

我正在寻找最酷的事情,你可以在几行简单的代码。我相信你可以写Mandelbrot在Haskell中设置了15行,但它很难遵循。

我的目标是启发学生编程很酷

我们知道认为编程很酷,因为你可以创造任何你想象的东西——它是最终的创意出口。我想激励这些初学者,让他们尽可能多地克服早期学习的困难。

我的理由很自私。我正在教一门计算机入门课程给60个半工程半商科的学生;所有的大一新生。他们是来自贫困高中的学生。从我过去的经验来看,这个群体通常是这样划分的:少数人摇滚乐明星,一些人非常努力,得到它,少数人非常努力,几乎没有得到它,还有少数人不在乎。我想要尽可能有效地接触到更多这样的群体。下面是我如何使用计算机程序教学的一个例子:

这是我正在寻找的一个例子 for: 1行VBS脚本获取 电脑跟你说话:

CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it")
我可以用这个来演示秩序 的操作。我会展示代码,让 他们先玩,然后再解释 这句话里有很多内容, 但是电脑可以理解它, 因为它知道规则。然后我 向他们展示如下内容:

4(5*5) / 10 + 9(.25 + .75)
你可以看到,首先我需要 Do是(5*5)。然后乘以 4. 现在我创建了对象。除以10和打电话一样 说话-我不能在我有 对象,在我 有100个。在另一边,我 首先用some创建一个InputBox 如何显示它的说明。 当我在输入框上按回车键时 计算或“返回”任何I 进入。(提示:'oooooo'是一个 有趣的声音)所以当我说说话的时候 右边是该说什么。和我

所以当你在a上做了几件事 线,如:< / p >
x = 14 + y;

你需要知道的顺序 的事情。首先把14和y相加,然后 我们把结果(它计算的值)放在

.

.

这就是我的目标,有一堆很酷的例子来演示,并在他们玩得开心的时候教他们。我在我室友身上尝试了这个例子,虽然我可能不会把它作为第一课,但她喜欢它,并学到了一些东西。

一些很酷,容易理解的制作漂亮图形或形状的Mathematica程序将是好主意,我将研究这些。这里有一些复杂的动作脚本示例,但这有点太先进了,我不能教flash。你还有什么其他的想法吗?

136974 次浏览

当我第一次写这个的时候。

10 PRINT "What is your name?"
20 INPUT A$
30 PRINT "Hello " A$
40 GOTO 30

它把人们都惊呆了!电脑记住了他们的名字!

编辑:只是补充一下。如果你能说服一个新程序员,这是他们能做的最酷的事情,他们就会成为优秀的程序员。现在,您几乎可以用一行代码来运行别人编写的库。就我个人而言,这样做绝对不会让我感到满足,也看不到教它有什么好处。

你可以考虑像Robocode这样的东西,其中很多代码被抽象出来,你基本上只是告诉机器人该做什么。一个简单的10行函数可以让机器人做很多事情,并且有一个非常直观和易于遵循的结果。

也许Robocode本身并不适合这项任务,但这种东西是一种将编写的代码与计算机上的可视操作联系起来的好方法,而且当你需要给出示例时,它很有趣。

public class MyFirstJuniorRobot extends JuniorRobot {
public void run() {
setColors(green, black, blue);
// Seesaw forever
while (true) {
ahead(100); // Move ahead 100
turnGunRight(360); // Spin gun around
back(100); // Move back 100
turnGunRight(360); // Spin gun around
}
}
public void onScannedRobot() {
turnGunTo(scannedAngle);
fire(1);
}
public void onHitByBullet() {
turnAheadLeft(100, 90 - hitByBulletBearing);
}
}

小书签怎么样?它将向他们展示如何操作他们每天使用的东西(互联网),而不需要任何开发工具。

你可以让你的学生去codeplex IronPython silverlight示例站点,其中包括<修改画布和与鼠标交互的10行演示。你可以找到silverlight的例子在这里

仅仅看到在web浏览器中编写的代码,然后执行修改一个小的WPF可能会让一些人陶醉。

我发现最喜欢的(在GWBASIC中)是:

10 input "What is your name ";N$
20 i = int(rnd * 2)
30 if i = 0 print "Hello ";N$;". You are a <fill in insult number 1>"
40 if i = 1 print "Hello ";N$;". You are a <fill in insult number 2>"

我发现初学的学生有一些观念需要修正。

  • 电脑不会读心术。
  • 计算机一次只做一件事,即使它们做得如此之快,它们似乎一次就做完了。
  • 计算机只是愚蠢的机器,只会做被告知的事情。
  • 计算机只能识别特定的东西,而这些东西就像积木一样。
  • 一个关键的概念是,变量是包含一个值的东西,它的名称与该值不同。
  • 你编辑程序的时间和它运行的时间之间的区别。

祝你在课堂上好运。我相信你会做得很好的。

附言:我相信你明白,除了材料和技能,你还在教授一种态度,这也是同样重要的。

不管你有什么想法,作为补充,我说你应该告诉他们如何做一些基本的数学。将其呈现为

"现在你可能认为这很简单或者 复杂……但你有没有去过 被数学作业困住了?" < / p >

然后从别人的书中拿出一个例子。大多数数学问题可以用10行来解决,因为它很可能是一个简单的问题。然后告诉他们,花10分钟来解决这个问题,可能会让他们得到一个A。这段时间很长,但你可能会遇到一些想花很少或根本不花时间做作业的人。

这主要是因为我希望我在化学时就能想到写一个软件程序……所有的测验和作业都是100分…

< p >编辑: 回应Peter的评论:

比如3a2的导数是什么。所以你可以只显示一个简单的函数,他们可以从命令行调用:

public int SimpleDerivative(int r, int exponent){
r = r * exponent
exponent =- 1
return (String "{0}a^{1}" where {0} = r, {1} = exponent)
}

我敢肯定它会变成超过10行代码,但你有没有考虑过一个基于表单的应用程序,按下按钮就可以改变背景的颜色或改变文本的大小?这将向他们展示交互程序是如何工作的。这也会告诉他们,作为程序员,他们可以完全控制计算机(程序)所做的事情。

希望这会引导他们对其他可以改变的事情提出建议,然后对其他他们可能想做的事情提出建议。

我被演讲中所展示的一些东西所震撼(视频和PDF)。例如,教计算机如何玩“Mastermind”游戏,解决八个皇后,字母(那些像“9567 + 1085 == 10652”这样的谜题,以及推断数据中的关系。所有代码都在10行以内(可能包含20或30行“幕后”代码)。

如果你能负担得起硬件,使用Arduino板+处理会产生一些非常酷的东西,尽管对于那些可能对编程不感兴趣的人来说可能有点高级。

PHP - Sierpinski垫圈,又名Triforce

好吧,它只有15行代码,但结果非常棒!这就是小时候让我抓狂的东西。这是来自PHP手册:

$x = 200;
$y = 200;


$gd = imagecreatetruecolor($x, $y);
 

$corners[0] = array('x' => 100, 'y' =>  10);
$corners[1] = array('x' =>   0, 'y' => 190);
$corners[2] = array('x' => 200, 'y' => 190);


$red = imagecolorallocate($gd, 255, 0, 0);


for ($i = 0; $i < 100000; $i++) {
imagesetpixel($gd, round($x),round($y), $red);
$a = rand(0, 2);
$x = ($x + $corners[$a]['x']) / 2;
$y = ($y + $corners[$a]['y']) / 2;
}
 

header('Content-Type: image/png');
imagepng($gd);

sierpinski垫圈

我没有这方面的代码,但是它可以在10行或更少的时间内被抽象出来。使鼠标画一个方框。不管你怎么移动它。当你点击(左)框消失,当你点击(右)框改变颜色。

学生们想要一些实用的东西,一些他们可以修改和定制的东西,一些表明这“不是典型的无聊课程”的东西。

Xen的mini-os内核现在可以做到这一点,但它需要额外的抽象来满足您的需求。

您还可以尝试绘制一个manderbolt (julia)集,同时从环境噪声获得二次平面的参数(如果机器有麦克风和声卡)..他们的声音会产生分形。同样,要在10行(在他们编辑的实际函数中)完成这一点很棘手,但并非不可能。

在现实世界中,您将使用现有的库。所以我认为,在main()(或任何你使用的语言)中使用10行代码更实用。我们让存在的东西为我们工作,而写不存在或不为我们工作的东西。你不妨一开始就介绍这个概念。

同时,行吗?Int main(void){无符号Int i;(我= 0;我& lt;10;我+ +);返回0;也许,10次函数调用将是一个更现实的目标?这不是一场模糊的代码竞赛。

好运!

如何展示你可以在任何网页浏览器中输入JavaScript到地址栏,然后让代码执行?

编辑:去一个有很多图片的页面,在地址栏试试这个:

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++ }setInterval('A()',5); void(0)

使用Tcl,你有一个简单的文本编辑器,其中有一个保存按钮,大约有12行代码(但没有打开,那将需要另外8行代码)。它适用于所有标准平台:

pack [frame .toolbar] -side top -fill x
pack [button .save -text save -command save] -in .toolbar -side left
pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side right -fill y
pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true
proc save {} {
set filename [tk_getSaveFile]
if {$filename ne ""} {
set f [open $filename w]
puts $f [.text get 1.0 end-1c]
close $f
}
}

我知道我们的目标是10行,所以如果你想要的是10行或更少,一个简单的文本编辑器没有加载或保存只有两行。这还不算太寒酸。

pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side left -fill y
pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true

在你选择的平台上,用"wish 文件名"执行上面的任何一段代码。Wish安装在大多数*nix和mac上,但你必须手动安装windows。

更进一步,两行脚本也可以用python编写,尽管需要8行,但仍然低于10行的目标:

from Tkinter import *
root=Tk()
text = Text(wrap="word")
sb = Scrollbar(orient="vertical", command=text.yview)
text.configure(yscrollcommand=sb.set)
sb.pack(side="right", fill="y")
text.pack(side="left", fill="both", expand=True)
root.mainloop()

我给有学习障碍的11-12岁学生上过课。我们使用Hypercard,他们发现他们可以记录物体(图像,盒子等)的位置,因为他们移动它,并播放它(动画)。虽然这不是编码,但他们想做的是:删除其中一个动作,而不重新记录它。我告诉他们,他们必须去查看代码并修改它。

你可以看出谁有计算机/编程的诀窍,当他们更喜欢用代码来做的时候,因为他们有更多的控制权。

在Excel中做一个复杂的宏,然后学习代码在做什么,这可能是通往VBA的门户。

根据年龄群体或兴趣水平的不同,直接进入代码可能很难,但最终是重要的。

我倾向于认为,人们会对那些与他们生活有关或相关的东西印象深刻。我会试着以他们知道和理解的东西为基础编写我的10行代码。以Twitter及其API为例。为什么不使用这个API来构建一些很酷的东西呢?下面的10行代码将从Twitter返回“公共时间线”,并在控制台应用程序中显示它……

using (var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss"))
{
SyndicationFeed
.Load(xmlr)
.GetRss20Formatter()
.Feed
.Items
.ToList()
.ForEach( x => Console.WriteLine(x.Title.Text));
}

我的代码样本可能不是最适合您的学生的。它是用c#编写的,使用。net 3.5。所以,如果你要教他们PHP、Java或c++,这是没有用的。然而,我的观点是,通过将你的10行代码与一些“酷、有趣、与学生相关”的东西联系起来,你的示例也会变得酷、有趣、与学生相关。

好运!

[是的,我知道我错过了使用语句和Main方法的几行,但我猜这10行并不需要真的是10行]

回到高中的计算机课上,我和几个朋友教全班同学如何用Delphi编程。这门课主要集中在用Pascal编程,所以Delphi是一个很好的下一步。我们演示了Delphi的事件驱动性质及其RAD功能。在课程结束时,我们向全班展示了一个示例应用程序,并要求他们重现它。应用程序使用是的没有两个按钮询问“你喝醉了吗?”. ...我想你知道接下来会发生什么…No按钮在鼠标上改变了位置,并且几乎无法单击。

学生和老师都从中得到了很大的乐趣。

该程序只需要几行用户编写的代码和一个简单的方程来计算按钮的移动位置。我想其他学生都没发现,但也有几个很接近。

微软有Small Basic,一个“孩子”的IDE。

pic = Flickr.GetRandomPicture("beach")
Desktop.SetWallpaper(pic)

它是专门用来展示编程有多酷的。

你可以创建一个选择随机数的应用程序。你得猜一下。如果你错了,它会说:更高或更低。如果你猜对了,这是个不错的消息。

为学生们演奏很酷。

简单的Python版本,没有适当的错误检查:

import random


while input('Want to play higher/lower? ').lower().startswith('y'):
n = random.randint(1, 100)
g = int(input('Guess: '))


while g != n:
print('  %ser!' % (g > n and 'low' or 'high'))
g = int(input('Guess: '))


print('  Correct! Congratulations!')

埃里克表示电脑应该猜测数字。这也可以在10行代码内完成(尽管现在缺乏适当的错误检查更加严重:在范围之外的有效数字会导致无限循环):

while input('Want to let the pc play higher/lower? ').lower().startswith('y'):
n = int(input('Give a number between 1 and 100: '))
lo, hi, guess, tries = 1, 100, 50, 1


while guess != n:
tries += 1
lo, hi = (guess + 1, hi) if guess < n else (lo, guess - 1)
guess = (lo + hi) // 2


print('Computer guessed number in %d tries' % tries)

在这个时代,JavaScript是一种很好的方式来展示如何使用一些非常基本的工具(如记事本)进行编程。

jQuery效果是伟大的起点,任何人想要哇他们的朋友!

在这个页面中,只需单击页面的空白区域。

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(document.body).click(function () {
if ($("#pic").is(":hidden")) {
$("#pic").slideDown("slow");
} else {
$("#pic").slideUp();
}
});
</script>
</head>
<body><img id="pic" src="http://www.smidgy.com/smidgy/images/2007/07/26/lol_cat_icanhascheezburger.jpg"/>
</body>
</html>

这是一个Python telnet服务器,它将询问用户名并向他们打招呼。这看起来很酷,因为您正在通过网络从不同的计算机与您的程序通信。

from socket import *
s=socket(AF_INET, SOCK_STREAM)
s.bind(("", 3333))
s.listen(5)
while 1:
(c, a) = s.accept()
c.send("What is your name? ")
name = c.recv(100)
c.send("Hello "+name)
c.close()

你可以使用用AutoIt编写的脚本,它模糊了使用传统应用程序和编程之间的界限。

例如,一个脚本,打开记事本,让他们自己的电脑侮辱他们,并通过一个消息框,然后不留任何痕迹的行动:

Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("You smell of human.")
Sleep(10000)
MsgBox(0, "Humans smell bad", "Yuck!")
WinClose("Untitled - Notepad")
WinWaitActive("Notepad", "Do you want to save")
Send("!n")

有趣的是,你提到了Mandelbrot集,因为用GW-BASIC创建分形是激发我在高中(大约1993年)对编程的热爱的原因。在我们开始学习分形之前,我们写了无聊的标准差应用程序,而我仍然计划进入新闻业。

但当我看到这个冗长、难以编写的BASIC程序生成“分形地形”时,我就被迷住了,再也没有回头。它改变了我对数学、科学、计算机的看法,也改变了我的学习方式。

我希望你能找到对你的学生有同样影响的项目。

大多数答案都使用某种API,这在某种程度上打破了10行代码的要求。每个API调用可能包含数百行代码。最初的问题说要使用“简单代码”。这对我来说意味着没有API调用。仅仅使用“简单代码”的定义,我们能得出什么样的答案呢?

我记得当我第一次开始编码循环总是让我印象深刻。您编写5 - 10行代码(或更少),然后打印出数百行(或无论您指定多少行)。(我首先学的是PHP和Java)。

for( int i = 0; i < 200; i++ )
{
System.out.println( i );
}

这是一个非常基本的基于文本的c#程序,模拟老虎机的旋转动作。它不包括不同的中奖几率或现金奖励,但这对学生来说是一个很好的练习。

抱歉,超过10行。

string[] symbols = new[] { "#", "?", "~" }; // The symbols on the reel
Random rand = new Random();


do
{
string a="",b="",c="";


for( int i = 0; i < 20; i++ )
{
Thread.Sleep( 50 + 25 * i ); // slow down more the longer the loop runs


if( i < 10 )
a = symbols[rand.Next( 0, symbols.Length )];


if( i < 15 )
b = symbols[rand.Next( 0, symbols.Length )];


c = symbols[rand.Next( 0, symbols.Length )];


Console.Clear();
Console.WriteLine( "Spin: " + a + b + c );
}


if( a == b && b == c )
Console.WriteLine( "You win. Press enter to play again or type \"exit\" to exit" );
else
Console.WriteLine( "You lose. Press enter to play again or type \"exit\" to exit" );
}
while( Console.ReadLine() != "exit" );

和大多数其他评论者一样,我开始写代码是为了解决数学问题(或者为我所设计的糟糕游戏创造图像,如《夺宝奇兵大战僵尸》)。

真正让我开始学习数学和编程的是基于文本,选择自己的冒险风格的游戏……转向更多基于图像的游戏。我一开始是给图纸上色和绘制像素,直到我接触到几何……发现了如何用方程来画曲线、直线、方框等。

我的观点是,我可以让真的变成类似processing (http://processing.org/)的东西,其中典型的程序看起来像这样:

void setup()
{
size(200, 200);
noStroke();
rectMode(CENTER);
}


void draw()
{
background(51);
fill(255, 204);
rect(mouseX, height/2, mouseY/2+10, mouseY/2+10);
fill(255, 204);
int inverseX = width-mouseX;
int inverseY = height-mouseY;
rect(inverseX, height/2, (inverseY/2)+10, (inverseY/2)+10);
}

对我来说,这就是未来的“Logo”。

这里有一些简单的“hello world”示例,可以让人们快速地绘制和更改代码,并看到事情是如何崩溃的,以及会产生哪些奇怪的“意外”……一直到更高级的交互和分形创造……

我认为在Python中使用NodeBox进行一些很酷的实验将是一个很酷的开始。它的功能是绘制从正方形到复杂路径的物体。它甚至可以接收来自Mac iSight/网络摄像头的图像,并通过缩放、旋转和应用滤镜进行操作。

不幸的是,它只适用于Mac OS X,所以我不认为教它有多大用处,但作为一个例子(如果你自己有一台Mac),用一点代码就能做到什么,这将是相当漂亮的。

嗯,我记得在QBasic制作雪花和火的时候,一个朋友过来告诉我如何做一个旋转的3D立方体,完全让我震惊。

然后我把火调到立方体上,那真是美好的时光。

我得看看能不能找到那些旧剧本,它们不是很长。

也许这很愚蠢,但我认为孩子们会直观地理解它——在你最喜欢的“程序员”是什么?卡通?开始的整个“你最喜欢的“程序员”卡通是什么?”

例如,Foxtrot的Jason Fox在板子上写代码进行循环。

可能的兴趣点:编程有时可能会帮助你摆脱麻烦……

我认为现在做计算机教育者很难。我是。我们面临着一场日益严峻的艰苦战斗。我们的学生非常老练,要给他们留下深刻印象需要付出很多努力。他们有这么多工具,可以做惊人的事情。

用10行代码写一个简单的计算器?为什么?我有一张TI-86。

一个脚本,应用特殊效果的图像?这就是Photoshop的作用。Photoshop可以让你在10行里做的任何事情都相形见绌。

把一张CD光盘转换成MP3怎么样?我已经从bt下载了5万首歌了。它们已经是MP3格式了。我在iPhone上玩。谁会买cd呢?

为了向精明的用户介绍编程,你必须找到以下内容:

a)适用于他们觉得有趣和酷的东西,而且 B)做一些他们已经不能做的事情

假设你的学生已经可以使用最昂贵的软件。他们中的许多人确实有完整版的Adobe CS5.5(零售价:2,600美元;实际价格:免费),可以轻松获得任何通常会打破你的部门预算的应用程序。

但他们中的绝大多数人都不知道这些“电脑东西”究竟是如何工作的。

他们是一群极具创造力的人:他们喜欢创造东西。他们只是想做一些朋友做不到的事情。他们想要一些可以炫耀的东西。

以下是我发现的一些与我的学生产生共鸣的事情:

  • HTML和CSS。从这些他们学习如何MySpace主题的工作,并可以自定义他们。
  • 他们都见过他们,但不知道如何创建他们。看看雅虎管道。有很多可以教的东西,比如RSS、XML、文本过滤、映射和可视化。完成的mashup小部件可以嵌入到网页中。
  • 艺术品。上下文无关的艺术。递归和随机化是制作漂亮图片的关键。
  • 讲故事。使用像爱丽丝这样易于使用的3D编程环境,只需使用拖放就可以轻松创建高质量、吸引人的故事。

这些都不涉及传统意义上的编程。但他们确实利用了强大的库。我认为它们是一种不同的编程。

当我还是个孩子的时候,这是最酷的事情:

10 PRINT "BEDWYR "
20 GOTO 10

我想现在它已经不太管用了;)

我认为一个学生开始学习的好地方可以是Greasemonkey。在userscripts.org上有成千上万的示例脚本,是非常好的阅读材料,其中一些非常小。Greasemonkey脚本会影响网页,而学生们即使不会操纵网页,也会对这些网页很熟悉。Greasemonkey本身提供了一种非常简单的方法来在测试时编辑和启用/禁用脚本。

例如,下面是"谷歌Two Columns"脚本:

result2 = '<table width="100%" align="center" cellpadding="10" style="font-size:12px">';
gEntry = document.evaluate("//li[@class='g'] | //div[@class='g'] | //li[@class='g w0'] | //li[@class='g s w0']",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (var i = 0; i < gEntry.snapshotLength; i++) {
if (i==0) { var sDiv = gEntry.snapshotItem(i).parentNode.parentNode; }
if(i%2 == 0) { result2 += '<tr><td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td>'; }
if(i%2 == 1) { result2 += '<td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td></tr>'; }
}
sDiv.innerHTML = result2+'</table>';


if (document.getElementById('mbEnd') !== null) { document.getElementById('mbEnd').style.display = 'none'; }

阅读这个问题的答案很有趣。一旦你从学生那里获得了“哇”的因素,说明一个结果成为另一个输入的雏菊连锁效应。学习输入和输出如何工作将说明构建块的思想,以及软件如何从解决特定问题的许多小事物发展到解决更大问题的更大应用程序。如果几个10行的程序都很酷,那么把一堆程序放在一起会有多酷呢?这是非线性的酷。

看看这些项目吧:

  • Hackety黑客:特别旨在使编码对非程序员具有吸引力。
  • 鞋子:有趣和简约的桌面应用程序的方法
  • 处理:用于图像、动画等编程的环境和(类java)语言。

在WPF中,你可以用几行XAML代码写一个功能完整的缩略图视图:

<ListBox ItemsSource={Binding MyItems}
ScrollViewer.HorizontalScrollBarVisibility="Hidden">
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source={Binding FullPath} Width="50" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate><WrapPanel /></ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>

这是,假设你有一个包含指向图像文件的FullPath属性的项目的MyItems集合。

神奇之处在于ItemTemplate将每个列表框项转换为图像,而ItemsPanelTemplate将默认的垂直堆栈面板更改为包装面板。

首先,为了在最短的时间内获得最大的关注,你需要使用高级语言。 可能你想要显示3 d.

我会用Opengl -我会从一个3d电脑游戏中展示一个简短的场景开始,然后解释,这是通过将大程序划分为小部分来完成的,然后向他们展示小部分可能是什么样子的。 比如nehe.gamedev.net上的第05课,或者甚至是更高级的课程。 这是相当令人印象深刻的,不太复杂

你可能还想检查爱丽丝,它包含3d,被设计用来教学。

就像……

10 rem twelve times table


20 For x = 1 to 12


30  For y = 1 to 12


40     print using"####";x*y;


50  next y


60  print


70 next x


80 end

当我还是个孩子的时候,我对计算机(当时是MSX)有浓厚的兴趣,因此编程(所有的东西都是Basic的变体)。长大后我失去了它,但当我了解到《反恐精英》只是一些粉丝通过修改《半条命》代码而创造出来的mod时,我又重新拥有了它。这让我重新对编程产生了兴趣!

这不是10行代码,但如果你向人们展示某个游戏的源代码,然后修改它,让它做一些不同的事情,并向他们现场演示,这真的会让他们大吃一惊。哇,这其实不是黑魔法!你能做到的!

现在,有相当多的游戏可以做到这一点。我认为所有《雷神之锤》系列(至少1到3)的源代码都已经发布了。我知道你可以为《半条命》和《半条命2》创建mod,我相信其他游戏如《虚幻世界》和《孤岛惊魂》也提供了类似的功能。

一些简单的事情可以激发你的动力:

  • 让武器变得超级强大(例如,无限的弹药,更高的伤害,自动瞄准。等。
  • 添加一个动画风格的动作(飞行,快速奔跑等)。

修改本身不需要太多代码行,但它工作的事实是令人惊讶的。

这是作弊,甚至一点都不简单,但我曾经用c++写了一个20行的射击游戏,使用Allegro图形库。是什么没有真正的标准,但它是有点老了,它纯粹是为了好玩而创建的。甚至还有粗糙的音效。

这是它的样子:

20 Lines http://img227.imageshack.us/img227/8770/20linesxx0.png

下面是代码(应该 compile):

bool inside(int x, int y, int x2, int y2) { return (x>x2&&x<x2+20&&y>y2&&y<y2+10); }
int main() {
BITMAP* buffer;
float px,shotx,shoty,monstars[8],first,rnd,pressed,points = 0, maxp = 0;
unsigned char midi[5] = {0xC0,127,0x90,25,0x54}, plgfx[] = {0,0,0,10,3,10,3,5,6,5,6,10,8,12,10,10,10,5,13,5,13,10,16,10,16,0,13,0,13,2,3,2,3,0,0,0}, mongfx[] = {0,0, 10,5, 20,0, 17,8, 15,6, 10,16, 5,6, 3,8, 0,0};
allegro_init(), set_color_depth(32), set_gfx_mode(GFX_AUTODETECT_WINDOWED,320,240,0,0), install_timer(), install_keyboard(),  install_mouse(), buffer = create_bitmap(320,240),srand(time(NULL)),install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT,""),clear_to_color(buffer,makecol32(100,100,255));
while ((pressed=(!key[KEY_Z]&&pressed)?0:pressed)?1:1&&(((shoty=key[KEY_Z]&&shoty<0&&pressed==0?(pressed=1?200:200):first==0?-1:shoty)==200?shotx=px+9:0)==9999?1:1) && 1+(px += key[KEY_LEFT]?-0.1:0 + key[KEY_RIGHT]?0.1:0) && 1+int(px=(px<0?0:(px>228?228:px))) && !key[KEY_ESC]) {
rectfill(buffer,0,0,244,240,makecol32(0,0,0));
for(int i=0;i<8;i++) if (inside(shotx,shoty,i*32,monstars[i])) midi_out(midi,5);
for (int i=0; i<8; monstars[i] += first++>8?(monstars[i]==-100?0:0.02):-100, points = monstars[i]>240?points-1:points, monstars[i]=monstars[i]>240?-100:monstars[i], points = inside(shotx,shoty,i*32,monstars[i])?points+1:points, (monstars[i] = inside(shotx,shoty,i*32,monstars[i])?shoty=-1?-100:-100:monstars[i]), maxp = maxp>points?maxp:points, i++) for (int j=1; j<9; j++) line(buffer,i*32+mongfx[j*2 - 2],monstars[i]+mongfx[j*2-1],i*32+mongfx[j*2],monstars[i]+mongfx[j*2+1],makecol32(255,0,0));
if (int(first)%2000 == 0 && int(rnd=float(rand()%8))) monstars[int(rnd)] = monstars[int(rnd)]==-100?-20:monstars[int(rnd)]; // randomowe pojawianie potworkow
if (shoty>0) rectfill(buffer,shotx,shoty-=0.1,shotx+2,shoty+2,makecol32(0,255,255)); // rysowanie strzalu
for (int i=1; i<18; i++) line(buffer,px+plgfx[i*2 - 2],200-plgfx[i*2-1],px+plgfx[i*2],200-plgfx[i*2+1],makecol32(255,255,0));
textprintf_ex(buffer,font,250,10,makecol32(255,255,255),makecol32(100,100,255),"$: %i   ",int(points)*10);
textprintf_ex(buffer,font,250,20,makecol32(255,255,255),makecol32(100,100,255),"$$ %i   ",int(maxp)*10);
blit(buffer, screen, 0, 0, 0, 0, 320,240);
}
} END_OF_MAIN()

我为一款论坛游戏写了这篇文章——用尽可能少的行数写出ROT13算法。那么在C中呢?

rot13(char*s)
{
int i=-1;
do{
i++;
s[i] = (s[i] >= 65 && s[i] <=90 || s[i] >= 97 &&s [i] <= 122) ?
((s[i] < 97) ? 65 : 97) + (((s[i] - ((s[i] < 97) ? 65 : 97)) + 13) % 26) :
s[i];
} while(s[i] > 0);
}

我认为三元运算符非常简洁,尽管我听说它比if结构要慢。我还没有为自己计时……

受Robin Day和John Topley回答的启发,让他们把下面的内容粘贴到浏览器的地址栏中:

javascript:var name=prompt("What is your name?", "");var msg='Hello '+name+'<br>';newwindow=window.open();newdocument=newwindow.document;for (var i=0;i<100;i++){newdocument.write(msg);}newdocument.close();

或者更容易读懂:

var name=prompt("What is your name?", "");
var msg='Hello '+name+'<br>';
newwindow=window.open();
newdocument=newwindow.document;
for (var i=0;i<100;i++)
{
newdocument.write(msg);
}
newdocument.close();

Mandelbrot集可以以一种不太复杂的方式呈现,例如下面的Java:

public class MiniMandelbrot {
public static void main(String[] args) {
int[] rgbArray = new int[256 * 256];
for (int y=0; y<256; y++) {
for (int x=0; x<256; x++) {
double cReal=x/64.0-2.0, cImaginary=y/64.0-2.0;
double zReal=0.0, zImaginary=0.0, zRealSquared=0.0, zImaginarySquared=0.0;
int i;
for (i = 0; (i < 63) && (zRealSquared + zImaginarySquared < 4.0); i++) {
zImaginary = (zReal * zImaginary) + (zReal * zImaginary) + cImaginary;
zReal = zRealSquared - zImaginarySquared - cReal;
zImaginarySquared = zImaginary * zImaginary;
zRealSquared = zReal * zReal;
}
rgbArray[x+y*256] = i * 0x040404;
}
}
java.awt.image.BufferedImage bufferedImage = new java.awt.image.BufferedImage(256, 256, 1);
bufferedImage.setRGB(0, 0, 256, 256, rgbArray, 0, 256);
javax.swing.JOptionPane.showMessageDialog(null, new javax.swing.ImageIcon(bufferedImage), "The Mandelbrot Set", -1);
}
}

处理总是很有趣的,它创造的东西对所有类型的人都印象深刻。例如,布朗树:

int xf = (int) random(width);
int yf = (int) random(height);
int x = (int) random(width);
int y = (int) random(height);


background(0xFF);
while(x != xf || y != yf) {
set(x,y,color(0,0,0));
x = max(0, min(x + -1 + (int) random(3), width - 1) );
y = max(0, min(y + -1 + (int) random(3), height - 1) );
}

这是迄今为止我见过的最酷的东西……如果分解一下,其实很简单:

http://blogs.msdn.com/lukeh/archive/2007/04/03/a-ray-tracer-in-c-3-0.aspx

import sys
for y in range(80):
for x in range(80):
c = complex(x-40.0,y-40.0) / 20.0
z = 0.0
for i in range(100):
z = z*z+c
sys.stdout.write('#' if abs(z) < 2.0 else ' ')
sys.stdout.write('\n')

我从我的孩子那里得到了一个很好的反应,用一个快速的VB脚本来操作微软代理字符。对于那些不熟悉MS Agent的人来说,它是一系列可以通过COM接口操作的动画屏幕角色。你可以在微软代理下载页面下载代码和字符。

下面几句台词会让梅林角色出现在屏幕上,飞来飞去,敲屏幕引起你的注意,并打招呼。

agentName = "Merlin"
agentPath = "c:\windows\msagent\chars\" & agentName & ".acs"
Set agent = CreateObject("Agent.Control.2")


agent.Connected = TRUE
agent.Characters.Load agentName, agentPath
Set character = agent.Characters.Character(agentName)


character.Show


character.MoveTo 500, 400
character.Play "GetAttention"
character.Speak "Hello, how are you?"
Wscript.Sleep 15000
character.Stop
character.Play "Hide"

您还可以使用许多其他命令。查看http://www.microsoft.com/technet/scriptcenter/funzone/agent.mspx获取更多信息。

<强>编辑2011-09-02 我最近发现Microsoft Agent并没有安装在Windows 7上。然而,它是作为一个单独的下载在这里提供的。我没有测试过这个,所以无法验证它是否运行

在您的地址栏(在您的浏览器中)输入此代码并按Enter。然后你就可以编辑网页的所有内容了!

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0

这是我知道的最酷的“一句俏皮话”=)

所以有一天,我觉得我受够了。我学钢琴。看到像埃尔顿·约翰这样精通键盘的人,我确信这就是我想做的。

事实上,学钢琴是非常令人失望的。即使在完成了八年级的钢琴课程后,我仍然没有印象到,我弹钢琴的心理形象与我最初享受这项活动的想象有多么不同。

然而,我最喜欢的是我仅有的三年级音乐理论基础。我学到了音乐的构造。我终于能够从表演书面音乐的世界中走出来,开始创作自己的音乐。随后,我可以开始玩我想玩的东西了。


不要试图让新程序员眼花缭乱,尤其是年轻程序员。“少于十行简单代码”的整个概念似乎引起了一种“给我一些聪明的”的情绪。

你可以向新程序员展示一些聪明的东西。然后你可以教这个程序员如何复制这种“性能”。但这并不是他们迷上编程的原因。教他们一些基础知识,让他们自己合成十行聪明的代码。

我会向一个新程序员展示以下Python代码:

input = open("input.txt", "r")
output = open("output.txt", "w")


for line in input:
edited_line = line
edited_line = edited_line.replace("EDTA", "ethylenediaminetetraacetic acid")
edited_line = edited_line.replace("ATP", "adenosine triphosphate")
output.write(edited_line)

我意识到我不需要将line赋值给edited_line。然而,这只是为了让事情更清楚,并表明我没有编辑原始文档。

在不到十行里,我已经详尽地描述了一份文件。当然,也要确保显示可用的新程序员所有的字符串方法。更重要的是,我展示了我可以做的三件基本有趣的事情:变量赋值、循环、文件IO和使用标准库。

我想您会同意这段代码并不令人眼花缭乱。事实上,这有点无聊。不,实际上,很无聊。但是将代码展示给一个新的程序员,看看这个程序员是否能够在一周内(如果不是当天的话)将脚本的每个部分重新用于更有趣的内容。当然,您可能不喜欢(可能使用这个脚本来创建一个简单的HTML解析器),但其他一切都需要时间和经验。

Fibonacci numbers是学习递归的一个很酷的例子。 它表明递归写起来很简单,但执行起来代价很高。

.

.

.
int fiboNumber(int index)
{
if (index <= 1)
{
return index;
}
return fiboNumber(index - 1) + fiboNumber(index - 2);
}
  • 选择任何在屏幕上画点、线、框或圆是很简单的语言(或框架)。设计游戏是很多程序员都是先找到自己的激情所在的关键,而图像输出是其中的基础。
  • 选择一种能让他们轻松向朋友炫耀自己工作成果的语言。如果他们需要让他们的朋友安装运行时框架,并按照复杂的说明来炫耀,那么他们就不会得到他们需要的必要的赞扬和评论。不要低估同伴说“嘿,太酷了!”的价值

也许考虑到这两个标准,带有Processing.js的Javascript或Flash可能是一个很好的起点,尽管Flash显然有要求..呃…闪光。

切题思想:Flash实际上是一种非常好的教授OOP的方法,因为当你能够真正看到他们!

我记得我发现简单的循环很神奇。每次我学习一门新语言,我通常会把这样的东西放在一起:

<?php
$numberOfBottles = 99;
print("<h1>$numberOfBottles Bottles of Beer on the Wall</h1>");
print("$numberOfBottles bottles of beer on the wall,<br />");
print("$numberOfBottles bottles of beer!<br />");
print("Take one down, pass it around,<br />");
for($numberOfBottles--; $numberOfBottles>1; $numberOfBottles--)
{
print("$numberOfBottles bottles of beer on the wall!<br />");
print("<br />");
print("$numberOfBottles  bottles of beer on the wall,<br />");
print("$numberOfBottles  bottles of beer!<br />");
print("Take one down, pass it around,<br />");
}
print("One last bottle of beer on the wall!");
?>

也许一些while或foreach循环的变化也会很容易。

史蒂夫·沃兹尼亚克建立他的第一个Apple II时,他喜欢用Apple Basic来展示它,当场输入突破游戏。我想大概有10行;我希望我能把它粘贴在这里。你也可以在像处理这样的系统中这样做。

如果你教的是工程师,这段Prolog可能会引起他们的注意:

d(x,x,1).
d(C,x,0):-number(C).
d(C*x,x,C):-number(C).
d(-U, X, -DU) :- d(U, X, DU).
d( U + V, x, RU + RV ):-d(U,x,RU), d(V,x,RV).
d( U - V, x, RU - RV ):-d(U,x,RU), d(V,x,RV).
d(U * V,x, U * DV + V * DU):- d(U,x,DU), d(V,x,DV).
d(U^N, x, N*U^(N-1)*DU) :- integer(N), d(U, x, DU).

只要写下规则,你就有了一个程序,可以用8行代码完成第一学期的所有微积分。

当我第一次想出bash叉式炸弹的时候,我觉得它真的很可爱。如此简单,但它能做的事情却很整洁:

:(){ :|:& };:

我最近在一篇文章“我写过的最短、最有用的程序。”中写到了这一点

总结:我在1996年写了一个3行VB6应用程序,现在我每天都在使用。一旦exe被放入“发送到”文件夹。它可以让你在资源管理器中右键单击一个文件,并将该文件的完整路径发送到剪贴板。

Public Sub Main()
Clipboard.SetText Command$
End Sub

许多人发现赌博令人兴奋和激励。您可以自己构建一个21点发牌者类,公开一个接口。然后,让孩子们建立一个21点玩家班。

你可以为每个学生的解决方案建立一个图表,显示金钱与时间的关系来激励他们完成任务。

这个系统的美妙之处在于你可以在几周内产生增量解决方案:

最简单的解决方法是总是低于某个水平。这大概有5行代码。

一个更好的解决方案是看看发牌人暴露了什么,并据此调整你的击球。

一个更好的解决方案是考虑到你所拥有的实际卡片——而不仅仅是它们价值的总和。

最终的解决方案可能是记录多手牌的发牌情况。(dealer对象可以对player对象进行dealerisshuffshuffle (int numberofdeck)调用,告诉玩家有多少副牌。)

另一个可能的方向是让游戏更具竞争性——玩家不是通过与庄家对抗来赢钱,而是与其他人的解决方案对抗。当然,为了公平起见,你必须轮换谁先击球。

我认为任何可以做一些有用的事情的shell脚本都是向人们展示编程力量的好方法。在我看来,能够在一个小脚本上花费10-20分钟来自动化另一项任务并节省无数小时是非常令人印象深刻的。

例如,我曾经写过一个简单的Perl脚本,将一个目录中的mp3文件转换为另一种格式,然后将它们刻录到cd上。你用mp3目录的路径调用这个脚本,它就刻录了cd。至少当时我印象深刻。

一个基本的grep应用程序在Ruby/Python/Perl。

有点离题了,但你可以看看这个推文编码,它使用了不到140个字符的as3代码:

http://gskinner.com/playpen/tweetcoding_0/

^ _ ^

标志总是一个很好的起点。

Brian Harvey的UCBLogo页面有这个简短的例子:

这是一个简短但完整的程序在伯克利Logo:

to choices :menu [:sofar []]
if emptyp :menu [print :sofar stop]
foreach first :menu [(choices butfirst :menu sentence :sofar ?)]
end

下面是你如何使用它。你输入

choices [[small medium large]
[vanilla [ultra chocolate] lychee [rum raisin] ginger]
[cone cup]]

和Logo回复

small vanilla cone
small vanilla cup
small ultra chocolate cone
small ultra chocolate cup
small lychee cone
small lychee cup
small rum raisin cone
small rum raisin cup
small ginger cone
small ginger cup
medium vanilla cone
medium vanilla cup
medium ultra chocolate cone
medium ultra chocolate cup
medium lychee cone
medium lychee cup
medium rum raisin cone
medium rum raisin cup
medium ginger cone
medium ginger cup
large vanilla cone
large vanilla cup
large ultra chocolate cone
large ultra chocolate cup
large lychee cone
large lychee cup
large rum raisin cone
large rum raisin cup
large ginger cone
large ginger cup

该程序没有任何关于内置菜单大小的东西。您可以使用任意数量的类别,以及每个类别中的任意数量的可能性。让我们用四行Java代码来实现这一点!

递归也可以用来解决迷宫。就像谢尔宾斯基三角和其他艺术一样,对我来说,这比解决一些数学问题有趣得多。

在您提供的SAPI示例的基础上,我使用它来自己大声读取文件(只需将文本文件拖放到它的图标上或从命令行运行它)

speakfile.vbs:

strFileName = Wscript.Arguments(0)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, 1)
strText = objFile.ReadAll
Set objVoice = CreateObject("SAPI.SpVoice")
objVoice.Speak strText

我觉得这个问题真是个好主意。我有很多差劲的老师,其中最好的一个显然是那些有一点点想要炫耀的人。

你可以向他们展示大量的代码。我首先想到的是埃德·法尔顿的TinyP2P源代码:

  import sys, os, SimpleXMLRPCServer, xmlrpclib, re, hmac # (C) 2004, E.W. Felten


ar,pw,res = (sys.argv,lambda u:hmac.new(sys.argv[1],u).hexdigest(),re.search)


pxy,xs = (xmlrpclib.ServerProxy,SimpleXMLRPCServer.SimpleXMLRPCServer)


def ls(p=""):return filter(lambda n:(p=="")or res(p,n),os.listdir(os.getcwd()))


if ar[2]!="client": # license: http://creativecommons.org/licenses/by-nc-sa/2.0


myU,prs,srv = ("http://"+ar[3]+":"+ar[4], ar[5:],lambda x:x.serve_forever())


def pr(x=[]): return ([(y in prs) or prs.append(y) for y in x] or 1) and prs


def c(n): return ((lambda f: (f.read(), f.close()))(file(n)))[0]


f=lambda p,n,a:(p==pw(myU))and(((n==0)and pr(a))or((n==1)and [ls(a)])or c(a))


def aug(u): return ((u==myU) and pr()) or pr(pxy(u).f(pw(u),0,pr([myU])))


pr() and [aug(s) for s in aug(pr()[0])]
(lambda sv:sv.register_function(f,"f") or srv(sv))(xs((ar[3],int(ar[4]))))


for url in pxy(ar[3]).f(pw(ar[3]),0,[]):
for fn in filter(lambda n:not n in ls(), (pxy(url).f(pw(url),1,ar[4]))[0]):
(lambda fi:fi.write(pxy(url).f(pw(url),2,fn)) or fi.close())(file(fn,"wc"))

好吧,它比你的“十”限制多了5行,但仍然是一个功能齐全的Peer 2 Peer应用程序,多亏了Python。

TinyP2P可以作为服务器运行:

python tinyp2p.py password server hostname portnum [otherurl]

还有一个客户:

python tinyp2p.py password client serverurl pattern

当然,讲故事是非常重要的。对于这样的目的,99瓶啤酒确实是一个很好的开始。

然后你可以选择几个funcky代码的例子,比如:

  • 著名的Python一行代码:

    print("".join(map(lambda x: x and "%s%d bottle%s of beer on the wall, %d bottle%s of beer...\nTake one down, pass it around.\n"%(x<99 and "%d bottles of beer on the wall.\n\n"%x or "\n", x, x>1 and "s" or " ", x, x>1 and "s" or " ";) or "No bottles of beer on the wall.\n\nNo more bottles of beer...\nGo to the store and buy some more...\n99 bottles of beer.", range(99,-1,-1)))) < / p >

  • 作弊的Python版本(对学生来说很酷,因为它显示了网络功能):

    import re, urllib 打印re.sub (' & lt; / p> ',”,re.sub (' & lt; br> | & lt; p> | & lt; br /比;|<br/>','\n', re.sub('No', '\nNo', urllib.URLopener () .open(“http://www.99-bottles-of-beer.net/lyrics.html”).read()[3516:16297]))) < /代码> < / p > < /李>

最后,我将遵循前面的建议并展示一些Javascript,因为它非常直观。jQuery UI演示网站是很多不错的小部件演示,包括代码片段。日历在几行:

<script type="text/javascript">
$(function() {
$("#datepicker").datepicker();
});
</script>


<div class="demo">


<p>Date: <input id="datepicker" type="text"></p>


</div>

小书签也很有吸引力。Readibility很有趣:

function() {
readStyle='style-newspaper';readSize='size-large';
readMargin='margin-wide';
_readability_script=document.createElement('SCRIPT');
_readability_script.type='text/javascript';
_readability_script.src='http://lab.arc90.com/experiments/readability/js/readability.js?x='+(Math.random());
document.getElementsByTagName('head')[0].appendChild(_readability_script);
_readability_css=document.createElement('LINK');
_readability_css.rel='stylesheet';
_readability_css.href='http://lab.arc90.com/experiments/readability/css/readability.css';
_readability_css.type='text/css';_readability_css.media='screen';
document.getElementsByTagName('head')[0].appendChild(_readability_css);
_readability_print_css=document.createElement('LINK');
_readability_print_css.rel='stylesheet';_readability_print_css.href='http://lab.arc90.com/experiments/readability/css/readability-print.css';
_readability_print_css.media='print';
_readability_print_css.type='text/css';
document.getElementsByTagName('head')[0].appendChild(_readability_print_css);
}

试着让你的学生编一个神奇的8号球。一个基本的回答“是”或“否”的8球程序可能只需要不到10行代码,并且它可以以任何方式递增:

  1. 首先,让它变得简单:在CLI中输入类似“s”的shake;8号球回答“是”或“不是”
  2. 接下来,输入一个问题,显示问题和答案
  3. 然后展开可能的答案....大量的选项,那些快速掌握的学生可以得到一些乐趣(“看,电脑说脏话!!”),而你帮助其他人
  4. 实现一个计时器,这样你就不能马上问同样的问题,以防你不喜欢答案
  5. 把可能的答案分成“是”、“否”和“模糊”之类的变体;第一个RNG决定答案的类型,第二个RNG决定具体答案
  6. 重新配置定时器;如果答案不清楚,你可以马上再问一次
  7. 在文本周围使用*符号
  8. 等等....

一个神奇的8球是大多数人都能联系到的东西,它只使用最简单的工具介绍了基本的字符串,浮点数/整数,IO, CLI,布尔和RNG。它很简单,(有点)有趣,而且很容易扩展。根据您的方法,您可以使用类8ball()、类YesAnswer()等立即使编程面向对象。

祝你好运;-)

wxPython第一个步骤

import wx
app = wx.App()
wx.Frame(None, -1, 'simple.py').Show()
app.MainLoop()

simple.py frame http://zetcode.com/wxpython/images/simple.jpg .py

10打印“Mohan”
20 Goto 10

我一直很喜欢河内塔。在计划

(define (hanoi x from to spare)
(if (= x 1)
(begin
(display "move ")(display from)(display " to ")(display to)(display "\n"))
(begin
(hanoi (- x 1) from spare to)
(hanoi 1 from to spare)
(hanoi (- x 1) spare to from))))

示例输出

gosh> (hanoi 3 'start 'dest 'spare)
move start to dest
move start to spare
move dest to spare
move start to dest
move spare to start
move spare to dest
move start to dest
#<undef>

同样在Python中(尽管这不能像Scheme版本那样做1000张光盘)

def hanoi(x, source, dest, spare):
if x == 1:
print "%s to %s" % (source, dest)
else:
hanoi(x - 1, source, spare, dest)
hanoi(1, source, dest, spare)
hanoi(x - 1, spare, dest, source)

用C程序计算圆周率的值:

#include <stdlib.h>
#include <stdio.h>


long a=10000,b,c=2800,d,e,f[2801],g;


int main()
{
for(;b-c;)
f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}

输出:

31415926535897932384626433832795028841971693993751058209749445923078164062862089
98628034825342117067982148086513282306647093844609550582231725359408128481117450
28410270193852110555964462294895493038196442881097566593344612847564823378678316
52712019091456485669234603486104543266482133936072602491412737245870066063155881
74881520920962829254091715364367892590360011330530548820466521384146951941511609
43305727036575959195309218611738193261179310511854807446237996274956735188575272
48912279381830119491298336733624406566430860213949463952247371907021798609437027
70539217176293176752384674818467669405132000568127145263560827785771342757789609
17363717872146844090122495343014654958537105079227968925892354201995611212902196
0864034418159813629774771309960518707211349999998372978049951059731732816096318

这段PHP代码只能通过命令行在Mac上工作,但当每一个人想要播放捻线机时,它非常有用

$lr = array('left', 'right');
$hf = array('hand', 'foot');
$colour = array('red', 'yellow', 'blue', 'green');
while(true) {
$a = $lr[array_rand($lr)];
$b = $hf[array_rand($hf)];
$c = $colour[array_rand($colour)];
system("say $a $b $c");
sleep(5);
}
JavaScript的处理怎么样?我不知道处理,但代码总是看起来相当小,它可以做什么,它是非常可视化的,你可以在浏览器中运行它 http://processingjs.org/exhibition < / p >

这个c代码可能有点混乱,但我发现它非常强大

#include <unistd.h>
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<L?--_
%6:6:7)+"World! \n",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}

结果是…只有3行…… 一种分形Hello World

WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo
WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo
WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo
WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo
WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo
WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo
WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!!   !dWW!ddddllllrrrrrrrooooooo
WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo      WloW!!!ddddllrrrrrrrrooooo
WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl     r!dlooWWWoW!dllrrrrrrroooo
WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo  l!               rdo!l!r!dlrrrrrrrrooo
WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW                       lW!ddlrrrrrrrroo
WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd !                        rlW!ddllrrrrrrrro
Worrrrrrrllllllddd!oooWWWoloWWWWoodr                           drrWdlllrrrrrrrr
Worrrlllllllldddd!WolWrr!!dWWWlrrldr                            ro!dlllrrrrrrrr
Wrrllllllllddddd!WWolWr        oWoo                              r!dllllrrrrrrr
Wlllllllldddd!!odrrdW            o                              lWddllllrrrrrrr
Wlddddd!!!!!WWordlWrd                                          oW!ddllllrrrrrrr
olddddd!!!!!WWordlWrd                                          oW!ddllllrrrrrrr
Wlllllllldddd!!odrrdW            o                              lWddllllrrrrrrr
Wrrllllllllddddd!WWolWr        oWoo                              r!dllllrrrrrrr
Worrrlllllllldddd!WolWrr!!dWWWlrrldr                            ro!dlllrrrrrrrr
Worrrrrrrllllllddd!oooWWWoloWWWWoodr                           droWdlllrrrrrrrr
WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd !                        rlW!ddllrrrrrrrro
WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW                       lW!ddlrrrrrrrroo
WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo  l!               rdo!l!r!dlrrrrrrrrooo
WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl     r!dlooWWWoW!dllrrrrrrroooo
WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo      WloW!!!ddddllrrrrrrrrooooo
WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!!   WdWW!ddddllllrrrrrrrooooooo
WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo
WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo
WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo
WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo
WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo
WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo
WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

摆弄饼干。

它的饼干!孩子们非常喜欢饼干!

  1. 找一个依赖cookie的网站。
  2. 使用firefox插件编辑cookie。
  3. ????
  4. 学习! !
10 PRINT "HELLO"
20 GOTO 10

但那时我还只是个孩子。这也是为什么它是最酷的事情。我不认为你能从你第一次写电脑程序时得到同样的快感即使它像无限地将“HELLO”打印到控制台一样简单。

在《雷神之锤3》中,1/√(x)的速度非常快:

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char const* argv[])
{
if (argc != 2) {
printf("Need a number!\n");
return 0;
}
float number = atof(argv[1]);
long i;
float x2, y;
const float threehalfs = 1.5F;


x2 = number * 0.5F;
y  = number;
i  = * ( long * ) &y;  // evil floating point bit level hacking
i  = 0x5f3759df - ( i >> 1 ); // what the?
y  = * ( float * ) &i;
y  = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
printf("%f\n", y);
return 0;
}

用Python将图像转换为音乐

我的答案我如何循环通过每4行每4个像素,使用Python?:

#!/usr/bin/env python
import easygui # http://easygui.sourceforge.net/
import Image   # http://www.pythonware.com/products/pil/
import numpy   # http://numpy.scipy.org/


filename = easygui.fileopenbox() # pick a file
im = Image.open(filename) # make picture
im.show() # show picture
ar = numpy.asarray(im) # get all pixels
N = 4
pixels = ar[::N,::4]  # every 4th pixel in every N-th row
notes = pixels.sum(axis=2) / 9 + 24 # compute notes [0, 52]
print "number of notes to play:", notes.size

音符可以对应不同的音调。我在这里使用等回火刻度:

# play the notes
import audiere # http://pyaudiere.org/
import time


d = audiere.open_device()
# Notes in equal tempered scale
f0, a = 440, 2**(1/12.)
tones = [d.create_tone(f0*a**n) for n in range(-26, 27)] # 53


for y, row in enumerate(notes):
print N*y # print original row number
for t in (tones[note] for note in row):
t.volume = 1.0 # maximum volume
t.play()
time.sleep(0.1) # wait around 100 milliseconds
t.stop()

你可以使用jQuery(Write Less,Do More)库以最少的代码在HTML web表单中实现出色的视觉效果。否则,像f#这样的函数式语言也可以用很少的代码行做很多事情。以下是Project euler问题8的解答:-

数据:- 50 * 20网格的数字字符串

let data = txt |> Seq。toList |>列表。filter System.Char.IsDigit |>列表。地图System.Char.GetNumericValue

let rec partition_5 l = 匹配l | x1:: (x2:: x3:: x4:: x5:: _当t) - > (x1、x2、x3、x4 x5):: (partition_5 t) | _ -> []

let euler_8 =列表。map (fun x ->列表。fold (*) 1.0 x) (partition_5 data) |> List.max

下面是一个用a - prolog语言编写的程序,它可以计算图的N种颜色(“c”表示颜色,“v”表示顶点,“e”表示边)。

c(1..n).
1 {color(X,I) : c(I)} 1 :- v(X).
:- color(X,I), color(Y,I), e(X,Y), c(I).

顺便说一句,上学期我让学生们兴奋起来的方法是给他们讲一个故事。大概是这样的:“想象一个三角形。这是一个纯粹的数学对象,不存在真正的三角形。我们可以推理它们,发现它们的性质,然后将这些性质应用到现实世界的解决方案中。算法也是一个纯粹的数学对象。然而,编程是一种魔法。我们可以拿一个数学对象,用一种语言描述它,你瞧,它可以操纵物理世界。编程是连接这两个世界的独特学科。”

Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub JohnDenverAnniesSong(): Const E4# = 329.6276: Dim Note&, Frequencies$, Durations$: Frequencies = "iiihfihfffhidadddfhihfffhihiiihfihffihfdadddfhihffhiki": Durations = "aabbbfjaabbbbnaabbbfjaabcapaabbbfjaabbbbnaabbbfjaabcap": For Note = 1 To Len(Frequencies): Beep CLng(E4 * 2 ^ ((AscW(Mid$(Frequencies, Note, 1)) - 96) / 12)), CLng((Asc(Mid$(Durations, Note, 1)) - 96) * 200 - 10): Sleep 10: DoEvents: Next: End Sub

转储到Excel中运行:D

我的第一个程序有点类似于这里已经提到过,但是我的程序短了一行,而且礼貌得多:

10 PRINT "What is your name?"
20 INPUT A$
30 PRINT "Thanks"

http://www.youtube.com/watch?v=a9xAKttWgP4你可以看到康威的生命游戏编程(同时口头评论)大约5个APL基因(一种编程语言)。

它看起来很有趣,可以启发学生编程很酷,还有数学,数学,简洁的编程语言:)

顺便说一下,鲍勃·马丁叔叔在hanselminutes播客上提到了这个youtube视频。

这个bash代码将锁定您的计算机。这叫叉子炸弹。

:(){ :|:& };:

警告:不要运行它!

更多信息:http://en.wikipedia.org/wiki/Fork_bomb

Squeak是一个激发灵感的好工具

例句:http://squeakland.jp/school/drive_a_car/html/Drivecar12.html

这是我的10线蜘蛛。从技术上讲,它是11,包括perl shell声明,但我希望这是可以原谅的!

我想让它识别某些文件类型和支持相对路径,但跑出了行!

运行:

perl spider.pl http://yahoo.com/search?q=test

请注意,谷歌不允许没有用户代理的LWP Simple,因此搜索谷歌将不起作用。也容不下那个!总之,代码在哪里:

#!/usr/bin/perl -w
use LWP::Simple;
my @queue = ($ARGV[0]);
my %visited = ();
while (my $url = pop(@queue)) {
next if $visited{$url};
$visited{$url} = 1;
my $html = get($url) or next;
print "Spidering $url\n";
push(@queue, $html =~ m/(http:\/\/[^'"]*)/g);
}

安德鲁·库克的《Malbolge: Hello World》

让他们在Malbolge试试这个:

(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{^Lx8%$Xmrkpohm-kNi;gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O<oLm

这是世界上最困难的编程语言“Hello World”,花了两年时间才找到:)

它们可以去Lou Scheffer的Malbolge页面之后:)

当然你可以去世界第一(!!)饭泽久的99瓶啤酒计划(这是一个航线!),这是一个pdf由酒井雅彦在Malbolge

使用游戏!不是编程游戏,而是编程比赛。想想谷歌AI挑战,把它简化。

让我举个例子。我曾经和我的朋友进行过一次小竞赛:我们中的一个人建立了一个模拟框架,其他人编写了一个AI,范围从简单到高度分析,我们进行了100次测试,看看哪个AI表现最好。

该框架?基本I/O:模拟控制由每个竞争AI生成一个子进程执行,每一轮模拟将数据写入标准输入管道,并读取输出。这样,我们就可以用任何我们想要的语言来编写我们的ai,只需要遵循一个非常简单的协议。

规则非常简单,但事情很有挑战性:我们有两个村庄,A村和B村,它们在居住在那里的家庭中平均分配资金。A有800个硬币,B有500个。每一轮,所有人工智能都被要求选择一个村庄居住(将“a”或“B”打印到stdout),然后返回每个村庄在此期间的总数(通过读取stdin中的数字)。我们的目标是在100轮比赛后获得最多的钱。

我们创造的一些ai拥有非常复杂的机制去尝试并猜测该去哪个村庄定居—-尽管它们并不是很好,因为获胜的策略总是选择上一轮给每个家庭最少钱的村庄(假设大多数人会在下一轮搬到另一个村庄)。

我认为这很吸引人,鼓励研究,是一种健康的竞争方式。有成千上万的游戏可以玩,它只需要基本的编程知识(标准I/O!)让玩家进行互动。

这里有一些使用javascript的有趣的东西

function checkLove(love)
{
if (love)
alert("He he he, cool!");
else
{
if(love != undefined) alert("Sorry, you must love me.");
checkLove(confirm("Do you love me?"));
}
}
checkLove();

只有10行! 你可以把它包括在一个网页中,或者只是复制粘贴下面的代码在你的浏览器的url栏,并按enter

javascript:function checkLove(love){if (love)alert("He he he, cool!");else{if(love != undefined) alert("Sorry, you must love me.");checkLove(confirm("Do you love me?"));}}checkLove();

很有趣,对吧?