Как быстро я могу сказать вашу программу?


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это будет полное имя моего ребенка
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с .
-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
нужны

1
Используйте вместо того, _1чтобы сохранить некоторые точки.
TSH

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 обычно используются для включения и распаковки сжатой строки, но, к счастью, ни один из символов в этой строке не содержится в библиотеке 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 #) (оценка 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-only, я использовал ответ Python ниже; Java-ответ также дает 1627. Проблема, по-видимому, заключается в том, что эталонное решение содержит ошибки: Ω - это U + 2126, ОМ-ЗНАК , а не ГРЕЧЕСКАЯ КАПИТАЛЬНАЯ ПИСЬМА OMEGA.
Питер Тейлор

1
Оценка 5 имя: ˇ, никакие другие имена короче 8, которые принимает C #, также не проверены программой Java
только ASCII

1
@Kevin, согласно моему предыдущему комментарию, справочная реализация глючит. Я думаю, что он применяет нормализацию, чтобы превратить исходный символ ОМ-ЗНАК в ГРЕЧЕСКИЙ КАПИТАЛ ПИСЬМО ОМЕГА.
Питер Тейлор

4

Р; Оценка: 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. Я буду работать над этим позже сегодня вечером / завтра.
Зал CT

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 #) , оценка: 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.