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?
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.
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
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
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.
Mathematica, 28 caractères
Sort@RandomInteger[2^32, 100]
qui donne 100 entiers aléatoires (triés) dans {0,..., 2^32}.
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)) #'<)
F#
let r = new System.Random();;
[ for i in 0..100 -> r.Next()] |> List.sort (fun x y -> x-y);;
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.
Haskell:
import Random
import List
main=newStdGen>>=print.sort.(take 100).randomRs(0,2^32)
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();
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.
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.
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
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"
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);
}
}
groovy:
r=new Random()
List l=[]
100.times{ l << r.nextInt(1000) }
l.sort().each { println it }
Clojure
(defn gen-rands []
(sort (take 100 (repeatedly #(rand-int Integer/MAX_VALUE)))))
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));;
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
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++]));
}
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 );
}
}
}
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"));
}
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()));
}
}
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]);}
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);
}
}
mzscheme -e "(sort (build-list 100 (λ x (random 9))) <)"
dit-il les moindres caractères, pas les moindres octets. = )
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);