Написать программу, подсчитывающую сколько раз повторяется каждый символ в тексте.
Невидимые обозначить SPACE/TAB/CR/LF/NUL/...
---$ cat SOMETEXT.txt | ./counter.sh
A - 654
Б - 78
B - 69
Г - 14
......
SPACE - 320
TAB - 23
...---
Есесенно многопроходный цикл по всему тексту - однозначный фейл!
если только ASCII то (шикуя памятью) делаем массив int/long/etc нужной размерности.
код символа - индекс.
число - кол-во вхождений. 1 проход и всё посчитано.
но или hash с тем-же смыслом.
> если только ASCII то (шикуя памятью) делаем массив int/long/etc нужной размерности.
> код символа - индекс.
> число - кол-во вхождений. 1 проход и всё посчитано.
> но или hash с тем-же смыслом.замечательно, реализация где?
>> если только ASCII то (шикуя памятью) делаем массив int/long/etc нужной размерности.
>> код символа - индекс.
>> число - кол-во вхождений. 1 проход и всё посчитано.
>> но или hash с тем-же смыслом.
> замечательно, реализация где?вы издеваетесь? для такой задачи?
>>> если только ASCII то (шикуя памятью) делаем массив int/long/etc нужной размерности.
>>> код символа - индекс.
>>> число - кол-во вхождений. 1 проход и всё посчитано.
>>> но или hash с тем-же смыслом.
>> замечательно, реализация где?
> вы издеваетесь? для такой задачи?ага :)
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
> 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);
на чистом си короче чем на твоем перле:#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 ] ); }
}
> на чистом си короче чем на твоем перле:Приложи Си-компайлер на посикс-шеле! Предыдущему оратору можно "ограничиться" интерпретатором перла на аналогичных условиях.
Скажи, павлин! %))
>> на чистом си короче чем на твоем перле:
> Приложи Си-компайлер на посикс-шеле! Предыдущему оратору можно "ограничиться" интерпретатором
> перла на аналогичных условиях.
> Скажи, павлин! %))... - Может и мне сходить, - задумался Петька, почесывая колено.
...
ответ был не на задачу, а на конкретный пост с конкретной претензией: "... на твоем перле"
ты как всегда отвечаешь не на то что написано. андрюх, соберись, рассеянность - это штука такая... часто бывает колеблет окружающих.пс. что такое си-компайлер?
lol xD, спору нет, можно и на сях, и... Но это уже в дополнение к "а на перле быстрее...". Хотя топик стартер, если верить заголовку, хотел shell. Начиная с перла и далее - оффтоп не более. ;-)
>> на чистом си короче чем на твоем перле:
> Приложи Си-компайлер на посикс-шеле! Предыдущему оратору можно "ограничиться" интерпретатором
> перла на аналогичных условиях.
> Скажи, павлин! %))ну поймой-му с Ц на баш проще сего портировать
>>> на чистом си короче чем на твоем перле:
>> Приложи Си-компайлер на посикс-шеле! Предыдущему оратору можно "ограничиться" интерпретатором
>> перла на аналогичных условиях.
>> Скажи, павлин! %))
> ну поймой-му с Ц на баш проще сего портироватьСтранное обсуждение "на что проще портировать однострочник". В любом случае, если perl вызывает попаболь, то надо делать на том, что действительно привычнее, хотя бы Си.
кодировка какая?
> кодировка какая?придумай свою :)
>[оверквотинг удален]
> Б - 78
> B - 69
> Г - 14
> ...
> ...
> SPACE - 320
> TAB - 23
> ...
> ---
> Есесенно многопроходный цикл по всему тексту - однозначный фейл!ИМХО исходя из условий предыдушего штурма и (Ваших комментариев в конце) требуется подсчитать количество вхождений только определенного набора символов, что должно значительно ускорить процесс.
>[оверквотинг удален]
>> ...
>> ...
>> SPACE - 320
>> TAB - 23
>> ...
>> ---
>> Есесенно многопроходный цикл по всему тексту - однозначный фейл!
> ИМХО исходя из условий предыдушего штурма и (Ваших комментариев в конце) требуется
> подсчитать количество вхождений только определенного набора символов, что должно значительно
> ускорить процесс.исходя из условий требуется подсчитать повторы всех имеющихся букав и не букав (ака символы.)
в выше написанной строке, буква:
"А" встречается 0 раз
тоже Б, В, Г, ..., Э, Ю, Я - 0 раз,
"а" - 5 раз,
б - 3 раза,
...
э - 0 раз,
ю - 1 раз,
я - 1 раз.
>[оверквотинг удален]
> (ака символы.)
> в выше написанной строке, буква:
> "А" встречается 0 раз
> тоже Б, В, Г, ..., Э, Ю, Я - 0 раз,
> "а" - 5 раз,
> б - 3 раза,
> ...
> э - 0 раз,
> ю - 1 раз,
> я - 1 раз.специально для Вас, уважаемый Тумбуль Юхансон:
https://www.opennet.ru/openforum/vsluhforumID9/9656.htmlPS
обратите внимание в моем ответе на фразу "предыдущий штурм"PSS
адекватный перевод термина "brainstom" для меня означает "мозговой штурм". когда для решения какой-то задачи собирается коллектив и начинает сыпать всеми идеями (даже бредовыми), которые им только в голову приходят. потом после этой горячки все фильтруется и (очень часто) находится практическая реализация решения задачи, на основании несольких бредовых идей, которые были высказаны.PSSS
правда жаль, что pavlinux сразу не сказал, чего хотел добиться - т.е. решаемой задачи. так что "мзговой штурм" ИМХО тут лишне было, хотя заинтриговал.... )
> Написать программу, подсчитывающую сколько раз повторяется каждый символ в тексте.
#!/bin/sh
cat /dev/stdin | sed 's/./& \
/g' | sort | uniq -c
Делать трансляцию невидимых лениво.
>> Написать программу, подсчитывающую сколько раз повторяется каждый символ в тексте.
>#!/bin/sh
> cat /dev/stdin | sed 's/./& \
> /g' | sort | uniq -c
> Делать трансляцию невидимых лениво.Реализовать cat, sed, sort, uniq на баше :)
> Реализовать cat, sed, sort, uniq на баше :)А ты ваще кто такой?