Der Code sollte eine Zeichenfolge als Eingabe von der Tastatur nehmen:
The definition of insanity is quoting the same phrase again and again and not expect despair.
Die Ausgabe sollte folgendermaßen aussehen (nicht in einer bestimmten Reihenfolge sortiert):
: 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
Alle ASCII-Zeichen zählen Unicode ist keine Anforderung, Leerzeichen, Anführungszeichen usw. und Eingaben sollten von der Tastatur kommen / keine Konstanten, Attribute, Ausgaben sollten mit einer neuen Zeile nach jedem Zeichen gedruckt werden, wie im obigen Beispiel, sie sollten nicht als Zeichenkette zurückgegeben werden oder als hashmap / wörterbuch usw. ausgegeben, also x : 1
und x: 1
sind ok, aber {'x':1,...
und x:1
sind nicht.
Q: Funktion oder komplettes Programm, das stdin nimmt und stdout schreibt?
A: Code muss ein Programm sein, das Eingaben über den Standardeingang vornimmt und das Ergebnis über den Standardausgang anzeigt.
Anzeigetafel:
Kürzeste Gesamtlänge : 5 Bytes
Kürzeste Gesamtlänge : 7 Bytes
0
als Anzahl der Vorkommen drucken ?" : "
(beachten Sie die zwei Leerzeichen nach dem:
) oder ob andere (kürzere) Trennzeichen in Ordnung sind. Sie haben das Unicode- / Codierungsproblem nicht behoben.Antworten:
APL (Dyalog Unicode) , 5 Byte SBCS
Voller Programmteil. Fordert zur Eingabe einer Zeichenfolge von STDIN auf und gibt eine durch Zeilenumbrüche getrennte Tabelle an STDOUT aus. Die äußerste linke Spalte enthält die eingegebenen Zeichen, und die Zählungen werden rechtsbündig ausgerichtet, wobei die größte Zahl durch ein einzelnes Leerzeichen vom Zeichen getrennt ist.
Probieren Sie es online!
⍞
Eingabeaufforderung von STDIN⌸
Erstellen Sie eine Schlüsseltabelle, die aus,
dem eindeutigen Element besteht, gefolgt∘
von≢
der Aufzählung der Indizes seines Auftretens (dh wie oft es auftritt).quelle
:
in der Ausgabe leider erforderlich ist (Sie können diese Antwort nicht löschen).PHP - 68 (oder 39) Bytes
Ausgabe für den Beispieltext:
Wenn die genaue Ausgabe nicht benötigt wird, funktioniert dies für 39 Bytes :
Beispielausgabe:
Dabei bezieht sich jeder numerische Index auf den Ordnungswert des Zeichens, das er darstellt.
Ich vermute sehr stark, dass die Verwendung einer eingebauten Funktion, die genau das tut, was das Problem angibt, bald nicht mehr zulässig sein wird.
quelle
$argv[1]
stattfgets(STDIN)
spart 4 Bytes.k (
87)Beispiel
Bearbeiten: Bis sieben, H / T Aaron Davies
Erläuterung
Nimm einen String von der Tastatur:
Gruppieren Sie die verschiedenen Elemente und geben Sie eine Zuordnung mit Schlüssel zurück, da verschiedene Zeichen und Werte die Indizes sind, in denen die verschiedenen Elemente vorkommen.
Zählen Sie nun die Werte jedes Eintrags in der Karte.
quelle
:
in=:
ist überflüssig;k)#:'=0:0
funktioniert gut (7 Zeichen). (Bonus für das Wissen über0:0
, ich hatte keine Ahnung!)q
Übersetzung ist einfacher zu verstehen -count each group read0 0
GNU-Kern-Utils -
292220 Zeichen (53 mit Formatierung)Wumpus Verbesserung (20 Zeichen):
Verbesserung von Firefly (22 Zeichen):
joeytwiddles Original (29 Zeichen):
Ursprünglich habe ich
sed
einfach nach jedem Zeichen eine neue Zeile eingefügt. Firefly hat das mit verbessertgrep -o .
, da-o
jedes übereinstimmende Muster in einer eigenen Zeile angezeigt wird. Wumpus wiesfold -1
stattdessen auf eine weitere Verbesserung hin . Gute Arbeit!uniq
erledigt die eigentliche Arbeit, obwohl sie nur für sortierte Listen gilt.Beachten Sie, dass das Ausgabeformat nicht genau dem Beispiel in der Frage entspricht. Das erfordert einen letzten Durchlauf
sed
, um die Argumente auszutauschen. (Warten auf eine Antwort auf Jan Dvoraks Frage, um zu sehen, ob dies erforderlich ist ...)Neuformatierung mit sed ist "nur" noch 33 Zeichen! ( Gesamt 53 )
Awk schafft es fast , indem es nur 25 Zeichen hinzufügt, aber es verbirgt das erste Leerzeichen. Dumme Awk!
Ich frage mich, ob Verbesserungen in der Neuformatierungsphase vorgenommen werden können ...
quelle
&
"ganze Übereinstimmung" verwenden\0
,grep -o .
ist aber noch etwas kürzer. Erwähnenswert ist, dass die Ausgabe vonuniq -c
geringfügig von der in der Frage angegebenen abweicht.grep -o
; es ist nützlich.fold -1
macht dasselbe wiegrep -o .
ptx -S.
macht den gleichen Trick .Ruby 1.9.3: 53 Zeichen
(Basierend auf den Kommentaren von @ shiva und @ daneiro.)
Probelauf:
Ruby: 44 Zeichen
Nicht das Ausgabeformat beachten:
Probelauf:
quelle
a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}
strip()
? Die Frage lautet: "Alle Zeichen zählen".\n
auch wenn Sie nicht beabsichtigen\n
wenn es wirklich bestanden wurde. Übergeben ist ein Nebeneffekt der Verwendung von Here-String. pastebin.com/gCrgk9m1$_
und Notwasserunga
ist immer noch gesund. Undc+"...
anstelle von"#{c}...
Python 3: 76 Zeichen
76
44
(drucke die gleichen Zeichen oft aus, siehe Wasis Antwort für eine gültige Version)
quelle
Perl 6: 21 Zeichen
quelle
APL (15)
Wenn Sie das wirklich brauchen
:
, ist es 19 (aber es gibt andere, die es nicht einschließen):Ausgabe:
quelle
R, 30 Zeichen
Anwendungsbeispiel:
quelle
cat
.cat
werden nur die Werte zurückgegeben, nicht die Wertnamen (dh die Zeichen). Es wäre also eine komplexere Lösung erforderlich.Perl 5, 54 Zeichen
quelle
sort keys%h
.$_=<>;s/./$h{$_}++/eg;
odermap{$h{$_}++}<>=~/./g;
anstelle vonmap{$h{$_}++}split//,<>;
$h{$_}++for<>=~/./g
, was ich für optimal halte. Literal Newline statt\n
auch.JavaScript
6653 Bytes:6956 Bytes:7865 Bytes:NB: In allen Fällen beziehen
console.log()
sich die gelöschten Bytes auf einen zusätzlichen Aufruf, der sinnlos ist, wenn er in der Konsole ausgeführt wird. Vielen Dank an @imma für den tollen Fang mit-~a[b]
undprompt(a={})
. Das sparte definitiv ein paar Bytes mehr.quelle
for
infor in
- in leeren Tab Testen erzeugt die gleichen Ergebnisse. Auch der letzte;
wird nicht benötigt, also:b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a
for in
gibt dir zwar Funktionen in SO, aber nicht in leerem Tab;)Python 2, richtig (58)
Ausgabe:
Python 2 nach Gepardenart (41)
Ausgabe:
quelle
for l in set(s):print l,":",s.count(l)
. Wenn Sie für das zweite Mal unnötige Leerzeichen entfernen, gewinnen Sie zwei Zeichen:print{l:s.count(l)for l in s}
Mathematica, 61 Bytes
Es öffnet sich dann dieses Dialogfeld,
und für den Beispielsatz als Ausgabe erzeugt
quelle
Python 3, 49
Evuez die idee stehlen
Eingang:
Ausgabe:
quelle
for i in sorted(set(t)):print(i,':',t.count(i))
set()
! ;)JavaScript (
6968 Zeichen):Erwartet
s
, die Zeichenfolge zu halten.Dies folgt den neuen Regeln perfekt.
Hinweis: Dies setzt eine saubere Umgebung ohne benutzerdefinierte Eigenschaften für Standardobjektprototypen voraus.
Bearbeiten: 1 Zeichen weniger!
Konsolenausgabe:
Alte Antwort (44 Zeichen):
Dies war gültig, bevor die Regeln geändert wurden.
r
enthält die Ausgabe.quelle
Haskell, 93
quelle
PowerShell (49)
quelle
C # (178
220Zeichen)Basierend auf @ Spongemans Kommentar habe ich es ein wenig geändert:
quelle
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 Zeichen
Ausgabe
Wenn Sie die Leerzeichen um das
:
ändern möchten , ändern Sie sie꾠
in긃똠
und geben Sie 20 Zeichen ein.Erläuterung
quelle
F # (
66 5949, 72 mit vorgeschriebener Formatierung)Ausgabe:
Mit der vorgeschriebenen Formatierung wird es:
quelle
let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")
let f s=Seq.countBy id s|>Seq.iter(printfn"%A")
Mathematica,
3429 BytesIch bin mir nicht sicher, warum die andere Mathematica-Antwort so kompliziert ist ...;)
quelle
Heftiger Schlag (
2015 Zeichen)ASCII-Codierung wird jetzt unterstützt
Bash (23 Zeichen):
ASCII-Formatierung wird nicht unterstützt
quelle
Java 8,
273253249246239200 Bytes-24 Bytes dank @Poke .
-7 Bytes dank @ OlivierGrégoire .
Erläuterung:
Probieren Sie es hier aus.
quelle
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);
anstattm.put(c,m.get(c)!=null?(int)m.get(c)+1:1);
3 Bytes zu sparen.Powershell, 63
quelle
$a[$_]
mit$a.$_
. Seehelp about_hash_tables
Windows-Befehlsskript - 72 Bytes
Ausgänge:
quelle
J, 23 Zeichen
Etwas anderes Ausgabeformat (Zeile 2 ist stdin):
quelle
J, 22 Zeichen
Beispiel:
quelle
C #
In unserem Fall, wenn die Eingabe sein wird " Die Definition von Wahnsinn zitiert immer wieder denselben Satz und erwartet keine Verzweiflung. "
Die Ausgabe wird sein:
quelle
string str = Console.ReadLine();
. Aber das ist Code-Golf, also sollte es eigentlich so seinvar str=Console.ReadLine();
. Die anderen Kommentare, die ich machen möchte, müssen zurückgestellt werden, bis OP die Frage verbessert.C #: 129
Dies ist Avivs Antwort, aber kürzer:
Das ist meins:
C #: 103
quelle
Python 2 (90 Zeichen)
Ausgabe, wenn auf einer eigenen Quelle ausgeführt:
quelle