Das Ziel ist wirklich einfach. Wenn Sie eine Zeichenfolge als Eingabe erhalten, analysieren Sie alle HTML-Entitäten, die den folgenden Zeichen entsprechen (einschließlich ihrer Großbuchstabenvarianten):
áàãâäéèêëíìîïóòõôöúùûüýÿ
Analyseregeln:
- Jede Entität beginnt mit
&
und endet mit;
- Das erste Zeichen nach dem
&
wird das geänderte Zeichen sein (Groß- und Kleinschreibung ist wichtig!) - Die restlichen Zeichen auf den Namen des Akzent beziehen sich auf verwenden (
acute
,grave
,circ
,tilde
unduml
). Der Akzentname MUSS in Kleinbuchstaben sein! * * - Jede HTML - Entität , die ein Zeichen erzeugt , die nicht auf dieser Liste enthalten ist, oder das ist ungültig, sollte unangetastet bleiben (zB:
&
,&etilde;
,&a;
) - Numerische Entitäten sollten ignoriert werden, da sie nicht in die obigen Regeln passen
Diese Änderung wurde am 18-02-2016 eingeführt. Alle vorhandenen Antworten, die HTML-Entitäten mit Akzentnamen in Großbuchstaben akzeptieren, sind gültig. Jede zukünftige Antwort muss dieser Regel folgen.
Beispiele:
á //á
Téhèh //Téhèh
an & //an &
Ausgabe:
Die Ausgabe kann in ISO-8859- X (1-15), Windows-1252 oder UTF-8/16/32 erfolgen.
Sie können eine und nur eine der gültigen Codierungen auswählen und für jede Ausgabe verwenden. Sie können davon ausgehen, dass die Eingabe in ASCII erfolgt.
Eine der folgenden Angaben ist eine gültige Ausgabe für á
:
á
(ISO-8859-1 / 15 oder Windows-1252, entspricht\xE1
)á
(UTF-8, entspricht\xC3\xA1
oder\u00E1
)aÌ
(UTF-8, entsprichta\xCC\x81
odera\u0301
)- Beliebige Kombination von Diakritika ohne Verwendung von HTML-Entitäten.
Die Ausgabe muss beim Rendern / Anzeigen den Zeichen in der Liste visuell ähnlich sein.
Denken Sie daran, dass alle Standardlücken und integrierten Funktionen * nicht zulässig sind . Da dies Code-Golf ist , gewinnt die kürzeste Antwort.
* Diese Änderung wurde aufgrund der großen Missbilligung von Boni und Strafen vorgenommen und macht zum Zeitpunkt des Schreibens keine Antwort ungültig
Antworten:
Japt,
8175 BytesDie sechs
?
s stehen für nicht druckbare Zeichen. Testen Sie es online!Hinweis: Dies gibt die dritte Codierungsoption aus. das heißt, der Buchstabe, gefolgt von der rohen UTF-8-Codierung der entsprechenden diakritischen Kombinationsmarke.
Wie es funktioniert
Hexdump des Codes:
quelle
Ý
Ruhe zu lassen , aber es sollte in Ý ... geändert werdenJavaScript (ES6),
141122134 BytesIch bin Daavkos Beispiel mit diakritischen Zeichen gefolgt, und ich fühle mich wie ein Idiot, weil ich nicht daran gedacht habe, es früher zu verwenden. Wird für JavaScript eigentlich überraschend kurz.
EDIT: Neil hat einige schlimme Fälle von undefiniert gefangen, die jetzt behoben sind.
quelle
String.prototype.replace
ist so lächerlich golfbar für das Durchqueren von Saiten.É
(was auch immer das Richtige ist).Netzhaut , 115 Bytes
Ich bin neu im Code-Golf, aber ich denke, das könnte funktionieren.
Diese Version wurde vor der
Á
Einführung der Regel erstellt, die das Ersetzen von HTML-Entitäten in Großbuchstaben (zum Beispiel ) nicht zulässt .Ganz einfach suchen und ersetzen. Verwendet UTF-8.
Verwendet den Ansatz [Buchstabe] \ xCC \ x [Hex-Code für diakritische Markierung]. Nach jedem relevanten Buchstaben wird eine diakritische Markierung hinzugefügt.
Aus irgendeinem Grund kann die Standardschriftart Droid Sans Mono im Interpreter die Buchstaben "circ" und "uml" nicht richtig rendern. Wenn Sie es über Entwicklertools in etwas wie DejaVu Sans ändern, wird es gut angezeigt. Ich denke, dies ist eine Einschränkung der Schriftart, nicht des Programms. Aber wenn das Programm schuld ist, werde ich versuchen, es zu beheben.
Hier ist eine 129-Byte-Version, die HTML-Entites in Großbuchstaben (zum Beispiel
Á
) nicht ersetzt.Probieren Sie es online aus!
Probieren Sie es online aus! 129-Byte-Version
quelle
JavaScript (ES6), 288 Byte
Erstellt ein Zeichentabellenobjekt (mit dem numerischen Basiscode für jedes Zeichen) und verwendet Offsets (oder 0, falls nicht vorhanden), um zu bestimmen, ob eine Entität konvertiert werden soll und wie ihr Zeichencode lautet. Symmetrie bedeutet in den Fällen das Hinzufügen von 32 in Kleinbuchstaben, außer wenn
Ÿ
ein anderer Offset für UTF8 verwendet wird.quelle
Ÿ
in UTF8 tatsächlich eine gibt : Es ist nur an einem seltsamen Ort. Trotzdem dachte ich, ich hätte es ziemlich gut verdichtet und optimiert, da eine wörtliche Ersetzungsliste mehr als doppelt so lang wäre. Sehen Sie etwas, was ich nicht bin?.toLowerCase()
. Dieser Name ist riesig !!! AuchString.fromCharCode
können mehrere Parameter übernehmen, oder wie genannt werdenString.fromCharCode.call([...])
i
Flagge nicht benötigt .