Цифры Сучжоу (蘇州 碼子; также 花 碼) - это китайские десятичные цифры:
0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩
Они в значительной степени работают как арабские цифры, за исключением того, что, когда есть последовательные цифры, принадлежащие к набору {1, 2, 3}
, цифры чередуются между нотацией вертикального штриха и нотацией {〡,〢,〣}
горизонтального штриха, {一,二,三}
чтобы избежать неоднозначности. Первая цифра в такой последовательной группе всегда пишется с помощью обозначения вертикального штриха.
Задача - преобразовать натуральное число в числа Сучжоу.
Контрольные примеры
1 〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇
Самый короткий код в байтах побеждает.
Ответы:
Желе , 35 байт
Попробуйте онлайн!
источник
R 138 байт
Держу пари, есть более простой способ сделать это. Используйте,
gsub
чтобы получить чередующиеся числовые позиции.Попробуйте онлайн!
источник
JavaScript, 81 байт
Попробуйте онлайн!
Использование
14>>c
экономит 3 байта. Спасибо Арно .источник
Сетчатка , 46 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Совпадение двух цифр 1-3 или любой другой цифры.
Замените первого персонажа в каждом матче на Сучжоу.
Замените все оставшиеся цифры на горизонтальные Сучжоу.
51 байт в сетчатке 0.8.2 :
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Разделите ввод на отдельные цифры или пары цифр, если они обе 1-3.
Замените первый символ каждой строки своим Сучжоу.
Соедините линии вместе и замените все оставшиеся цифры на горизонтальные Сучжоу.
источник
Perl 5
-pl -Mutf8
,5346 байт-7 байт благодаря Грими
Попробуйте онлайн!
объяснение
источник
s/[123]\K[123]/$&^$;/ge;y/--</一二三〇〡-〩/
( TIO )s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/
( TIO ). 48:s/[123]{2}/$&^"\0\34"/ge;y/--</一二三〇〡-〩/
(требует использования буквенных управляющих символов вместо\0\34
, по идее, как это сделать на TIO)s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c
( TIO )Java (JDK) , 120 байт
Попробуйте онлайн!
кредиты
источник
c=s[i]-48;if(p>0&p<4&c>0&c<4)
может бытьif(p>0&p<4&(c=s[i]-48)>0&c<4)
, и тогда вы также можете снять скобки вокруг цикла. Кроме того,else{p=c;s[i]+=c<1?12247:12272;}
может бытьelse s[i]+=(p=c)<1?12247:12272;
JavaScript (ES6),
95 8988 байтСохранено 6 байтов благодаря @ShieruAsakoto
Принимает ввод в виде строки.
Попробуйте онлайн!
источник
Python 3 , 102 байта
Попробуйте онлайн!
mypetlion напомнил мне тривиальный гольф. -4 байта.
источник
Чисто ,
181165 байтВсе восьмеричные экранированные символы могут быть заменены эквивалентными однобайтовыми символами (и считаются как один байт каждый), но используются для удобства чтения и потому, что в противном случае это нарушает TIO и SE с недопустимым UTF-8.
Попробуйте онлайн!
Не кодирующий компилятор - это и благословение, и проклятие.
источник
Perl 6
-p
,8561 байт-13 байтов благодаря Джо Кингу
Попробуйте онлайн!
источник
Красный ,
198171 байтПопробуйте онлайн!
источник
Желе , 38 байт
Попробуйте онлайн!
источник
C, 131 байт
Попробуйте онлайн!
Объяснение: Прежде всего - я использую char для всех переменных, чтобы сделать его коротким.
Массив
s
содержит все необходимые символы Сучжоу.Остальное в значительной степени повторяется по предоставленному числу, которое выражается в виде строки.
При записи в терминал я использую входное числовое значение (таким образом, символ - 48 в ASCII), умноженное на 3, потому что все эти символы имеют длину 3 байта в UTF-8. Печатная строка всегда имеет длину 3 байта, то есть один реальный символ.
Переменные
c
иd
являются просто «ярлыками» для текущего и следующего вводимого символа (числа).Переменная
f
содержит 0 или 27 - она говорит, следует ли смещать следующий символ 1/2/3 на альтернативный - 27 - это смещение между обычным и альтернативным символом в массиве.f=c*d&&(c|d)<4&&!f?27:0
- напишите 27 в f, если c * d! = 0, и если они оба <4 и если f не равно 0, в противном случае напишите 0.Может быть переписан как:
Может быть, есть какие-то байты, которые нужно сбрить, но я больше не могу найти ничего очевидного.
источник
Рубин
-p
, 71 байтПопробуйте онлайн!
источник
К (нгн / к) , 67 байт
Попробуйте онлайн!
10\
получить список десятичных цифр{
}@
применить следующую функциюx&x<4
логический (0/1) список аргументов меньше 4 и ненулевой<\
сканирование с менее чем. это превращает серии последовательных 1 в чередующиеся 1 и 0x+9*
умножить на 9 и добавитьx
Сочетание индексации, так что используйте это как индексы в ...
0N 3#"〇一二三〤〥〦〧〨〩〡〢〣"
заданная строка, разбитая на список 3-байтовых строк. k не поддерживает Unicode, поэтому видит только байты,/
конкатенацияисточник
Wolfram Language (Mathematica) , 117 байт
Попробуйте онлайн!
Обратите внимание, что на TIO это выводит результат в экранированном виде. В обычном интерфейсе Wolfram это будет выглядеть так:
источник
f[123]
должен вернуться〡二〣
.Japt , 55 байт
Попробуйте онлайн!
Стоит отметить, что TIO дает другое количество байтов, чем мой предпочитаемый переводчик , но я не вижу причин не доверять тому, который дает мне более низкий балл.
Объяснение:
источник
C # (.NET Core) , 107 байт, 81 символ
Попробуйте онлайн!
Сохранено 17 байтов благодаря @Jo King
Старый ответ
C # (.NET Core) , 124 байта, 98 символовПопробуйте онлайн!
Принимает входные данные в форме списка и возвращает IEnumerable. Я не знаю, если этот вход / выход в порядке, так что просто дайте мне знать, если это не так.
объяснение
Как это работает, так это то, что он преобразует все целые числа в их соответствующие числовые формы Сучжоу, но только если переменная
b
имеет значение true.b
инвертируется всякий раз, когда мы встречаем целое число, равное одному, двум или трем, и устанавливается в true в противном случае. Еслиb
false, мы превращаем целое число в одну из вертикальных цифр.источник
R 104 байта
Попробуйте онлайн!
Альтернативный подход в R. Использует некоторые функции Regex в стиле Perl (последний
T
параметр в функции подстановки обозначаетperl=TRUE
).Сначала мы переводим цифры в буквенные символы
a-j
, затем используем подстановку Regex для преобразования повторяющихся вхожденийbcd
(ранее123
) в верхний регистр, и, наконец, переводим символы в цифры Сучжоу с различной обработкой строчных и прописных букв.Благодарим Дж. Доу за подготовку контрольных примеров, поскольку они были взяты из его ответа .
источник
C #, 153 байта
Попробуйте онлайн!
источник