Kod powinien pobierać ciąg znaków jako dane wejściowe z klawiatury:
The definition of insanity is quoting the same phrase again and again and not expect despair.
Dane wyjściowe powinny wyglądać następująco (nie posortowane w określonej kolejności):
: 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
Wszystkie znaki ASCII liczą się jako Unicode, spacje, cudzysłowy itp., A dane wejściowe powinny pochodzić z klawiatury / nie stałych, atrybutów, dane wyjściowe powinny być drukowane z nowym wierszem po każdym znaku, jak w powyższym przykładzie, nie należy zwracać go jako łańcucha lub składować jako HashMap / słownik etc, tak x : 1
i x: 1
są ok, ale {'x':1,...
i x:1
nie są.
P: Funkcja lub pełny program przyjmuje standardowe wejście i pisze standardowe wyjście?
Odp .: Kod musi być programem pobierającym dane wejściowe przy użyciu standardowego wejścia i wyświetlać wynik poprzez standardowe wyjście.
Tablica wyników:
Najkrótszy ogólnie : 5 bajtów
Najkrótszy ogólnie : 7 bajtów
0
jako liczbę wystąpień?" : "
(zwróć uwagę na dwie spacje po:
) lub czy inne (krótsze) separatory są w porządku. Nie rozwiązałeś problemu z kodowaniem Unicode.Odpowiedzi:
APL (Dyalog Unicode) , 5 bajtów SBCS
Pełna treść programu. Monituje o ciąg znaków ze STDIN i drukuje tabelę oddzieloną znakiem nowej linii do STDOUT. Kolumna najbardziej po lewej to znaki wejściowe, a liczby są wyrównane do prawej, a największa liczba oddzielona jest od znaku pojedynczą spacją.
Wypróbuj online!
⍞
monit o wprowadzenie tekstu z STDIN⌸
utwórz tabelę kluczy składającą się z,
unikalnego elementu, po∘
którym≢
następuje suma wskaźników jego występowania (tj. ile razy występuje)źródło
:
to, że jest niestety wymagane w danych wyjściowych (nie można usunąć tej odpowiedzi).PHP - 68 (lub 39) bajtów
Dane wyjściowe dla przykładowego tekstu:
Jeśli dokładne dane wyjściowe nie są wymagane, działałoby to dla 39 bajtów :
Przykładowe dane wyjściowe:
gdzie każdy indeks liczbowy odnosi się do wartości porządkowej znaku, który reprezentuje.
Podejrzewam bardzo mocno, że użycie wbudowanej funkcji, która robi dokładnie to, co stany problemowe, wkrótce zostanie niedozwolone.
źródło
$argv[1]
zamiastfgets(STDIN)
zapisuje 4 bajty.k (
87)Przykład
edycja: Do siedmiu, H / T Aaron Davies
Wyjaśnienie
Weź ciąg z klawiatury:
Pogrupuj różne elementy i zwróć mapę zawierającą klucz, ponieważ różne znaki i wartości to wskaźniki, w których występują różne elementy.
Teraz policz wartości każdego wpisu na mapie.
źródło
:
w=:
jest zbędny;k)#:'=0:0
działa dobrze (7 znaków). (premia za znajomość0:0
, nie miałem pojęcia!)q
tłumaczenie jest łatwiejsze do zrozumienia -count each group read0 0
Narzędzia podstawowe GNU -
292220 znaków (53 z formatowaniem)Ulepszenie Wumpusa (20 znaków):
Ulepszenie Firefly (22 znaki):
oryginał joeytwiddle (29 znaków):
Pierwotnie zwykłem
sed
dodawać nowy wiersz po każdym znaku. Firefly poprawił togrep -o .
, ponieważ-o
wyświetla każdy dopasowany wzór na swojej linii. Wumpus wskazał na dalszą poprawę przy użyciufold -1
zamiast tego. Dobra robota!uniq
wykonuje prawdziwą pracę, chociaż dotyczy tylko posortowanych list.Zauważ, że format wyjściowy nie pasuje dokładnie do przykładu w pytaniu. Wymaga to ostatniego przejścia
sed
do wymiany argumentów. (Czekam na odpowiedź na pytanie Jana Dvoraka, aby sprawdzić, czy jest to wymagane ...)Ponowne formatowanie za pomocą sed to „tylko” kolejne 33 znaki! ( Łącznie 53 )
Awk może prawie wykonać zadanie, dodając tylko 25 znaków, ale ukrywa pierwsze miejsce. Głupi awk!
Zastanawiam się, czy można wprowadzić ulepszenia na etapie ponownego formatowania ...
źródło
&
zamiast tego „całego meczu”\0
, choćgrep -o .
jest on jeszcze nieco krótszy. Warto wspomnieć, że wynikuniq -c
różni się nieznacznie od podanego w pytaniu.grep -o
; to jest przydatne.fold -1
robi to samo cogrep -o .
ptx -S.
robi tę samą sztuczkę .Ruby 1.9.3: 53 znaków
(Na podstawie komentarzy @ shiva i @ daneiro.)
Przykładowy przebieg:
Ruby: 44 znaki
Nie przestrzegając formatu wyjściowego:
Przykładowy przebieg:
źródło
a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
strip()
? Pytanie brzmi: „wszystkie znaki się liczą”.\n
nawet jeśli nie masz zamiaru\n
wtedy, gdy zostało naprawdę przekazane. Przekazywanie jest efektem ubocznym używania ciąg-tutaj. pastebin.com/gCrgk9m1$_
i porzucaniea
jest jednak nadal uzasadnione. Ic+"...
zamiast"#{c}...
Python 3: 76 znaków
76
44
(drukuj te same znaki wiele razy, zobacz poprawną wersję , patrz odpowiedź Wasi )
źródło
Perl 6: 21 znaków
źródło
APL (15)
Jeśli naprawdę potrzebujesz
:
, jest 19 (ale są też inni, którzy tego nie uwzględniają):Wydajność:
źródło
R, 30 znaków
Przykładowe użycie:
źródło
cat
.cat
zwróci tylko wartości, a nie nazwy wartości (tj. Znaki). Potrzebowałoby to bardziej złożonego rozwiązania.Perl 5, 54 znaków
źródło
sort keys%h
.$_=<>;s/./$h{$_}++/eg;
lubmap{$h{$_}++}<>=~/./g;
zamiastmap{$h{$_}++}split//,<>;
$h{$_}++for<>=~/./g
, które moim zdaniem mogą być optymalne. Dosłownie nowa linia zamiast\n
.JavaScript
6653 bajty:6956 bajtów:7865 bajtów:Uwaga: We wszystkich przypadkach usunięta liczba bajtów odnosi się do dodatkowego
console.log()
wywołania, które nie ma sensu, jeśli jest uruchamiane w konsoli. Ogromne podziękowania dla @imma za wspaniały połów z-~a[b]
iprompt(a={})
. To zdecydowanie zaoszczędziło trochę więcej bajtów.źródło
for
nafor in
- testowanie w pustej zakładce daje te same wyniki. Ostatni też;
nie jest potrzebny, dlatego:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
for in
faktycznie daje ci funkcje w SO, ale nie w pustej zakładce;)Python 2, poprawnie (58)
Wydajność:
Python 2, styl geparda (41)
Wydajność:
źródło
for l in set(s):print l,":",s.count(l)
. Po drugie, usunięcie niepotrzebnych spacji powoduje, że wygrywasz 2 znaki:print{l:s.count(l)for l in s}
Mathematica, 61 bajtów
Następnie pojawia się to okno dialogowe,
a dla przykładowego zdania tworzy jako wynik
źródło
python 3, 49
Kradzież pomysłu z evuez
wkład:
wydajność:
źródło
for i in sorted(set(t)):print(i,':',t.count(i))
set()
! ;)JavaScript (
6968 znaków):Oczekuje,
s
że utrzyma ciąg.Jest to zgodne z nowymi zasadami doskonale.
Uwaga: Zakłada to czyste środowisko, bez żadnych niestandardowych właściwości na standardowych prototypach obiektów.
Edycja: 1 postać mniej!
Dane wyjściowe konsoli:
Stara odpowiedź (44 znaki):
Było to ważne przed zmianą reguł.
r
zawiera wynik.źródło
Haskell, 93
źródło
PowerShell (49)
źródło
C # (178
220znaków)Na podstawie komentarza @ Spongeman nieco go zmieniłem:
źródło
namespace System{using Linq;class F{static void Main(){foreach(var g in Console.ReadLine().GroupBy(c=>c))Console.WriteLine(g.Key+" : "+g.Count());}}
Sclipting , 19 znaków
Wydajność
Jeśli chcesz spacje wokół
:
, zmień꾠
na긃똠
, tworząc 20 znaków.Wyjaśnienie
źródło
F # (
66 5949, 72 z przepisanym formatowaniem)Wydajność:
Przy przepisanym formatowaniu staje się:
źródło
let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")
let f s=Seq.countBy id s|>Seq.iter(printfn"%A")
Matematyka,
3429 bajtówNie jestem pewien, dlaczego inna odpowiedź Mathematica jest tak skomplikowana ...;)
źródło
Bash (
2015 znaków)Obsługiwane jest teraz kodowanie ASCII
Bash (23 znaki):
Formatowanie ASCII nie jest obsługiwane
źródło
Java 8,
273253249246239200 bajtów-24 bajty dzięki @Poke .
-7 bajtów dzięki @ OlivierGrégoire .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
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);
zamiastm.put(c,m.get(c)!=null?(int)m.get(c)+1:1);
zapisać 3 bajty.PowerShell, 63
źródło
$a[$_]
z$a.$_
. Zobaczhelp about_hash_tables
Skrypt poleceń systemu Windows - 72 bajty
Wyjścia:
źródło
J, 23 znaki
Nieco inny format wyjściowy (wiersz 2 to stdin):
źródło
J, 22 znaki
Przykład:
źródło
DO#
W naszym przypadku, jeśli wejście będzie „ Definicja szaleństwa powtarza to samo zdanie wielokrotnie i nie oczekuje rozpaczy. ”.
Wyjście będzie:
źródło
string str = Console.ReadLine();
. Ale to jest golf golfowy, więc tak powinno byćvar str=Console.ReadLine();
. Pozostałe komentarze, które chciałbym przedstawić, muszą zostać zawieszone, dopóki OP nie poprawi pytania.C #: 129
To jest odpowiedź Avivs, ale krótsza:
To jest moje:
C #: 103
źródło
Python 2 (90 znaków)
Dane wyjściowe po uruchomieniu na własnym źródle:
źródło