Недавно я прошел тест по математике и заметил, что определенное число в тесте соответствует интересной схеме. Число ( 28384
) соответствует общей последовательности цифр, которая выглядит следующим образом
(n)(x)(n+1)(x)(n+2)(x)(n+3) etc...
где n
и x
однозначные целые числа. Последовательность может начинаться либо x
или n
и заканчиваются либо x
или n+y
.
Ваша задача, учитывая многозначное положительное целое, вывести истинное или ложное значение, в зависимости от того, соответствует ли входное значение шаблону. Длина ввода будет от 4 до 18 цифр. Вы можете принять ввод как строковое представление целого числа. Ввод не будет начинаться с 0, но может содержать или заканчиваться 0.
n+y
всегда будет однозначным числом (отсюда и ограничение длины 18).
Тестовые случаи
Это должно вывести истинное значение
182838485868788898
4344
85868
12223242526
И это должно быть фальсией
12345
6724013635
36842478324836
1222232425
5859510511
Как и во всех гольф-кодах, выигрывает самый короткий код! Удачи и пусть шансы, будь всегда в твою пользу!
x
иn
ненулевыми для чисел, которые соответствуют правилу?Ответы:
Python 2 ,
84818079 байтов-1 байт благодаря овсу
Попробуйте онлайн!
Python 3 ,
82797877 байтПопробуйте онлайн!
Немного короче в Python 3, но я не думаю, что он заслуживает своего собственного ответа.
объяснение
Мы создали функцию,
g
которая принимает строку и индекс (либо 1, либо 0).g
затем возвращает значениеlen(set(x[a::2]))
, равное или нет , то есть число уникальных цифр в любой другой позиции, равно(x[a==0::2]in"123456789")
или нет, находятся ли другие цифры в порядке возрастания. Если цифры расположены в порядке возрастания, возвращается тот факт, являются ли они одинаковыми или нет, если нет, то будет задан вопрос, является ли набор пустым, чего не может быть, поэтому всегда возвращается значение false.источник
x[a<1::2]in"123456789"
может быть"0"<x[a<1::2]<":"
(сравнение символов сравнивает коды)a<1
? Похоже, что это может быть простоa
.Желе ,
1311 байтПопробуйте онлайн!
Объяснение:
источник
05AB1E , 15 байтов
Попробуйте онлайн!
объяснение
Это должно работать (тестовые случаи сделали), но если вы обнаружите какие-либо недостатки, пожалуйста, дайте мне знать.
14 байт, если нет выходных данных, считается ложным:
источник
D, 117 байт
Определенно неоптимальный, но работает нормально
Попробуйте онлайн!
источник
Haskell,
1081139795 байтПример вызова:
f "182838485868788898"
доходностьTrue
Безголовая версия с объяснениями:
источник
isPrefixOf
не в Prelude, поэтому вы должны включитьimport Data.List
в свой код или использовать альтернативу, напримерand(zipWith(==)(n:r)[n..])
.x/=y
может быть просто1>0
потому, что если нет,x/=y
тоx==y
и первый случай это ловит.where
определении,c
иd
как вспомогательные функции за пределамиf
хорошо.f
может быть сокращено доf s@(_:n:_)=c s||c(n:s)
.;
. Это тот же счетчик байтов, но улучшает читаемость кода.JavaScript (ES6),
666360 байтПринимает ввод в виде строки.
Контрольные примеры
Показать фрагмент кода
источник
C (gcc), 123 байта
Попробуйте онлайн!
источник
Python 3 ,
99 9689 байтall()
функции&
|
и замена дополнительной переменной наk<1
Попробуйте онлайн!
Объяснение:
Сначала разбейте строку на два списка: один с нечетным индексом, а другой с четным элементом. Предполагается, что два списка A и B таковы:
ИЛИ как раз наоборот
Последовательное условие проверяется:
a in '123456789'
Условие того же номера проверяется:
all(i=a[x] for i in a)
источник
i
withk<1
и отброситьi
аргумент все вместе.&
вместоand
. Вашor
может быть заменен|
на.PHP , 68 байт
Попробуйте онлайн!
Вывести часть строки поиска, начиная с первого вхождения ввода и до конца строки поиска, в качестве истинного значения и ничего для фальши
2 байта больше , вы можете заменить
echo$s;
с ,!!echo$s;
чтобы получить в1
качестве truthy значенияНайти вхождение ввода в одной из следующих строк в массиве
источник
JavaScript (ES6), 54 байта
Принимает ввод в виде строки.
источник
MATL , 15 байт
Попробуйте онлайн!
С помощью @LuisMendo в чате. Обратите внимание, что если пустые выходные данные + ошибка также считаются ложными, то
X
их можно пропустить, увеличив счет до 14 байт .источник
Mathematica, 121 байт
источник
Pyth , 20 байт
Выводится,
[]
когда число соответствует шаблону цифр, в противном случае - иначе.Попробуйте онлайн!
Пояснения (пример с вводом
85868
)источник
Pyth, 17 байт
Попробуй здесь
Тот же алгоритм, что и у моего желе-ответа.
Объяснение:
источник
Python 3 ,
167 161 157 131106 байт-55 байт благодаря предложениям @ WheatWizard
Попробуйте онлайн!
источник
set(c)
это то же самое, что и{*c}
. (по крайней мере, в питоне 3)[t[z]for z in range(0,len(t),2)]
это также просто склейка списка. Вы можете сделать это просто сt[::2]
. Если вы не знакомы с этим синтаксисом, я предлагаю ознакомиться с документами, потому что он довольно полезен.Java (OpenJDK 8) ,
128119118108107104 байтаПопробуйте онлайн!
Объяснение:
источник
Сетчатка , 47 байт
Попробуйте онлайн!
Выводит 1, если соответствует шаблону, 0, если нет
объяснение
Преобразовать каждую цифру n в n + 1 в одинарных, разделенных точкой с запятой
(Завершающий перевод строки) преобразует каждую цифру в разницу между собой и двумя предыдущими
(Завершающий перевод строки) удаляет первые 2 цифры
Подсчитывает количество совпадений этого шаблона, который проверяет наличие чередующихся 0 и 1
источник