Créer, trier et imprimer une liste de 100 aléatoire ints dans le moins de caractères de code

Quelle est la plus petite quantité de code que vous pouvez écrire pour créer, trier (ascendant), et imprimer une liste de 100 entiers aléatoires positifs? Par moins de code, je veux dire les caractères contenus dans le fichier source entier, donc allez à la miniature.

je suis intéressé à voir les réponses en utilisant tous les langages de programmation. Essayons de garder une réponse par langue, éditons la précédente pour corriger ou simplifier. Si vous ne pouvez pas éditer, comment?

21
demandé sur TheSoftwareJedi 2008-12-09 00:01:57

30 réponses

10 caractères en J:

/:~100?9e9

explication:

/:~ trie un tableau (techniquement, applique un vecteur de permutation des listes triées à lui-même)

x ? limit retourne x nombres aléatoires inférieurs à la limite

9e9 (9000000000) est une limite supérieure raisonnable exprimable en 3 caractères. !9 (9 factoriel) est plus petit, mais nécessite un caractère de moins.

50
répondu Jimmy 2008-12-09 01:10:28

xkcd style en PHP:

for($i=0;$i<100;$i++) echo "4\n";
25
répondu clawr 2008-12-23 22:44:45

Linux, ligne de commande:

% od -dAn -N40 /dev/random | tr ' ' '\n' | sort -nu
4959
6754
8133
10985
11121
14413
17335
20754
21317
30008
30381
33494
34935
41210
41417
43054
48254
51279
54055
55306
17
répondu adl 2008-12-08 21:16:36

mon entrée:

echo enter a bunch of ints, hit control-D when done
cat - | sort -n

ou, par Adam dans les commentaires:

echo enter a bunch of ints, hit control-D when done
sort -n
8
répondu Paul Tomblin 2008-12-09 13:24:25

C#

using System;
using System.Linq;
class A {
    static void Main() {
        var r=new Random();
        new A[100].Select(i=>r.Next()).OrderBy(i=>i).ToList().ForEach(Console.WriteLine);
    }
}

EDIT : programme complet. suppose des retours à la ligne et les espaces peuvent être supprimés, mais la gauche en pour plus de clarté :)

EDIT : encore plus court.... J'ose quelqu'un pour améliorer celui-ci... J'ai essayé pendant une heure.

EDIT : je pense que c'est un peu plus court.

MODIFIER : je pense que c'est encore plus courte. Ugh, fais-moi arrêter.

EDIT : une ligne de plus, un caractère de moins. Discutable...


explication

A[100] - un tableau de n'importe quelle chose ancienne - dans ce cas A ' s (c'est un nom court agréable). Le contenu est complètement ignoré, c'est la taille du tableau qui compte.

.Select(i=>r.Next()) - génère un énumérable de 100 valeurs de R. Next ().

.OrderBy(i=>i) - trie le précédent dans l'ordre.

.ToList() - convertir l'énumérable trié de int à une liste, de sorte que nous pouvons utiliser ForEach.

ForEach(Console.WriteLine) - Console d'appel.WriteLine 100 fois, en passant dans chaque valeur entière dans la liste.

8
répondu mackenir 2009-08-04 14:31:26

Mathematica, 28 caractères

Sort@RandomInteger[2^32, 100]

qui donne 100 entiers aléatoires (triés) dans {0,..., 2^32}.

7
répondu dreeves 2009-01-04 07:32:47

Common Lisp, int entre 0 et 10000 (il n'y a pas de limite, mais vous devez en choisir un).

(sort (loop repeat 100 collect (random 10000)) #'<)
6
répondu Pål GD 2008-12-08 21:56:16

APL

13 caractères:

a[⍋a←100?9e8]
6
répondu Fernando Martin 2011-06-29 01:30:42

F#

let r = new System.Random();;

[ for i in 0..100 -> r.Next()] |> List.sort (fun x y -> x-y);;
5
répondu Kalle 2008-12-09 14:24:17

Une tentative en ruby:

p [].tap{|a|100.times{a<<rand(9e9)}}.sort

(avec huit caractères de moins, mais nécessitant le tap kestrel de Ruby 1.9)

- pour ruby 1.8:

p (0..?d).map{rand 1<<32}.sort

30 caractères. (pourrait couper par 2 en changeant de nouveau à 9e9, mais le commentaire en question dit que la gamme devrait être MaxInt32.

5
répondu georg 2008-12-23 00:28:02

Haskell:

import Random
import List
main=newStdGen>>=print.sort.(take 100).randomRs(0,2^32)
5
répondu hiena 2010-02-25 02:38:15

Dans BASH:

for i in `seq 100`; do echo $RANDOM; done | sort -n
4
répondu Pål GD 2008-12-08 23:57:04

Javascript: (via JSDB ou Mozilla Rhino utilisé en mode shell)

x=[];for(i=0;i<100;i++){x.push((Math.random()+"").slice(-8));};x.sort();

voici un essai complet:

c:\>java org.mozilla.javascript.tools.shell.Main
Rhino 1.7 release 1 2008 03 06
js> x=[];for(i=0;i<100;i++){x.push((Math.random()+"").slice(-8));};x.sort();
01499626,02403545,02800791,03320788,05748566,07789074,08998522,09040705,09115996,09379424,10940262,11743066,13806434,14113139,14336231,14382956,15581655,16573104,20043435,21234726,21473566,22078813,22378284,22884394,24241003,25108788,25257883,26286262,28212011,29596596,32566749,33329346,33655759,34344559,34666071,35159796,35310143,37233867,37490513,37685305,37845078,38525696,38589046,40538689,41813718,43116428,43658007,43790468,43791145,43809742,44984312,45115129,47283875,47415222,47434661,54777726,55394134,55798732,55969764,56654976,58329996,59079425,59841404,60161896,60185483,60747905,63075065,69348186,69376617,69680882,70145733,70347987,72551703,73122949,73507129,73609605,73979604,75183751,82218859,83285119,85332552,85570024,85968046,86236137,86700519,86974075,87232105,87839338,88577428,90559652,90587374,90916279,90934951,94311632,94422663,94788023,96394742,97573323,98403455,99465016

edit: regarde comme je peux le raccourcir un peu caractères par affectation directe plutôt que de "pousser", et je n'ai pas besoin de la {}s:

x=[];for(i=0;i<100;i++)x[i]=(Math.random()+"").slice(-8);x.sort();
3
répondu Jason S 2008-12-09 13:55:25

Python pour imprimer 100 aléatoire, triés entiers

import random,sys
print sorted(random.randint(1,sys.maxint)for x in range(100))

@Adam déjà me battre pour elle, mais j'ai pensé à l'aide de randint() et sys.exemple maxint était suffisamment différentes pour poste de toute façon.

3
répondu Jay 2017-05-23 12:22:17

APL (interactive):

si vous voulez que les nombres 0-99 (ou 1-100, selon que vous avez l'origine de l'index dans votre espace de travail mis à 0 ou 1) pour être unique, il faut 8 caractères, comme ainsi:

↑100?100

Si vous ne se soucient pas de l'unicité, de le faire (9 caractères):

↑?100ρ100

vous voulez un plus grand nombre? Il suffit de substituer votre supérieur limitez, N, pour le second 100 sur chaque ligne, et vos nombres aléatoires seront dans l'intervalle 0 - N-1 (ou 1-N Si votre index d'origine est réglé à 1).

si vous voulez garantir que vos nombres vont de 0-99 (ou 0 - N-1 si vous allez pour une limite supérieure plus grande) quel que soit le paramètre d'origine de l'index, il suffit de mettre l'une des lignes ci-dessus entre parenthèses et ajouter

-⎕IO

jusqu'à la fin (où le caractère quad de l'APL est attesté par le p. c. a.). C'est 6 caractères supplémentaires.

3
répondu RobH 2010-07-09 09:08:52

Powershell :

(35 caractères (avec PowerShell Communauté des Extensions, qui remplace Get-Random ):

0..99|%{[int]((random)*10000)}|sort

20 caractères (plaine de PowerShell v2):

0..99|%{random}|sort
3
répondu Јοеу 2010-07-09 14:57:36

Perl, 8 octets de moins que nrich version, et fonctionne sous "l'utilisation de mises en garde," :)

perl -wle "$,=' ';print sort map {int rand 100} 1..100"
2
répondu user42092 2008-12-08 21:38:21

Java:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

class Rnd {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>(100);
        for (int i = 0; i < 100; i++) list.add(new Random().nextInt());
        Collections.sort(list);
        System.out.println(list);
    }
}
2
répondu Pål GD 2008-12-08 21:52:44

groovy:

r=new Random()
List l=[]
100.times{ l << r.nextInt(1000) }
l.sort().each { println it }
2
répondu Ray Tayek 2008-12-08 23:24:02

Clojure

(defn gen-rands []
(sort (take 100 (repeatedly #(rand-int Integer/MAX_VALUE)))))
2
répondu Chris Bunch 2008-12-24 00:25:27

En OCaml:

List.sort compare (let rec r = function 0 -> [] | a -> (Random.int 9999)::(r (a-1)) in r 100);;

Modifier: dans OCaml dactylographier que dans le niveau supérieur imprimera la liste, mais si vous voulez que la liste imprimée à stdout:

List.iter (fun x -> Printf.printf "%d\n" x) (List.sort compare (let rec r = function 0 -> [] | a -> (Random.int 9999)::(r (a-1)) in r 100));;
2
répondu Niki Yoshiuchi 2009-07-31 17:43:41

Windows BATCH: 160. Cela ajoute un zéro menant aux nombres, mais autrement le tri est un peu confus (parce que le tri trie par les caractères - il ne sait rien au sujet des nombres).

@echo off
set n=%random%.tmp
call :a >%n%
type %n%|sort
del /Q %n%
exit /B 0
:a
for /L %%i in (1,1,100) do call :b
exit /B 0
:b
set i=00000%random%
echo %i:~-5%

comme une doublure et une voie plus courte (72):

cmd/v/c"for /l %x in (0,1,99)do @(set x=0000!RANDOM!&echo !x:~-5!)"|sort
2
répondu Paulius 2010-07-09 15:14:00

C++ n'est pas le bon outil pour ce travail, mais voici:

#include <algorithm>
#include <stdio.h>

#define each(x) n=0; while(n<100) x

int main()
{
     int v[100], n;
     srand(time(0));
     each(v[n++]=rand());
     std::sort(v, v+100);
     each(printf("%d\n",v[n++]));
}
1
répondu csl 2008-12-09 14:55:38

mackenir: une amélioration de 7 caractères:

namespace System.Linq {
    class A {
        static void Main() {
            var r = new Random();
            new A[100].Select( i => r.Next() ).OrderBy( i => i ).ToList().ForEach( Console.WriteLine );
        }
    }
}
1
répondu samael 2008-12-23 01:36:36

C++ boost. Dommage que #include sont déjà la moitié de tout le texte :)

#include <boost/bind.hpp>
#include <algorithm>
#include <vector>
#include <iterator>
#include <cstdlib>
int main() {
    using namespace std;
    vector<int> a(100);
    transform(a.begin(), a.end(), a.begin(), boost::bind(&rand));
    sort(a.begin(), a.end());
    copy(a.begin(), a.end(), ostream_iterator<int>(cout, "\n"));
}
1
répondu Johannes Schaub - litb 2009-01-03 03:00:18

c#

si vous êtes d'accord pour imposer une limite à la taille du tableau alors:

Array.ForEach(Guid.NewGuid().ToByteArray().OrderBy(c => c).ToArray(), c => Console.WriteLine(c));

sinon, un angle moins restrictif (mais légèrement plus verbeux) pourrait être pris:

var r = new Random();
(new int[100]).Select(i => r.Next()).OrderBy(i => i).ToList().ForEach(Console.WriteLine);

OK, je pense que c'est la dernière fois que je reviens à celle-ci...

116 caractères :

using System;
class A
{
    static void Main()
    {
        var r=new Random();
        var n=1D;
        for(int i=0;i<100;i++,Console.WriteLine(n+=r.Next()));
    }
}
1
répondu BenAlabaster 2009-01-04 06:41:09

Vieux code C en 167 caractères:

main(){int i=100,x[i],n=i;while(i)x[--i]=rand();for(i=0;i<n;i++){int b=x[i],m=i,j=0;for(;j<n;j++)if(x[j]<x[m])m=j;x[i]=x[m];x[m]=b;}i=n;while(i)printf("%d ",x[--i]);}
1
répondu Roman Glass 2009-06-28 02:15:25

Java, encore

import java.util.*;
class R
{
    public static void main(String[]a)
    {
        List x=new Stack();
        while(x.size()<100)x.add((int)(Math.random()*9e9));
        Collections.sort(x);
        System.out.print(x);
    }
}

je ne pense pas qu'elle peut être raccourcie que cela.. j'ai aussi découpé les espaces inutiles.

LE: oh oui c'est possible :) inspiré par ding post..

import java.util.*;
class R
{
    public static void main(String[]a)
    {
        Set x=new TreeSet();
        while(x.size()<100)x.add((int)(Math.random()*9e9));
        System.out.print(x);
    }
}
1
répondu 2 revsalex 2009-06-28 03:57:10
mzscheme -e "(sort (build-list 100 (λ x (random 9))) <)"

dit-il les moindres caractères, pas les moindres octets. = )

1
répondu Henk 2009-07-31 16:35:17

Tcl est mort.

vive tcl.

crée une liste de longueur aléatoire (0-99) et y met des entiers aléatoires (0-99).

permet Également d'imprimer à l'écran et peut être exécuté exactement comme indiqué dans un fichier tcl, ou le shell tcl.

set l {}
proc r {} {expr { int(floor(rand()*99)) }}
for {set i 0} {$i<[r]} {incr i} {lappend l [r]}
puts [lsort -integer $l]

PHP est sympa aussi.

, confirme complètement à l'exercice


<?
for($i=100;$i--;$l[]=rand());
sort($l);
print_r($l);
1
répondu Byron Whitlock 2009-07-31 18:24:17