Як швидко я можу сказати вашу програму?


26

Нещодавно я вирішив завантажити деяке програмне забезпечення для диктантів, щоб допомогти в моєму написанні. Однак це не дуже добре працює при кодуванні, оскільки мені доведеться переходити від вимови слів до символів і назад. Ще гірше, коли я кодую езотеричну мову, яка є усіма символами.

Щоб зробити використання програми диктантів більш послідовною, я вирішив переключити її в режим символів, де я просто скажу ім'я кожного символу замість цього. Проблема вирішена! Хоча це трохи затягує дату виходу мого роману на трохи ...

Отже, якщо припустити, що чим довше ім’я персонажа, тим довше потрібно сказати, скільки часу знадобиться мені, щоб прописати деякі мої програми / пропозиції?

Технічні умови

Подавши рядок, що складається лише з ASCII для друку, поверніть суму імені унікоду кожного символу. Наприклад, /називається SOLIDUSз 7 символами, і Aє LATIN CAPITAL LETTER Aз 22 символами.

Але пам’ятайте, я повинен сказати вашим програмам вголос, щоб їх виконати, тому їх оцінка базуватиметься на тому, скільки часу знадобиться мені їх сказати, тобто як сума довжин імені унікоду кожного символу.

Випробування:

У форматі 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це буде повне ім’я моєї дитини
Квінтек

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з .
-22 оцінка завдяки @ ASCII-тільки заміна з ˇі $з .

Спробуйте в Інтернеті.

Пояснення:

І ˇвикористовуються замість sі cя зазвичай використовую, так як малі літери всі 20 (тобто LATIN SMALL LETTER S), але ( TAMIL OM) 8 ˇ( CARON) є 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

1
Мені подобається, як цей матеріал на Java перемагає відповідь 05AB1E як в байтах, так і в термінах балу ...
Ерік Аутгольфер

@EriktheOutgolfer Ikr. Думаю, побудовані фути. ;)
Кевін Крейссен

@KevinCruijssen Це заощадить пару байтів, які вам не доведеться push compressed integer 87235805968599116032550323044578484972930006625267106917841: P
Квінтек

1
Використання замість цього _1дозволить заощадити деякі очки.
тш

1
@KevinCruijssen Пітера Тейлора ( 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

( APOSTROPHEпропущено з 6-го тестового випадку в TIO, оскільки Japt не може обробляти як одиночні, так і подвійні лапки в одному вхідному рядку)


Пояснення

®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. Замінивши обидва пробіги mта kз одним великим великим символом набрав 963 .
  4. Ще було занадто багато дорогих листів, тож я намагався позбутися їх, зменшивши кодові точки всіх символів. 5був персонаж із найнижчою кодовою точкою ( 53), тому я почав із 52, який набрав 756
  5. Після спроби всіх номерів, не залишать ні одного листа в рядку, 51дав кращий результат 738
  6. Нарешті, заміна лапок на трохи дешевші основи дала бал 734 . Зворотні посилання в Japt зазвичай використовуються для укладання та декомпресії стисненого рядка, але, на щастя, жоден із символів цього рядка не міститься в бібліотеці Шоко

Таким чином, заключний рядок містить символи в таких кодових точках:

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

Для цього не використовується вбудована база даних: лише якийсь спеціальний кожух для букв і таблиця пошуку.

Інтернет-тестовий набір .

Він не може оцінити себе, оскільки більшість символів не знаходяться в діапазоні, включаючи змінні CARONта OHM 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. Здається, проблема полягає в тому, що опорне рішення є помилковим: Ω - U + 2126, OHM ЗНАЙТЕ , а не ВЕЛИКИЙ КАПІТАЛЬНИЙ ЛИСТ ОМЕГА.
Пітер Тейлор

1
Назва 5 балів: ˇ, жодних інших імен, коротших за 8, які приймає C #, також не підтверджено програмою Java
лише ASCII

1
@Kevin, згідно з моїм попереднім коментарем, реалізація посилань є помилковою. Я думаю, що застосовується нормалізація, щоб перетворити вихідний символ OHM SIGN в GREEK CAPITAL LETTER OMEGA.
Пітер Тейлор

4

R; Оцінка: 3330 1586 1443

Також складно в R через відсутність вбудованих модулів.

Код тепер здебільшого @ Джузеппе, але це добре. Я зміг зробити невелику редагування для гольфу далі, замінивши * на ~, а s на крапку.

Завдяки @Nick Kennedy за те, що він звів це до 1443 року, використовуючи таємничу магію "UTF8, закодовану версію послідовності чисел"

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

Спробуйте в Інтернеті


1769 балів - робить мінімальну спробу стиснення значень ...
Джузеппе

2
Крім того, utf8ToIntце дуже корисна команда для гри в гольф :-) Я не був на PPCG протягом місяця або близько того, тому приємно бачити нових людей, які займаються гольфу в R!
Джузеппе

Ах, я мав спосіб її стиснути, але не знав utf8ToInt. Мені доведеться попрацювати над цим пізніше сьогодні / завтра.
Зал КТ

1
Це просто більше рядків коду під програмою / фрагментом, які не впливають на кількість рахунків - корисно зробити кілька тестів в
ASCII-тільки

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

Я відчуваю себе розчавленим рішенням Пітера Тейлора вгорі. Завдяки Пітеру Тейлору за вказівку на просту таблицю пошуку було краще, ніж у моєму попередньому словниковому рішенні.

Спробуйте в Інтернеті!


Це значно гірше, ніж таблиця прямого пошуку: _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.
Пітер Тейлор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.