Напишите программу или функцию, которая принимает непустую однострочную строку. Строка будет либо нулем, либо несколькими пробелами, за которыми следует один период ( частица ), например, .
или .
, или строка будет представлять собой последовательность из одного или нескольких чередующихся прямого и обратного слешей ( волны ), которые могут начинаться с любого из них, например как \
или /\/
или \/\/\/\/\/\/
.
В любом случае распространяйте частицу / волну вправо на одну единицу.
В частности, в случае частиц вставьте пробел перед .
, переместив его на одно место вправо, затем выведите получившуюся строку. Например:
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
.
→ .
В случае волны добавьте либо, /
либо \
соответствующим образом, чтобы волна продолжала чередоваться и ее длина увеличилась на единицу, а затем выведите получившуюся строку. Например:
/
→ /\
\
→ \/
/\
→ /\/
\/
→ \/\
/\/
→ /\/\
\/\
→ \/\/
/\/\
→ /\/\/
\/\/
→\/\/\
В любом случае выходные данные могут не иметь конечных пробелов, но допускается дополнительная конечная новая строка.
Самый короткий код в байтах побеждает.
Ответы:
C 69 байтов
Для этого требуется машина с прямым порядком байтов и вывод на терминал, поддерживающий escape-коды ASCII.
p=s[strlen(s)-1]^46
захватывает последний ASCII-код входной строки и XOR с помощью ASCII-кода точки.p^=p?93:3022856
будетp
,p^93
если код ASCII не является (обратной) косой чертой, гдеp^46^93 == p^115
, который будет переключаться между обратной и прямой косой чертой. Еслиp
это точка, то вместо нее будет3022856
, что является прямым порядком байтов"\b ."
.printf("%s%s",s,&p);
печатает входную строку, за которой следует целое числоp
, интерпретируемое как байтовая строка с прямым порядком байтов.источник
3022856
с'. \b'
, многобайтовой литерой. Отличный ответ!Желе ,
1714 байтПопробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
CJam, 16 байтов
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Python, 41 байт
Casework. Использует отсортированный порядок
' ', '.', '/', '\'
. Для пробелов и точек, пробелы. В противном случае добавляется косая черта или черная косая черта напротив последнего символа.источник
Python,
4442 байтЗаменяет последний символ соответствующим набором из двух символов. ссылка на идеон
(-2 байта благодаря более короткой функции отображения @ xsot)
источник
-ord(s[-1])&3
также дает 3 разных показателя.&
!Game Maker Language, 107 байт
источник
Vim,
2723 нажатия клавишПервый ответ vim, даже не использовал vim.
Как это работает: он добавляет
/
в конце строки, сабы//
для/\
, сабы./
для.
источник
/
Например, вы можете избежать экранирования, если используете другой разделительs#//#/\\
.MATL , 19 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
CJam,
352625 байтСохранено 9 байтов благодаря Денису
Сохранено еще 1 байт, также благодаря Денису
Попробуйте онлайн!
Возможно, плохо играл в гольф, но я не слишком знаком с CJam. Возможно, есть лучший способ проверить, находится ли элемент в массиве, но я не смог найти операторов для этого.
Объяснение:
источник
W
изначально-1
и?
работает как с блоками, так и с другими элементами стека, так что вы можете сократить свой код доq:I'.#)SI+IW='/=I'\+I'/+??
&
.05AB1E,
1715 байтобъяснение
Попробуйте онлайн
источник
C 85 байт
Ideone
Я не спал около 20 часов, мой код, вероятно, можно много играть в гольф.
источник
Брахилог , 35 байт
Тестирование. (Слегка изменено.)
источник
Matlab,
74716257 байтОн вычисляет последние два символа на основе
s(1)
(первого символа) - чтобы определить, имеем ли мы дело с\/
регистром, и последнего символа,s(end)
чтобы сделать правильный кортеж для\/
символов.источник
Сетчатка, 19 байт
^H
представляет байт BS. Попробуйте онлайн!источник
/
станет/\/
.> <> , 47 байт
Попробуйте онлайн!
Первая строка - это стандартный входной цикл> <>. Вторая строка выбирает соответствующий символ
/ \
для добавления к строке на основе последнего входного символа. Кроме того, если последний входной символ был.
, два верхних элемента переключаются. Наконец, содержимое стека печатается в обратном порядке.источник
JavaScript,
79706558 байтисточник
b.charAt(i+1)
на,b[i+1]
чтобы сохранить несколько байтов. Кроме того, это не работает для всех тестовых случаев.\/
дает `/ \`, например.b
иi
as params со значением по умолчанию:(a,b=...,i=...)=>
чтобы избежатьreturn
{ }
а также из-за этого.C # - 46 байт
s=>s[0]<47?' '+s:s+(s.EndsWith("/")?'\\':'/')
Попробуй это здесь.
источник
Хаскелл,
464544 байтаПринимает преимущество в том , что
<
.
</
<0
<\
в таблице ASCII , чтобы сохранить два байтаисточник
Python 2, 72 байта
Любая помощь в гольф больше будет принята с благодарностью!
Он берет последний символ во входных данных и преобразует его в свой код ASCII, чтобы получить соответствующий индекс в списке из двух символов. Эти два символа добавляются ко всем символам ввода вплоть до последнего.
источник
SQF, 91
Использование формата «функция как файл»:
Позвонить как
"STRING" call NAME_OF_COMPILED_FUNCTION
источник
Perl, 30 + 1 (
-p
) = 31 байтНеобходимо
-p
и /-M5.010
или-E
запустить:Прямая реализация задачи. (Обратите внимание, что
||
между двумя последними регулярными выражениямиor
, как это может быть трудно читать, поэтому три регулярных выражения:,s/\./ ./
иs|/$|/\\|
, иs|\\$|\\/|
)источник
C #, 54 байта
источник
PowerShell v2 +,
59585251 байтПринимает ввод
$n
, сбрасывает в него операцию индекса массива. Мы выбираем элемент массива на основе индекса['.\/'.IndexOf($n[-1])
- т.е., на основе последнего символа ввода$n
, это приведет0
,1
или2
. Это соответствует соответствующей строке массива. В любом случае, полученная строка остается в конвейере, и печать неявна.Контрольные примеры
источник
C #,
8063 байтаисточник
s=>{var c=s[s.Length-1];return c<'/'?" "+s:c>'/'?s+"/":s+"\\";}
63 dotnetfiddle.net/8x79azs=>{var c=s[s.Length-1];return c<47?' '+s:s+(c>47?'/':'\\');}
61 dotnetfiddle.net/ykKIL1Машинный код ARM в Linux, 50 байт
Шестнадцатеричный дамп:
Первый пост здесь, надеюсь, я делаю это правильно. Это 32-битная сборка ARM, а именно Thumb-2. Входная строка является строкой с нулевым символом в конце, принятой через r0, вывод выводится на стандартный вывод. В С-синтаксисе прототипом функции будет void func_name (char * string). Это жалоба AAPCS (соглашение о вызовах ARM), если бы ее не было, то 2 байта можно было бы сбрить.
Вот эквивалентная сборка с комментариями, объясняющими, что происходит:
источник
ECMAScript 6/2015 (JavaScript), 41 байт
Хорошо поймать Нила.
источник
+(s+1)
?s<'/'
.R 119 байт
Ungolfed:
источник
SED,
41 3627спас 7 благодаря Чарли
использует 3 замены:
s/\./ ./
добавляет пробел, если есть.
s|/$|/\\|
,s|$|/|
добавляет соответствующую косую черту в концеиспользования
|
вместо/
качестве разделителяt
ветвится до конца, если второе регулярное выражение совпадает, поэтому оно не добавляет другую косую чертуисточник
s/\./ ./;s./$./\\.;t;s.$./.
- это 27 байтов. 3-я замена упрощена и в моей системе-re
не нужна. Кроме того, я использую.
вместо того,#
чтобы визуально оставаться в области ввода. ; о)Turtlèd , 32 байта (неконкурентный)
Объяснение:
источник
Java 7, 76 байт
Довольно просто.
Ungolfed & тестовый код:
Попробуй это здесь.
Выход:
источник