Programınızı ne kadar hızlı söyleyebilirim?


26

Kısa süre önce yazıma yardımcı olmak için bir dikte yazılımı indirmeye karar verdim. Ancak, kod yazarken çok işe yaramıyor, çünkü kelimeleri söylemekten sembollere ve tekrar tekrar değiştirmek zorunda kalıyorum. Tüm semboller olan ezoterik bir dilde kod yazarken daha da kötü .

Dikte etme programını kullanmamı daha tutarlı hale getirmek için, onu sadece her karakterin adını söylediğim karakter moduna çevirmeye karar verdim. Sorun çözüldü! Bu, romanımın çıkış tarihini biraz geciktirse de ...

Öyleyse, bir karakterin adı ne kadar uzun olursa, söylemesi o kadar uzun sürerse, programlarımın / cümlelerimin bazılarını hecelemem ne kadar sürer?

Özellikler

Yalnızca yazdırılabilir ASCII'den oluşan bir dize verildiğinde, her karakterin unicode adının toplamını döndür. Örneğin, /denir SOLIDUS7 karakterlerle ve Abir LATIN CAPITAL LETTER A22 karakterli.

Ancak unutmayın, programlarınızı yürütmek için yüksek sesle söylemeliyim, bu yüzden onların puanları beni söylemenin ne kadar süreceği, yani her karakterin unicode adının uzunluklarının toplamı olarak belirlenecek.

Test Durumları:

input => outputGirdide izler / boşluklar olmadan formatta .

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

Kurallar:

  • Programınıza giriş yapmak, yalnızca yazdırılabilir ASCII karakterlerinden, yani 32 (boşluk) - 126 (tilde) arasındaki kod noktalarından oluşur.
    • Kullanım kolaylığı için, işte kullanmanız gereken karakterlerin uzunluklarının listesi: [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]
  • İşte programınızı puanlamak için kullanabileceğiniz bir referans programı.
    • Peter Taylor, referans programının bazı unicode karakterleri normalleştirdiğine dikkat çekti . Yine de çoğu çözüm için çalışmalıdır, ancak ihtiyacınız olursa düzeltmek için çekinmeyin
  • Karakterlerin gerçekte nasıl göründüğünü söylediğiniz için, çözümünüz katılan baytlar değil, görüntülenen karakterlerle puanlanacaktır . Bu, özel kodlama içeren dillere yöneliktir.
    • Unicode kütüphanesinin tamamını ezberlediğimi ve hangi garip karakterleri kullandığınızı söyleyebilirim.
  • Üzgünüz Rogem, ama cevaplar görüntülenebilir karakterlerden oluşmalı. Yazdırılamayanlar iyi, sadece karakterleri yüksek sesle okuyabiliyorum.
  • Ne yaparsanız yapın, programda kullanmayın .

9
ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMbu çocuğumun tam adı olacak
Quintec

1
Bu program kelime modunda 6 puanla: Çevrimiçi deneyin!
Neil,

2
Referans programı buggy. [Bu testi] düşünün ( tio.run/##dY5PC4JAEMXvfYphYcNsWcrSi@Ahrx3rlB223FTSXdk/… ) olduğu \x[2126]gibi sayılır \x[3a9].
Peter Taylor

Yanıtlar:


13

Java 8, puan 846 838 822 816

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

-8 sayesinde skor @tsh değiştirilmesi _1ile .
-22 puan @ ASCII- sayesinde sadece ve ile ile değiştirerek .ˇ$

Çevrimiçi deneyin.

Açıklama:

Ve ˇyerine kullanılan sve cküçük harfler, çünkü normalde 20 (diğer bir deyişle, kullanmak LATIN SMALL LETTER S), ancak ( TAMIL OM) 8 ve ˇ( CARON) 5'tir.

ௐ->                         // 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’nın 05AB1E’nin hem bayt hem de puan açısından verdiği cevabı nasıl attığını seviyorum ...
Outgolfer Erik

@EriktheOutgolfer Ikr. Builtins ftw sanırım. ;)
Kevin Cruijssen

@KevinCruijssen Yapmanız gerekmeyen bir kaç baytı kurtarır push compressed integer 87235805968599116032550323044578484972930006625267106917841: P
Quintec

1
Kullanım yerine _1bazı noktaları tasarruf sağlayacaktır.
tsh

1
@KevinCruijssen Peter Taylor'in ( OHM SIGN) 8 karakter uzunluğunda. Ayrıca haha ​​bunun geçerli olmadığını fark ettim, sadece C # 'da geçerli olduğundan ve Peter'ın da kullanıldığından beri _1( kısa değişken isimleri bulmak için program , kutu karakteri kullanılamaz)
ASCII-sadece


7

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

Girdiyi karakter dizisi olarak alır.

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

Deneyin veya tüm test durumlarını TIO'da çalıştırın

( APOSTROPHEJapt aynı giriş dizisinde hem tek hem de çift tırnakları kullanamadığından, TIO'daki 6. test durumundan çıkarılmıştır)


açıklama

®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

Dize Oluşturmak

(Puanlar, her değişikliği tersine çevirmek için gereken adımları ve ekstra karakterleri içerir)

  1. Dizi 2161 temel puan verdi .
  2. Her birini tabandaki tek bir karaktere dönüştürme >=23ve 1832'de puanlanan bir dizgeye ekleme .
  3. Her iki çalışır değiştirilmesi mve ktek, küçük harf ile attı 963 .
  4. Hala çok pahalı mektuplar vardı, bu yüzden daha sonra tüm karakterlerin kod noktalarını azaltarak onlardan kurtulmaya çalıştım. 5en düşük kod noktası olan karakterdi ( 53) bu yüzden 526 ile başladım, 756
  5. Dize hiçbir harf bırakmayacak tüm sayıları denedikten sonra 51, en iyi 738 puanını verdi
  6. Son olarak, tırnak işaretlerini biraz daha ucuz backticks ile değiştirmek 734 puan verdi . Japt'teki geri tepmeler genellikle sıkıştırılmış bir dizgiyi kapatmak ve açmak için kullanılır, ancak neyse ki bu dizgideki karakterlerin hiçbiri Shoco kütüphanesinde bulunmaz.

Son dize, aşağıdaki kod noktalarındaki karakterleri içerir:

[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 , skor 963

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

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

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

Benim bu 05AB1E ucu bakın (bölümler ne kadar büyük tamsayılar sıkıştırmak? Etmek ve nasıl kompres tamsayı listelerine? ) Anlamak için •Fδà‚<0?9½mΣ@×ƶC₁vc-™uΔ_ε'•21вolduğunu [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 # Etkileşimli Derleyici) (puan 1627 1116 1096 1037 1019 902)

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

Bu yerleşik bir veritabanı kullanmaz: mektuplar ve arama tablosu için sadece bazı özel muhafazalar.

Çevrimiçi test paketi .

Kendisini puanlayamaz, çünkü karakterlerin çoğu, değişkenleri CARONve OHM SIGNarama tablosunu kodlamak için kullanılan zodyak simgeleri de dahil olmak üzere menzil içinde değildir .

Sadece birçok öneri için ASCII sayesinde .


Hangi puanlama programını kullandınız
ASCII-sadece

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

2
@ ASCII-sadece, aşağıdaki Python cevabını kullandım; Java cevabı da 1627 verir. Sorun referans çözümün sorunlu olduğu görülüyor: Ω U + 2126, OHM SIGN , YUNAN BÜYÜK HARF OMEGA değil.
Peter Taylor

1
Puan 5 adı: ˇ, C # tarafından kabul edilen 8'den kısa isimler yok, ayrıca Java programı ile doğrulanmadı
ASCII-

1
@Kevin, önceki yorumuma göre referans uygulaması bir hata. OHM SIGN kaynak karakterini YUNANIK BÜYÜK HARF OMEGA'sına dönüştürmek için normalleştirme uygulandığını düşünüyorum.
Peter Taylor

4

R; Skor: 3330 1586 1443

Ayrıca yerleşik yapı eksikliği nedeniyle R'de zorlu.

Kod şimdi çoğunlukla @ Giuseppe'nin yazdığı, fakat sorun değil. Daha sonra * ile ~ ve s ile nokta değiştirerek golf üzerinde küçük bir düzenleme yapabildim.

Arcane magic kullanarak "sayı dizisinin UTF8 kodlu bir versiyonunu" kullanarak 1443’e inen @Nick Kennedy’ye teşekkürler

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

Çevrimiçi deneyin


1769 puan - değerleri sıkıştırmak için minimal bir girişimde bulundu ...
Giuseppe

2
Ayrıca, utf8ToIntgolf oynamak için süper yararlı bir komuttur :-) Ben bir aydır PPCG'de bulunmadım, bu yüzden R'de golf oynayan yeni insanlar görmek güzel!
Giuseppe

Ah, bunu sıkıştıracak bir yolum vardı, ama utf8ToInt'un farkında değildim. Bu gece / yarın bunun üzerinde çalışmam gerekecek.
CT Hall

1
Program / snippet altında sadece bytecount'u etkilemeyen daha fazla kod satırı var - bazı testleri yapmak için yararlı
ASCII-sadece

1
1443’e kadar: tio.run/##xc09DoIwFADgu3ShTR/… Sayı dizisinin UTF8 kodlanmış bir versiyonunu kullanma.
Nick Kennedy,


2

Perl 5 -pl , puan 723

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

Çevrimiçi deneyin!

açıklama

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

Ataşesi , 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]}

Çevrimiçi deneyin!

Basit sıkıştırma ve indeksleme.


: P daha akıllı bir arama kullanmak gibi görünüyor (bakınız C # cevap) puanlamanıza yardımcı olur. Ya da sadece sıkıştırmak için harf içermeyen bir karakter kümesi kullanarak
sadece ASCII

1

C # (Visual C # Etkileşimli Derleyici) , Puan: 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])

Yukarıda Peter Taylor'ın çözümü tarafından ezilmiş hissediyorum. Peter Taylor'a basit bir arama tablosunu işaret ettiği için teşekkürler, önceki sözlük çözümümden daha iyiydi.

Çevrimiçi deneyin!


Bu doğrudan arama tablosundan çok daha kötü: _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()puanlar 2786.
Peter Taylor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.