Создайте программу, которая преобразует входную строку в палиндром, начиная с входной строки. Сама программа должна быть палиндромом.
Например, введите:, neverod
распечатать neveroddoreven
. Вы должны также обрабатывать многословные, многострочные вводы.
neverod
->neverodadoreven
(сa
промежуточным)Ответы:
Дьялог АПЛ,
64Попробуй это здесь.
Другие решения:
объяснение
Они просто:
Monadic
,
и⊢
ничего не делает на струнах. Дядький,
это конкатенация. Дядич⊢
возвращает свой правый операнд. И⌽
, очевидно, реверсия.источник
Пит 19х2 = 38
Принимает ввод, пока не встретит 0x00. Не завершается, но вывод будет правильным.
источник
APL, 9
Объяснение:
источник
CJam, 13 байтов
Попробуйте онлайн здесь
или..
GolfScript, 9 байт
Попробуй здесь
источник
#
комментарий будет работать там же.}
это был супер комментарий с давних времен :)C ++, 162 байта
C 117 байт
источник
Haskell, 102 + 22 = 124 байта
Это должно выполняться с
Control.Applicative
модулем в области видимости, который может быть установлен через файл инициализации ghci.ghci
::m Control.Applicative
(-> +22 байта).Без комментариев, только 7 функций, из которых 4 никогда не вызываются.
Если функции (вместо программ) разрешены:
Haskell, 55 + 22 = 77 байт
Использование
f "qwer"
->"qwerrewq"
Изменить: предыдущая версия была просто неправильно.
источник
Pyth, 11 байт
В Pyth все, что предшествует пробелу, не печатается. Таким образом, мы просто добавляем минус строки к себе, ставим пробел, начинаем строку и отражаем левую часть цитаты »
Попробуйте онлайн здесь
источник
Руби, 44
Принимает многострочную строку в качестве ввода из stdin, выводит представление Ruby этой строки, объединенной в обратном направлении. Может обрезать характер, заменив
||
с#
закомментировать мертвый код на вторую линии.источник
s=gets p
! =p steg=s
Джольф, 9 байт
Более новый язык, не конкурирующий
Попробуй здесь
Пояснение: Я только начал Джольфа, и я не думаю, что объясняю это должным образом.
источник
η
в решении, очень хорошо сделано. Вы можете сохранить два байта, устраняя му, как:a+i_i+a
. (У Джольфа также есть неявный ввод для заполнения остальных аргументов, но это не проблема, поскольку за один раз дается только один ввод.) Я бы все же оставил ваше исходное решение в ответе.PowerShell, 67
Попробуйте онлайн
Как подсказывает @mazzy, при использовании статического диапазона код может быть сокращен на 12 байт. Это, однако, ограничивает длину ввода до 9 Кбайт. Теоретически 9 МБ было бы возможно, но это значительно замедлило бы код.
источник
param($s)$s+-join$s[$s.Length..0]#]0..htgneL.s$[s$nioj-+s$)s$(marap
$args|%{$_+-join$_[9Kb..0]}#}]0..bK9[_$nioj-+_${%|sgra$
(55 байт)Нечеткое окто гуакамоле, 17 байтов
FOG новее, чем этот вызов, так что это не конкурирует.
Альтернативное решение в 19 байтах:
Они оба берут ввод, дублируют и обращают, и присоединяются к стеку.
Объяснение:
источник
tinyBF , 40
Моей первой мыслью был Brainfuck, но невозможно подобрать фигурные скобки ... к счастью, tinyBF имеет более простое управление потоком.
Без комментариев, он принимает в качестве входных данных строку с нулевым символом в конце и возвращает результат в виде строки с нулевым символом в конце. Вы можете проверить его здесь , просто предупредив, что он не останавливается (хотя Firefox по крайней мере предлагает остановить не отвечающий скрипт).
комментарии:
Обратите внимание, что если вы закодируете его в 2-битные инструкции, он урезает размер до 10 байт (не будет палиндромом).
источник
Python 3, 59 байт
Я изо всех сил старался найти решение, которое использовало бы только одну строку, но мне не повезло.
Python 3, 79 байт
Моя оригинальная попытка, в которой каждая строчка является палиндромом. Я не думаю, что это необходимо для этого вызова, но я включил его на всякий случай.
источник
lambda
это так долго):print((lambda a:a+a[::-1])(input()))#)))(tupni()]1-::[a+a:a adbmal((tnirp
Витси, 9 байт
Попробуйте онлайн!
источник
Befunge , 37 байт
Попробуйте онлайн!
Верхняя строка сдвигает и печатает каждый символ ввода. Вторая строка (перед
@
) печатает стек в обратном порядке, но мы вводим в условном выражении,_
чтобы использовать -1, сгенерированный, когда закончим чтение ввода. Другая половина кода (включая эти уродливые конечные символы новой строки) делает исходный код палиндромом, но никогда не работает.источник
C # (
3332 + 1) * 2 =6866 байтСохранено 2 байта для использования .Aggregate ()
О, старая добрая лямбда, вы можете поймать ее с
а затем позвонить с
источник
Perl, 45 байт
Довольно просто,
print
s input ($_=<>
), а затемreverse
из него.reverse
возвращается,$_
потому что мы используем его в скалярном контексте с префиксом~~
. Затем мы сопоставляем (m//
используя в;
качестве разделителя), в пустом контексте, обратную сторону скрипта.Если мы можем гарантировать, что нам не нужно создавать палиндром,
esrever,><=_$tnirp
мы можем сократить код до 43 байт :использование
Perl, 26 байт
Включает 25-байтовый код + 1 для
-p
.Я не думаю, что это верно, поскольку для этого требуется
-p
флаг, который, я думаю, не может быть легко объединен с содержимым скрипта для создания настоящего палиндрома. Практически те же вызовы, что и выше, за исключением того, что он-p
также добавляет;
закулисные (на более новых Perls ...) для закрытияm//
.использование
источник
Пиф, 15
Обратите внимание на пространство в начале и в конце.
Довольно раздражающая задача в Pyth.
z_z
печатает желаемый палиндром, но печатаетz
(входную строку) и_z
инверсию на двух разных строках.+
объединяет два слова, но+
в конце требуется два новых утверждения в конце (и в начале). Я выбираюk
иk
, которые просто пустые строки. Затем много пробелов, которые подавляют печать (и печатают пустые места, которые, конечно, порождают разрывы строк).Поскольку пробел подавляет все выходные данные, кроме
+z_z
, вы можете заменить символk
s и литерал на арность 0. Например,1 2+ z_z +2 1
илиT Z+ z_z +Z T
.Попробуйте онлайн .
источник
Javascript, 137 байт
Я не использую «трюк с комментариями», но я использую трюк с кавычками, к сожалению.
источник
";
. Добавление;
последнего символа в строку должно исправить это.JavaScript, 58 байт
источник
PHP, 28 + 1 + 28 = 57 байт
принимает входные данные из аргумента командной строки. цитата для нескольких слов, экранирование новой строки для нескольких строк.
источник
Python 2, 51 байт
Я удивлен, что никто не подумал об этом! Требуется цитируемый ввод (
'
или"
). Если бы функции были разрешены, я мог бы сделать это для 37 байтов:источник
C ++ 14,
152116 байтКак безымянного лямбда, предполагает
s
, чтоstring
Старое решение:
Использование:
источник
05AB1E , 5 байтов
Попробуйте онлайн.
Объяснение:
Или в качестве альтернативы:
Попробуйте онлайн.
Где
R
обратное, а«
вход снова неявно принимает ввод для конкатенации.ПРИМЕЧАНИЕ. Если нам разрешено выводить данные
neverodoreven
для вводаneverod
, который по-прежнему является палиндромом, это можно сделать в 1 байте вместо этого с помощью встроенной функции palindromize:Попробуйте онлайн.
источник
Сборка x86-64 (соглашение о вызовах Microsoft x64), 89 байт:
Разобрал:
Обратите внимание, что код после
ret
инструкции2C
недоступен, поэтому не имеет значения, что это чепухаисточник
Japt , 4 байта
Попробуйте онлайн!
Как это работает
Альтернатива 4 байта
Попробуйте онлайн!
Как это работает
источник
Backhand ,
3327 байтПопробуйте онлайн!
В отличие от многих решений здесь, это один фактически делает использовать palindromised код!
Объяснение:
В целом, неисполненные инструкции:
источник