あなたのプログラムをどれくらい早く言うことができますか?


26

私は最近、筆記を手伝うために、ディクテーションソフトウェアをダウンロードすることにしました。ただし、コーディング中は言葉を記号から記号に変えたり、元に戻したりする必要があるため、うまく機能しません。私がすべてのシンボルである難解な言語でコーディングしているときはさらに悪化ます。

ディクテーションプログラムの使用をより一貫性のあるものにするために、文字モードに切り替えることにしました。代わりに各文字の名前を言うだけです。問題が解決しました!これは私の小説のリリース日を少し遅らせますが...

だから、キャラクターの名前が長いほど、言うのに時間がかかると仮定すると、私のプログラム/文章のいくつかを綴るのにどれくらい時間がかかりますか?

仕様書

印刷可能なASCIIのみで構成される文字列を指定すると、各文字のUnicode名の合計を返します。たとえば、/呼び出されたSOLIDUS7つの文字で、そしてAあるLATIN CAPITAL LETTER A22文字で。

しかし、覚えておいて、実行するためにあなたのプログラムを大声で言わなければならないので、それらのスコアは私がそれらを言うのにかかる時間、すなわち各キャラクターのユニコード名の長さの合計に基づきます。

テストケース:

input => output入力に末尾/先頭スペースのない形式で。

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

ルール:

  • プログラムへの入力は、印刷可能なASCII文字、つまりコードポイント32(スペース)から126(チルダ)のみで構成されます。
    • 便宜上、処理する必要がある文字の長さのリストを以下に示します。 [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]
  • 以下は、プログラムを採点するために使用できる参照プログラムです。
    • ピーターテイラーは参照プログラムがいくつかのUnicode文字を正規化すると指摘しました。ほとんどのソリューションで引き続き機能するはずですが、必要に応じて修正してください
  • 文字が実際にどのように見えるかを言っているので、ソリューションは、関係するバイトではなく、表示される文字によってスコア付けされます。これは、カスタムエンコーディングを使用する言語を対象としています。
    • あなたは、私がユニコードライブラリー全体を覚えており、あなたが使用する奇妙な文字は何でも言うことができると仮定できます。
  • 申し訳ありませんが、回答は表示可能な文字で構成する必要があります。印刷できないものは問題ありません。文字を読み上げることができればいいのです。
  • 何をするにしても、プログラムで使用しないでください。

9
ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMこれは私の子供のフルネームになります
Quintec

1
このプログラムはワードモードで6点満点です:オンラインで試してみてください!
ニール

2
参照プログラムにはバグがあります。検討【この試験は(tio.run/##dY5PC4JAEMXvfYphYcNsWcrSi@Ahrx3rlB223FTSXdk/...は)ここ\x[2126]としてカウントされます\x[3a9]
ピーターテイラー

回答:


13

Java 8、スコア846 838 822 816

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

-8のおかげでスコア@tsh置き換える_1。with およびwith
を@ASCII のみに置き換えることˇ、-22スコアになり$ました

オンラインでお試しください。

説明:

代わりに使用されていると小文字があるので、私は通常、すべての20(すなわち、使用します)が、(は)8と()5です。ˇscLATIN SMALL LETTER STAMIL OMˇCARON

ௐ->                         // 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

1
私は、このJavaがバイトとスコアの両方の点で05AB1Eの答えを打ち負かすのが好きです...
Erik the Outgolfer

@EriktheOutgolfer Ikr。ビルトインftw私は推測します。;)
Kevin Cruijssen

@KevinCruijssen 必要のないバイトを保存しますpush compressed integer 87235805968599116032550323044578484972930006625267106917841:P
Quintec

1
代わりに使用する_1と、いくつかのポイントが節約されます。
tsh

1
@KevinCruijssen Peter TaylorのOHM SIGN)は8文字の長さです。また、ハハ私が使用し、それはC#とピーターに有効だからちょうど仮定し、それが有効ではありませんでした気づいていなかった_1、あまりにも(短い変数名を検索するプログラムを、ボックスの文字は使用できません)
ASCIIのみ


7

JAPT v2.0a1 -x、スコア926 908 875 865 829 791 789

入力を文字の配列として受け取ります。

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

試してみる、TIOですべてのテストケースを実行してください

APOSTROPHEJaptは同じ入力文字列内の単一引用符と二重引用符の両方を処理できないため、TIOの6番目のテストケースから省略されます)


説明

®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

文字列の構築

(スコアには、各変更を元に戻すために必要な手順と余分な文字が含まれています)

  1. 配列のベースラインスコアは2161でした。
  2. それぞれをベース内の単一の文字に変換し、>=23スコア付けされた文字列に結合します1832
  3. との両方の実行をmkスコア963の単一の大文字に置き換えます。
  4. 高価な文字がまだ多すぎるので、次にすべての文字のコードポイントを減らしてそれらを削除しようとしました。5最低のコードポイント(と文字だった53得点私は52で開始して)、756
  5. 文字列に文字を残さないすべての数字を試した後51、最高スコア738を与えました
  6. 最後に、引用符をわずかに安価なバックティックに置き換えると、スコアは734になりました。Japtのバックティックは通常、圧縮された文字列を囲み、解凍するために使用されますが、幸いなことに、この文字列の文字はどれもShocoのライブラリに含まれていません

したがって、最後の文字列には、次のコードポイントの文字が含まれます。

[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]

4

05AB1E、スコア963

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

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

Î               # 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)

(セクション鉱山のこの05AB1Eのヒントを参照してください?大きな整数を圧縮する方法どのように圧縮整数リストへ?理由を理解すること•Fδà‚<0?9½mΣ@×ƶC₁vc-™uΔ_ε'•21вです[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]


4

C#(Visual C#Interactive Compiler)(スコア1627 1116 1096 1037 1019 902)

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

これは組み込みのデータベースを使用しません。文字とルックアップテーブルの特別なケースだけです。

オンラインテストスイート

ルックアップテーブルのエンコードに使用される変数CARONOHM SIGN星座記号など、ほとんどの文字が範囲内にないため、それ自体をスコアリングすることはできません。

多くの提案をしてくれたASCIIのみに感謝します。


あなたはどのようなスコアリングプログラムを使用しなかった
ASCIIのみ

tio.run/##NZDrdpNAFIX/z1OMY0wgwhCg0NAEanpT22jVaquGiAQnYbgMhIHWGJO36gv0xSJrBf@cdS57r72@E3A54HR3UbFgyMuCsoVEWenM7d3To@08PeKbKhU82xG2suDJdgd2xLauikPNbLc9R9eONU32FFPtakeI5CyOExrly5CShC4iSuMoonEcEcriZZryrFyGSZFygiZebdP1rmZOZcsUdwMwzwriB6Fw7xfQh5RBRh4m0zVAIyRBRYGaBpCybw8BumYBgVWesVpb0pRgjPc3vXcAEE@qIscVo8xPCXccHGTpDPMqxdxf7XWG3gPoMruqifcLVauNz1wEn7detDuC2H0pyVjpqZp@YJiHfetoMLSd41ejk9Oz84vXb95eXo3fvb/@8PHTzecvt3dfv32fuO70h/fTnwW/yHwR0ihOUpbly4KX1f3D79Wf9d/NtskyLBWgs6yaJUQOQhLEcJVVBXRdDmukMiQw8XkJS1KXwOcEDsQG3TAAGtYU0EXDludst/j8djR20f@u@UK/D5A0wdK0oa1H1WrCLbARwV1BSzKmjAgttPYly9hAaDsQrueCL26QONj9Aw
ASCIIのみの

2
@ASCIIのみ、以下のPythonの回答を使用しました。Javaの答えも1627です。問題は参照ソリューションにバグがあるようです。seemsはU + 2126、OHM SIGNであり、GREEK CAPITAL LETTER OMEGAではありません。
ピーターテイラー

1
5名のスコア:、C#はまた、Javaプログラムで検証されていない、受け入れていない他の名前より短い8という
ASCIIのみの

1
@Kevin、以前のコメントによると、リファレンス実装はバグがあります。ソースキャラクターのOHM SIGNをGREEK CAPITAL LETTER OMEGAに変えるために正規化を適用していると思います。
ピーターテイラー

4

R; スコア:3330 1586 1443

組み込み機能がないため、Rでもチャレンジングです。

さて、コードの大部分は@Giuseppeのものになりましたが、大丈夫です。*を〜に、sをドットに置き換えることで、さらにゴルフを少し編集することができました。

@Nick Kennedyに、不可解な魔法「UTF8でエンコードされた数値シーケンス」を使用してこれを1443まで下げてくれたことに感謝します。

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

オンラインで試す


1769ポイント -値を圧縮するための最小限の試みを行います...
ジュゼッペ

2
また、utf8ToIntゴルフに非常に役立つコマンドです:-) PPCGに1か月ほど行ったことがないので、新しい人がRでゴルフをしているのを見るのは素晴らしいことです。
ジュゼッペ

ああ、圧縮する方法はありましたが、utf8ToIntを認識していませんでした。これについては今夜/明日遅くに取り組まなければなりません。
CTホール

1
バイトカウントに影響を与えないのは、プログラム/スニペットの下のコードの行だけです
のみ

1
1443まで:tio.run / ##xc09DoIwFADgu3ShTR / 数値シーケンスのUTF8エンコードバージョンを使用。
ニックケネディ


2

Perl 5 -pl、スコア723

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

オンラインでお試しください!

説明

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

2

アタッシュ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]}

オンラインでお試しください!

単純な圧縮とインデックス作成。


:Pは、よりスマートなルックアップ(C#の回答を参照)を使用するとスコアに役立つようです。あるいは単に圧縮する文字が含まれていない文字セットを使用して
ASCIIのみの

1

C#(Visual C#Interactive Compiler)、スコア: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])

上記のPeter Taylorのソリューションに圧倒されました。シンプルなルックアップテーブルを指摘してくれたPeter Taylorに、以前の辞書ソリューションよりも優れていました。

オンラインでお試しください!


これは、直接ルックアップテーブルよりもかなり悪いです:_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()スコア2786.
ピーター・テイラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.