Опубликовано здесь .
Эта проблема очень "искажена" из этого вопроса. Отдельное спасибо @Akababa!
В этой задаче вы должны вставить восклицательный знак в начале строки и после каждого символа.
правила
- Всегда будет ввод непустой строки. Ввод также не будет содержать вкладки. Можно предположить, что входные данные содержат только расширенные печатные символы ASCII и символы новой строки.
- Входные данные не будут содержать завершающие символы новой строки, если ваш язык не может обнаружить новую строку.
- Это соревнование по коду-гольфу ; самый короткий ответ должен победить.
Примеры
- 4 символа новой строки дают 5 восклицательных знаков с разделителями. Очень трудно поместить это как текст Markdown, так что это указывается вместо этого.
1 2 3 4 5 6 129591 129012 129127 129582 0
Выходы
! 1! ! 2! ! 3! ! 4! ! 5! ! 6! ! 1! 2! 9! 5! 9! 1! ! 1! 2! 9! 0! 1! 2! ! 1! 2! 9! 1! 2! 7! ! 1! 2! 9! 5! 8! 2! ! ! 0!
asd afjoK ak: e kPrLd fOJOE; KFO КФкепйгоп сгпаой фай
Выходы
! A! S! D! ! А! Е! J! O! K! ! A K:! Е! ! К! Р! Г! Л! Д! ! ! ! ! ! Ф О J O E!!!!!;! ! ! ! ! ! K! F! O! ! K! F! К! Е! Р! J! Г! О! Р! ! S! Г! Р! А! О! J! ! ! ! Е! А! J!
Базовый контрольный пример только с одним символом:
Выходы
! А!
(Автозаполнение! Шучу, такого нет.) Содержит восклицательные знаки:
!! !! !! !! !!
Выходы:
!!!!! !!!!! !!!!! !!!!! !!!!!
a\n
иa
, можем ли мы требовать, чтобы не было завершающих строк?Ответы:
QuadR , 1 байт
Спасибо A__ за половину количества байтов!
Попробуйте онлайн!
Ничего не заменяет
!
источник
Python 3 , 27 байт
Попробуйте онлайн!
Честно говоря, я надеюсь, что кто-то может показать мне классный способ сделать это с меньшим количеством байтов.
источник
!!
в этом случае, что является для меня смыслом). Если вы имеете в виду строку\n
: это так, поскольку правильный вывод!\n!
.!\n!\n!
,. хорошо сделано.Python 3 , 26 байт
Попробуйте онлайн!
источник
Сетчатка 0.8.2 , 2 байта
Попробуйте онлайн! Наконец, вызов, где Retina имеет встроенный!
источник
Haskell, 18 байт
-1 байт благодаря @nimi
Попробуйте онлайн!
источник
('!':).
сохраняет байт.Python 2 , 27 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 19 байт
Принимает ввод как массив символов.
Попробуйте онлайн!
JavaScript (ES6),
2320 байтСохранено 3 байта благодаря @ShieruAsakoto
Принимает ввод в виде строки.
Попробуйте онлайн!
JavaScript (ES6), 22 байта
Предложил @tjjfvi
Принимает ввод в виде строки.
Попробуйте онлайн!
источник
.replace
22 байтамиs=>[,...s,,].join`!`
R , 25 байт
Попробуйте онлайн!
Функция, принимающая и возвращающая символьный вектор.
источник
scan(,'')
, например, tio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/…scan
(но с помощью которого решение Ника справляется, по крайней мере, если вы отображаете вывод с помощьюcat
.)8086 машинный код, формат .COM (MS-DOS 2+), 32 байта
(-1 в зависимости от эмулятора: см. Ниже)
Для достижения наилучших результатов перенаправьте стандартный ввод из файла, так как при наборе текста получается странный вывод из-за отсутствия буферизации; Кроме того, переводы строки выглядят немного странно, потому что они хранятся как
CR LF
, аCR
часть портит вывод.Эта программа работает нормально в реальной эмуляции MS-DOS (например, PCjs), но DOSBox, похоже, имел проблемы с Ctrl + Z EOF (см. Комментарии в листе сборки), поэтому НЕ пытайтесь вводить ввод с помощью консоли в DOSBox, если вы добавить дополнительную проверку!
Некоторые интересные биты:
Я сохранил некоторое пространство данных за счет многократного использования памяти , которая уже была выполнена (
21H
вINT 21H
случается!
)Я был почти в состоянии использовать интересный трюк, который я нашел на странице «Скрытая сила команд BCD», который позволил бы мне использовать
AAA
вместо стандартаTEST
сравнениеAL
с 0, сохраняя один байт. К сожалению, это не полностью задокументировано, поэтому я не мог на это полагаться: например, PCjs не регулирует ничего, кроме флагов переноса и вспомогательного переноса. :-(Код сборки (идеальный режим TASM):
источник
бред ,
2422 байта-2 байта благодаря JoKing.
Попробуйте онлайн!
источник
Пепе , 47 байт
Попробуйте онлайн!
Объяснение:
источник
Лабиринт ,
19 11 109 байтовПопробуйте онлайн!
Как?
Мы входим в Лабиринт в верхнем левом углу вправо с бесконечной стопкой нулей ...
К счастью, нам не нужно обрабатывать непечатаемые документы, иначе первый нулевой байт перевернет нас
,
и приведет к хаосу.источник
sed , 12 байт
Попробуйте онлайн!
-3 байта благодаря Корове Кря
источник
s/\b\|\B/!/g
также работает для 12 байтовZsh , 32 байта
Попробуйте онлайн!
(s::)
разбивается на символы,''
добавляет пустой элемент в начало, а затемecho -nE $c!
отображает каждый из них, после которого следует символ!
.источник
Perl 5 -p0,
176 байтовПопробуйте онлайн!
Мой оригинальный ответ был
-p
и$_='!'.s,.,$&!,gr
. Спасибо @Nahuel Fouilleul за сокращение 11 байтов и @Grimy за-p0
отзыв.источник
-lp
дает неверный вывод для\n\n\n\n
контрольного примера (возвращает 4 разделенных новой строкой!
вместо указанных 5).-p0
работает правильно.6502, 12 байт (13 байт, если Apple II)
6502
Машинный код предполагает, что пара местоположений нулевой страницы подключена к аппаратному обеспечению ввода ($ FE) и вывода (FF). Многие системы на основе 6502 облегчают ввод-вывод таким способом, хотя адрес ввода-вывода обычно не находится на нулевой странице.
Для простоты я использовал Py65 , симулятор микрокомпьютерной системы 6502, написанный на Python.
Вот дамп памяти от Py65. Вы можете загрузить следующий код в любом месте нулевой страницы, чтобы он не перекрывал $ FE и $ FF.
Запустив в командном окне Windows, вы можете вставить (Ctrl + V) любой текст, который вы хотите, или вы можете просто напечатать. Если вы печатаете, нажмите Ctrl + J для новой строки (тот же символ ASCII). Нажмите Ctrl + C, чтобы прервать работу процессора и вернуться в командную строку Py65.
Естественно, ассемблерный код легче читать.
Для наглядности вот код сборки в формате CBA65 .
Apple II
Приведенный выше код предполагает, что нулевое значение указывает на отсутствие ввода, поэтому продолжает опрос, пока не будет возвращено ненулевое значение.
Для сравнения, Apple I и Apple II сигнализируют о доступности нового символа, устанавливая бит 7 адреса ввода-вывода клавиатуры, который затем необходимо очистить после извлечения символа. В этих системах символьный ввод-вывод обычно выполняется путем вызова процедур системного монитора вместо прямого доступа к оборудованию.
Вызывая RDKEY ($ FD0C) и COUT ($ FDED), Apple II эквивалент вышеупомянутого может быть закодирован в 13 байтов и может быть запущен где угодно в оперативной памяти. Вот код, который я запускал в эмуляторе Apple // e, a2ix на Android 9.
Нажатие Return имеет тот же эффект, что и перевод строки.
Вы заметили, что вместо нормального значения ASCII # $ 21 для восклицательного знака вместо него используется # $ A1? Это происходит потому, что отправка стандартных значений ASCII в COUT приводит к их отображению в «инверсном режиме», черным по белому. Отображение ASCII обычным белым на черном требует добавления $ 80 к значению символа в аккумуляторе перед вызовом COUT. Поскольку RDKEY возвращает символы с установленным hi-bit, программы сборки обычно очищают бит символа, чтобы получить его значение ASCII перед его использованием.
источник
Баш , 36 байт
Попробуйте онлайн!
Это означает, что перевод строки завершает ввод последней строки! отметка.
источник
!
в конце ввода.MarioLANG ,
9594908969 байтПопробуйте онлайн!
Впервые попробовать MarioLANG, это было очень весело!
Спасибо Джо Кингу за -20 байт
Объяснение:
Таким образом, как следует из названия, MarioLANG создан, чтобы играть как игра Super Mario Bros. Он работает аналогично BF, с памятью, упорядоченной в виде ленты ячеек. Существуют операторы для увеличения, уменьшения, печати (как ascii или числовые) и считывания в текущую ячейку памяти, а также операторы для перемещения влево или вправо по ленте.
Марио (указатель инструкций) всегда начинается в верхней левой ячейке программы, причем его предполагаемое направление движения установлено вправо. Если у Марио нет объекта наподобие пола (=, "или #), он упадет, пока не достигнет напольного объекта. Если Марио покинет пространство программы, программа завершится из-за Game Over :(
Эта конкретная программа может быть в основном разделена на две половины: настройка и цикл.
В разделе «Настройка» мы просто увеличиваем первую ячейку памяти, пока не достигнем 33 - значение ASCII для «!». Достаточно просто; если это можно сыграть в гольф, это просто вопрос формы. Марио начинает сверху слева, поднимает 10 монет, начинает падать, когда поднимает 11-е, меняет направление, затем повторяется. Он подбирает последние 11 монет без смены направления; он заканчивает раздел настройки в крайнем правом нижнем углу "+".
В секции петли Марио начинает с лифта. "!" Оператор заставляет его прекратить движение, чтобы он оставался на лифте. По пути он печатает соответствующий символ ASCII в текущем значении ячейки памяти (это всегда 33, «!»), Затем переключается на следующую ячейку в памяти. Марио достигает вершины и задает направление вправо. Он падает и читает символ из ввода как его значение ASCII (или -1, если нет символа). Мы увеличиваем, потому что единственная мера контроля в MarioLANG - это пропуск инструкции, если текущая ячейка памяти имеет значение 0. Если это так, мы пропускаем изменение направления Марио, поэтому он сразу уходит со следующего этажа к своей гибели. Если это не так, мы устанавливаем направление налево; шаг влево от пола ниже уменьшает текущую ячейку до ее предыдущего значения,
Предыдущая версия (89 байт):
источник
Perl 6 ,
1611 байтПопробуйте онлайн!
Заменяет все совпадения нулевой ширины восклицательными знаками. Нулевые регулярные выражения недопустимы, поэтому мы используем маркер захвата, чтобы ничего не захватывать
источник
C # (интерактивный компилятор Visual C #) , 28 байт
Попробуйте онлайн!
источник
05AB1E , 4 байта
Ввод / вывод в виде списка символов.
Попробуйте онлайн.
Объяснение:
источник
Befunge-98 (PyFunge) , 7 байт
Попробуйте онлайн!
источник
Треугольный ,
1513 байтовПопробуйте онлайн!
-2 байта после запоминания того, что у Triangular есть оператор условного останова.
Я считаю, что это так же коротко, как и на этот. Треугольный делает имеют условные операторы направления-изменения, но они , к сожалению , работают иначе , чем другие условные. В то время как все остальные проверяют, является ли ToS <= 0, условные выражения, изменяющие направление, проверяют ToS! = 0. Если бы это было не так, у нас было бы 10 байтов в форме
Bq3~#*/@<<
.Ungolfed:
Предыдущая версия (15 байт):
источник
SimpleTemplate , 23 байта
Это язык, который я написал, и он должен был быть для шаблонов, но хорошо.
Должно быть почти самоочевидным, как только вы увидите некоголенный код:
И объяснение:
!
- печатает буквальный!
символ{@each argv.0 as char}
- Перебирает каждый символ со значением, установленным для переменнойchar
( необязательно , переменная по умолчанию -_
).argv.0
это первый параметр, переданныйrender()
методу компилятора.{@echo char}!
- выводитchar
переменную и буквальный!
символ.Для версии для гольфа используется переменная по умолчанию
_
.{@/}
- закрывает цикл ( необязательно )Чистое решение SimpleTemplate :
Создает функцию,
x
которая выводит тот же результат.Вы можете использовать это так:
Вы можете попробовать все это на: http://sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa
На линии 908, вы можете использовать переменные
$golfed
,$ungolfed
и$fn
проверить все версии.Однако, если разрешено использовать массив символов, код упрощается (20 байт):
И безглым
По сути, выводит все элементы массива
"!"
, окруженные литералом!
.Из-за ограничений в классе компилятора, место обязательно (в версии для гольфа).
Этот код также чрезвычайно сложно использовать в чистом SimpleTemplate (используя функцию в качестве примера):
@call
Может вызвать функцию , которая существует в PHP, что означает , что она не является чисто SimpleTemplate решения.источник
Рубин ,
1716 байтПопробуйте онлайн!
Спасибо значение чернил за -1 байт
источник
gsub
.Гема , 11 персонажей
К сожалению,
!
начинается комментарий в Gema, поэтому должен быть экранирован.Образец прогона:
Попробуйте онлайн!
источник
Желе , 5 байт
Полная программа, принимающая строку, которая печатает результат.
Попробуйте онлайн!
Как?
источник
Japt , 4 байта
Попытайся
источник
'
если бы замена была числом.Japt , 4 байта
Попытайся
Japt
-P
, 7 байтК сожалению
!
, это зарезервированный символ, требующий кавычек.Попытайся
Не так много, чтобы объяснить:
ï
это декартово произведение иi
prepends.источник
Perl 5+
-p
, 11 байтПопробуйте онлайн!
источник