Вызов
Учитывая непустая строка S длины L , состоящей исключительно из печатаемых ASCII символов, вывода другой строки длины L , которая целиком состоит из печатаемых ASCII символов, но не равна S .
Для целей этой задачи пригодный для печати символ ASCII имеет значение от U + 0020 до U + 007E включительно; от
(пробел) до ~
(тильда). Новые строки и вкладки не включены.
Например, учитывая "abcde"
, некоторые допустимые результаты могут быть:
"11111"
"abcdf"
"edcba"
Но они будут недействительными:
"abcde"
"bcde"
"abcde0"
Контрольные примеры
"asdf"
"1111"
" "
"~~~~~"
"abcba"
"1"
" "
"~"
" ~"
"~ "
" 0"
"!@#$%^&*()ABCDEFGhijklmnop1234567890"
" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
правила
- Вы можете предположить, что входные данные полностью состоят из печатных символов ASCII.
- Вы не можете предполагать, что ввод не содержит все 95 печатных символов.
- Можно предположить, что ввод содержит хотя бы один символ и имеет длину менее 256 символов.
- Выходные данные также должны состоять исключительно из печатных символов ASCII. Вы не могли бы, например, вывести байт \ x7F для ввода
"~"
. - Выходные данные должны отличаться от входных данных с вероятностью 1; то есть вы можете генерировать случайные строки до тех пор, пока одна из них не будет отличаться от входной, но вы не можете просто вывести L случайных символов и надеяться, что она отличается.
- Новые строки запрещены в выходных данных, но вы можете вывести одну завершающую новую строку, которая не учитывается в строке.
счет
Это код-гольф , поэтому выигрывает самый короткий код в байтах на каждом языке.
Ответы:
Python 2 , 21 байт
Попробуйте онлайн!
Принимает строковое представление входной строки и усекает его до длины входной строки. Для типичной строки это помещает ее в
'
кавычки и прерывает конец:Обратите внимание, что новая строка начинается с
'
. Покажем, что вывод всегда отличается от ввода.Если у входа нет
'
, тогда выход начинается с,'
а у входа - нет.Если вход содержит
'
и, но нет"
, тогда Python будет использовать"
для внешних кавычек, давая первый символ"
, которого нет во входной строке.Если на входе есть оба
'
и"
, то внешние кавычки есть'
и каждый'
экранируется как\'
. Везде, где первое"
появляется на входе, оно сдвигается вправо на исходное'
на выходе и на любое возможное экранирование. Это означает, что он не может совпадать с a"
в соответствующей позиции на выходе.Наконец, обратите внимание, что цитирование ввода и, возможно, экранирование символов всегда увеличивает количество символов, поэтому усечение вывода делает его такой же длины, как и ввод.
Обратите внимание, что крайне важно, чтобы Python адаптивно переключался
"
на второй вариант. Если этого не сделать, произойдет сбой при вводе трех символов'\'
. Или любой более длинный префикс строки показа исправления, используя'
. Таким образом, этот метод не будет работать для большинства языков.источник
len(s)
а не-2
?'
и"
более 2 символов, будут добавлены, потому что кавычки должны быть экранированы.[2:]
вместо того,[:len(s)]
чтобы получить до 16 символов.05AB1E , 3 байта
Попробуйте онлайн!
источник
JavaScript (ES6),
3733362926182119 байтПопробуйте онлайн!
-4 байта благодаря ETHProductions
-7 + -5 + -2 байта благодаря CalculatorFeline
-3 байта благодаря Рику Хичкоку
Перемещает первый символ в конец и устанавливает его в 0, если он числовой и ненулевой, и 1 в противном случае.
объяснение
доказательство
Поскольку второй символ становится первым, третий символ становится вторым и т. Д. Все символы должны быть идентичны. Последний оставшийся символ может быть только 0 или 1, поэтому повторяющийся символ должен быть либо 0, либо 1. Но любая строка 0 возвращает 1 в конце, и наоборот; поэтому невозможно создать вход, равный его выходу. -ETHProductions
Смотрите правки для предыдущих версий и объяснений.
источник
Желе , 3 байта
Выходные данные представляют собой строку цифр, запятых и знаков минус-минус, первый символ которых будет отличаться от первого символа входной строки.
Попробуйте онлайн!
Как это устроено
источник
Haskell , 20 байтов
Попробуйте онлайн!
Преобразует в строку
F
иT
. Важно то, что персонажиF
иT
обращаются друг к другу. Это делается путем проверки, меньше ли символ, чемM
получитьTrue
илиFalse
, затем беря первый символ строкового представления.Haskell , 23 байта
Попробуйте онлайн
Заменяет каждый символ
~
, кроме~
становится пробелом.источник
q '~'
? Почему его нельзя удалить?'
в качестве идентификатора в идентификаторах, поэтомуq'~'=' '
будет проанализирован какq' ~ '=' '
(сообщая о лексической ошибке, потому что последняя'
не соответствует.)Пробел, 59 байт
Видимое представление
Что оно делает:
Для каждого символа, который он читает, он печатает пробел, за исключением случаев, когда это пробел, а затем печатается символ @.
Разборка:
источник
SSSTSSSSSN (push 32)
вSSSTSSTN (push 9)
иTSSS (add)
кTSSN (multiply)
. Он напечатает вкладку для каждого символа со значением Unicode выше 9, иQ
(9 * 9 = 81) для каждого символа со значением Unicode, равным0..9
. Попробуй онлайн 57 байт , или Попробуй онлайн с добавлением выделения и поясненийMATL ,
65 байтПопробуйте онлайн!
объяснение
источник
l'0f=
(если он делает то, что я думаю, он делает)Haskell , 19 байтов
Анонимная функция, которая принимает и возвращает
String
. Использовать как(map$(!!1).show.succ) "1111"
.Попробуйте онлайн! (Используя тестовое устройство @ xnor.)
'
кавычки.&
и~
, которые вместо этого дают\
, потому что их наследники'
и\DEL
экранируются в символьных литералах.источник
head
можно использовать вместо(!!1)
дополнительного байтаhead
это(!!0)
не(!!1)
. Это не подействует на персонажа'
.05AB1E , 5 байтов
Попробуйте онлайн!
объяснение
Заменяет каждый символ следующим печатным символом ascii, переносясь из тильды в космос.
источник
V , 7 байт
Попробуйте онлайн! или проверьте все контрольные примеры!
Как это работает?
Рассмотрим все строки, состоящие из печатного ASCII. Каждая строка должна либо: 1) содержать буквенные символы, либо 2) не содержать буквенных символов.
Таким образом, эта программа работает, сначала преобразовав один не алфавитный символ
'a'
, а затем выполнив ROT13 для входной строки.источник
9
одному, при увеличении которого в строку добавляется еще один символC (gcc) , 22 байта
Принимает указатель строки и модифицирует первый символ на месте.
Попробуйте онлайн!
источник
*s=159-*s
. Всегда изменяет последний бит, поэтому никогда не дает одинаковый символ. Обратите внимание, что159 = ' ' + '~'
~
неправильно понял код символа .C (gcc) , 20 байтов
Увидел ответ Денниса, подумал о существенном улучшении в 2 байта.
Попробуйте онлайн! (Нижний колонтитул от Денниса.)
Как и оригинал, модифицирует первый символ строки на месте, но делает xors его с его значением, деленным на 3 (наименьшее число, которое работает. 2 терпит неудачу на одном символе,
'U'
который дает 127, не для печати.)источник
Python 2 , 25 байт
Попробуйте онлайн!
Андерс Касеорг сохранил байт, извлекая первый символ из
True
илиFalse
.источник
'?'
код из двух цифр, но Python не из тех языков, где вы можете это сделать :(lambda s:`+(s<'1')`+s[1:]
илиlambda s:`s<'T'`[0]+s[1:]
Haskell,
3026 байтовПопробуйте онлайн!
Заменяет каждый символ своим предшественником, а пробел - тильдой.
источник
Октава ,
1918 байтПопробуйте онлайн!
Объяснение:
источник
CJam , 5 байтов
Попробуйте онлайн!
Преобразует последний символ в его кодовую точку и принимает его по модулю 10. Это явно отличается от нецифровых символов в последней позиции. Но цифры начинаются с кодовой точки 48, поэтому использование этого мода 10 будет сдвигать их влево циклически, и, следовательно, последний символ всегда изменяется.
источник
Сетчатка ,
106 байт4 байта в гольфе благодаря @Neil
Попробуйте онлайн!
Это транслитерирует
к
~
,!
к,
"
к!
, ...,~
к}
.источник
Japt , 4 байта
Попробуйте онлайн!
Объяснение:
источник
Cubix , 10 байт
Попробуйте онлайн! или смотреть, как он бежит!
Для каждого символа печатается,
1
если символ имеет четную кодовую точку, в2
противном случае;1
имеет нечетную кодовую точку и2
четную, поэтому выход никогда не будет равен входу.объяснение
Этот код соответствует следующей сети кубов:
IP (указатель инструкций) начинается в верхнем левом углу крайнего левого лица и направляется на восток. Это следует из этой серии инструкций:
источник
Алиса , 9 байт
Попробуйте онлайн!
объяснение
Идея была взята из представления Мартина Эндера в CJam. Первый символ берется в качестве кодовой точки, сокращается мод 10 и перемещается в конец вывода. Поскольку был изменен ровно один символ, перестановка символов не может привести к получению той же строки обратно.
источник
t
для мода 10 действительно умно, приятно. :)Напористый , 1 байт
Попробуйте онлайн!
Это преобразует данную строку в список кодов символов ASCII, индексирует их (модульное индексирование) в верхний алфавит, а затем печатает результат. По сути, каждый персонаж
n
отображается наchr(ord(n) % 26 + 65)
. Вы можете использовать эту программу, чтобы увидеть, как работает отображение.Выход:
n
такогоchr(ord(n) % 26 + 65) == n
, что для того, чтобы это было правдой, должно быть целое число,x
такое26x = 65
, для которого нет решения.1 байт
Попробуйте онлайн!
Этот ответ точно такой же, за исключением того, что он отображается строчными буквами алфавита, а не прописными буквами алфавита. Это все еще допустимо, поскольку нет никакого возможного входного символа,
n
такого какchr(ord(n) % 26 + 97) == n
.источник
Brain-Flak , 53 байта
Включает +1 для
-c
Это будет уменьшать первый символ, если это не пробел, в этом случае он будет увеличивать первый символ.
Попробуйте онлайн!
источник
Желе , 4 байта
Выводит цифровую строку. Никакой выходной символ не будет равен соответствующему входному символу.
Попробуйте онлайн!
Как это устроено
источник
Bash + coreutils, 13
Транслитерирует символы
в
~
(0x20 - 0x7e) с помощью~
, затемв
}
(0x7e, 0x20 - 0x7d).Попробуйте онлайн .
источник
PHP,
3027Изменяет каждый символ, равный первому, с измененным наименее значимым битом.
источник
~
работает , выводит1
.!$a
или~$a
работает?!$a
превращаются"12"
в"12"
потому чтоfalse
преобразуется в пустую строку, так что ничто не заменяется и~$a
превращает все в непечатаемые, потому~"12"
что сначала не преобразуется в int, а буквально переворачивает все биты в строке.Рубин , 20 + 1 = 21 байт
Использует
-p
флаг.Попробуйте онлайн!
Заменяет первый символ во вводе на,
0
если это1
, или1
иначе.источник
Брахилог , 9 байт
Попробуйте онлайн!
объяснение
Это заменяет все символы пробелом, кроме пробелов, которые он заменяет
"0"
.источник
PHP <7,1, 31 байт
Попробуйте онлайн!
источник
A non-numeric value encountered
. И вы можете использовать~
вместоa&
.Golfscript, 3 байта
Попробуйте онлайн!
Возьмите значение ASCII последнего символа по модулю 5 и замените последний символ результатом. Это, очевидно, работает для нецифровых символов, но если последний символ является цифрой, он также изменяется («0» mod 5 = 3, «1» mod 5 = 4 и т. Д.).
Это также будет работать с 7 или 9 при сохранении той же длины.
Кроме того, ууу! У меня есть решение для Golfscript и лучшее решение здесь!
источник
Фанки ,
2622 байтаВычисляет,
~a
что для не-цифр вернет NaN. Затем1&
ограничивает его либо 0, либо 1, для цифры 0 это будет1
, и для1
этого будет0
. Так что эта строка всегда уникальна.Попробуйте онлайн!
источник