Гольф кода 4-го июля выпуск: подсчет лучших десяти происходящих слов

Для Усечения файла журнала:

  • Резервное копирование база данных
  • Отсоединение база данных, или при помощи Руководителя предприятия или путем выполнения: Sp_DetachDB [DBName]
  • Удаляют файл журнала транзакций. (или переименуйте файл, на всякий случай)
  • Повторное прикрепление база данных снова с помощью: Sp_AttachDB [DBName]
  • , Когда база данных присоединяется, новый файл журнала транзакций, создается.

Для Уменьшения файла журнала:

  • Журнал резервного копирования [DBName] с Уменьшением No_Log
  • база данных также:

    Используя Руководителя предприятия:-Щелчок правой кнопкой по базе данных, Всем задачам, базе данных Shrink, Файлам, Избранному файлу журнала, хорошо.

    Используя T-SQL:-Dbcc Shrinkfile ([Log_Logical_Name])

можно найти логическое имя файла журнала путем выполнения sp_helpdb или путем взгляда в свойствах базы данных в Руководителе предприятия.

11
задан 9 revs, 4 users 100% 13 August 2009 в 22:51
поделиться

17 ответов

Укороченная версия оболочки:

xargs -n1 < input.txt | sort | uniq -c | sort -nr | head

Если вы хотите ранжирование без учета регистра, замените uniq -c на uniq -ci .

Еще немного короче, если вы довольны изменением ранга и ухудшением читабельности из-за отсутствия пробелов. Это синхронизируется с 46 символами:

xargs -n1<input.txt|sort|uniq -c|sort -n|tail

(Вы могли бы сократить это до 38, если бы вам было разрешено сначала переименовать входной файл в просто «i».)

Обратите внимание, что в этом особом случае больше не встречается ни одного слова более 9 раз мы можем сократить еще 3 символа, отбросив аргумент '-n' из окончательной сортировки:

xargs -n1<input.txt|sort|uniq -c|sort|tail

Это сокращает это решение до 43 символов без переименования входного файла. (Или 35, если вы это сделаете.)

Использование xargs -n1 для разделения файла на одно слово в каждой строке предпочтительнее решения tr \ \\ n , так как это создает много пустых строк. Это означает, что решение неверное, потому что в нем отсутствует Никсон и 256 раз отображается пустая строка. Однако пустая строка - это не «слово».

11
ответ дан 3 December 2019 в 00:43
поделиться

Редакция предыдущей записи , которая должна сохранить 10 символов:

h = {}
File.open('f.1').each {|l|l.split(/ /).each{|e|h[e]==nil ?h[e]=1:h[e]+=1}}
h.sort{|a,b|a[1]<=>b[1]}.last(10).each{|e|puts"#{e[1]} #{e[0]}"}
2
ответ дан 3 December 2019 в 00:43
поделиться

Perl 86 символов

94, если вы посчитаете входное имя файла.

perl -anE'$_{$_}++for@F;END{say"$_{$_} $_"for@{[sort{$_{$b}<=>$_{$a}}keys%_]}[0..10]}' test.in

Если вам все равно, сколько результатов вы получите, то это только 75, не считая filename.

perl -anE'$_{$_}++for@F;END{say"$_{$_} $_"for sort{$_{$b}<=>$_{$a}}keys%_}' test.in
2
ответ дан 3 December 2019 в 00:43
поделиться

python 3.1 (88 символов)

import collections
collections.Counter(open('input.txt').read().split()).most_common(10)
2
ответ дан 3 December 2019 в 00:43
поделиться

Python 2.6, 104 символов:

l=open("input.txt").read().split()
for c,n in sorted(set((l.count(w),w) for w in l if w))[-10:]:print c,n
2
ответ дан 3 December 2019 в 00:43
поделиться

vim 38 и работает для всех входных данных

:%!xargs -n1|sort|uniq -c|sort -n|tail
2
ответ дан 3 December 2019 в 00:43
поделиться

Моя лучшая попытка с рубином, 166 символов:

h = Hash.new
File.open('f.l').each_line{|l|l.split(/ /).each{|e|h[e]==nil ?h[e]=1:h[e]+=1}}
h.sort{|a,b|a[1]<=>b[1]}.last(10).each{|e|puts"#{e[1]} #{e[0]}"}

Я удивлен, что никто еще не опубликовал безумное решение J.

2
ответ дан 3 December 2019 в 00:43
поделиться

Vim 36

:%s/\W/\r/g|%!sort|uniq -c|sort|tail
7
ответ дан 3 December 2019 в 00:43
поделиться

Haskell, 102 символа (вау, так близко к оригиналу):

import List
(take 10.map snd.sort.map(\(x:y)->(-length y,x)).group.sort.words)`fmap`readFile"input.txt"

J , всего 55 символов:

10{.\:~~.(,.~[:<"0@(+/)=/~);;:&.><;._2[1!:1<'input.txt'

(мне еще предстоит выяснить, как элегантно выполнять манипуляции с текстом в J ... он намного лучше работает с данными, структурированными в виде массива.)


   NB. read the file
   <1!:1<'input.txt'
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...
|    Washington     Washington     Adams     Jefferson     Jefferson     Madison     Madison     Monroe     Monroe     John Quincy Adams     Jackson     Jackson     Van Buren     Harrison DIES     Tyler     Polk     Taylor DIES     Fillmore     Pierce     ...
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...
   NB. split into lines
   <;._2[1!:1<'input.txt'
+--------------+--------------+---------+-------------+-------------+-----------+-----------+----------+----------+---------------------+-----------+-----------+-------------+-----------------+---------+--------+---------------+------------+----------+----...
|    Washington|    Washington|    Adams|    Jefferson|    Jefferson|    Madison|    Madison|    Monroe|    Monroe|    John Quincy Adams|    Jackson|    Jackson|    Van Buren|    Harrison DIES|    Tyler|    Polk|    Taylor DIES|    Fillmore|    Pierce|    ...
+--------------+--------------+---------+-------------+-------------+-----------+-----------+----------+----------+---------------------+-----------+-----------+-------------+-----------------+---------+--------+---------------+------------+----------+----...
   NB. split into words
   ;;:&.><;._2[1!:1<'input.txt'
+----------+----------+-----+---------+---------+-------+-------+------+------+----+------+-----+-------+-------+---+-----+--------+----+-----+----+------+----+--------+------+--------+-------+-------+----+-------+-----+-----+-----+--------+----+------+---...
|Washington|Washington|Adams|Jefferson|Jefferson|Madison|Madison|Monroe|Monroe|John|Quincy|Adams|Jackson|Jackson|Van|Buren|Harrison|DIES|Tyler|Polk|Taylor|DIES|Fillmore|Pierce|Buchanan|Lincoln|Lincoln|DIES|Johnson|Grant|Grant|Hayes|Garfield|DIES|Arthur|Cle...
+----------+----------+-----+---------+---------+-------+-------+------+------+----+------+-----+-------+-------+---+-----+--------+----+-----+----+------+----+--------+------+--------+-------+-------+----+-------+-----+-----+-----+--------+----+------+---...
   NB. count reptititions
   |:~.(,.~[:<"0@(+/)=/~);;:&.><;._2[1!:1<'input.txt'
+----------+-----+---------+-------+------+----+------+-------+---+-----+--------+----+-----+----+------+--------+------+--------+-------+-------+-----+-----+--------+------+---------+--------+---------+----+------+-------+--------+------+---+------+------...
|2         |2    |2        |2      |2     |1   |1     |2      |1  |1    |2       |6   |1    |1   |1     |1       |1     |1       |2      |3      |2    |1    |1       |1     |2        |2       |2        |1   |2     |1      |1       |1     |4  |2     |2     ...
+----------+-----+---------+-------+------+----+------+-------+---+-----+--------+----+-----+----+------+--------+------+--------+-------+-------+-----+-----+--------+------+---------+--------+---------+----+------+-------+--------+------+---+------+------...
|Washington|Adams|Jefferson|Madison|Monroe|John|Quincy|Jackson|Van|Buren|Harrison|DIES|Tyler|Polk|Taylor|Fillmore|Pierce|Buchanan|Lincoln|Johnson|Grant|Hayes|Garfield|Arthur|Cleveland|McKinley|Roosevelt|Taft|Wilson|Harding|Coolidge|Hoover|FDR|Truman|Eisenh...
+----------+-----+---------+-------+------+----+------+-------+---+-----+--------+----+-----+----+------+--------+------+--------+-------+-------+-----+-----+--------+------+---------+--------+---------+----+------+-------+--------+------+---+------+------...
   NB. sort
   |:\:~~.(,.~[:<"0@(+/)=/~);;:&.><;._2[1!:1<'input.txt'
+----+---+-------+----+------+----------+------+---------+------+-----+------+--------+-------+-------+---------+-------+--------+-----+----------+-------+---------+-----+---+-----+------+----+------+----+------+-----+-------+----+------+-----+-------+----...
|6   |4  |3      |3   |2     |2         |2     |2        |2     |2    |2     |2       |2      |2      |2        |2      |2       |2    |2         |2      |2        |2    |1  |1    |1     |1   |1     |1   |1     |1    |1      |1   |1     |1    |1      |1   ...
+----+---+-------+----+------+----------+------+---------+------+-----+------+--------+-------+-------+---------+-------+--------+-----+----------+-------+---------+-----+---+-----+------+----+------+----+------+-----+-------+----+------+-----+-------+----...
|DIES|FDR|Johnson|Bush|Wilson|Washington|Truman|Roosevelt|Reagan|Nixon|Monroe|McKinley|Madison|Lincoln|Jefferson|Jackson|Harrison|Grant|Eisenhower|Clinton|Cleveland|Adams|Van|Tyler|Taylor|Taft|Quincy|Polk|Pierce|Obama|Kennedy|John|Hoover|Hayes|Harding|Garf...
+----+---+-------+----+------+----------+------+---------+------+-----+------+--------+-------+-------+---------+-------+--------+-----+----------+-------+---------+-----+---+-----+------+----+------+----+------+-----+-------+----+------+-----+-------+----...
   NB. take 10
   10{.\:~~.(,.~[:<"0@(+/)=/~);;:&.><;._2[1!:1<'input.txt'
+-+----------+
|6|DIES      |
+-+----------+
|4|FDR       |
+-+----------+
|3|Johnson   |
+-+----------+
|3|Bush      |
+-+----------+
|2|Wilson    |
+-+----------+
|2|Washington|
+-+----------+
|2|Truman    |
+-+----------+
|2|Roosevelt |
+-+----------+
|2|Reagan    |
+-+----------+
|2|Nixon     |
+-+----------+
5
ответ дан 3 December 2019 в 00:43
поделиться

Perl: 90

Perl: 114 (включая perl, параметры командной строки, одинарные кавычки и имя файла)

perl -nle'$h{$_}++for split/ /;END{$i++<=10?print"$h{$_} $_":0for reverse sort{$h{$a}cmp$h{$b}}keys%h}' input.txt
3
ответ дан 3 December 2019 в 00:43
поделиться

vim 60

    :1,$!tr " " "\n"|tr -d "\t "|sort|uniq -c|sort -n|tail -n 10
7
ответ дан 3 December 2019 в 00:43
поделиться

Вот сжатая версия сценария оболочки с учетом того, что для разумной интерпретации входных данных (без начальных или конечных пробелов) вторая команда tr и sed в оригинале не изменяет данные (проверяется вставкой ' tee out.N 'в подходящих точках и проверка размеров выходного файла - идентичны). Оболочке нужно меньше пробелов, чем людям - и использование cat вместо перенаправления ввода / вывода приводит к пустой трате места.

tr \  \\n<input.txt|sort|uniq -c|sort -n|tail -10

Это весит 50 символов, включая новую строку в конце скрипта.

С двумя дополнительными наблюдениями (взятыми из других людей) ответы):

  1. tail сам по себе эквивалентен ' tail -10 ', и
  2. в этом случае числовая и альфа-сортировка эквивалентны,

это можно уменьшить еще на 7 символов (до 43, включая завершающую новую строку):

tr \  \\n<input.txt|sort|uniq -c|sort|tail

Используя ' xargs -n1 ' (без заданного префикса команды) вместо ' tr ' чрезвычайно умен; он имеет дело с начальными, конечными и множественными вложенными пробелами (чего нет в этом решении).

2
ответ дан 3 December 2019 в 00:43
поделиться

C #, 153:

Считывает файл по адресу p и выводит результаты на консоль:

File.ReadLines(p)
    .SelectMany(s=>s.Split(' '))
    .GroupBy(w=>w)
    .OrderBy(g=>-g.Count())
    .Take(10)
    .ToList()
    .ForEach(g=>Console.WriteLine(g.Count()+"|"+g.Key));

Если просто создается список, но не выводится на консоль , это 93 символа.

6|DIES
4|FDR
3|Johnson
3|Bush
2|Washington
2|Adams
2|Jefferson
2|Madison
2|Monroe
2|Jackson
12
ответ дан 3 December 2019 в 00:43
поделиться

Отсутствие AWK вызывает беспокойство.

xargs -n1<input.txt|awk '{c[$1]++}END{for(p in c)print c[p],p|"sort|tail"}'

75 символов.

Если вы хотите получить немного больше AWKy, вы можете забыть xargs:

awk -v RS='[^a-zA-Z]' /./'{c[$1]++}END{for(p in c)print c[p],p|"sort|tail"}' input.txt
3
ответ дан 3 December 2019 в 00:43
поделиться

Ruby 66B

puts (a=$<.read.split).uniq.map{|x|"#{a.count x} "+x}.sort.last 10
2
ответ дан 3 December 2019 в 00:43
поделиться

Ruby

115 chars

w = File.read($*[0]).split
w.uniq.map{|x| [w.select{|y|x==y}.size,x]}.sort.last(10).each{|z| puts "#{z[1]} #{z[0]}"}
2
ответ дан 3 December 2019 в 00:43
поделиться

Пакет для Windows Файл

Это явно не самое маленькое решение, но я все равно решил выложить его, просто для удовольствия. :) NB: командный файл использует временный файл с именем $ для хранения временных результатов.

Исходная несжатая версия с комментариями:

@echo off
setlocal enableextensions enabledelayedexpansion

set infile=%1
set cnt=%2
set tmpfile=$
set knownwords=

rem Calculate word count
for /f "tokens=*" %%i in (%infile%) do (
  for %%w in (%%i) do (

    rem If the word hasn't already been processed, ...
    echo !knownwords! | findstr "\<%%w\>" > nul
    if errorlevel 1 (

      rem Count the number of the word's occurrences and save it to a temp file
      for /f %%n in ('findstr "\<%%w\>" %infile% ^| find /v "" /c') do (
        echo %%n^|%%w >> %tmpfile%
      )

      rem Then add the word to the known words list
      set knownwords=!knownwords! %%w
    )
  )
)

rem Print top 10 word count
for /f %%i in ('sort /r %tmpfile%') do (
  echo %%i
  set /a cnt-=1
  if !cnt!==0 goto end
)

:end
del %tmpfile%

Сжатая и запутанная версия, 317 символов:

@echo off&setlocal enableextensions enabledelayedexpansion&set n=%2&set l=
for /f "tokens=*" %%i in (%1)do for %%w in (%%i)do echo !l!|findstr "\<%%w\>">nul||for /f %%n in ('findstr "\<%%w\>" %1^|find /v "" /c')do echo %%n^|%%w>>$&set l=!l! %%w
for /f %%i in ('sort /r $')do echo %%i&set /a n-=1&if !n!==0 del $&exit /b

Его можно сократить до 258 символов, если эхо уже выключено, а расширения команд и отложенное раскрытие переменных включены:

set n=%2&set l=
for /f "tokens=*" %%i in (%1)do for %%w in (%%i)do echo !l!|findstr "\<%%w\>">nul||for /f %%n in ('findstr "\<%%w\>" %1^|find /v "" /c')do echo %%n^|%%w>>$&set l=!l! %%w
for /f %%i in ('sort /r $')do echo %%i&set /a n-=1&if !n!==0 del $&exit /b

Использование:

> filename.bat input.txt 10 & pause

Вывод:

6|DIES
4|FDR
3|Johnson
3|Bush
2|Wilson
2|Washington
2|Truman
2|Roosevelt
2|Reagan
2|Nixon
2
ответ дан 3 December 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: