В углублениях символов Unicode существует блок Unicode, состоящий из (в настоящее время) 63 символов с именем «Числовые формы», который состоит из символов, которые имеют числовые значения, такие как римская цифра Ⅻ, вульгарные дроби, такие как ⅑ или ↉, или странные, такие как ↊ (10) или ↈ (100000).
Ваша задача - написать программу или функцию, которая при задании списка назначенных символов Unicode в этом блоке сортирует список по числовым значениям каждого символа.
(Сортируемый) список символов и значений можно найти на странице Википедии .
Чтобы быть самодостаточным, вот список кодовых точек и их значений:
Hex Char Value
0x00BC: ¼ = 1/4 or 0.25
0x00BD: ½ = 1/2 or 0.5
0x00BE: ¾ = 3/4 or 0.75
0x2150: ⅐ = 1/7 or 0.142857
0x2151: ⅑ = 1/9 or 0.111111
0x2152: ⅒ = 1/10 or 0.1
0x2153: ⅓ = 1/3 or 0.333333
0x2154: ⅔ = 2/3 or 0.666667
0x2155: ⅕ = 1/5 or 0.2
0x2156: ⅖ = 2/5 or 0.4
0x2157: ⅗ = 3/5 or 0.6
0x2158: ⅘ = 4/5 or 0.8
0x2159: ⅙ = 1/6 or 0.166667
0x215A: ⅚ = 5/6 or 0.833333
0x215B: ⅛ = 1/8 or 0.125
0x215C: ⅜ = 3/8 or 0.375
0x215D: ⅝ = 5/8 or 0.625
0x215E: ⅞ = 7/8 or 0.875
0x215F: ⅟ = 1
0x2160: Ⅰ = 1
0x2161: Ⅱ = 2
0x2162: Ⅲ = 3
0x2163: Ⅳ = 4
0x2164: Ⅴ = 5
0x2165: Ⅵ = 6
0x2166: Ⅶ = 7
0x2167: Ⅷ = 8
0x2168: Ⅸ = 9
0x2169: Ⅹ = 10
0x216A: Ⅺ = 11
0x216B: Ⅻ = 12
0x216C: Ⅼ = 50
0x216D: Ⅽ = 100
0x216E: Ⅾ = 500
0x216F: Ⅿ = 1000
0x2170: ⅰ = 1
0x2171: ⅱ = 2
0x2172: ⅲ = 3
0x2173: ⅳ = 4
0x2174: ⅴ = 5
0x2175: ⅵ = 6
0x2176: ⅶ = 7
0x2177: ⅷ = 8
0x2178: ⅸ = 9
0x2179: ⅹ = 10
0x217A: ⅺ = 11
0x217B: ⅻ = 12
0x217C: ⅼ = 50
0x217D: ⅽ = 100
0x217E: ⅾ = 500
0x217F: ⅿ = 1000
0x2180: ↀ = 1000
0x2181: ↁ = 5000
0x2182: ↂ = 10000
0x2183: Ↄ = 100
0x2184: ↄ = 100
0x2185: ↅ = 6
0x2186: ↆ = 50
0x2187: ↇ = 50000
0x2188: ↈ = 100000
0x2189: ↉ = 0
0x218A: ↊ = 10
0x218B: ↋ = 11
Тестовые случаи:
['½','ↆ','ↂ','⅒','Ⅽ','⅑','ⅷ'] -> ['⅒','⅑','½','ⅷ','ↆ','Ⅽ','ↂ']
['¼','↋','↉','ↅ','⅐','⅟','Ⅻ','ⅺ'] -> ['↉','⅐','¼','⅟','ↅ','↋','ⅺ','Ⅻ']
['¼','½','¾','⅐','⅑','⅒','⅓','⅔','⅕','⅖','⅗','⅘','⅙','⅚','⅛','⅜','⅝','⅞','⅟'] -> ['⅒','⅑','⅛','⅐','⅙','⅕','¼','⅓','⅜','⅖','½','⅗','⅝','⅔','¾','⅘','⅚','⅞','⅟']
'⅞ⅾ↊ↄⅨⅮⅺↁⅸⅰⅩⅱⅶ¾ⅧↅↃ↋ↆ⅔ⅼⅲ⅘⅒ⅽⅦ⅕ⅤⅭⅳↂⅪⅬⅯↇⅠⅷ⅛Ⅵ½ⅵ¼ⅻ⅐Ⅱ⅜⅗⅝⅚Ⅳ⅓ⅴ↉ⅿⅫⅹↀↈ⅙⅑Ⅲ⅖⅟' -> '↉⅒⅑⅛⅐⅙⅕¼⅓⅜⅖½⅗⅝⅔¾⅘⅚⅞⅟ⅠⅰⅡⅱⅢⅲⅣⅳⅤⅴⅥⅵↅⅦⅶⅧⅷⅨⅸⅩⅹ↊Ⅺⅺ↋ⅫⅻⅬⅼↆⅭⅽↄↃⅮⅾⅯⅿↀↁↂↇↈ'
['Ↄ','ↄ','↊','↋'] -> ['↊','↋','ↄ','Ↄ']
Обратите внимание, что четыре символа (используемые в последнем случае) не являются числами в юникоде, хотя они по-прежнему имеют числовое значение, поэтому обязательно проверяйте его перед публикацией встроенного.
Правила:
- Если в будущем этому блоку будет назначено больше символов, вам не нужно будет обновлять свой код для их поддержки.
- Порядок символов с одинаковыми значениями не имеет значения.
- IO гибкий .
- Вывод должен быть в виде символов, а не числовых значений
- Стандартные лазейки запрещены.
- Я не запрещаю встроенные модули, которые могут получить числовое значение символа, но я рекомендую также добавить не встроенный ответ, если это возможно.
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах для каждого языка! Удачи!
Ответы:
Python 3 ,
216213 байт-3 байта благодаря TFeld
Попробуйте онлайн!
Со встроенным, который выбирает числовое значение, 111 байтов
Попробуйте онлайн!
источник
↉
из строки (найдите результаты,-1
которые наименьшие)Perl 6 , 57 байт
Попробуйте онлайн!
Просто просматривает четыре исключительных символа в хэше или возвращается к встроенному
unival
методу.источник
05AB1E (legacy) ,
192746361 байт-118 байт, используя только символы кодовой страницы 05AB1E, поэтому нам не нужно использовать кодировку UTF-8.
-11 байт благодаря @Adnan .
-2 байта благодаря @Grimy .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Так что же
•Bšā¿ÑáζΔÕæ₅"®GÙ₂®°ƶío"§óÏ4¸bćÔ!₃ùZFúÐìŸ\n,λ₂ϦP(Ì•65в₂+
?На основании порядка символов по модулю 100 мы получаем следующий список:
Они генерируются следующей программой:
Попробуйте онлайн.
•Bšā¿ÑáζΔÕæ₅"®GÙ₂®°ƶío"§óÏ4¸bćÔ!₃ùZFúÐìŸ\n,λ₂ϦP(Ì•65в₂+
это более короткий вариант этого списка: взять сжатое число1485725021600091112740267145165274006958935956446028449609419704394607952161907963838640094709317691369972842282463
, затем преобразовать его в Base-65, а затем добавить 26 к каждому.Попробуйте онлайн и убедитесь, что списки совпадают .
источник
"]&%/$-)`'0*a+1(b,.234D5E6F7G8H9IY:J;K<L=M^>N_?O@PZAQWXBRCSTUV[\"Ç8-
на•4Œ”dóŒfÝŸĀTUÕáOyÖOÀÁàu¼6¹₆Žr‡_›y³eß₂©ǝ²ƶ"SAÎAñ'¡û†Ø(•91в
Сетчатка ,
193 байта (UTF-8)Попробуйте онлайн! Объяснение: Сортирует символы в порядке кодов, затем сопоставляет числовые символы и символы ASCII, чтобы числовые символы с наименьшим значением отображали символы ASCII с наименьшей кодовой точкой, и наоборот. Затем повторяет упражнение, так что теперь символы сортируются в порядке отображения ASCII, который соответствует желаемому порядку чисел, прежде чем они будут преобразованы обратно. Редактировать: Сохранено 100 (!) Байтов, указав порядок символов ASCII, а не числовых символов.
источник
Желе , 55 байт
Монадическая ссылка, принимающая список символов, который выдает список символов.
Попробуйте онлайн!
Как?
Намного проще, чем кажется, поскольку
“$Żz*ṀḢD⁹VṢaʠƝ lẹkƝʋ9⁽ƭXmż4#⁺3ç%|ọṢLxƈ⁽}ÞƇ2’
в базе 250 просто большое число, использующее кодовую страницу Jelly в качестве цифр, я буду использовать“...’
вместо нее.В сторону
По иронии судьбы, ближайший к «использовать встроенный подход», который я мог собрать, был 85 байтов , здесь используется сжатая строка:
которая разбивается на новые строки и соединяется с
⁸
s, чтобы получить код Python:который может быть выполнен в интерпретаторе Jelly - он поместит числовое значение символа Unicode в левый аргумент nilad
⁸
для дальнейшего использования.источник
Japt , 72 байта
Попробуйте или запустите все тесты
объяснение
кодовых
Исходное решение,
908988 байтПопробуйте или запустите все тесты
объяснение
кодовых
источник
05AB1E,
565351504948 байтовПопробуйте онлайн!
В основе этого решения лежит сжатый список, отображающий код Unicode, указывающий на ключ сортировки. Символы, которые соответствуют одному и тому же номеру, отображаются на одну и ту же клавишу, поэтому нам нужно только 40 разных клавиш.
70 - это наименьшее число, с помощью которого мы можем модулировать все входные кодовые точки и получать четкие результаты. Поскольку индексирование в 05AB1E оборачивается, нам не нужно явно указывать
70%
, просто убедитесь, что список имеет длину 70.Обратите внимание, что есть длинные участки последовательных кодовых точек с последовательными ключами. Таким образом, кодирование (ключ - кодовая точка), а не просто (ключ), дает длинные отрезки идентичных чисел, которые можно кодировать по длине прогона. Однако диапазон кодовых точек очень велик (черт побери, те 0xBC .. 0xBE), что может быть проблемой. Поэтому вместо (key - codepoint) мы кодируем (key - sum_of_digits (codepoint)), что, к сожалению, ограничивает длину растяжения до 10, но весьма неплохо при сокращении диапазона кодированных значений. (Конечно, возможны и другие функции, такие как кодовая точка% постоянная, но сумма цифр дает наилучшие результаты).
Кроме того, оказывается, что поворот списка на 2 хорошо сочетается с кодированием по длине прогона, поэтому перед индексацией мы вычитаем 2 из кодовой точки.
источник
JavaScript (SpiderMonkey) , 117 байт
Попробуйте онлайн!
источник
T-SQL, 207 байт
Возврат в середине строки предназначен только для удобства чтения. Я думаю, что я правильно подсчитал число байтов (3 из числовых символов - 1 байт, остальные - 2 байта), количество символов - 148.
Я предварительно отсортировал строку в порядке возрастания, опуская
↉
(который возвращает 0), как подсказывают другие ответы.Я использую любое двоичное сопоставление,
Thai_BIN
так как оно имеет самое короткое имя. (Сортировка в SQL предписывает, как выполняется сортировка / сравнение символов, мне нужен двоичный файл, чтобы каждый символ соответствовал самому себе.)В соответствии с нашими стандартами ввода / вывода ввод осуществляется через существующую таблицу t с
NCHAR(1)
полем c .Если вы сами определяете входную таблицу, используя двоичное сопоставление, вы можете оставить это, чтобы сохранить 16 байтов:
источник
⅐⅑⅒Ↄↄↅↆↇↈ↉↊↋
если вам интересно) все совпадают друг с другом.Рубин , 77 байт
Изменяет все символы на буквы, представляющие числовые значения и сортировки по ним.
Попробуйте онлайн!
источник
Perl 6 ,
1352 байтаПопробуйте онлайн!
источник
*.sort:{%(<Ↄ 99 ↄ 99 ↊ 10 ↋ 11>){$_}//.EVAL}