Codegolf — Найдите Наименее Распространенные Символы

  • Автор темы Nikitaqqq
  • Обновлено
  • 21, Oct 2024
  • #1

Учитывая строку, найдите 10 наименее распространенных буквенно-цифровых символов в этой строке.

Вывод должен быть отформатирован числами, дополненными пробелами слева, чтобы они выглядели следующим образом:

 
 j:  2
x:  3
q:  9
k: 32
v: 67
c: 73
w: 79
f: 93
b: 94
p: 96
 

Используйте это для тестирования вашей программы: здесь

Вывод для тестового примера:

e: 1 t: 16 c: 42 b: 400 z: 50000 a: 100000

Самый короткий код выигрывает. Вы можете отправить программу или функцию.

#код-гольф #строка

Nikitaqqq


Рег
17 Aug, 2014

Тем
66

Постов
217

Баллов
587
  • 26, Oct 2024
  • #2

Математика, 102 93:

версия 2:

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 r\W v ü ñʮάpZÊïA yù ®q":      :Implicit input of string
r                                :Remove

\W                              :  /[^A-Z0-9]/gi

v                            :Lowercase

ü                          :Group & sort

ñ                        :Sort by

Ê                       :  Length

®                      :Map each Z

Î                     :  First character

¬                    :  Split

p                   :  Push

ZÊ                 :    Length of Z

à               :End map

¯               :Slice to

A              :  10th element

y            :Transpose

ù           :Left pad each sub array with spaces to the length of the longest and implicitly transpose back

®         :Map

q":      :  Join with ": "

:Implicit output joined with newlines
 

v1:

r\W v ü ñʮάpZÊïA yù ®q": ||answer||

Баш, 72

Предполагается, что в текущем каталоге нет файлов с однобуквенными именами; ввод со стандартного ввода:

-R

Работает в Linux, но по какой-то причине grep моего Mac игнорирует Øa;ØD - Helper link. Yield a constant value "abc...xyz012...789" Øa - Yield "abc...xyz" ØD - Yield "0123456789" ; - Concatenate ŒlċⱮ¢¢żPƇ0ị$Þḣ⁵G - Main link. Takes a string S on the left Œl - Convert S to lowercase ¢ - Yield "abc...789" Ɱ - For each character: ċ - Count occurrences in S ¢ - Yield "abc...789" ż - Zip with occurrences Ƈ - Keep characters where: P - There is at least 1 occurrence in S $Þ - Sort by: 0ị - Number of occurrences ḣ⁵ - Take the first 10 G - Convert into a grid format when used with : (ошибка или недокументированная ошибка?), но работает следующее (78):

:

Если бы вывод можно было отменить, часть sed можно было бы удалить, чтобы сохранить 30 символов в каждом из предыдущих решений.

 

ValsSloda


Рег
24 Dec, 2013

Тем
66

Постов
188

Баллов
528
  • 26, Oct 2024
  • #3

Ява 452 444 433 430

Øa;ØD ŒlċⱮ¢¢żPƇ0ị$Þḣ⁵G

Мой первый вклад. Я знаю, что Java никогда не выиграет такого рода испытания, но до сих пор это, по крайней мере, самый короткий Java-ответ :)

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

Объяснено:

F=s=>( s.toLowerCase(n={}).replace(/[a-z0-9]/g,c=>n[c]=-~n[c]), s=Object.keys(n).sort((a,b)=>n[a]-n[b]), s.slice(0,10).map(x=>x+': '+(' '+n[x]).slice(-(n[s[9]]+'').length)) .join('\n') )

452 -> 444: удалены пробелы.

444 -> 433: класс-> интерфейс, общедоступный

433 -> 430: 96

 

IYAR


Рег
15 Mar, 2010

Тем
88

Постов
195

Баллов
655
  • 26, Oct 2024
  • #4

APL (Диалог Юникод), 45 36 байт

import os s=os.read(0,10000).lower() n=s.count a=sorted(filter(str.isalnum,set(s)),key=n)[:10] for c in a:print c+': %%%ii'%len(`n(a[-1])`)%n(c)

Попробуйте онлайн!

Полная программа, принимающая на вход строку. tio link использует полифилы для s/[a-z]/$h{lc($&)}++/eig;printf"$_:%9d$/",$h{$_}for(sort{$h{$a}<=>$h{$b}}keys%h)[0..9] and $_ .

Сокращен и протестирован с помощью Bubbler.

-12 байт от Адама.

Не работает на tio из-за проблем с import Char import Data.List z=filter t=show l=length k x=[(l$z(==m)x,m)|m<-x] s z=[b:':':take(1+(maximum$map(l.t.fst)z)-l(t a))(repeat ' ')++t a++"\n"|(a,b)<-z] main=interact$concat.s.take 10.sort.nub.k.map toLower.z isAlphaNum .(Now works, thanks to Adám's help)

Объяснение

c=[];t=128;while(t--)c[t]=[0,t];i=prompt().toLowerCase();for(n=0;n<i.length;x=i.charCodeAt(n++),c[x][0]+=x>96&&x<123);for(n=i=0,c=c.sort(function(a,b){return(a[0]-b[0])});n<10;i++)if(c[i][0]>0){console.log(String.fromCharCode(c[i][1])+": "+(" "+c[i][0]).slice(-2));n++} ||answer||

К, 60

import sys t=sys.stdin.read().lower() f={} for c in t: if c.isalnum():f[c]=f.get(c,0)+1 s=lambda x:x[1] h=sorted(f.items(),key=s)[:10] for n in h:print n[0]+': '+`n[1]`.rjust(len(`max(h,s)[1]`)) ||answer||

Python, 206 199 195 символов

{(-:|/#:'f)$f:10#$(!x)[i]!r i:<r:. x:#:'=_x@&x in,/.Q`a`A`n}

Несомненно, есть много возможностей для совершенствования, но вот моя первая попытка. Выдает идентичный результат для предоставленного тестового примера.

206 -> 199: удалены ненужные аргументы новой строки и ключевого слова.

199 -> 195: итеритемы()

 

Koly2007


Рег
18 Oct, 2011

Тем
63

Постов
188

Баллов
543
  • 26, Oct 2024
  • #5

Javascript, 271 символ

Я не уверен, нарушает ли это правила (это не оправдывает цифры в выводе, но в любом случае вот мое решение:

10↑⌷⍨∘⊂∘⍋∘⌽⍨{⍺':',≢⍵}⌸∊⎕(∊⊆⊣)⍥⎕C⎕D,⎕A ⍥⎕C lowercase the following: ⎕D,⎕A string of the alphabet and digits ⎕ and the input (∊⊆⊣) filter out nonalphanumerics ∊ flatten the string {⍺':',≢⍵}⌸ create a frequency table for each letter key ⌷⍨∘⊂∘⍋∘⌽⍨ sort the table based on the last row 10↑ take the first 10 elements

Я почти уверен, что это можно упростить (с таким количеством символов я не выиграю :P), но теперь я ничего не могу найти.

Ладно, я совершенно забыл, что отступы на самом деле были обязательным требованием :O

Исправил это и исправил ошибку. (250 -> 271)

 

Beck


Рег
20 Jun, 2006

Тем
80

Постов
198

Баллов
628
  • 26, Oct 2024
  • #6
⎕C ||answer||

Хаскелл (229)

Перл, 86 символов ⎕C

||answer||

данная строка находится в

10↑⌷⍨∘⊂∘⍋∘⌽⍨{⍺':',≢⍵}⌸∊⎕(∊⊆⊣)⍥⎕C⎕D,⎕A ||answer||

Питон, 144

// there is not a lot you get for free, so import you will import java.util.*; interface L{ static void main(String[]a) { // java main entry point Map<Character,Integer> m=new HashMap<>(); // key=character, value=number of occurances in input text for(char c: // for each character in a[0] // take first argument from command line .toLowerCase() // convert all characters to lowercase .toCharArray()) // convert to array so we can loop over it if(96<c&&c<123) // accept only a-z m.merge(c, 1, (j,i)->j+i); // fill map, increase corresponding value int l=String.valueOf( // l: to store length of counter m.values().stream() // loop over counter values .reduce(0,Integer::max)) // find max value .length(); // count number of digits of max value m.entrySet().stream() // loop over the counter map .sorted((e,f)->e.getValue()-f.getValue()) // sort the map by value ascending .forEachOrdered( // loop over the ordered result e->System.out.println( // print for every entry e.getKey() // - the key +"-" +String.format("%"+l+"s", // - format using l e.getValue()))); // the value }} ||answer||

JavaScript 1.8 (ES6) 186Желе

import java.util.*; interface L{ static void main(String[]a){ Map<Character,Integer>m=new HashMap<>(); for(char c:a[0].toLowerCase().toCharArray())if(96<c&&c<123) m.merge(c,1,(j,i)->j+i); int l=String.valueOf(m.values().stream().reduce(0,Integer::max)).length(); m.entrySet().stream().sorted((e,f)->e.getValue()-f.getValue()) .forEachOrdered(e->System.out.println(e.getKey()+"-"+String.format("%"+l+"s",e.getValue()))); }}

, 22 байта

Попробуйте онлайн! tr A-Z a-z|grep -o [a-z]|sort|uniq -c|sort|head|sed -E 's/(.*)([a-z])/\2:\1/' on each row, but given that isn't explicitly specified in the spec (compared to the left padding), I assumed this was OK. Не выводится с 26 байт -o .

требовать разделения на

-i ||answer||

Как это работает Япт grep -io [a-z]|sort -f|uniq -ci|sort|head|sed -E 's/(.*)([a-z])/\2:\1/' , 28 v2.0a0

байты

TableForm[ SortBy[Tally@StringCases[ToLowerCase@#, x_?LetterQ :> x <> ":"], #[[2]] &], TableAlignments -> Right] &

Еще одна старая проблема, которой мешает излишне громоздкий формат вывода. Попробуй

Grid[SortBy[ Tally@StringCases[ToLowerCase@#,x_?LetterQ:>x<>":"], Last@# &], Alignment->Right]&@s
 

Лари


Рег
28 Apr, 2021

Тем
69

Постов
208

Баллов
553
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно