URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9712
[ Назад ]

Исходное сообщение
"Shell Brainstorm IV (Месть байтов) "

Отправлено pavlinux , 05-Авг-13 00:38 
Написать программу, подсчитывающую сколько раз повторяется каждый символ в тексте.
Невидимые обозначить SPACE/TAB/CR/LF/NUL/...  
---

$ cat SOMETEXT.txt | ./counter.sh

A - 654
Б - 78
B - 69
Г - 14
...

...
SPACE - 320
TAB - 23
...

---

Есесенно многопроходный цикл по всему тексту - однозначный фейл!


Содержание

Сообщения в этом обсуждении
"Shell Brainstorm IV (Месть байтов) "
Отправлено аноним22 , 05-Авг-13 02:53 
если только ASCII то (шикуя памятью) делаем массив int/long/etc нужной размерности.
код символа - индекс.
число - кол-во вхождений. 1 проход и всё посчитано.
но или hash с тем-же смыслом.

"Shell Brainstorm IV (Месть байтов) "
Отправлено vdool , 06-Авг-13 00:39 
> если только ASCII то (шикуя памятью) делаем массив int/long/etc нужной размерности.
> код символа - индекс.
> число - кол-во вхождений. 1 проход и всё посчитано.
> но или hash с тем-же смыслом.

замечательно, реализация где?


"Shell Brainstorm IV (Месть байтов) "
Отправлено аноним22 , 07-Авг-13 02:39 
>> если только ASCII то (шикуя памятью) делаем массив int/long/etc нужной размерности.
>> код символа - индекс.
>> число - кол-во вхождений. 1 проход и всё посчитано.
>> но или hash с тем-же смыслом.
> замечательно, реализация где?

вы издеваетесь? для такой задачи?


"Shell Brainstorm IV (Месть байтов) "
Отправлено povlinux , 10-Авг-13 01:03 
>>> если только ASCII то (шикуя памятью) делаем массив int/long/etc нужной размерности.
>>> код символа - индекс.
>>> число - кол-во вхождений. 1 проход и всё посчитано.
>>> но или hash с тем-же смыслом.
>> замечательно, реализация где?
> вы издеваетесь? для такой задачи?

ага :)


"Shell Brainstorm IV (Месть байтов) "
Отправлено erera22 , 05-Авг-13 17:28 
cat SOMETEXT.txt | while read w; do for ((i=0; $i<${#w}; i=$(($i+1)))); do echo "${w:$i:1}" ; done ;done | sort | uniq -c

"Shell Brainstorm IV (Месть байтов) "
Отправлено erera22 , 05-Авг-13 20:53 
> cat SOMETEXT.txt | while read w; do for ((i=0; $i<${#w}; i=$(($i+1)))); do
> echo "${w:$i:1}" ; done ;done | sort | uniq -c

Хотя, конечно, на каких-то 5889547 символах (сгенерил какой-то текст, для проверки) это уже будет порядка 10 минут считать. Долго. На перле всяко быстрей выйдет:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;

my %h = ();
open (H, '<', 'SOMEFILE.txt');
while (<H>) {
   chomp;
   map { $h{$_} => $h{$_} += 1 } split //, $_;
}
close H;

print Dumper (\%h);


"Shell Brainstorm IV (Месть байтов) "
Отправлено parad , 06-Авг-13 02:44 
на чистом си короче чем на твоем перле:

#include <unistd.h>
#include <stdio.h>

int main()
{
    unsigned counter[ 0xff ] = { 0 };
    unsigned char buff[1024];
    int res = 0;

    while(( res = read( 0, buff, sizeof( buff )) ) > 0 )
    {
        while(( -- res ) > 0 )
            { ++ counter[ buff[ res ]]; }
    }

    for( unsigned char i = 0; i < sizeof( counter ) / sizeof( * counter ); ++ i )
        { printf( "%c : %u\n", ( char ) i, counter[ i ] ); }
}


"Shell Brainstorm IV (Месть байтов) "
Отправлено Andrey Mitrofanov , 06-Авг-13 09:18 
> на чистом си короче чем на твоем перле:

Приложи Си-компайлер на посикс-шеле! Предыдущему оратору можно "ограничиться" интерпретатором перла на аналогичных условиях.

Скажи, павлин! %))


"Shell Brainstorm IV (Месть байтов) "
Отправлено pavel_simple , 06-Авг-13 12:36 
>> на чистом си короче чем на твоем перле:
> Приложи Си-компайлер на посикс-шеле! Предыдущему оратору можно "ограничиться" интерпретатором
> перла на аналогичных условиях.
> Скажи, павлин! %))

... - Может и мне сходить, - задумался Петька, почесывая колено.
...


"Shell Brainstorm IV (Месть байтов) "
Отправлено parad , 06-Авг-13 14:12 
ответ был не на задачу, а на конкретный пост с конкретной претензией: "... на твоем перле"
ты как всегда отвечаешь не на то что написано. андрюх, соберись, рассеянность - это штука такая... часто бывает колеблет окружающих.

пс. что такое си-компайлер?


"Shell Brainstorm IV (Месть байтов) "
Отправлено erera22 , 06-Авг-13 14:22 
lol xD, спору нет, можно и на сях, и... Но это уже в дополнение к "а на перле быстрее...". Хотя топик стартер, если верить заголовку, хотел shell. Начиная с перла и далее - оффтоп не более. ;-)

"Shell Brainstorm IV (Месть байтов) "
Отправлено vdool , 06-Авг-13 23:45 
>> на чистом си короче чем на твоем перле:
> Приложи Си-компайлер на посикс-шеле! Предыдущему оратору можно "ограничиться" интерпретатором
> перла на аналогичных условиях.
> Скажи, павлин! %))

ну поймой-му с Ц на баш проще сего портировать


"Shell Brainstorm IV (Месть байтов) "
Отправлено erera22 , 07-Авг-13 15:28 
>>> на чистом си короче чем на твоем перле:
>> Приложи Си-компайлер на посикс-шеле! Предыдущему оратору можно "ограничиться" интерпретатором
>> перла на аналогичных условиях.
>> Скажи, павлин! %))
> ну поймой-му с Ц на баш проще сего портировать

Странное обсуждение "на что проще портировать однострочник". В любом случае, если perl вызывает попаболь, то надо делать на том, что действительно привычнее, хотя бы Си.


"Shell Brainstorm IV (Месть байтов) "
Отправлено parad , 06-Авг-13 02:28 
кодировка какая?

"Shell Brainstorm IV (Месть байтов) "
Отправлено vdool , 06-Авг-13 23:32 
> кодировка какая?

придумай свою :)


"Shell Brainstorm IV (Месть байтов) "
Отправлено LSTemp , 07-Авг-13 00:49 
>[оверквотинг удален]
> Б - 78
> B - 69
> Г - 14
> ...
> ...
> SPACE - 320
> TAB - 23
> ...
> ---
> Есесенно многопроходный цикл по всему тексту - однозначный фейл!

ИМХО исходя из условий предыдушего штурма и (Ваших комментариев в конце) требуется подсчитать количество вхождений только определенного набора символов, что должно значительно ускорить процесс.



"Shell Brainstorm IV (Месть байтов) "
Отправлено Тумбуль Юхансон , 08-Авг-13 03:16 
>[оверквотинг удален]
>> ...
>> ...
>> SPACE - 320
>> TAB - 23
>> ...
>> ---
>> Есесенно многопроходный цикл по всему тексту - однозначный фейл!
> ИМХО исходя из условий предыдушего штурма и (Ваших комментариев в конце) требуется
> подсчитать количество вхождений только определенного набора символов, что должно значительно
> ускорить процесс.

исходя из условий требуется подсчитать повторы всех имеющихся букав и не букав (ака символы.)

в выше написанной строке, буква:
"А" встречается 0 раз
тоже  Б, В, Г, ..., Э, Ю, Я - 0 раз,
"а" - 5 раз,
б - 3 раза,
...
э - 0 раз,
ю - 1 раз,
я - 1 раз.


"Shell Brainstorm IV (Месть байтов) "
Отправлено LSTemp , 09-Авг-13 06:55 
>[оверквотинг удален]
> (ака символы.)
> в выше написанной строке, буква:
> "А" встречается 0 раз
> тоже  Б, В, Г, ..., Э, Ю, Я - 0 раз,
> "а" - 5 раз,
> б - 3 раза,
> ...
> э - 0 раз,
> ю - 1 раз,
> я - 1 раз.

специально для Вас, уважаемый Тумбуль Юхансон:
https://www.opennet.ru/openforum/vsluhforumID9/9656.html

PS
обратите внимание в моем ответе на фразу "предыдущий штурм"

PSS
адекватный перевод термина "brainstom" для меня означает "мозговой штурм". когда для решения какой-то задачи собирается коллектив и начинает сыпать всеми идеями (даже бредовыми), которые им только в голову приходят. потом после этой горячки все фильтруется и (очень часто) находится практическая реализация решения задачи, на основании несольких бредовых идей, которые были высказаны.

PSSS
правда жаль, что pavlinux сразу не сказал, чего хотел добиться - т.е. решаемой задачи. так что "мзговой штурм" ИМХО тут лишне было, хотя заинтриговал.... )



"Shell Brainstorm IV (Месть байтов) "
Отправлено DeadLoco , 09-Авг-13 20:53 
> Написать программу, подсчитывающую сколько раз повторяется каждый символ в тексте.

#!/bin/sh
cat /dev/stdin | sed 's/./& \
/g' | sort | uniq -c

Делать трансляцию невидимых лениво.

"Shell Brainstorm IV (Месть байтов) "
Отправлено povlinux , 10-Авг-13 01:01 
>> Написать программу, подсчитывающую сколько раз повторяется каждый символ в тексте.
>
#!/bin/sh 
> cat /dev/stdin | sed 's/./& \
> /g' | sort | uniq -c

> Делать трансляцию невидимых лениво.

Реализовать cat, sed, sort, uniq на баше :)


"Shell Brainstorm IV (Месть байтов) "
Отправлено DeadLoco , 10-Авг-13 01:13 
> Реализовать cat, sed, sort, uniq на баше :)

А ты ваще кто такой?