web-dev-qa-db-fra.com

Quelle est la chose la plus cool que vous puissiez faire en <10 lignes de code simple? Aidez-moi à inspirer les débutants!

Je cherche la chose la plus cool que vous puissiez faire en quelques lignes de code simple. Je suis sûr que vous pouvez écrire un jeu de Mandelbrot dans Haskell sur 15 lignes , mais il est difficile à suivre.

Mon but est d'inspirer aux étudiants que la programmation est cool .

Noussavonsque la programmation est cool parce que vous pouvez créer tout ce que vous imaginez - c'est le débouché créatif ultime. Je veux inspirer ces débutants et les aider à surmonter autant de difficultés d'apprentissage précoce que possible.

Maintenant, mes raisons sont égoïstes. J'enseigne un coursIntroduction à l'informatiqueà un groupe de 60 majors en ingénierie et en demi-business; tous les étudiants de première année. Ce sont les étudiants issus d'écoles secondaires défavorisées. D'après mon expérience passée, le groupe est généralement divisé comme suit: quelques stars du rock , dont certaines essaient très fort etgenre deget it, les quelques-uns qui essaient très fort età peinel'obtenir, et les quelques qui s'en fichent. Je souhaite toucher le plus grand nombre de ces groupes aussi efficacement que possible. Voici un exemple d'utilisation d'un programme informatique pour enseigner:

Voici un exemple de ce que je recherche: un script VBS d’une ligne pour que votre ordinateur vous parle:

CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it")

Je pourrais utiliser cela pour démontrer l'ordre des opérations. Je montrais le code, les laissais jouer avec, puis expliquais que beaucoup de choses se passaient dans cette ligne, mais l'ordinateur peut le comprendre, car il connaît les règles. Ensuite, je leur montrerais quelque chose comme ça:

4(5*5) / 10 + 9(.25 + .75)

Et vous pouvez voir que je dois d'abord faire (5 * 5). Ensuite, je peux me multiplier pour 4. Et maintenant, j'ai créé l'objet. Diviser par 10 équivaut à appeler Parler - Je ne peux pas parler avant d'avoir un objet et je ne peux pas me diviser avant 100. Ensuite, de l'autre côté, je crée d'abord un InputBox avec quelques instructions pour l'afficher. . Lorsque je frappe sur entrée dans la zone de saisie, il évalue ou "renvoie" tout ce que j'ai entré. (Indice: "oooooo" fait un son drôle) Alors, quand je dis "Parlez", c'est le côté droit qui parle. Et je reçois cela de la InputBox.

Alors, quand vous faites plusieurs choses sur une ligne, comme:

x = 14 + y;

Vous devez être conscient de l'ordre des choses. Nous ajoutons d’abord 14 et y. Ensuite, nous plaçons le résultat (ce qu'il évalue ou renvoie) dans x.

Mon objectif est d’avoir une foule d’exemples intéressants à démontrer et à enseigner à la classe tout en s’amusant. J'ai essayé cet exemple sur mon camarade de chambre et bien que je ne l'utilise peut-être pas comme première leçon, elle l'a aimé et a appris quelque chose.

De bons programmes mathematica qui créent de beaux graphiques ou formes et faciles à comprendre seraient de bonnes idées et je vais les examiner. Voici quelques exemples d'actionscript compliqués , mais c'est un peu trop avancé et je ne peux pas enseigner le flash. Quelles autres idées avez-vous?

406
Tom Ritter

Mes enfants m'ont très bien répondu avec un rapide script VB pour manipuler un personnage de Microsoft Agent. Pour ceux qui ne connaissent pas MS Agent, il s'agit d'une série de caractères à l'écran animés qui peuvent être manipulés via une interface COM. Vous pouvez télécharger le code et les caractères sur la page de téléchargement Microsoft Agent .

Les quelques lignes suivantes feront apparaître le personnage de Merlin à l'écran, voler autour de vous, frapper à l'écran pour attirer votre attention et dire bonjour.

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"

Vous pouvez utiliser de nombreuses autres commandes. Vérifiez http://www.Microsoft.com/technet/scriptcenter/funzone/agent.mspx pour plus d'informations.

EDIT 2011-09-02 J'ai récemment découvert que Microsoft Agent n'était pas installé de manière native sur Windows 7. Cependant, il est proposé en téléchargement séparé ici . Je n'ai pas testé cela, donc je ne peux pas vérifier s'il fonctionne.

78
Bob Mc

Entrez ce code dans votre barre d’adresse (dans votre navigateur) et appuyez sur entrée. Ensuite, vous pouvez éditer tout le contenu de la page Web!

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

C'est le "one-liner" le plus cool que je connaisse =)

Quand j'ai écrit pour la première fois ceci.

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

Ça a coupé les gens! L'ordinateur s'est souvenu de leur nom!

EDIT: Juste pour ajouter à cela. Si vous parvenez à convaincre un nouveau programmeur que c’est la meilleure chose à faire, il deviendra le bon programmeur. Ces jours-ci, vous pouvez faire presque tout ce que vous voulez avec une ligne de code pour gérer une bibliothèque que quelqu'un d'autre a écrite. Personnellement, je n’obtiens absolument aucune satisfaction à ce propos et je ne vois aucun avantage à l’enseigner.

201
Robin Day

PHP - le joint Sierpinski a.k.a la Triforce

OK, c'est 15 lignes de code mais le résultat est génial! C'est le genre de choses qui m'a fait paniquer quand j'étais enfant. Cela provient du manuel 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 gasket

180
markus

Microsoft a Small Basic , un IDE pour "enfants".

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

Il est spécialement conçu pour montrer à quel point la programmation est cool.

105
Bob Fanger

J'ai tendance à penser que les gens sont impressionnés par des choses qu'ils peuvent comprendre ou qui sont pertinentes dans leur vie. J'essayerais de baser mes 10 lignes de code sur quelque chose qu'ils connaissent et comprennent. Prenons, par exemple, Twitter et son API. Pourquoi ne pas utiliser cette API pour créer quelque chose de cool. Les 10 lignes de code suivantes renverront le "calendrier public" de Twitter et l’afficheront dans une application console ...

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));
    }

Mon exemple de code pourrait ne pas être le meilleur pour vos étudiants. Il est écrit en C # et utilise .NET 3.5. Donc, si vous leur apprenez PHP, Java ou C++, cela ne sera pas utile. Cependant, ce que je veux dire, c'est qu'en associant vos 10 lignes de code à quelque chose de "cool, intéressant et pertinent pour les étudiants, votre échantillon devient également cool, intéressant et pertinent.".

Bonne chance!

[Oui, je sais que j'ai omis quelques lignes d'utilisation de déclarations et de la méthode Main, mais je suppose que les 10 lignes n'ont pas besoin d'être littéralement 10 lignes]

83
Martin Peck

Il s’agit d’un serveur telnet Python qui vous demandera le nom de l’utilisateur et vous le saluera. Cela semble cool parce que vous communiquez avec votre programme à partir d'un autre ordinateur via le réseau.

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()
80
user17918

Je pense qu'il est difficile d'être un enseignant en informatique ces jours-ci. Je suis. Nous sommes confrontés à une bataille de plus en plus difficile. Nos étudiants sont des utilisateurs extrêmement sophistiqués et il en faut beaucoup pour les impressionner. Ils ont tellement d'outils à leur disposition qui font des choses incroyables.

Une simple calculatrice en 10 lignes de code? Pourquoi? J'ai une TI-86 pour ça.

Un script qui applique des effets spéciaux à une image? C'est à cela que sert Photoshop. Et Photoshop balaie tout ce que vous pouvez faire en 10 lignes.

Pourquoi ne pas extraire un CD et convertir le fichier en MP3? Euh, j'ai déjà 50 000 chansons que j'ai reçues de BitTorrent. Ils sont déjà au format MP3. Je les joue sur mon iPhone. Qui achète des CD quand même?

Pour initier les utilisateurs avertis à la programmation, vous devrez trouver quelque chose qui:

a) applicable à quelque chose qu'ils trouvent intéressant et cool, et b) fait quelque chose qu'ils ne peuvent pas déjà faire.

Supposons que vos étudiants aient déjà accès au logiciel le plus cher. La plupart d'entre eux disposent de la version complète d'Adobe CS5.5 (prix de détail: 2 600 USD; prix réel: gratuit) et peuvent facilement obtenir toute application susceptible de briser le budget de votre ministère.

Mais la grande majorité d’entre eux n’a aucune idée du fonctionnement réel de ce "matériel informatique".

Ils forment un groupe incroyablement créatif: ils aiment créer des choses. Ils veulent juste pouvoir faire ou faire quelque chose que leurs amis ne peuvent pas. Ils veulent de quoi se vanter.

Voici quelques éléments qui résonnent chez mes étudiants:

  • HTML et CSS. Ils apprennent comment fonctionnent les thèmes MySpace et peuvent les personnaliser.
  • Mashups. Ils les ont tous vus, mais ne savent pas comment les créer. Départ Yahoo! Pipes . Il existe de nombreux moments d'apprentissage, tels que RSS, XML, filtrage de texte, mappage et visualisation. Les widgets de mashup complétés peuvent être incorporés dans des pages Web.
  • Illustration. Regardez Art sans contexte . La récursivité et la randomisation sont essentielles pour faire de belles images.
  • Raconter des histoires. Avec un environnement de programmation 3D facile à utiliser comme Alice , il est facile de créer des histoires captivantes de haute qualité. en utilisant rien de plus que glisser-déposer.

Aucune d’entre elles n’implique de programmation au sens traditionnel du terme. Mais ils exploitent des bibliothèques puissantes. Je les considère comme un type de programmation différent.

69
Barry Brown

J'ai trouvé un grand favori (en 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>"

J'ai trouvé que les étudiants débutants avaient quelques conceptions à corriger.

  • Les ordinateurs ne lisent pas votre esprit.
  • Les ordinateurs ne font qu'une chose à la fois, même s'ils le font si vite qu'ils semblent le faire tous à la fois.
  • Les ordinateurs ne sont que des machines stupides et ne font que ce qu'on leur dit.
  • Les ordinateurs ne reconnaissent que certaines choses et sont comme des blocs de construction.
  • Un concept clé est qu'une variable est quelque chose qui contient une valeur et que son nom est différent de cette valeur.
  • La distinction entre l'heure à laquelle vous modifiez le programme et l'heure à laquelle il s'exécute.

Bonne chance avec votre classe. Je suis sûr que tu vas bien faire.

P.S. Je suis sûr que vous comprenez que, avec le matériel et les compétences, vous enseignez également une attitude, ce qui est tout aussi important.

63
Mike Dunlavey

Ce code C est peut-être obscurci, mais je l’ai trouvé très puissant

#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;}

Et voici le résultat ... En seulement 3 lignes ... Une sorte de fractale 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
62
ThibThib

Pourquoi ne pas montrer que vous pouvez utiliser n'importe quel navigateur Web et entrer du JavaScript dans la barre d'adresse et obtenir du code à exécuter?

EDIT: Allez sur une page avec beaucoup d'images et essayez ceci dans la barre d'adresse:

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)
45
John Topley

Vous pouvez faire une application qui choisit un nombre aléatoire. Et vous devez le deviner. Si vous vous trompez, cela dit: plus haut ou plus bas. Et si vous l'avez deviné, un beau message.

C'est cool de jouer pour les étudiants.

Version simple Python sans vérification d'erreur appropriée:

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!')

Erik suggère que l'ordinateur devine le nombre. Cela peut également être fait dans 10 lignes de code (bien que l'absence de vérification d'erreur correcte soit encore plus grave: des nombres valides en dehors de la plage provoquent une boucle infinie):

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)
37
Vinzcent

De retour en classe d'informatique au lycée, quelques amis et moi avons appris à la classe comment programmer avec Delphi. Le cours était principalement axé sur la programmation avec Pascal. Delphi était donc une bonne étape. Nous avons démontré la nature événementielle de Delphi et ses RAD capacités. À la fin de la leçon, nous avons montré à la classe un exemple d'application et leur avons demandé de le reproduire. L'application a demandé "Êtes-vous ivre?" avec deux boutons Yes et No. ... Je pense que vous savez ce qui va suivre ... le bouton Non a changé de place au passage de la souris et était presque impossible à cliquer.

Les élèves et l'enseignant ont eu un bon coup de pied.

Le programme ne nécessitait que quelques lignes de code écrit par l'utilisateur avec une simple équation pour calculer où déplacer le bouton. Je ne pense pas qu'aucun des autres étudiants ait compris, mais quelques-uns étaient proches.

26
Ryan Anderson

Quand j'ai découvert pour la première fois la forkbomb bash, j'ai pensé que c'était vraiment gentil. Si simple, et pourtant pratique dans ce qu'il peut faire:

:(){ :|:& };:
23
hodgesmr

C'est de la triche, pas très simple, mais j'ai déjà écrit un shoot'em up en 20 lignes de C++, en utilisant la bibliothèque graphique Allegro. Aucun critère réel pour ce qui était une ligne , mais c'était il y a un peu, et c'était fait pour le plaisir. Il y avait même des effets sonores bruts.

Voici à quoi cela ressemblait:

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

Et voici le code ( devrait compiler):

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()
22
GhassanPL

De nos jours, JavaScript est un excellent moyen de montrer comment vous pouvez programmer en utilisant des outils vraiment basiques, par exemple. bloc-notes.

les effets jQuery sont un excellent point de départ pour tous ceux qui souhaitent épater leurs amis!

Dans celui-ci, cliquez simplement sur l'espace blanc de la page.

<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>
21
Jon Winstanley

Une chose que vous pourriez envisager est quelque chose comme Robocode , dans laquelle beaucoup de codage sont abstraits et vous dites simplement à un robot quoi faire. Une simple fonction à 10 lignes permet au robot de faire beaucoup de choses et donne un résultat très visuel et facile à suivre.

Robocode n’est peut-être pas adapté à la tâche, mais ce genre de chose est un bon moyen de relier un code écrit à des actions visuelles sur un ordinateur. En outre, il est amusant de regarder quand on doit donner des exemples.

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);
 }
}
20
Welbog

Alors un jour, j'ai décidé que j'en avais assez. J'apprendrais le piano . Voir des gens comme Elton John commander une telle maîtrise du clavier m'a assuré que c'était ce que je voulais faire.

En fait, apprendre le piano était une déception énorme. Même après avoir terminé huit cours de piano, je n’étais toujours pas impressionnée par la différence d’image que je me faisais si je pensais jouer du piano et si j’appréciais cette activité.

Cependant, ce que j’ai vraiment aimé, c’est uniquement mes trois diplômes de rudiments de théorie musicale. J'ai appris sur la construction de la musique. J'ai finalement pu quitter le monde de l'interprétation musicale pour écrire ma propre musique. Par la suite, j'ai pu commencer à jouer ce que je voulais jouer.


N'essayez pas d'éblouir les nouveaux programmeurs, en particulier les jeunes. La notion même de "moins de dix lignes de code simple" semble induire une atmosphère de "Montre-moi quelque chose intelligent ".

Vous pouvez montrer à un nouveau programmeur quelque chose d'intelligent. Vous pouvez ensuite apprendre à ce même programmeur à reproduire cette "performance". Mais ce n'est pas ce qui les rend accro à la programmation. Apprenez-leur les rudiments et laissez-les synthétiser leurs dix lignes de code intelligentes.

Je montrerais à un nouveau programmeur le code Python suivant:

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)

Je réalise que je n'ai pas besoin d'assigner line à edited_line. Cependant, c'est juste pour que tout soit clair et pour montrer que je n'édite pas le document original.

En moins de dix lignes, j'ai commenté un document. Bien sûr, assurez-vous également de montrer le nouveau programmeur toutes les méthodes de chaîne disponibles. Plus important encore, j'ai montré trois choses fondamentalement intéressantes que je peux faire: l'affectation de variable, une boucle, l'entrée-sortie de fichier et l'utilisation de la bibliothèque standard.

Je pense que vous conviendrez que ce code n'éblouit pas. En fait, c'est un peu ennuyeux. Non, en fait, c'est très ennuyeux. Mais montrez ce code à un nouveau programmeur et voyez si ce programmeur ne peut pas réutiliser toutes les parties de ce script pour quelque chose de beaucoup plus intéressant au cours de la semaine, sinon du jour. Bien sûr, cela vous déplaira (peut-être utiliser ce script pour créer un analyseur HTML simple), mais tout le reste prend juste du temps et de l'expérience.

18
Wesley

Comme la plupart des autres commentateurs, j'ai commencé à écrire du code pour résoudre des problèmes mathématiques (ou pour créer des graphiques pour des jeux vraiment terribles que je concevrais, comme Indiana Jones contre Zombies).

Ce qui a vraiment commencé pour moi (en mathématiques et en programmation) était de passer du texte au choix, de choisir vos propres jeux de style aventure… pour des jeux plus graphiques. J'ai commencé à colorier du papier millimétré et à tracer des pixels jusqu'à ce que je passe à la géométrie ... et à découvrir comment utiliser des équations pour tracer des courbes et des lignes, des boîtes, etc.

Mon point est, je pourrais avoir vraiment dans quelque chose comme le traitement ( http://processing.org/ ) où un programme typique ressemble à quelque chose comme ceci:

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);
}

Pour moi, c'est le "logo" du futur.

Il existe des exemples faciles de "bonjour le monde" qui peuvent rapidement amener quelqu'un à dessiner et à modifier le code et à voir comment les choses se cassent et quels étranges "accidents" peuvent être créés ... jusqu'à des interactions plus avancées et à la création de fractales ...

17

Vous pouvez utiliser un script écrit avec AutoIt , qui estompe la distinction entre l’utilisation d’une application traditionnelle et la programmation.

Par exemple. un script qui ouvre le bloc-notes et fait insulter leur ordinateur par le biais d'un message, puis ne laisse aucune trace de ses actions:

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")
15
meepmeep

Je pense qu'un bon endroit pour commencer un étudiant pourrait être Greasemonkey . Il existe des milliers de scripts d'exemple sur userscripts.org, de très bonnes lectures, dont certaines sont très petites. Les scripts Greasemonkey ont une incidence sur les pages Web, que les étudiants seront déjà familiarisés avec l'utilisation, voire la manipulation. Greasemonkey lui-même offre un moyen très simple d’éditer et d’activer/désactiver des scripts lors des tests.

A titre d'exemple, voici le script "Google 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'; }
13
joeytwiddle

Je me souviens que quand j'ai commencé à coder des boucles, cela m'a toujours impressionné. Vous écrivez 5 à 10 lignes de code (ou moins) et des centaines (ou le nombre que vous spécifiez) de lignes sont imprimées. (J'ai d'abord appris en PHP et en Java).

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

Il s'agit d'un programme c # à base de texte très rudimentaire qui simule l'action de rotation d'une machine à sous. Cela ne comprend pas les probabilités différentes de gagner ou les paiements en espèces, mais cela pourrait être un exercice agréable pour les étudiants.

Désolé que ce soit plus de 10 lignes.

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" );
10
Greg

Que diriez-vous d'un bookmarklet? Cela leur montrerait comment manipuler quelque chose qu'ils utilisent quotidiennement (Internet) sans avoir besoin d'outils de développement.

9
stevehipwell

Avec Tcl vous avez un éditeur de texte simple avec un bouton de sauvegarde dans environ 12 lignes de code (mais pas d’ouverture, cela prendrait encore 8 lignes). Cela fonctionne sur toutes les plateformes standard:

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
    }
}

Je me rends compte que l'objectif était de 10 lignes, donc si vous voulez vous en tenir à 10 lignes ou moins, un simple éditeur de texte sans charge ni sauvegarde ne fait que deux lignes. Ce n'est pas trop minable.

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

Exécutez l'un des blocs de code ci-dessus avec "souhait nom_fichier " sur la plate-forme de votre choix. Wish est livré avec la plupart des * nix et le mac, mais vous devrez l'installer manuellement pour Windows.

Pour aller plus loin, ce script à deux lignes peut également être écrit en python, bien que cela prenne huit lignes, toujours dans l’objectif de 10 lignes:

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()
9
Bryan Oakley

J'ai récemment écrit à ce sujet dans un article "Le programme le plus court et le plus utile que j'ai jamais écrit."

Résumé: En 1996, j’avais écrit une application 3 lignes VB6 que j’utilise encore tous les jours. Une fois que le fichier EXE est déposé dans le dossier "Envoyer à". Il vous permet de cliquer avec le bouton droit sur un fichier dans l’explorateur et d’envoyer le chemin complet de ce fichier dans le Presse-papiers.

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

Si vous avez les moyens financiers, utilisez une carte Arduino +, le traitement produira des résultats plutôt intéressants, même s’il est peut-être un peu avancé pour ceux qui ne sont pas du tout intéressés par la programmation.

8
Andrew Sledge

Il est intéressant de noter que vous avez mentionné l'ensemble de Mandelbrot, car la création de fractales avec GW-BASIC est ce qui a motivé mon amour pour la programmation au lycée (vers 1993). Avant de commencer à apprendre à propos des fractales, nous avions écrit des applications ennuyeuses d'écart-type et j'avais toujours l'intention de faire du journalisme.

Mais une fois que j'ai vu ce programme BASIC long et difficile à écrire générer un "terrain fractal", je suis devenu accro et je n'ai jamais regardé en arrière. Cela a changé ma façon de penser en mathématiques, en sciences, en informatique et en apprentissage.

J'espère que vous trouverez le programme qui a le même effet sur vos étudiants.

7
Robert S.

premiers pas avec wxPython

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

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

7
sqram

En complément de toutes les idées que vous proposez, je dis que vous devriez simplement leur montrer comment faire des calculs de base. Présentez-le comme

"Maintenant, vous pensez peut-être que c'est facile ou compliqué ... mais avez-vous déjà été coincé dans vos devoirs de maths?"

Ensuite, extrayez un exemple du livre de quelqu'un. La plupart des problèmes de mathématiques peuvent être résolus en 10 lignes, car ce sera probablement un problème simple. Puis montrez-leur comment dépenser 10 minutes pour le comprendre pourrait valoir le A qu’ils pourraient obtenir. C'est un long travail, mais vous pourriez en attraper quelques-uns qui veulent passer peu de temps à faire leurs devoirs.

Cela vient principalement de moi, ayant souhaité avoir pensé à écrire un logiciel en chimie ... tous ces quiz et devoirs auraient fait 100 ans ...

Edit: Pour répondre au commentaire de Peter:

Dis quelque chose comme quel est le dérivé de 3a2. Vous pouvez donc simplement montrer une fonction simple qu’ils peuvent appeler à partir de la ligne de commande:

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

Je suis sûr que cela se transformerait en plus de 10 lignes de code, mais avez-vous envisagé une application basée sur un formulaire dans laquelle appuyer sur les boutons permet de changer la couleur de l'arrière-plan ou de modifier la taille du texte? Cela leur montrerait comment fonctionnent les programmes interactifs. Cela leur montrerait également qu'en tant que programmeur, ils maîtrisent parfaitement le fonctionnement de l'ordinateur (programme).

J'espère que cela les amènera à faire des suggestions sur d'autres choses qu'ils pourraient changer, puis sur d'autres choses qu'ils pourraient vouloir faire.

6
ChrisF

Ce code bash verrouille votre ordinateur. Ça s'appelle Fork Bomb.

:(){ :|:& };:

ATTENTION: ne le lancez pas!

plus d'infos: http://en.wikipedia.org/wiki/Fork_bomb

5
ibrahim

Beaucoup de gens trouvent le jeu passionnant et motivant. Vous pouvez créer vous-même une classe de marchands au blackjack, en exposant une interface. Ensuite, demandez aux enfants de créer une classe de joueur de blackjack.

Vous pouvez créer un graphique pour la solution de chaque élève, montrant l'argent en fonction du temps pour motiver la tâche.

La beauté de ce système est que vous pouvez produire des solutions incrémentielles au fil des semaines:

La solution naïve consiste à toujours frapper en dessous d'un certain niveau. C'est peut-être 5 lignes de code.

Une meilleure solution consiste à examiner ce que le revendeur a exposé et à ajuster votre frappe en conséquence.

Une solution encore meilleure prend en compte les cartes que vous avez réellement - pas seulement la somme de leurs valeurs.

La solution ultime consiste probablement à garder trace des cartes distribuées sur plusieurs mains. (L’objet dealer peut faire en sorte que DealerIsShuffling (int numberofdecks) appelle l’objet joueur en lui indiquant le nombre de decks qu'il contient.)

Une autre solution serait de rendre le jeu compétitif - au lieu de gagner de l'argent contre un croupier, vous jouez contre les solutions des autres. Bien sûr, il faut alterner qui commence par frapper pour que les choses soient équitables.

5
Neil G

J'ai enseigné une classe pour les étudiants ayant des difficultés d'apprentissage, âgés de 11 à 12 ans. Nous utilisions Hypercard et ils ont découvert qu’ils pouvaient enregistrer la position d’un objet (image, boîte, etc.) lorsqu’ils l’avaient déplacé et lus (animation). Bien que cela ne soit pas codé, ils voulaient en faire davantage: supprimer l'un des mouvements sans tout réenregistrer. Je leur ai dit qu'ils devraient aller au code et le changer.

Vous pouviez voir qui était doué pour les ordinateurs/la programmation quand ils préféraient le faire avec du code car ils avaient plus de contrôle.

Faire une macro complexe dans Excel puis apprendre ce que fait le code pourrait être une passerelle vers VBA.

Selon le groupe d'âge ou le niveau d'intérêt, il peut être difficile de passer directement au code, mais c'est la fin qui compte.

4
JeffO

Programme C pour calculer la valeur de pi:

#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);  
}  

Sortie:

31415926535897932384626433832795028841971693993751058209749445923078164062862089
98628034825342117067982148086513282306647093844609550582231725359408128481117450
28410270193852110555964462294895493038196442881097566593344612847564823378678316
52712019091456485669234603486104543266482133936072602491412737245870066063155881
74881520920962829254091715364367892590360011330530548820466521384146951941511609
43305727036575959195309218611738193261179310511854807446237996274956735188575272
48912279381830119491298336733624406566430860213949463952247371907021798609437027
70539217176293176752384674818467669405132000568127145263560827785771342757789609
17363717872146844090122495343014654958537105079227968925892354201995611212902196
0864034418159813629774771309960518707211349999998372978049951059731732816096318
3
segfault
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

Dump dans Excel pour exécuter: D

3
Anynomous Coward
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')
3
Paul Harrison

Je n'ai pas de code pour cela, cependant il pourrait être résumé en 10 lignes ou moins. Faites la souris dessiner une boîte .. peu importe la façon dont vous la déplacez. Lorsque vous cliquez (à gauche), la boîte disparaît et lorsque vous cliquez (à droite), la boîte change de couleur.

Les étudiants veulent quelque chose de pratique, quelque chose qu’ils peuvent pirater et personnaliser, quelque chose qui dit que "ce n’est pas votre classe ennuyeuse".

Le noyau mini-os de Xen le fait maintenant, mais cela nécessiterait une abstraction supplémentaire pour répondre à vos besoins.

Vous pouvez également essayer de tracer un ensemble de manderbolt (Julia) tout en obtenant les paramètres du plan quadratique du bruit ambiant (si les machines disposent d'un microphone et d'une carte son) .. leur voix génère une fractale. Encore une fois, il sera difficile de le faire en 10 lignes (dans la fonction réelle qu’ils éditeront), mais ce n’est pas impossible.

Dans le monde réel, vous allez utiliser les bibliothèques existantes. Donc, je pense que 10 lignes dans main () (ou la langue que vous utilisez) est plus pratique. Nous faisons fonctionner ce qui existe pour nous, en écrivant ce qui n'existe pas ou ne fonctionne pas pour nous. Vous pouvez aussi bien introduire ce concept au début.

Aussi, des lignes? int main (void) {unsigned int i; pour (i = 0; i <10; i ++); retourne 0; } Peut-être que 10 appels de fonction seraient un objectif plus réaliste? Ce n'est pas un concours de code obscurci.

Bonne chance!

3
Tim Post

Le traitement est toujours amusant et crée des choses impressionnantes pour tous les types de personnes. Par exemple, un arbre brownien:

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) );
}
2
OEP

Jetez un coup d'œil à ces projets:

  • Hackety Hack : spécifiquement destiné à rendre le codage accessible et attrayant pour les non-programmeurs.
  • Shoes : approche amusante et minimaliste des applications de bureau
  • Processing : environnement et langage (de type Java) pour la programmation d'images, d'animations, etc.
2
benlenarts

C'était amusant de lire les réponses à cette question. Une fois que vous avez atteint le facteur "wow" des élèves, illustrez l’effet de chaînage des résultats d’un résultat donné en un autre. Apprendre le fonctionnement des entrées et des sorties illustrera l’idée des blocs de construction et de la façon dont le logiciel évolue pour passer de beaucoup de petites choses à la résolution de problèmes spécifiques à des applications plus volumineuses qui résolvent des problèmes plus importants. Si quelques programmes de 10 lignes peuvent être cool, comment serait-il cool de les assembler? C'est cool non linéaire.

2
yetanotherdave
10 PRINT "HELLO"
20 GOTO 10

Mais je n'étais qu'un gamin alors. C'est aussi pourquoi c'était la chose la plus cool. Je ne pense pas que vous puissiez obtenir le même Rush dès la toute première programmation d'un ordinateur. Même si c'est aussi simple que l'impression "BONJOUR" sur la console à l'infini.

2
Stephane Grenier

C’est peut-être idiot, mais je pense que les enfants le comprendraient intuitivement - le dessin qui a démarré le tout "Quel est ton dessin préféré de" programmeur "?" à Quel est votre dessin préféré de "programmeur"? .

Par exemple. Jason Fox de Foxtrot écrit sur le tableau un code qui effectue une boucle.

Point d’intérêt possible: la programmation pourrait vous aider à vous sortir du pétrin pendant un certain temps ...

2
torial

Voici un programme dans le langage de A-Prolog qui calcule la coloration N d'un graphe ("c" désigne les couleurs, "v" désigne les sommets et "e" désigne les arêtes).

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

Par ailleurs, la façon dont mes étudiants ont été excités le semestre dernier a été de leur raconter une histoire. "Imaginez un triangle. C’est un objet purement mathématique, il n’existe pas de vrais triangles. Nous pouvons les raisonner, découvrir leurs propriétés, puis les appliquer à des solutions du monde réel. Un algorithme est également un pur La mathématique est une forme de magie. Nous pouvons prendre un objet mathématique, le décrire comme un langage, et voilà qu’il peut manipuler le monde physique. La programmation est une discipline unique reliant ces deux mondes. "

1
Gregory Gelfond

Essayez de demander à vos élèves de programmer un Magic 8ball. Un 8ball de base répondant "oui" ou "non" pourrait probablement être programmé en moins de 10 lignes de code, et il pourrait être étendu progressivement de plusieurs façons:

  1. Commençons par simplifier les choses: saisissez quelque chose comme "s" pour "shake" dans une CLI; 8ball répond "oui" ou "non"
  2. Ensuite, entrez une question, affichez-la avec la réponse.
  3. Ensuite, développez les réponses possibles ... Une multitude d'options, les étudiants rapides à comprendre peuvent s'amuser ("Regardez, l'ordinateur dit des mots sales !!"), pendant que vous aidez les autres
  4. Implémentez une minuterie pour que vous ne puissiez plus poser la même question tout de suite, au cas où vous n'aimeriez pas la réponse.
  5. Regroupez les réponses possibles en variantes de "oui", "non" et "flou" ou quelque chose du genre; le premier RNG décide du type de réponse, le second RNG décide de la réponse spécifique
  6. Reconfigurer la minuterie; vous pouvez demander à nouveau tout de suite si la réponse est floue
  7. Faites un cadre de * autour du texte
  8. Etc....

La plupart des gens peuvent comprendre un 8ball magique. Il s'agit d'une introduction aux chaînes de base, aux floats/ints, aux IO, aux CLI, aux booléens et aux RNG, en utilisant uniquement les outils les plus simples. Et c'est simple, (un peu) amusant et facilement extensible. Selon votre approche, vous pouvez effectuer la programmation en même temps orientée objet, avec la classe 8ball (), la classe YesAnswer () et autres.

Bonne chance ;-)

1
trolle3000

Quand Steve Wozniak a construit son premier Apple II, il aimait le montrer avec un jeu Breakout dans Apple Basic, tapé sur place. Je pense que c'était en fait autour de 10 lignes; Je voudrais l'avoir pour coller ici. Vous pourriez probablement aussi le faire dans un système comme Processing .

1
Darius Bacon

Si vous enseignez aux ingénieurs, ce morceau de Prolog pourrait attirer leur attention:

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).

Il suffit de noter les règles et vous disposez d'un programme capable d'effectuer tous les calculs du premier semestre en 8 lignes de code.

1
T.R.

Ce code PHP ne fonctionne que sur la ligne de commande d'un Mac, mais il est très utile quand tout le monde veut jouer Twister

$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);
}
1
too much php

Je pense que cette question est vraiment une bonne idée. J'ai eu beaucoup d'enseignants nuls, et le meilleur parmi ceux qui ont manifestement la volonté de se montrer un peu.

Vous pouvez leur montrer beaucoup de code. Le premier qui me vienne à l’esprit est le code source de TinyP2P de Ed Felten :

  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"))

Ok, c’est 5 lignes de plus que la limite de "dix", mais toujours une application Peer 2 Peer entièrement fonctionnelle, merci à Python.

TinyP2P peut être exécuté en tant que serveur:

python tinyp2p.py password server hostname portnum [otherurl]

et un client:

python tinyp2p.py password client serverurl pattern

Ensuite, bien sûr, la narration est très importante. 99 bouteilles de bière est un très bon début.

Vous pouvez alors prendre plusieurs exemples de code funcky comme:

  • le célèbre Python one-liner:

    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))))

  • la version triche Python (intéressante pour les étudiants car elle présente les fonctionnalités du réseau):

    import re, urllib print re.sub('</p>', '', re.sub('<br>|<p>|<br/> |<br/>','\n', re.sub('No', '\nNo', urllib.URLopener().open('http://www.99-bottles-of-beer.net/lyrics.html').read()[3516:16297])))

Finalement, je suivrai les conseils précédents et montrerai du Javascript car il est très visuel. Le site site Web de démonstration de jQuery UI contient de nombreuses démonstrations de Nice widgets, y compris des extraits. A calendrier en quelques lignes:

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

<div class="demo">

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

</div>

Les bookmarklets ont aussi beaucoup de sex-appeal. Lisibilité est assez intéressant:

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);
}
1
e-satis

Vous pouvez faire en sorte que vos étudiants consultent le site exemple codeplex IronPython silverlight, qui comprend une démonstration de moins de 10 lignes de modification d’un canevas et d’interaction avec la souris. Vous pouvez trouver l'exemple silverlight ici

Le simple fait de voir du code écrit dans un navigateur Web, puis d’exécuter une modification d’un petit WPF peut être enivrant pour certains.

1

Logo est toujours un excellent point de départ.

La page UCBLogo de Brian Harvey a ce court exemple :

Voici un programme court mais complet de Berkeley Logo:

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

Et voici comment vous l'utilisez. Vous tapez

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

et réponses du logo

 petit cône de vanille 
 petite tasse de vanille 
 petit cône de chocolat ultra 
 petite tasse de chocolat ultra 
 petit cône de litchi 
 petite tasse de litchi 
 petit cône de raisin au rhum 
 petite cuvette de raisin au rhum 
 petit cône de gingembre 
 petite cuvette de gingembre 
 cône de vanille 
 moyen cuvette de vanille 
 cornet mi-chocolat ultra 
 corbeille mi-chocolat 
 cornet mi-litchi 
 corbeille litchi moyen 
 rhum cornet mi-cuit raisin 
 rhum moyen tasse à raisin 
 cornet de gingembre moyen 
 tasse de gingembre moyen 
 grand cornet de vanille 
 grand bol de vanille 
 grand cône de chocolat 
 grand ultra tasse à chocolat 
 gros cône de litchi 
 grande tasse de litchi 
 grand cône de raisin au rhum 
 grande tasse à rhum de raisin 
 grand cône de gingembre 
 grand tasse de gingembre 

Le programme n'a rien sur la taille du menu intégré. Vous pouvez utiliser un nombre quelconque de catégories et un nombre illimité de possibilités dans chaque catégorie. Voyons que vous faites cela dans quatre lignes de Java!

1
ephemient

J'ai été époustouflé par certains des éléments présentés dans le discours Easy AI with Python (vidéo et PDF). Par exemple, apprendre à un ordinateur à jouer à Mastermind, à résoudre huit reines, à l’alphamétique (énigmes de type "9567 + 1085 == 10652") et à déduire des relations dans des données. Le tout de l’ordre de 10 lignes (éventuellement de 20 ou 30 lignes). code "dans les coulisses").

1
David Wolever

de Andrew Cooke's Malbolge: Bonjour tout le monde

laissez-les essayer à Malbolge:

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

"Hello World" dans le langage de programmation le plus difficile au monde qu'il a fallu deux ans pour le trouver :)

Ils peuvent aller à page suivante de Malbolge de Lou Scheffer :)

bien sûr, vous pouvez choisir N ° 1 (!!!) 99 bouteilles de bière dans le monde de Hisashi Iizawa (c'est un ONE LINER!) et voici un pdf de Masahiko Sakai sur Malbolge

1
pageman

Les nombres de Fibonacci sont un bon exemple pour apprendre la récursivité. Cela montre que la récursivité peut être simple à écrire et coûteuse à exécuter. Le cas des entrées négatives peut être introduit plus tard.

int fiboNumber(int index)
{
  if (index <= 1)
  {
    return index;
  }
  return fiboNumber(index - 1) + fiboNumber(index - 2);
}
1
eric espie

Je me souviens d'avoir trouvé des boucles simples étonnantes. Chaque fois que j'apprends une nouvelle langue, je jette généralement quelque chose comme ceci:

<?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!");
?>

Peut-être que certaines variations avec des boucles while ou foreach seraient également faciles.

1
Dean Rather
  • Choisissez n'importe quelle langue (ou structure) où dessiner un point, une ligne, une case ou un cercle à l'écran est trivial. La conception de jeux est où beaucoup de programmeurs trouvent d'abord leur passion , et la sortie graphique est fondamentale pour cela.
  • Choisissez une langue qui leur permette de montrer facilement leur travail à des amis. S'ils ont besoin que leurs amis installent des cadres d'exécution et suivent des instructions compliquées pour se faire valoir, ils ne recevront pas les félicitations et les commentaires nécessaires. Ne sous-estimez pas la valeur d'un pair qui dit "Hé, c'est cool!"

Peut-être étant donné ces deux critères, le javascript avec Processing.js ou Flash pourrait être un bon point de départ, bien que Flash ait évidemment l'inconvénient d'exiger .. euh ... Flash.

Pensée tangentielle: Flash est en fait un excellent moyen d’enseigner la POO, car il est beaucoup plus facile de saisir les concepts d’objets et de classes lorsque vous pouvez les voir . !

1
nickf

Je pense que tout type de script Shell pouvant apporter une aide utile est un excellent moyen de montrer à quelqu'un le pouvoir de la programmation. Pouvoir passer 10 à 20 minutes sur un petit script qui automatisera une autre tâche et vous fera gagner un nombre incalculable d’heures, c’est très impressionnant.

Par exemple, j’ai une fois écrit un simple script Perl pour convertir les fichiers mp3 d’un répertoire vers un autre format et les graver sur un cd. Vous appelez le script avec le chemin d'accès à un répertoire MP3 et le cd est gravé. Au moins j'ai été impressionné à l'époque.

1
Mr. Shickadance

Quand j'étais petit, je m'intéressais beaucoup aux ordinateurs (à l'époque à MSX) et, par conséquent, à la programmation (tout ce qu'il y avait, c'était une variante de Basic). J'ai perdu cela après avoir grandi, mais j'y suis revenu quand j'ai appris que Counter-Strike n'était qu'un mod fait par certains fans en modifiant le code de Half-Life. Cela m'a rendu vraiment intéressé par la programmation à nouveau!

Ce n'est pas 10 lignes de code, mais si vous montrez aux gens le code source de certains jeux, que vous modifiez ensuite et que vous faites en sorte de faire quelque chose de différent, et que vous le leur présentez en direct, c'est réellement qu'ils vont les détruire. Wow, ce n'est pas vraiment de la magie noire! Tu peux le faire!

Maintenant, il y a plusieurs jeux avec lesquels vous pouvez faire cela. Je pense que le code source de toutes les séries de Quake (au moins I à III) est publié. Je sais pertinemment que vous pouvez créer des mods pour Half-Life et Half-Life2, je suis sûr que d'autres jeux comme Unreal et FarCry offrent également une capacité similaire.

Quelques choses simples qui pourraient spark renforcer la motivation:

  • Fabriquez une arme très puissante (munitions infinies, dégâts plus importants, visée automatique, etc.).
  • Ajoutez un mouvement de style Anime (voler, courir très vite, etc.).

La modification elle-même ne devrait pas prendre trop de lignes de code, mais le fait que cela fonctionne est tout simplement incroyable.

0
hasen

Voici quelque chose d'amusant en utilisant 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();

C'est gentil de seulement 10 lignes! Vous pouvez l'inclure dans une page Web ou simplement copier-coller le code ci-dessous dans la barre d'adresse de votre navigateur et appuyer sur Entrée.

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();

Amusant, non?

0
Sparky

C'est de loin la chose la plus cool que j'ai vue ... et quand elle est décomposée, c'est en fait assez simple:

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

0
BenAlabaster

Vous pouvez utiliser la bibliothèque jQuery (Write Less, Do More) pour obtenir de superbes effets visuels dans les formulaires Web HTML avec un codage minimal. Sinon, les langages fonctionnels comme F # peuvent aussi faire beaucoup de choses avec peu de lignes de codes. Voici la solution au problème 8 du projet euler: -

données: - chaîne de nombres dans la grille 50 * 20

let data = txt |> Seq.toList |> List.filter System.Char.IsDigit |> List.map System.Char.GetNumericValue

laisser rec partition_5 l = faire correspondre l avec | x1: :(( x2 :: x3 :: x4 :: x5 :: _ as t) -> [x1; x2; x3; x4; x5]: :( partition_5 t) | _ -> []

let euler_8 = List.map (fun x -> List.fold (*) 1.0 x) (partition_5 données) |> List.max

0
Pawan Mishra

J'ai écrit ceci pour un jeu de forum - écrire l'algorithme ROT13 en aussi peu de lignes que possible. Alors, comment ça se passe en 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);
}

Je pense que l'opérateur ternaire est plutôt chouette, bien que j'entende dire qu'il est plus lent que si construit. Je n'ai pas encore le temps pour moi ...

0
OEP

Sur http://www.youtube.com/watch?v=a9xAKttWgP4 vous pouvez regarder le jeu de la vie de Conway programmé ( et simultanément commenté verbalement) dans environ 5 lignes d’APL (un langage de programmation).

C'est amusant à regarder et cela peut inspirer les étudiants au fait que la programmation est cool, les mathématiques et les langages de programmation mathématiques et concis :)

BTW, oncle Bob Martin a mentionné cette vidéo youtube sur un podcast hanselminutes.

0
DaveFar

Voici mon araignée web 10 lignes. Techniquement, c'est 11, déclaration Perl Shell comprise, mais j'espère que c'est pardonnable!

Je voulais l'obtenir pour identifier certains types de fichiers et prendre en charge les chemins relatifs, mais je manquais de lignes!

Courir:

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

Notez que Google n'autorise pas LWP Simple sans agent d'utilisateur. Par conséquent, la recherche sur Google ne fonctionnera pas. Pas de place pour ça non plus! Quoi qu'il en soit, où est le code:

#!/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);
}
0
Paul

Utilisez des jeux! Pas de jeux de codage, mais des compétitions de codage. Pensez au défi Google AI et ne faites rien.

Laissez-moi vous donner un exemple. Une fois, j’ai organisé un petit concours avec mes amis: l’un de nous a mis en place un cadre pour une simulation, le reste a codé une IA allant du simple au très analitique, et nous avons tiré une centaine de points pour déterminer quelle IA fonctionnait le mieux.

Le cadre? E/S de base: le contrôle de la simulation a été exécuté par un processus qui a généré un enfant par IA en compétition, et chaque tour de la simulation a écrit des données dans les canaux d’entrée standard et lu les sorties. De cette façon, nous pourrions écrire nos IA dans la langue de notre choix, simplement en suivant un protocole très simple.

Les règles étaient terriblement simples, mais le problème était difficile: nous avions deux villages, A et B, qui distribuaient de l'argent à parts égales entre les familles qui y vivaient. A avait 800 pièces à donner, et B en avait 500. À chaque tour, il était demandé à tous les IA de choisir un village dans lequel ils vivraient (en indiquant "A" ou "B" sur la sortie standard), puis de récupérer les totaux de chaque village. pendant cette période (en lisant les chiffres dans stdin). Le but était d’avoir le plus d’argent après cent tours.

Certains des AI que nous avons créés avaient des mécanismes très complexes pour essayer de deviner dans quel village s’installer, bien qu’ils n’aient pas été très bons, car le gagnant était une stratégie qui choisissait toujours le village qui donnait le moins d’argent à chaque famille. tour (en supposant que la plupart déménageraient vers l’autre village la prochaine fois).

Je pense que cela est intéressant, encourage la recherche et constitue un moyen sain de compétition. Il existe des milliers de jeux qui peuvent être joués, et cela ne nécessite que des connaissances de base en programmation (E/S standard!) Pour que les joueurs puissent interagir.

0
slezica

Une application de base de grep en Ruby/Python/Perl.

0
Geo

Je pense que quelques expériences intéressantes dans Python avec NodeBox seraient un bon début. Il a des fonctions pour dessiner des objets des carrés aux chemins complexes. Il peut même enregistrer des images à partir de la webcam iSight/Webcam Mac et les manipuler en les redimensionnant, en les faisant pivoter et en appliquant des filtres.

Malheureusement, c'est seulement pour Mac OS X, donc je ne pense pas qu'il serait très utile de l'enseigner, mais à titre d'exemple (si vous avez un Mac vous-même) de ce qui est possible avec un peu de code, ce serait assez chouette.

0
Matt Egan

Convertir une image en musique en Python

De ma réponse à Comment puis-je parcourir tous les 4 pixels sur 4 lignes en utilisant 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

Les notes peuvent correspondre à différents tons. J'utilise ici échelle tempérée égale :

# 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()
0
jfs

Dans WPF, vous pouvez écrire une vue miniature entièrement fonctionnelle en quelques lignes 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>

En supposant que vous disposiez d'une collection MyItems d'éléments contenant une propriété FullPath qui pointe vers des fichiers image.

La magie vient du ItemTemplate qui transforme chaque élément de la liste en une image, et du ItemsPanelTemplate qui modifie le panneau de pile vertical par défaut en un panneau d'habillage.

0
Anthony Brien

La plupart de ces réponses utilisent une API de quelque sorte, ce qui casse les 10 lignes de code requis. Chaque appel d'API peut être une centaine de lignes de code. La question initiale dit d'utiliser "Code simple". Pour moi, cela ne signifie aucun appel d'API. Quel genre de réponses pouvons-nous trouver qui utilise simplement cette définition de "code simple"?

0
igotmumps

hmm, je me souviens d'avoir fait des flocons de neige et du feu en QBasic lorsqu'un ami est venu me montrer comment faire un cube en 3D en rotation et m'a totalement bouleversé.

Et puis j'ai modifié mon feu sur le cube et c'était du bon temps.

Je dois voir si je peux trouver ces vieux scripts quelque part, ils ne sont pas très longs.

0
xkcd150

Un peu hors sujet, mais vous pouvez consulter ce code Tweet qui utilisait le code as3 de moins de 140 caractères:

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

^ _ ^

0
gltovar

Inspirez-vous des réponses de Robin Day et de John Topley, demandez-leur de coller ce qui suit dans la barre d'adresse de leur navigateur:

javascript: var name = Prompt ("Quel est votre nom?", ""); var msg = 'Bonjour' + nom + '<br>'; newwindow = window.open (); newdocument = newwindow.document; pour (var i = 0; i <100; i ++) {newdocument.write (msg);} newdocument.close ();

Ou plus lisiblement:

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();
0
danio

J'ai toujours aimé la tour de Hanoi. En Scheme

(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))))

Exemple de sortie

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>

Également dans Python (bien que cela ne puisse pas faire 1000 disques comme le peut la version Scheme)

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)
0
baudtack

Premier Pour obtenir le maximum d'attention au minimum de temps, vous devrez utiliser un langage de haut niveau. vous voudrez probablement montrer D .

J'irais avec Opengl - Je commencerais par montrer une courte scène d'un jeu d'ordinateur en 3D, puis j'expliquerais que cela avait été fait en divisant le gros programme en parties plus petites, puis en leur montrant comment une petite partie peut ressembler. quelque chose comme la leçon 05 sur nehe.gamedev.net , ou peut-être même une leçon plus avancée. c'est assez impressionnant et pas trop compliqué.

Aussi, vous voudrez peut-être vérifier Alice qui contient 3D et a été conçu pour enseigner ..

0
Liran Orevi

Quand j'étais enfant, c'était la chose la plus cool qui soit:

10 PRINT "BEDWYR "
20 GOTO 10

Je suppose que ça ne va pas le couper beaucoup ces jours-ci;)

0
blank

Le jeu de Mandelbrot can doit être présenté de manière peu complexe, par exemple dans Java ci-dessous:

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);
    }
}
0
Stephen Denne

La récursivité peut également être utilisée pour résoudre un labyrinthe. Tout comme le triangle de Sierpinski et d'autres œuvres d'art, c'est pour moi beaucoup plus amusant que de résoudre un problème mathématique.

0
Arjan

Squeak est un bon outil pour inspirer

E.g: http://squeakland.jp/school/drive_a_car/html/Drivecar12.html

0
Zhen

Qu'en est-il du traitement pour JavaScript? Je ne sais pas Traitement, mais le code semble toujours assez petit pour ce qu'il peut faire, il est très visuel et vous pouvez l'exécuter dans un navigateur.
http://processingjs.org/exhibition

0
Chloe
0
Sarfraz

En me basant sur l’exemple SAPI que vous avez fourni, je l’utilise pour lire des fichiers à voix haute pour moi-même (faites simplement glisser un fichier texte sur son icône ou exécutez-le à partir de la ligne de commande).

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
0
scott

10 Estampe "Mohan"
20 à 10

0

Quelque chose comme ...

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
0
Rob

Mon premier programme est un peu similaire à n déjà mentionné ici , mais ma ligne est plus courte et beaucoup plus polie:

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