Задание
В этой задаче ваша задача состоит в том, чтобы написать программу или функцию, которая принимает строку и выводит истинное или ошибочное значение в зависимости от того, равны ли первый символ и последний символ входной строки.
вход
Вы можете принять участие любым разумным способом. Однако предполагать, что входные данные присутствуют в предопределенной переменной, не разрешено. Допускается чтение из файла, консоли, командной строки, поля ввода и т. Д. Или использование ввода в качестве аргумента функции.
Выход
Вы можете выводить данные в любом приемлемом формате, кроме присвоения результата переменной. Запись в файл, консоль, командную строку, модальное поле, return
операторы функций и т. Д. Разрешена.
Дополнительные правила
Ввод также может быть пустой строкой, для которой вы должны вернуть значение Falsey.
Строки ввода с одним символом должны иметь достоверный результат.
Ваша программа должна быть чувствительной к регистру.
helloH
должен вывести значение фальси.Вы можете иметь только одно значение Truthy и одно значение Falsey. Например, вывод
false
для входной строки и0
другой входной строки в качестве значений Falsey не допускается.Стандартные лазейки не допускаются.
Тестовые случаи
Input -> Output
"10h01" Truthy
"Nothing" Falsey
"Acccca" Falsey
"wow!" Falsey
"wow" Truthy
"H" Truthy
"" Falsey
Это код-гольф , поэтому выигрывает самый короткий код в байтах!
источник
.
, но он не будет соответствовать переводу строки. В общем, если вы используете строковый тег, укажите, какие именно символы могут отображаться на входе.AbAb => false
Ответы:
Желе , 3 байта
Попробуйте онлайн!
источник
Python 3 , 23 байта
Вывод осуществляется через код выхода, поэтому 0 (успех) является правдой, а 1 (сбой) ложным. Если это приемлемо, можно сохранить байт.
Попробуйте онлайн!
Как это работает
Прежде всего, если s - пустая строка,
s[0]
возникнет ошибка IndexError , что приведет к сбою программы.Для непустых s , если первый и последний символы равны,
s[0]!=s[-1]
будет иметь значение False , поэтому программа завершается чисто и сразу.Наконец, если символы различаются,
s[0]!=s[-1]
будет установлено значение True , что приведетs[-1]<e
к выполнению сравнения . Так как e не определено, это вызывает ошибку NameError .Если обратная совместимость с Python 2 нежелательна,
также работает, так как сравнение строки с целым числом вызывает ошибку TypeError .
источник
JavaScript, 19 байт
источник
endsWith
метод объекта String. Ницца! :)endsWith()
?! Я ждал возможности использовать его.Mathematica, 15 байт
Принимает массив символов. Выдает ошибки, когда ввод пуст, но может быть проигнорирован.
источник
===
обрабатывает пустой случай :)05AB1E , 4 байта
Попробуйте онлайн! или попробуйте все тесты
источник
ÂâćüQ
быть более запутанным и получить байт!ćsθQ
это еще 4 байта.Сетчатка ,
1312 байтПопробуйте онлайн! Включает тестовый набор. Редактировать: 1 байт сохранен благодаря @Kobi.
источник
C ++, 39 байт
Полные программы:
Попробуйте онлайн
источник
s[0]
на,*s
чтобы сохранить два байта каждый?Брахилог , 4 байта
Попробуйте онлайн!
объяснение
источник
Ява,
8177 байтПопробуйте онлайн
true
если они равны, в противном случаеfalse
,false
для пустой строкиВерсия массива, 60 байт
источник
Charcter.MAX_VALUE - Character.MIN_VALUE
65535s.charAt(l-1)==s.charAt(0)
сэкономит два байта.Python 2 ,
262524 байтаСпасибо @Dennis за сохранение байта!
Попробуйте онлайн!
источник
брейкфук , 43 байта
Попробуйте онлайн!
объяснение
Основной цикл есть
[>[->+<<->],]
. После каждой итерации ячейка справа от текущей позиции является первым байтом строки, а ячейка слева - разницей между последним обработанным символом и первым.<[[-]-<]
преобразует конечный результат в -1, если он не равен нулю, а остальные преобразуют -1 и 0 в 48 и 49 («0» и «1» соответственно).источник
Haskell , 21 байт
c
принимаетString
и возвращаетBool
.Попробуйте онлайн!
c s=s!!0==last s
.take 1s
дает список, который является только первым элементом,s
если неs
является пустым, в этом случае это также пустой.last s
выдает ошибку в пустой строке, но лень Хаскелла сохраняет ее: строка с одним элементом всегда отличается от пустой строки без оценки ее элемента.источник
MATL, 5 байтов
Попробуйте это в MATL Online!
объяснение
В случае, если должна быть обработана пустая входная строка, будет работать что-то вроде следующего (8 байт)
Это решение просто добавляет a
0
к передней части матрицы N x N, так что для пустого ввода, когда матрица есть0 x 0
, все еще есть0
значение, которое затем захватывается0)
Попробуйте это на MATL Online
источник
5L)d~
.tn?&=PO)}F
бы справиться с пустым вводом; не уверен, есть ли более эффективный способ)Japt , 6 байт
Попробуйте онлайн!
источник
false
). Я думаю, что это можно исправить с помощьюtJ ¥Ug
APL (Дьялог) , 4 байта
Попробуйте онлайн!
объяснение
Вот причина, по которой это работает на пустых строках. Применение
⊃
к пустой строке возвращает пробел. Но обращение пустой строки по-прежнему возвращает пустую строку, поэтому сравнение пустой строки с непустой строкой (в данном случае
) дает пустой числовой вектор. И применение
⊃
к пустому числовому вектору возвращает0
. Следовательно, передача пустой строки возвращает0
.источник
(⊃⌽)=⊃
или⊢/=⊃
, но ни один из них не дает правильный результат. Вместо этого⌽=⊃
сравнивает обратную строку со своим первым символом, а затем выбирает первый элемент этого. Если строка пуста, она заканчивает тем , что сравнение пространства в пустую строку, которая дает пустой булеву список, из которого (принуждать) первый элемент⊃
является0
- правильным ответом для пустых строк. Ваше выражение эквивалентно,⊃⊃=⌽
потому что=
является коммутативным.⊃⌽=⊃
это не то же самое, что(⊃⌽)=⊃
. Это дороже, так как сравнивает все элементы, а не только первый и последний. Также это не сработало бы, если бы в OP использовались числа вместо строк.The first argument reversed
→The right argument reversed
Java,
5243 байтаЧтобы заставить это работать, вставьте это в функцию, такую как следующее, которая заставляет лямбду "идти":
источник
s.endsWith(""+s.charAt(0))
вместоs.charAt(0)==s.charAt(s.length()-1)
s->""!=s&&s.endsWith(""+s.charAt(0))
new String()
в лямбду. Это бросит исключение. Ссылочная семантика здесь не работает.Рубин,
2624 байтаСохранено два байта благодаря @philomory !
Первый пост на Codegolf -))
источник
e[0]&&e[0]==e[-1]
, так как еслиe
пусто,e[0]
будет ноль. На самом деле, если подумать,nil
это не хорошо, так как это ложь, но не та ложь, которую возвращает сравнение; Тем не менее, после добавления!!
вы все еще сохраняете 2 символа.PHP> = 7.1, 23 байта
печатает 1 для равных и ничего, если символ отличается
источник
Swift, 57 байт
источник
a.last
необходимого?C #,
3830 байтСохранено 8 байтов благодаря @raznagul.
источник
s
просто сравните это с""
. Также вам не нужен?:
оператор. Использование&&
имеет тот же результат.&
иметь такой же эффект тоже?&
не работает. Со&&
вторым выражением не проверяется, если первое выражение ложно. С&
секундами выражение всегда проверяется и завершается неудачно сIndexOutOfRangeException
пустой строкой теста.s.Last()
вместо этогоs[s.Length-1]
R, 40 байт
Спасибо Нитродону за -2 байта.
Спасибо MickyT за -8 байт.
Тест:
Выход:
источник
rev(y<-el(strsplit(x,"")))==y
.f=
function(x)x>""&&rev(y<-charToRaw(x))==y
> <> ,
3933 байтаЭто мой первый раз, когда я использую> <> и играю в гольф с кодом, поэтому полезные советы приветствуются.
Код состоит из трех основных разделов.
источник
Google Sheets, 33 байта
Принимает входные данные от ячейки
[A1]
и выходные данные1
для правдивого ввода и0
для фальсификацииСледует отметить, что круглые скобки в
Exact(
иRight(
остаются незакрытыми, поскольку Google Sheets автоматически исправляет это, как только пользователь вводит текст формулы и нажимает клавишу ввода, чтобы покинуть эту ячейку.Выход
источник
&
. Кроме того, он считает,A=a
что это правда. Самое короткое, что я могу получить - 38 байтов:=AND(EXACT(LEFT(A1),RIGHT(A1)),A1<>"")
или альтернатива=IFERROR(CODE(A1)=CODE(RIGHT(A1)),1=0)
.TRUE
для любого ввода без ошибок. ( скриншот ) Это работает в вашей копии для всех тестовых случаев? ExcelGuy имеет ответ, который заканчивается, как мой выше, по тем же причинам.*
вместо этого&
для двоичного и оператора, но это все еще оставляет"A"="a"
проблему, которую я полностью упустил из виду. Все это и немного синтаксических исправлений приводят меня к=EXACT(LEFT(A1),RIGHT(A1))*(A1<>"")
35, но я переключил язык на Google Sheets, что позволило мне отбросить вExact
выражении двойную скобку в терминале , отрисовывая=(A1<>"")*Exact(Left(A1),Right(A1
33 байтаР,
5043414064Второе решение с 41 байтом для вызываемой функции - благодаря @ niczky12 & @Giuseppe - исправлено для x = ""
Сначала с 50 байтами, но не для вызова
источник
charToRaw
на,utf8ToInt
чтобы произвестиNA
s, когда строка пуста.{}
вокруг тела функции.(y==rev(y))[1]
короче на байтNA
к пустой строке, ноFALSE
для"ab"
. Попробуйте онлайн! ,Октава, 16 байт
Он принимает строку в
s
качестве входных данных и сравнивает первыйs(1)
элемент с последнимs(end)
.Это может быть ,
@(s)s(1)-s(end)
если это было в порядке , чтобы поменятьtrue/false
наfalse/true
.источник
GNU grep , 12 байт
Запустите в расширенном или PCRE режиме.
Я не знаю, считается ли это обманом или нет.
источник
JavaScript, 20 байт
Добавить
f=
в начале и вызвать какf(arg)
.объяснение
Эта функция принимает аргумент
_
. В теле функции_[0]==_.slice(-1)
проверяет, равен ли первый элемент_
(по0
индексу th) его последнему элементу, и возвращает соответствующийtrue
илиfalse
логический.источник
SILOS , 81 байт
Попробуйте онлайн!
источник
Common Lisp,
83746158 байтОригинал: 83 байта
Я только начал изучать Common Lisp, так что я чувствую, что привожу клюшку на тренировочную площадку. Здесь должна быть какая-то рекурсивная макрокоманда или манипулирование массивами, которых я не вижу.
Это анонимная функция, которая принимает строку в качестве входных данных:
Prettified:
Хотелось бы увидеть решение Slicker!
Редакция 1: 74 байта
Должен любить эти стандартные функции библиотеки!
Гадкий:
Милая:
Редакция 1.5: 61 байт
Пробелы!
Редакция 2: 58 байт
Гадкий:
Милая:
Это все на данный момент! Я думаю, что я уже умнее.
источник
if
вместоand
и(mismatch(reverse s)s)
вместо(mismatch s(reverse s))
AWK,
2934 байтаЭтот может немного обмануть, потому что он требует вызова AWK с опцией:
В GNU Awk вы можете использовать длинные синонимы:
Таким образом, я добавил 5 байтов к общему количеству, чтобы учесть это.
Гадкий:
Милая:
источник