Напишите кратчайший код на выбранном вами языке, чтобы выполнить декодирование длины строки для данной строки.
Строка будет предоставлена как ввод на стандартный ввод в виде
CNCNCNCNCNCNCNCN
где каждый C
может быть любым печатным символом ASCII, и каждый N
является цифрой 1
до 9
(включительно).
Пример ввода:
:144,1'1
Соответствующий вывод:
:4444,'
Язык программирования Шекспира , 406 байт
Безголовая версия:
Я использую drsam94 Python SPL компилятор , в котором есть несколько ошибок (именно поэтому, например, я использую
Open your mind
вместоOpen thy mind
версии для гольфа).Чтобы запустить эту программу, используйте:
Как это устроено
SPL - это эзотерический язык программирования, разработанный для того, чтобы программы выглядели как пьесы Шекспира. Он делает это, используя символы в качестве переменных, а обработка выполняется, когда персонажи говорят что-то друг другу.
Это название пьесы; это игнорируется компилятором.
Здесь мы объявляем переменные, используемые в остальной части программы. Все между
,
и.
игнорируется компилятором. В этом случае мы объявляемRomeo
, используется для хранения декодируемого символа, иJuliet
используется для хранения длины цикла символа.Здесь мы объявляем первый и единственный акт в программе. Акты и сцены похожи на ярлыки; к ним можно перейти в любое время, используя
let us return to scene II
или какой-либо вариант этого. Мы используем только один акт, потому что этого достаточно для наших нужд. Опять же, все, что находится между:
и.
игнорируется компилятором.Здесь мы объявляем первую сцену. Сцены нумеруются римскими цифрами: первая есть
Scene I
, втораяScene II
и так далее.Это сценическое направление; в нем, мы говорим о
Romeo
иJuliet
переменные прийти на «стадии». Только две переменные могут быть на «сцене» одновременно; Этап используется для того, чтобы компилятор мог выяснить, к какой переменной относится, когда он говорит. Поскольку у нас есть только две переменные, Ромео и Джульетта останутся на сцене на протяжении всей программы.Объявление другой сцены. На сцену II будет прыгать, чтобы декодировать другую длину цикла.
Эта форма заявления означает, что Джульетта начнет говорить. Все до следующего
Romeo:
, направления сцены или объявления сцены / акта будет строкой, на которой говорит Джульетта, и, таким образом, «я» будет относиться к Джульетте, «ты» / «ты» к Ромео и т. Д.Эта команда сохраняет порядковый номер одного символа из STDIN в
Romeo
.В SPL существительные переводятся в 1 или -1 в зависимости от того, являются ли они положительными или отрицательными. В этом случае
my mother
переводится как 1. Прилагательные (положительные или отрицательные) умножают свое существительное на 2.Это вопрос; в этом Джульетта спрашивает, является ли
my mother
(AKA 1) «веселее», чем Ромео. Сравнительные данные либо переводятся вless than
(если они отрицательные, какworse
) илиgreater than
(если они положительные, какjollier
). Поэтому этот вопрос сводится кIs 1 greater than you?
.Причина, по которой мы задаем этот вопрос, заключается в обнаружении конца ввода. Поскольку значение
EOF
зависит от платформы, но обычно меньше 1, мы используем его для его обнаружения.Если предыдущий вопрос был оценен
true
, мы переходим к сцене IV, которая является просто концом программы. Короче говоря, если мы обнаруживаем EOF, мы заканчиваем программу.Теперь это линия Ромео: «я» и «ты» относятся к Ромео и Джульетте соответственно.
Опять же, этот оператор помещает порядковое значение одного символа из STDIN в Джульетту, которая в этом случае является длиной цикла символа, хранящегося в
Romeo
.Это слишком долго, чтобы переходить к деталям, но поверьте мне, что это переводится как
Juliet -= 48
. Мы делаем это потому, что Джульетта имеет значение ASCII для числа, иord('0') == 48
; вычитая 48, мы переводим значение ASCII числа в само число.Объявление другой сцены. Это для цикла, в котором мы многократно печатаем значение символа
Romeo
,Juliet
раз.Это утверждение заставляет Ромео печатать свою ценность как персонажа; то есть, какое бы значение символа не было ранее сохранено в Romeo, теперь выводится.
Свинья является отрицательным существительным, поэтому
a hog
переводится как -1; следовательно, это утверждение оценивается какJuliet -= 1
.Ромео здесь спрашивает, "Джульетта" так же гнилая, как ", или равна 0.
Если значение Джульетты равно 0, мы возвращаемся к сцене II для декодирования длины пробега другого персонажа.
Иначе, мы возвращаемся к сцене III, чтобы снова вывести персонажа Ромео.
Это окончательное объявление сцены является просто маркером конца программы.
[Exeunt]
Режиссура необходимо получить компилятор на самом деле создать финальную сцену.источник
GolfScript, 10 символов
источник
Perl, 27 символов
источник
print<>=~s/(.)(.)/$1x$2/ger
. Я также вполне уверен, что вы имели в виду$1x$2
, а не наоборот./r
документирована в perlop и был добавлен в v5.14.0-p
флага позволит вам сброситьprint
и<>
, таким образом, ответ станет простым:s/(.)(.)/$1x$2/ge
-> 17 символов +1 для-p
-> 18 .R 67
источник
rep
будетtimes
автоматически приводить аргумент из символов в целые числа. Brilliant.Python 3, 52
Python 3 позволяет мне объединить подходы двух моих решений python2.
источник
raw_input
соответствует Python 3input
. Так что первая строка должна бытьs=input()
s=input() while s:a,b,*s=s;print(a*int(b),end='')
APL (22)
Объяснение:
T←⍞
: сохранить вход вT
T⊂⍨~⎕D∊⍨T
: разделитьT
на символы, которые не являются цифрами↑
: Превратить его в2
матрицу с размерностьюN/2
матрицы{⍺/⍨⍎⍵}/
: в каждой строке матрицы (/
), повторить (/
) первый символ (⍺
) в eval (⍎
) второго символа (⍵
),/
: объединить вывод каждой строкиисточник
Рубин, 30 байтов
27 байтов кода + 3 байта для запуска с
-p
флагом:источник
8086 сборка,
10698 символовЕсли бы числа были перед символами во входном потоке, две строки (18 символов) могли бы быть отсечены от этого.
источник
dq 21cdc38821cd08b4 d888ed30c188482c e8ebfce210cd14b4
53 символов? Я не вижу, где он обрабатывает не заглавные буквы или eof, хотя ...GNU SED, 122 + 2 (-r)
Необходимо использовать с
-r
флагом.Может быть уменьшено до 110 + 2 путем замены
\v
на непечатный0x0B
и\a
с0x07
источник
\2.{9}
отличная идея) великолепно!С, 65 символов
Получает входные данные в качестве параметра.
источник
error: first parameter of 'main' (argument count) must be of type 'int'
. Есть ли переключатель командной строки?Perl,
19символов 18Правила подсчета ключей в командной строке приведены здесь .
источник
Далее 45 символов
Протестировано с pforth на OS X.
источник
Python,
6362 символаисточник
iter
этим ... Думаю, я воспользуюсь им сам!Windows PowerShell, 55 символов
У меня такое ощущение, что это может быть улучшено, особенно с помощью приведений от char к string и int, но у меня нет времени продолжать работать над этим прямо сейчас.
источник
C, 68 знаков
Ответ @ ugoren на C немного короче, но этот ответ соответствует требованию, что «строка будет предоставлена в качестве входных данных для stdin ».
источник
main(c,n){ ... }
которые будут переданы 1 по умолчанию при запуске программы.int
аргументом, но компилятор (-ы), которым я пользуюсь, жалуются,error: second parameter of 'main' (argument array) must be of type 'char **'
поэтому мне не сойти с рукmain(c,n)
; Я должен использоватьmain(int c,char **n)
. Может быть платформой или GCC вещь.n;main(c)
но неmain(n,c)
- достаточно хорошо! :)Haskell,
5856 символовМоя первая настоящая попытка играть в гольф, так что, возможно, здесь есть кое-какое улучшение.
источник
read[y]
сохраняет два символаreplicate x y
на[1..x]>>[y]
. Таким образом, ваша вторая строка может быть заменена наf(x:y:s)=(['1'..y]>>[x])++f s
, что сокращает ее до 53 байтов.Japt
-P
, 8 байтВвод в виде массива символов, вывод в виде строки.
Попытайся
источник
ò crÏ°îX
если вы находите это слишком жутким!Malbolge Unshackled (вариант с 20-кратным вращением), 4,494e6 байт
Размер этого ответа превышает максимально допустимый размер программы (eh), поэтому код находится в моем репозитории GitHub .
Как запустить это?
Это может быть непростой задачей, потому что наивному интерпретатору Хаскелла понадобятся годы, чтобы запустить это. У TIO есть достойный интерпретатор Malbogle Unshackled, но, к сожалению, я не смогу его использовать (ограничения).
Лучший вариант, который я смог найти, это фиксированный вариант ширины вращения в 20 трит, который очень хорошо работает, распаковывая 360 байт в час .
Чтобы сделать переводчика немного быстрее, я удалил все проверки из интерпретатора Мэттиласа Люттера «Малболж».
Моя модифицированная версия может работать примерно на 6,3% быстрее.
Работает!
источник
05AB1E ,
65 байт-1 байт благодаря @Grimy .
Выходы в виде списка символов.
Попробуйте онлайн.
Старый 6- байтовый ответ без встроенной функции декодирования длин серий:
Попробуйте онлайн.
Объяснение:
источник
2ι`ÅΓ
5 байт. Было бы грустно, если бы встроенный RLE не выиграл вызов RLE.Python,
787266 символовисточник
GolfScript (10 символов)
источник
J - 24
Смысл этого представления состоит в том, чтобы использовать наречие инфикса.
источник
Befunge, 49 символов
источник
К, 35
источник
,/{(. y)#x}.'0N 2#
для 18 байтов .Python 2, 58
Это вдохновлено решением Python Даррена Стоуна - злоупотребление итераторами!
Это мое оригинальное решение (60 символов)
Другой подход на 3 символа длиннее:
источник
Ява: 285 чар
источник
Befunge-98, 22 символа
источник
Пробел, 135
(Замените S, T, L символами пробела, табуляции, перевода строки.)
Попробуйте онлайн [здесь] .
Объяснение:
источник
Clojure (107)
Чувствую себя исключительно как Clojure очень долго, если кто-то может сделать лучше, пожалуйста, опубликуйте его.
источник