Wie schnell kann ich dein Programm sagen?

26

Ich habe vor kurzem beschlossen, eine Diktiersoftware herunterzuladen, um beim Schreiben zu helfen. Es funktioniert jedoch nicht sehr gut, wenn ich codiere, da ich vom Sprechen von Wörtern zu Symbolen und wieder zurück wechseln muss. Es ist noch schlimmer , wenn ich in einer esoterischen Sprache bin Codierung , die ist alle Symbole.

Um das Diktierprogramm konsistenter zu nutzen, habe ich beschlossen, es auf den Zeichenmodus umzustellen, in dem ich stattdessen nur den Namen der einzelnen Zeichen sage. Problem gelöst! Obwohl dies das Erscheinungsdatum meines Romans ein wenig verzögert ...

Angenommen also, je länger der Name eines Charakters ist, desto länger dauert es, zu sagen, wie lange ich brauche, um einige meiner Programme / Sätze zu buchstabieren?

Spezifikationen

Geben Sie bei einer Zeichenfolge, die nur aus druckbarem ASCII besteht, die Summe der Unicode-Namen der einzelnen Zeichen zurück. Zum Beispiel /heißt SOLIDUSmit 7 Zeichen und Aist LATIN CAPITAL LETTER Amit 22 Zeichen.

Denken Sie jedoch daran, dass ich Ihre Programme laut aussprechen muss, um sie auszuführen, damit ihre Bewertung davon abhängt, wie lange ich brauche, um sie auszusprechen, dh als Summe der Längen des Unicode-Namens der einzelnen Charaktere.

Testfälle:

Im Format input => outputohne nachgestellte / führende Leerzeichen in der Eingabe.

A      => 22
/      => 7
Once upon a time...           => 304
slurp.uninames>>.comb.sum.say => 530
JoKing => 124
!" #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        =>  1591
Double-check your \s on the last test case ;)   => 755
<say "<$_>~~.EVAL">~~.EVAL     => 388
,[.,]  => 58
19     => 19

Regeln:

  • Die Eingabe in Ihr Programm besteht nur aus druckbaren ASCII-Zeichen, dh den Codepunkten 32 (Leerzeichen) bis 126 (Tilde).
    • Der Einfachheit halber ist hier die Liste der Längen der Zeichen, mit denen Sie umgehen müssen: [5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,15,20,17,8,12,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,18,13,19,5]
  • Hier ist ein Referenzprogramm, mit dem Sie Ihr Programm bewerten können.
    • Peter Taylor hat darauf hingewiesen, dass das Referenzprogramm einige Unicode-Zeichen normalisiert . Es sollte immer noch für die meisten Lösungen funktionieren, aber Sie können es jederzeit korrigieren, wenn Sie es benötigen
  • Da Sie sagen, wie die Zeichen tatsächlich aussehen, wird Ihre Lösung anhand der angezeigten Zeichen und nicht anhand der beteiligten Bytes bewertet. Dies richtet sich an Sprachen mit benutzerdefinierten Codierungen.
    • Sie können davon ausgehen, dass ich die gesamte Unicode-Bibliothek auswendig gelernt habe und alle seltsamen Zeichen, die Sie verwenden, aussprechen kann.
  • Sorry Rogem, aber die Antworten müssen aus darstellbaren Zeichen bestehen. Unprintables sind in Ordnung, ich muss nur in der Lage sein, die Zeichen laut vorzulesen.
  • Was auch immer Sie tun, verwenden Sie es nicht in Ihrem Programm.
Scherzen
quelle
9
ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMDies wird der vollständige Name meines Kindes sein
Quintec
1
Dieses Programm erzielt im Wortmodus 6 Punkte: Probieren Sie es online aus!
Neil
2
Das Referenzprogramm ist fehlerhaft. Betrachten Sie [diesen Test] ( tio.run/##dY5PC4JAEMXvfYphYcNsWcrSi@Ahrx3rlB223FTSXdk/… ), wobei \x[2126]gilt als \x[3a9].
Peter Taylor

Antworten:

13

Java 8, Score 846 838 822 816

ௐ->ௐ.map(ˇ->Character.getName(ˇ).length()).sum()

-8 Punkte dank @tsh anstelle von _1mit .
-22 Punkte dank @ ASCII- Ersetzen von mit ˇund $mit .

Probieren Sie es online aus.

Erläuterung:

Das und ˇwird anstelle des sund verwendet, was cich normalerweise verwenden würde, da Kleinbuchstaben alle 20 sind (dh LATIN SMALL LETTER S), aber ( TAMIL OM) ist 8 und ˇ( CARON) ist 5.

ௐ->                         // Method with IntStream parameter and integer return-type
  ௐ.map(ˇ->                 //  Map each character to:
      Character.getName(ˇ)  //   Get the name of the character
               .length())   //   Get the length of that name
   .sum()                   //  And after the map: sum all lengths together,
                            //  and return it as result
Kevin Cruijssen
quelle
1
Ich mag, wie dieses Java-Zeug die 05AB1E-Antwort sowohl in Bezug auf die Bytes als auch in Bezug auf die Punktzahl schlägt ...
Erik the Outgolfer
@EriktheOutgolfer Ikr. Builtins ftw denke ich. ;)
Kevin Cruijssen
@ KevinCruijssen Es spart ein paar Bytes, die Sie nicht müssen push compressed integer 87235805968599116032550323044578484972930006625267106917841: P
Quintec
1
Verwenden Sie statt _1würde einige Punkte sparen.
Dienstag,
1
@KevinCruijssen Peter Taylors ( OHM SIGN) ist 8 Zeichen lang. Haha, mir war auch nicht bewusst, dass es nicht gültig war, nur angenommen, da es in C # gültig ist und Peter es auch verwendete _1( Programm, um kurze Variablennamen zu finden , das Box-Zeichen kann nicht verwendet werden)
Nur ASCII
11

Perl 6 , Punktzahl 337

+*.uninames.&[~].ords

Probieren Sie es online!

nwellnhof
quelle
Das ist .&[~]stattdessen .joinein ordentlicher Trick. Ich kann mich nie erinnern, welche Reduktionsoperatoren durch diese Methode angewendet werden können
Jo King,
7

Japt v2.0a1 -x, Score 926 908 875 865 829 791 789

Nimmt die Eingabe als Array von Zeichen.

®cg`061742//0.450./..//.2/5117385`c+51 r\A_p26}  n# 

Probieren Sie es aus oder führen Sie alle Testfälle unter TIO aus

( APOSTROPHEwird im 6. Testfall von TIO weggelassen, da Japt nicht sowohl einfache als auch doppelte Anführungszeichen in derselben Eingabezeichenfolge verarbeiten kann.)


Erläuterung

®cg`...`c+51 r\A_p26}  n#      :Implicit input of character array
®                              :Map
 c                             :  Character code
  g                            :  Index into (0-based, with wrapping)
   `...`                       :    The string described below
        c+51                   :    Increment the codepoint of each by 51 (="8cKidj55gebbc9agh895c97a99baa9bba59ebhddMjfkh")
                               :    (Space closes the above method)
             r                 :    Replace
              \A               :      RegEx /[A-Z]/g
                _              :      Pass each match through a function
                 p26           :        Repeat 26 times
                    }          :      End function
                               :    (Space closes the replace method)
                               :  (Space closes the indexing method)
                       n       :  Convert to integer
                        #      :    From base 32 (note the trailing space)
                               :Implicitly reduce by addition and output

Die Zeichenfolge erstellen

(Die Bewertungen enthalten die Schritte und zusätzlichen Zeichen, die zum Umkehren jeder Änderung erforderlich sind.)

  1. Das Array ergab eine Grundbewertung von 2161 .
  2. Das Umwandeln in ein einzelnes Zeichen in einer Basis >=23und das Verbinden zu einer Zeichenfolge erzielte 1832 .
  3. Das Ersetzen beider Läufe von mund kdurch einen einzelnen Großbuchstaben ergab 963 .
  4. Es gab immer noch zu viele teure Buchstaben, also versuchte ich, sie loszuwerden, indem ich die Codepunkte aller Zeichen reduzierte. 5war der Charakter mit dem niedrigsten Codepunkt ( 53), also habe ich mit 52 angefangen, was 756 Punkte ergab
  5. Nachdem Sie alle Zahlen ausprobiert haben, die keine Buchstaben in der Zeichenfolge hinterlassen haben , wurde 51die beste Punktzahl von 738 erzielt
  6. Das Ersetzen der Anführungszeichen durch etwas billigere Backticks ergab schließlich eine Punktzahl von 734 . Backticks in Japt werden normalerweise zum Einschließen und Dekomprimieren einer komprimierten Zeichenfolge verwendet. Glücklicherweise ist jedoch keines der Zeichen in dieser Zeichenfolge in Shocos Bibliothek enthalten

Die letzte Zeichenfolge enthält also die Zeichen an den folgenden Codepunkten:

[5,48,24,54,49,55,2,2,52,50,47,47,48,6,46,52,53,5,6,2,48,6,4,46,6,6,47,46,46,6,47,47,46,2,6,50,47,53,49,49,26,55,51,56,53]
Zottelig
quelle
4

05AB1E , Score 963

Îv•Fδà‚<0?9½mΣ@×ƶC₁vc-™uΔ_ε'•21вεD3‹i22α₂и}}˜yÇ32-è+

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

Î               # Push 0 and the input-string
 v              # Loop `y` over the characters of this input-string:
  Fδà‚<0?9½mΣ@×ƶCvc-™uΔ_ε'•
               '#  Push compressed integer 87235805968599116032550323044578484972930006625267106917841
   21в          #  Converted to Base-21 as list: [5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,0,19,15,20,17,8,12,2,18,13,19,5]
    ε           #  Map over this list:
     D3i       #   If the value is smaller than 3:
         22α    #    Take the absolute difference of this value with 22
            ₂и  #    Repeat it 26 times as list
    }}          #  Close the if-statement and map
      ˜         #  Flatten the list
       yÇ       #  Get the unicode value of the current character
         32-    #  Subtract 32
            è   #  Index it into the list of integers
             +  #  And add it to the sum
                # (and output the sum implicitly as result after the loop)

Sehen Sie diese 05AB1E Spitze von mir (Abschnitte Wie große natürliche Zahlen zu komprimieren? Und Wie zu komprimieren integer Listen? ) Zu verstehen , warum •Fδà‚<0?9½mΣ@×ƶC₁vc-™uΔ_ε'•21вist [5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,0,19,15,20,17,8,12,2,18,13,19,5].

Kevin Cruijssen
quelle
4

C # (Visual C # Interactive Compiler) (Ergebnis 1627 1116 1096 1037 1019 902)

Ω=>Ω.Sum(ˇ=>(31&-ˇ)>5&ˇ>62?22-ˇ/91*2:"♁♌♊♇♇♈♅♆♌♍♄♅♁♈♅♃♆♅♅♇♆♆♅♇♇♆♁♅♊♇♍♉♉♏♋♐♍♄♈♎♉♏♁"[ˇ-6-ˇ/33*26]-9788)

Hierbei wird keine integrierte Datenbank verwendet, sondern nur eine spezielle Groß- und Kleinschreibung für Buchstaben und eine Nachschlagetabelle.

Online-Testsuite .

Es kann sich nicht selbst bewerten, da die meisten Zeichen nicht in Reichweite sind, einschließlich der Variablen CARONund OHM SIGNund der Zodiaksymbole, die zum Codieren der Nachschlagetabelle verwendet werden.

Dank nur ASCII für viele Vorschläge.

Peter Taylor
quelle
Welches Bewertungsprogramm haben Sie verwendet?
Nur ASCII
tio.run/##NZDrdpNAFIX/z1OMY0wgwhCg0NAEanpT22jVaquGiAQnYbgMhIHWGJO36gv0xSJrBf@cdS57r72@E3A54HR3UbFgyMuCsoVEWenM7d3To@08PeKbKhU82xG2suDJdgd2xLauikPNbLc9R9eONU32FFPtakeI5CyOExrly5CShC4iSuMoonEcEcriZZryrFyGSZFygiZebdP1rmZOZcsUdwMwzwriB6Fw7xfQh5RBRh4m0zVAIyRBRYGaBpCybw8BumYBgVWesVpb0pRgjPc3vXcAEE@qIscVo8xPCXccHGTpDPMqxdxf7XWG3gPoMruqifcLVauNz1wEn7detDuC2H0pyVjpqZp@YJiHfetoMLSd41ejk9Oz84vXb95eXo3fvb/@8PHTzecvt3dfv32fuO70h/fTnwW/yHwR0ihOUpbly4KX1f3D79Wf9d/NtskyLBWgs6yaJUQOQhLEcJVVBXRdDmukMiQw8XkJS1KXwOcEDsQG3TAAGtYU0EXDludst/j8djR20f@u@UK/D5A0wdK0oa1H1WrCLbARwV1BSzKmjAgttPYly9hAaDsQrueCL26QONj9Aw
ASCII-only
2
@ Nur ASCII, ich habe die unten stehende Python-Antwort verwendet. Die Java-Antwort gibt auch 1627. Das Problem scheint zu sein, dass die Referenzlösung fehlerhaft ist: Ω ist U + 2126, OHM-ZEICHEN , nicht GRIECHISCHES GROSSBUCHSTABEN OMEGA.
Peter Taylor
1
Name der Bewertung 5: ˇ, keine anderen Namen, die kürzer als 8 sind und von C # akzeptiert werden, auch nicht mit dem Java-Programm überprüft
ASCII
1
@ Kevin, laut meinem früheren Kommentar ist die Referenzimplementierung fehlerhaft. Ich denke, es wird eine Normalisierung angewendet, um das Quellzeichen OHM SIGN in GREEK CAPITAL LETTER OMEGA zu verwandeln.
Peter Taylor
4

R; Ergebnis: 3330 1586 1443

Auch in R wegen fehlender Einbauten eine Herausforderung.

Nun, der Code ist jetzt größtenteils @ Giuseppe, aber das ist in Ordnung. Ich konnte eine kleine Änderung vornehmen, um weiter Golf zu spielen, indem ich das * durch das ~ und das s durch den Punkt ersetzte.

Vielen Dank an @Nick Kennedy, der dafür gesorgt hat, dass er mithilfe von Arcane Magic "eine UTF8-codierte Version der Zahlenfolge" auf 1443 gebracht hat.

function(.)sum((c(+",752230178/0,30.1002110221,052844",61~26,+":6;8/3",59~26,+"94:,")-39)[+.-31]);`+`=utf8ToInt;`~`=rep

Probieren Sie es online aus

CT Hall
quelle
1769 Punkte - macht einen minimalen Versuch, die Werte zu komprimieren ...
Giuseppe
2
Auch utf8ToIntein super hilfreich Befehl für den Golfsport ist :-) Ich habe auf PPCG einen Monat lang nicht oder so, so schön es ist , neue Leute in R Golf spielen zu sehen!
Giuseppe
Ah, ich hatte eine Möglichkeit, es zu komprimieren, wusste aber nichts von utf8ToInt. Daran muss ich heute Abend / morgen später arbeiten.
CT Hall
1
Es sind nur mehr Codezeilen unter dem Programm / Snippet, die bytecount nicht beeinflussen - nützlich, um einige Tests durchzuführen
ASCII-
1
Bis 1443: tio.run/##xc09DoIwFADgu3ShTR/… Verwenden einer UTF8-codierten Version der Zahlenfolge.
Nick Kennedy
3

Python 3 , Score von 993

lambda _:len(''.join(map(__import__('unicodedata').name,_)))

Probieren Sie es online!

Unter 1000 jetzt noch alle Tipps geschätzt.

-16 danke an Kirill L.

nedla2004
quelle
2
993
Kirill L.
1
Sie können _durch ˇfür 987 ersetzen .
Lynn
2

Perl 5 -pl , Punktzahl 723

s,\N{OX}*.,_charnames'viacode ord$&,ge,$_=y,,,c

Probieren Sie es online!

Erläuterung

s,        ,                        ,ge  # Replace globally
  \N{OX}*   # zero or more OX characters 🐂, loads the
            # _charnames module as side effect,
         .  # any character
           _charnames'viacode ord$&  # with its Unicode character name
                                     # (using old package delimiter).
                                      ,$_=y,,,c  # Set $_ to its length
nwellnhof
quelle
2

Attache , 1934

Sum@{ToBase[FromBase[Ords@"!ZByru=#9fBYb$a3Si0^pU,ZP#3$cd'(c-_lhu]h(]5;!W|?M4:<_^sU;N&XFN`t:u"-32,95],23][Ords@_-32]}

Probieren Sie es online!

Einfache Komprimierung und Indizierung.

Conor O'Brien
quelle
: P sieht so aus, als würde eine intelligentere Suche (siehe C # -Antwort) bei der Bewertung helfen. Oder verwenden Sie einfach einen Zeichensatz, der keine zu komprimierenden Buchstaben enthält
ASCII
1

C # (Visual C # Interactive Compiler) , Partitur: 4007 3988 3759 3551 2551

ˇ=>ˇ.Sum(_=>new[]{5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,15,20,17,8,12,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,18,13,19,5}[_-32])

Ich fühle mich von Peter Taylors Lösung oben niedergeschlagen. Dank an Peter Taylor für den Hinweis auf eine einfache Nachschlagetabelle war besser als meine vorherige Wörterbuchlösung.

Probieren Sie es online!

Verkörperung der Ignoranz
quelle
Dies ist erheblich schlimmer als eine direkte Nachschlagetabelle: _1=>_1.Select(_2=>new int[]{5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,15,20,17,8,12,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,18,13,19,5}[_2-32]).Sum()Punktzahl 2786.
Peter Taylor