Schreiben Sie ein Programm, das eine Liste der Vorkommen jedes einzelnen Zeichens im Quellcode ausgibt.
Zum Beispiel sollte dieses hypothetische Programm {Source_Print_1};
diese Ausgabe erzeugen:
; 1
P 1
S 1
_ 2
c 1
e 1
i 1
n 1
o 1
p 1
r 2
t 1
u 1
{ 1
} 1
Die Formatierung sollte mit diesem Beispiel übereinstimmen. Außer einem optionalen letzten Zeilenumbruch sind keine zusätzlichen Leerzeichen zulässig.
Ihr Programm liest möglicherweise keinen eigenen Quellcode aus der Quelldatei.
Die aufgelisteten Zeichen müssen in einer von zwei Reihenfolgen sein. Entweder die Reihenfolge der Zeichenwerte in der von Ihrer Sprache verwendeten Zeichenkodierung (wahrscheinlich ASCII) oder die Reihenfolge, in der die Zeichen in Ihrer Quelle angezeigt werden.
Diese Frage inspiriert durch diesen Kommentar von Jan Dvorak .
Antworten:
CJam, 14 Bytes
Probieren Sie es hier aus .
Die Ausgabe erfolgt in der Reihenfolge, in der sie zuerst angezeigt wird:
Es wird einfach
<SP>2<NL>
an jedes Zeichen in angehängt{S2N`/}
.quelle
/// , 12 Bytes
Ein großes Dankeschön geht an @ user23013, der diese Verbesserung gegenüber meinem CJam-Code vorgeschlagen hat und dabei seine eigene, am höchsten bewertete Antwort übertroffen hat.
Die Zeichen sind nach Erscheinungsbild sortiert. Dieser Code funktioniert in jeder Sprache, die unter den gegebenen Umständen (PHP, ASP usw.) nur ihren eigenen Quellcode ausgibt.
CJam, 20 Bytes
Dieser Ansatz verwendet keine eingebaute Zeichenzählung.
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
CJam, 20 Bytes
Wie es funktioniert
Wir beginnen zuerst mit einem der Standard-Quines in CJam
Dadurch wird der erste Block auf den Stapel verschoben, kopiert und die Kopie ausgeführt, wodurch der Quellcode selbst schließlich gedruckt wird.
Dann fügen wir die Logik hinzu, um die Zeichenanzahl aus dem Quellcode zu berechnen:
Probieren Sie es hier online aus
quelle
Python 3.5.0b1 ,
10773 BytesAnstelle des üblichen String-Ersatz-Quines, bei dem alles zweimal geschrieben werden muss, ist hier ein
exec
Quine.quelle
Mathematica, 101 Bytes
Leider kann ich nicht wie Leerzeichen entfernt eine der normalen Golf Tricks,
<>
fürStringJoin
,#
statt#1
,@
für Anrufe Präfix Funktion oder@@@
stattApply[...,{1}]
, weilToString[...,InputForm]
denkt , dass es zu ziemlich Druck alles hat ...Dies druckt die Zeichen in der Reihenfolge, in der sie zuerst im Code erscheinen. Wenn ich davon ausgehen kann, dass dies nicht in einer REPL-Umgebung ausgeführt wird (was für Mathematica eher ungewöhnlich ist), kann ich zwei Bytes sparen, indem ich die beiden weglasse
;
.quelle
InputForm
ist ärgerlich ...OutputForm
ist besser, zitiert aber keine Zeichenketten.Haskell, 178 Bytes
Nichts Besonderes. Alle Zeichen des Programms befinden sich in einer Literalliste (String). So sind die Frequenzen. Zippen Sie beide Listen und drucken Sie sie aus. Ausgabe:
quelle
Dart -
214127Eine direkte Version:
Die "4" ist nur ein fummeliger Faktor, um die Zahlen zu addieren. Siehe / laufen auf DartPad .
Original: Standard-Quine-Taktik, und Darts Funktionsnamen sind etwas zu lang für gutes Golfen.
Siehe / starte es auf DartPad .
quelle
Haskell , 146 Bytes
Probieren Sie es online!
Ausgabe:
(Plus eine zusätzliche Newline)
Erläuterung:
Der Code ist
wo
"<code>"
ist eine Zeichenfolge des Programmcodes ohne das"
.a
Durchläuft die ASCII-Zeichen und beginnt mit einem Leerzeichen.sum[2|b<-show"<code>",a==b]
zählt, wie oft das Zeichen in der Zeichenfolge vorkommt, wobei jedes Vorkommen zweimal gezählt wird.a:" "++show s
Erstellt eine Zeichenfolge aus dem aktuellen Zeichen, einem Leerzeichen und der Anzahl der Zeichen. Zum Schluss wirdmapM putStrLn
jede Zeichenfolge in der Liste mit einem nachgestellten Zeilenumbruch gedruckt.Das Schwierigste war, den
"
richtigen Wert zu ermitteln . Die Verwendung von justb<-"<code>"
würde null Anführungszeichen zählen, da die Zeichenfolge keine enthält. Durch Verwenden von wirdshow"<code>"
ein"
vor und ein Ende der Zeichenfolge hinzugefügt, was zu einer Anzahl von vier führt. Also musste ich zwei zusätzliche Anführungszeichen in den Code setzen, also anstelle der (kürzeren), diea:' ':show s
ich verwendetea:" "++show s
.quelle