Подтвердить что ты не робот

Создавайте, сортируйте и печатайте список из 100 случайных ints в наименьших символах кода

Каков наименьший объем кода, который вы можете написать для создания, сортировки (по возрастанию) и печати списка из 100 случайных положительных чисел? По наименьшему количеству кода я имею в виду символы, содержащиеся во всем исходном файле, поэтому вы можете минимизировать.

Мне интересны ответы на любые языки программирования. Попробуйте сохранить один ответ на каждый язык, отредактируйте предыдущее, чтобы исправить или упростить. Если вы не можете редактировать, прокомментируйте?

4b9b3361

Ответ 1

10 символов в J:

/:~100?9e9

объяснение:

/:~ сортирует массив (технически, применяет отсортированный по спискам вектор перестановки)

x ? limit возвращает x случайных чисел меньше предела

9e9 (9000000000) - разумный верхний предел, выражаемый тремя символами.! 9 (9 факториал) меньше, но требует еще одного символа.

Ответ 3

Linux, командная строка:

% 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

Ответ 4

Моя запись:

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

или, по словам Адама в комментариях:

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

Ответ 5

С#

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: выполнена полная программа. предполагает, что новые строки и пробелы могут быть удалены, но оставлены для ясности:)

РЕДАКТИРОВАТЬ: сделал еще короче.... Я осмеливаюсь кого-то улучшить этот... Я пробовал в течение часа.

EDIT. Я думаю, что это немного короче.

РЕДАКТИРОВАТЬ. Я думаю, что еще более короче. Ух, заставьте меня остановиться.

ИЗМЕНИТЬ: Еще одна строка, еще один символ. Спорно...


Объяснение

A[100] - массив любой старой вещи - в этом случае A (это красивое короткое имя). Содержимое полностью игнорируется, это размер массива, который считается.

.Select(i=>r.Next()) - генерирует перечислимый из 100 значений r.Next().

.OrderBy(i=>i) - сортирует предыдущий порядок.

.ToList() - преобразовать отсортированный список int в список, поэтому мы можем использовать ForEach.

ForEach(Console.WriteLine) - вызовите Console.WriteLine 100 раз, передавая каждое целочисленное значение в списке.

Ответ 6

Mathematica, 28 символов

[email protected][2^32, 100]

Это дает 100 (отсортированных) случайных чисел в {0,..., 2 ^ 32}.

Ответ 7

Общий Lisp, int между 0 и 10000 (для этого нет верхней границы, но вы должны выбрать один).

(sort (loop repeat 100 collect (random 10000)) #'<)

Ответ 8

АПЗ

13 символов:

a[⍋a←100?9e8]

Ответ 9

Попытка в рубине:

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

(с восемью меньшими символами, но требующими пустельгу tap Ruby 1.9)

-в рубине 1.8:

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

30 символов. (можно обрезать на 2, вернувшись к 9e9, но комментарий в вопросе говорит, что диапазон должен быть MaxInt32.

Ответ 10

F #

let r = new System.Random();;

[ for i in 0..100 -> r.Next()] |> List.sort (fun x y -> x-y);;

Ответ 11

Haskell:

import Random
import List
main=newStdGen>>=print.sort.(take 100).randomRs(0,2^32)

Ответ 12

В BASH:

for i in `seq 100`; do echo $RANDOM; done | sort -n

Ответ 13

Python для печати 100 случайных, отсортированных целых чисел

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

@Adam уже избил меня, но я думал, что использование randint() и sys.maxint было достаточно различным для публикации в любом случае.

Ответ 14

APL (интерактивный):

Если вы хотите, чтобы числа 0-99 (или 1-100, в зависимости от того, имеет ли источник индекса в вашей рабочей области значение 0 или 1), должны быть уникальными, он принимает 8 символов, например:

↑100?100

Если вы не заботитесь о уникальности, сделайте это (9 символов):

↑?100ρ100

Хотите больших чисел? Просто замените свой верхний предел, N, для второго 100 на каждой строке, и ваши случайные числа будут находиться в диапазоне 0 - N-1 (или 1-N, если для начала индекса установлено значение 1).

Если вы хотите гарантировать, что ваши номера колеблются от 0 до 99 (или 0 - N-1, если вы собираетесь увеличить верхний предел), независимо от установки источника индекса, просто заключите одну из вышеуказанных строк в круглые скобки и добавьте

-⎕IO

до конца (где ⎕ - четырехзначный символ APL). Это дополнительные 6 символов.

Ответ 15

Javascript: (через JSDB или Mozilla Rhino, используемый в режиме оболочки)

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

Здесь полный тестовый прогон:

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: похоже, я могу сократить несколько символов прямым назначением, а не "push", и мне не нужен {} s:

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

Ответ 16

Powershell:

35 символов (с расширениями сообщества PowerShell, которые заменяют Get-Random):

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

20 символов (простой PowerShell v2):

0..99|%{random}|sort

Ответ 17

Perl, полный 8 байтов короче, чем версия nrich, и работает под "предупреждением использования";:)

perl -wle "$,=' ';print sort map {int rand 100} 1..100"

Ответ 18

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

Ответ 19

groovy:

r=new Random()
List l=[]
100.times{ l << r.nextInt(1000) }
l.sort().each { println it }

Ответ 20

Windows BATCH: 160. Это добавляет начальный ноль к номерам, но в противном случае сортировка немного перепутана (потому что сортировка сортируется по символам - она ​​ничего не знает о номерах).

@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%

Как однострочный и более короткий (72):

cmd/v/c"for /l %x in (0,1,99)do @(set x=0000!RANDOM!&echo !x:~-5!)"|sort

Ответ 21

Clojure

(defn gen-rands []
(sort (take 100 (repeatedly #(rand-int Integer/MAX_VALUE)))))

Ответ 22

В OCaml:

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

Изменить: в OCaml введите, что в верхнем слое будет распечатываться список, но если вы хотите, чтобы список печатался на 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));;

Ответ 23

С#:

using System;
using System.Collections.Generic;

class App
{
  static void Main()
  {
    List<int> TheList = new List<int>();
    Random r = new Random();
    for ( int i = 0; i < 10; i++ )
      TheList.Add(r.Next());
    TheList.Sort();
    foreach ( int i in TheList )
      Console.WriteLine(i);
  }
}

Если вы собираетесь использовать сырое количество символов, вы можете сжать это немного больше. Но в основном это так.

Изменить: Попытка 2:

using System;

class App
{
  static void Main()
  {
    Random r= new Random();
    for ( int i = 0, j=0; i < 100; i++ )
      Console.WriteLine(j+=r.Next(int.MaxValue/100));
  }
}

Ответ 24

Python (интерактивный):

import random
[int(9*random.random())]

Что? Он создает список одного случайного целого, сортирует его (тривиально) и распечатывает его.

Хорошо, здесь серьезный ответ

import random
sorted([int(9*random.random()) for x in range(9)])

Он генерирует 9 случайных чисел в [0, 9), сортирует их и печатает их (в интерактивной оболочке).

И здесь более короткий вариант, который на самом деле создает 100:

from random import*
sorted(randint(0,9)for x in' '*100)

Ответ 25

Tcl мертв.

Долгое время tcl.

Создает список длины RANDOM (0-99) и помещает в него числа RANDOM (0-99).

Также печатает на экране и может выполняться точно так, как показано в файле tcl, или в оболочке 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 тоже хорош.

полностью подтверждает


<?
for($i=100;$i--;$l[]=rand());
sort($l);
print_r($l);

Ответ 26

mzscheme -e "(sort (build-list 100 (λ x (random 9))) <)"

Он сказал наименьшие символы, а не наименьшие байты. =)

Ответ 27

С#

Если вы согласны с ограничением размера массива, то:

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

В противном случае можно было бы сделать менее строгий (но немного более подробный) угол:

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

Хорошо, я думаю, что это последний раз, когда я возвращаюсь к этому...

116 символов:

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

Ответ 28

С++ не подходит для этого задания, но здесь идет:

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

Ответ 29

mackenir: улучшение на 7 символов:

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

Ответ 30

С++ с boost. Слишком плохо, что #include уже половина всего текста:)

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