Код должен принимать строку как ввод с клавиатуры:
The definition of insanity is quoting the same phrase again and again and not expect despair.
Вывод должен быть таким (не отсортированным в каком-либо определенном порядке):
: 15
. : 1
T : 1
a : 10
c : 1
e : 8
d : 4
g : 3
f : 2
i : 10
h : 3
m : 1
o : 4
n : 10
q : 1
p : 3
s : 5
r : 2
u : 1
t : 6
y : 1
x : 1
Все символы ASCII в Юникоде не обязательны, пробелы, кавычки и т. Д. Ввод должен осуществляться с клавиатуры / не констант, атрибутов, вывод должен быть напечатан с новой строкой после каждого символа, как в примере выше, он не должен возвращаться в виде строки или сбрасывается как hashmap / словарь и т. д., так что x : 1
и x: 1
все в порядке, но {'x':1,...
и x:1
нет.
В: Функция или полная программа, принимающая стандартный ввод и пишущая стандартный вывод?
A: Код должен быть программой, принимающей ввод с использованием стандартного входа и отображающей результат через стандартный вывод.
Табло:
Самый короткий общий : 5 байтов
Самый короткий общий : 7 байтов
0
как количество вхождений?" : "
(обратите внимание на два пробела после:
) или если другие (более короткие) разделители хороши. Вы не обращались к проблеме Unicode / кодирования.Ответы:
APL (Dyalog Unicode) , 5 байтов SBCS
Полное тело программы. Запрашивает строку из STDIN и печатает таблицу, разделенную символом новой строки, в STDOUT. Крайний левый столбец - это вводимые символы, а счетчики выровнены по правому краю с наибольшим числом, отделенным от его символа одним пробелом.
Попробуйте онлайн!
⍞
запрос на ввод текста из STDIN⌸
создать таблицу ключей, состоящую из,
уникального элемента, за∘
которым следует≢
подсчет индексов его появления (т. е. сколько раз это происходит)источник
:
сожалению требуется в выводе (вы не можете удалить этот ответ).PHP - 68 (или 39) байт
Вывод для примера текста:
Если точный вывод не требуется, это будет работать для 39 байтов :
Пример вывода:
где каждый числовой индекс обозначает порядковый номер символа, который он представляет.
Я очень сильно подозреваю, что использование встроенной функции, которая делает именно то, что говорит о проблемной ситуации, вскоре будет запрещено.
источник
$argv[1]
вместоfgets(STDIN)
сохранения 4 байта.к (
87)пример
редактировать: до семи, H / T Аарон Дэвис
объяснение
Возьмите строку с клавиатуры:
Сгруппируйте отдельные элементы и верните карту, содержащую ключ, так как отдельные символы и значения являются индексами, где встречаются отдельные элементы.
Теперь посчитайте значения каждой записи на карте.
источник
:
в=:
излишни;k)#:'=0:0
работает отлично (7 символов). (бонус за знание0:0
, я понятия не имел!)q
перевод легче понять -count each group read0 0
Утилиты ядра GNU -
292220 символов (53 с форматированием)Улучшение Wumpus (20 символов):
Улучшение светлячка (22 символа):
оригинал Джоэйтвиддла (29 символов):
Первоначально я использовал
sed
просто добавить новую строку после каждого символа. В Firefly это улучшилось благодаря томуgrep -o .
, что-o
каждый сопоставленный шаблон отображает свою собственную строку. Wumpus указал на дальнейшее улучшение, используяfold -1
вместо этого. Хорошо сделано!uniq
делает реальную работу, хотя это относится только к отсортированным спискам.Обратите внимание, что выходной формат не совсем соответствует примеру в вопросе. Это требует последнего прохода,
sed
чтобы поменять аргументы. (Ожидание ответа на вопрос Яна Дворака, чтобы узнать, требуется ли это ...)Переформатирование с помощью sed - это «только» еще 33 символа! ( Всего 53 )
Awk может почти выполнить работу, добавив только 25 символов, но он скрывает первое место. Глупый awk!
Интересно, можно ли сделать улучшения на этапе переформатирования ...
источник
&
для «целого матча» вместо\0
, хотяgrep -o .
и немного короче. Стоит отметить, что вывод командыuniq -c
немного отличается от приведенного в вопросе.grep -o
; это полезно.fold -1
делает то же самое,grep -o .
ptx -S.
делает тот же трюк .Ruby 1.9.3: 53 символа
(Основано на комментариях @ shiva и @ daneiro.)
Образец прогона:
Рубин: 44 символа
Не соблюдая формат вывода:
Образец прогона:
источник
a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
strip()
? Вопрос гласит: «все персонажи считаются».\n
даже если вы не собираетесь\n
случае, если он действительно был пройден. Передача является побочным эффектом использования здесь-строки. pastebin.com/gCrgk9m1$_
и угроблениеa
все еще хорошо. Иc+"...
вместо"#{c}...
Python 3: 76 символов
76
44
(печатать одни и те же символы много раз, см. ответ Васи для правильной версии)
источник
Perl 6: 21 символ
источник
APL (15)
Если вам действительно нужно
:
, это 19 (но есть и другие, которые его не включают):Выход:
источник
R, 30 символов
Пример использования:
источник
cat
.cat
будет возвращать только значения, а не имена значений (то есть символы). Так что для этого потребуется более сложное решение.Perl 5, 54 символа
источник
sort keys%h
, хотя.$_=<>;s/./$h{$_}++/eg;
илиmap{$h{$_}++}<>=~/./g;
вместо этогоmap{$h{$_}++}split//,<>;
$h{$_}++for<>=~/./g
, что я думаю, может быть оптимальным. Буквальный перевод строки вместо того,\n
а также.JavaScript
6653 байта:6956 байт:7865 байт:NB. Во всех случаях количество удаленных байтов относится к дополнительному
console.log()
вызову, который бессмыслен при запуске в консоли. Большое спасибо @imma за отличный улов с-~a[b]
иprompt(a={})
. Это определенно сэкономило еще несколько байтов.источник
for
наfor in
- тестирование в пустой вкладке дает те же результаты. Также последнее;
не нужно, таким образом:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
for in
действительно дает вам функции в SO, но не в пустой вкладке;)Python 2, правильно (58)
Выход:
Питон 2, стиль гепарда (41)
Выход:
источник
for l in set(s):print l,":",s.count(l)
. Для второго, удалив ненужные пробелы, вы выиграете 2print{l:s.count(l)for l in s}
Mathematica, 61 байт
Затем появляется это диалоговое окно,
и для примера предложения, производит в качестве вывода
источник
питон 3, 49
Кража идеи от evuez
вход:
выход:
источник
for i in sorted(set(t)):print(i,':',t.count(i))
set()
! ;)JavaScript (
6968 символов):Ожидает
s
провести строку.Это отлично следует новым правилам.
Примечание: это предполагает чистую среду, без каких-либо пользовательских свойств на стандартных прототипах объектов.
Изменить: на 1 символ меньше!
Консольный вывод:
Старый ответ (44 символа):
Это было действительно до изменения правил.
r
содержит вывод.источник
Хаскелл, 93
источник
PowerShell (49)
источник
C # (178
220символов)Основываясь на комментарии @ Spongeman, я немного его изменил:
источник
namespace System{using Linq;class F{static void Main(){foreach(var g in Console.ReadLine().GroupBy(c=>c))Console.WriteLine(g.Key+" : "+g.Count());}}
Скриптинг , 19 символов
Выход
Если вы хотите пробелы вокруг
:
, измените꾠
на긃똠
20 символов.объяснение
источник
F # (
66 5949, 72 с заданным форматированием)Выход:
С заданным форматированием это становится:
источник
let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")
let f s=Seq.countBy id s|>Seq.iter(printfn"%A")
Математика,
3429 байтНе уверен, почему другой ответ Mathematica такой сложный ...;)
источник
Баш (
2015 символов)Кодировка ASCII теперь поддерживается
Баш (23 символа):
Форматирование ASCII не поддерживается
источник
Java 8,
273253249246239200 байт-24 байта благодаря @Poke .
-7 байт благодаря @ OlivierGrégoire .
Объяснение:
Попробуй это здесь.
источник
import java.util.*;class I{public static void main(String[]a){Map m=new HashMap();for(char c:new Scanner(System.in).nextLine().toCharArray()){m.put(c,m.get(c)!=null?(int)m.get(c)+1:1);}for(Object e:m.keySet()){System.out.println(e+": "+m.get(e));}}}
m.compute(c,(k,v)->v!=null?(int)v+1:1);
вместо того,m.put(c,m.get(c)!=null?(int)m.get(c)+1:1);
чтобы сохранить 3 байта.Powershell, 63
источник
$a[$_]
с$a.$_
. Смотритеhelp about_hash_tables
Командный скрипт Windows - 72 байта
Выходы:
источник
J, 23 знака
Немного другой формат вывода (строка 2 - stdin):
источник
J, 22 символа
Пример:
источник
C #
В нашем случае, если вход будет " Определение безумия цитирует одну и ту же фразу снова и снова и не ожидает отчаяния. ».
Выход будет:
источник
string str = Console.ReadLine();
. Но это код-гольф, так и должно бытьvar str=Console.ReadLine();
. Другие комментарии, которые я хотел бы сделать, должны быть отложены до тех пор, пока ОП не улучшит вопрос.C #: 129
Это ответ Авива, но короче:
Это мое:
C #: 103
источник
Python 2 (90 символов)
Вывод при запуске из собственного источника:
источник