In der Typografie ist ein Zähler der Bereich eines Buchstabens, der ganz oder teilweise von einer Buchstabenform oder einem Symbol umschlossen ist. Ein geschlossener Zähler ist ein Zähler, der vollständig von einem Buchstaben oder Symbol umschlossen ist. Sie müssen ein Programm schreiben, das eine Zeichenfolge als Eingabe verwendet und die Gesamtzahl der geschlossenen Zähler im Text ausgibt.
Deine Eingabe:
Kann eine Befehlszeileneingabe sein oder von STDIN, aber Sie müssen angeben, welche.
Besteht vollständig aus druckbaren ASCII-Zeichen, dh allen ASCII-Werten zwischen 32 und 126 einschließlich. Dies schließt Leerzeichen ein. Mehr Informationen.
Dies variiert nun geringfügig zwischen den Schriftarten. Die Schriftart, in der Sie dies lesen, hat beispielsweise "g" einen geschlossenen Zähler, während die Google-Schriftart "g" mit zwei geschlossenen Zählern hat. Damit dies kein Problem ist, finden Sie hier die offizielle Anzahl der geschlossenen Marken pro Charakter.
Alle Symbole ohne geschlossene Zähler:
!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~
Beachten Sie, dass dies Platz einschließt.
Hier sind alle Symbole mit einem geschlossenen Zähler:
#0469@ADOPQRabdegopq
Und hier sind alle Symbole mit 2 geschlossenen Zählern:
$%&8B
Und zu guter Letzt hier einige Beispiele für Ein- und Ausgänge.
Programming Puzzles and Code-Golf
sollte drucken 13
4 8 15 16 23 42
sollte drucken 5
All your base are belong to us
sollte drucken 12
Standard loopholes apply
sollte drucken 12
Shortest answer in bytes is the winner!
sollte drucken 8
g
hat die zwei geschlossene Zähler. Haben Sie die Zähler anhand einer bestimmten Schriftart ermittelt?g
hat 2. Etwas verwirrend zu lesen, aber ich denke nicht, dass es von Ort zu Ort unterschiedlich ist.0
bestimmte Schriftarten, insbesondere viele Monospace-Schriftarten, keine zwei geschlossenen Zähler?Antworten:
Pyth, 31 Bytes
Demonstration.
Beachten Sie, dass der Code aufgrund der Verwendung von Nicht-ASCII-Zeichen möglicherweise nicht richtig angezeigt wird. Der richtige Code ist am Link.
Ich erstellte eine Nachschlagetabelle der gewünschten Ausgabe für jedes Eingabezeichen, drehte sie um 32, um die modulare Indizierung von Pyth zu nutzen, klebte am Anfang eine 1 und interpretierte sie als Zahl zur Basis 3, wobei ich die Zahl erhielt
2229617581140564569750295263480330834137283757
. Ich habe diese Zahl dann in die Basis 256 konvertiert und in eine Zeichenfolge umgewandelt, die in der Antwort verwendet wird.quelle
Python 3, 63
Ein unkomplizierter Ansatz. Durchläuft jedes Zeichen mit einem geschlossenen Zähler, summiert die Anzahl der Vorkommen und macht dies zweimal für Zeichen mit zwei geschlossenen Zählern. Es wäre genauso lang, stattdessen zu schreiben
Python 3 ist erforderlich, um dies zu vermeiden
raw_input
.quelle
CJam,
41393734 BytesDanke an @ jimmy23013 für das Golfen mit 3 Bytes!
Probieren Sie es online aus.
Wie es funktioniert
quelle
"$%&8Badopq#0469@Rbeg"_A<eu+
.eu
und ausprobiertel
, aber das habe ich nie gefunden. Vielen Dank!sed, 51
Mit Golfhilfe von @manatwork und @TobySpeight:
Eingabe von STDIN. In Anbetracht dieser Meta-Frage ist die Ausgabe unär:
quelle
Perl, 41
41
Zeichen +1 für die-p
Flagge.Dies verwendet y ///, um die Zeichen zu zählen.
quelle
GNU APL, 39 Bytes
Versuchen Sie es online in GNU APL.js .
Wie es funktioniert
quelle
JavaScript, 86
I / O über Popup. Führen Sie den Code - Schnipsel in jedem
daktuelleren Browser zu testen.quelle
K,
54434237 BytesSchneiden Sie 5 Bytes dank @JohnE!
Ältere Version:
Original:
quelle
#&
Innere der Parens könnte genauso gut sein+/
, was bedeutet, dass Sie weiter gehen könnten+//"#0469@ADOPQRabdegopq$%&8B$%&8B"=\:
. Schließlich ist es nicht erforderlich, die zu haben,f:
da die Funktion in stillschweigender Form verwendet werden kann. Das würde dich auf 38 bringen!+//(30#"$%&8B#0469@ADOPQRabdegopq")=\:
. Dies kann das Beste sein, was wir tun können.+//(30#"$%&8B#0469@ADOPQRabdegopq"=)'
C 127 Bytes
Ziemlich einfach. Ungolfed-Version:
Teste es hier
Wenn Funktionsargumente nicht zulässig sind,
stdin
nimmt die Version bis zu 141 Byte in Anspruch:Beachten Sie, dass in der obigen Version davon ausgegangen wird, dass die Eingabe höchstens 98 Zeichen umfasst.
Teste es hier
Befehlszeilenargumente Version (143 Bytes):
Teste es hier
quelle
Python 2,
96907567 + 2 = 69 BytesIch kann mir keinen anderen Weg vorstellen, dies zu tun ... hätte ich gedacht, bis ich die Lösung von xnor gesehen habe. Ich werde sowieso posten, was ich hatte.
Vielen Dank an FryAmTheEggman für die Einsparung von 6 Bytes
Okay, jetzt bin ich damit zufrieden.
Danke an xnor für den Suchtrick, der 4 Bytes spart.
Zwei Bytes hinzugefügt, da die Eingabe in Anführungszeichen gesetzt werden muss.
quelle
Java, 162
Na wenn doch hat ein volles Programm sein ... Es ist nur ein Einzeiler , dass Streichhölzer Zeichen und ersetzt sie mit einer längeren Zeichenfolge. Gibt dann den Längenunterschied zum Original zurück. Leider hat Java nicht wirklich etwas, um nur die Anzahl der Treffer zu zählen.
Hier ist es mit Zeilenumbrüchen:
quelle
Pyth - 35 Bytes
Verwendet die offensichtliche Methode von in first + * 2 in second. Vielen Dank @FryTheEggman.
Probieren Sie es hier online .
quelle
Javascript,
11495 BytesVielen Dank an Ismael Miguel, der mir dabei geholfen hat, Golf zu spielen.
quelle
alert(prompt().replace(/[#046@ADOPQRabdegopq]/g,9).replace(/[$%&8B]/g,99).match(/9/g).length)
Ruby, 59 Bytes
Eingabe von der Kommandozeile oder stdin. Am kürzesten bisher mit einer nicht esoterischen Sprache.
Update: chilemagic hat mich geschlagen
quelle
Retina , 44 Bytes
Gibt eine unäre Ausgabe aus.
Jede Zeile sollte in eine eigene Datei gehen oder Sie können das
-s
Flag verwenden. Z.B:Die Linienpaare (Muster - Ersatzpaare) führen die folgenden Substitutionsschritte aus:
1
's1
11
1
‚squelle
J, 43
Als eine Funktion:
46 Bytes (Befehlszeile)
Als eigenständiges Befehlszeilenprogramm:
Speichern Sie die obige Zeile als
counter2.ijs
und rufen Sie über die Befehlszeile auf:quelle
f=:your_function_code
.Julia,
7774 BytesDadurch wird Text aus STDIN gelesen und das Ergebnis an STDOUT ausgegeben.
Ungolfed + Erklärung:
Beispiel:
quelle
RS , 56 Bytes
Live-Demo.
quelle
GNU APL, 37 Zeichen
konstruiere einen Zeichenvektor, der 2-Zähler-Zeichen zweimal enthält (30⍴)
vergleiche jedes Eingabezeichen mit jedem Zeichen im Vektor (∘. =)
fasse verwüstete Übereinstimmungen zusammen (+ /,)
quelle
Javascript
159, 130 Bytesnicht abgeschlossen:
Mit Hilfe von @ edc65:
quelle
~ -1 == 0
kann man~x?
statt schreiben-1 != x?
. Ich möchte ein Anwendungsbeispiel beantworten.function c(b){return b.split('').reduce(function(t,a){return t+(~"$%&8B".indexOf(a)?2:~"#0469@ADOPQRabdegopq".indexOf(a)?1:0)},0)}
Keine Notwendigkeit zu haben,map
dannreduce
Haskell, 117
c ist eine Funktion,
c :: Int -> String -> Int
die einen Zähler und eine Zeichenfolge verwendet und die Zeichenfolge Buchstabe für Buchstabe durchläuft. Dabei wird geprüft, ob der aktuelle Buchstabe Mitglied des 1-Punkt-Arrays oder des 2-Punkt-Arrays ist, und der Rest der Zeichenfolge wird nach dem Inkrementieren aufgerufen der Zähler den entsprechenden Betrag.Anruf mit Zähler = 0 in ghci:
quelle
C #, 157
Ungolfed:
Konvertieren Sie den String in ein char-Array und prüfen Sie, ob sich jedes Zeichen in einem der Zähler befindet. Wenn es in der zweiten ist, muss ich es nur den Zähler erneut inkrementieren.
quelle
Erlang, 103 Bytes
Dies ist ein vollständiges Programm, das mit Escript ausgeführt wird. Die erste Zeile der Datei muss leer sein (1 Byte hinzufügen).
Probelauf:
quelle
C 99 Bytes
Erläuterung
Ich spielte die Antwort von Cool Guy weiter aus . Es wurde zu lange, um einen Kommentar abzugeben. Anstelle von
if
/ habeelse
ich!
einen Zeiger in bool konvertiert. Ich habe aucho
include gemacht,t
damit ich "is ino
" und "is in " hinzufügen kannt
" für die Gesamtzahl der Zähler .Erweiterter Code
Ausgang ist in
num
, die vor jedem Anruf gelöscht werden muss.Testprogramm und Ergebnisse
Der Code selbst enthält 37 Zähler nach eigener Metrik.
quelle