У нас есть несколько новых модераторов шерифов в городе, Mego и DJMcMayhem . Нам нужен вызов, чтобы должным образом почтить их за их новые должности, так что мы идем.
Вот что привлекло мое внимание при наведении на их профили - их идентификаторы пользователей и . Если вы выполните вычитание с помощью цифр, вы заметите нечто довольно захватывающее (конечно, с учетом абсолютных различий):45941
3|1|7|1|6
4|5|9|4|1
-+-+-+-+- (-)
1|4|2|3|5
Число, сгенерированное вышеупомянутым алгоритмом, составляет . В этом целом числе есть что-то особенное: оно состоит только из последовательных цифр, отсортированных по возрастанию, но ровно одна из цифр размещена неправильно - .4
Мы назовем пару положительных целых чисел парой DJMcMego, если абсолютные разности по цифрам являются последовательными целыми числами, отсортированными в порядке возрастания, но точно одно из них не там, где оно принадлежит. То есть возможно переместить ровно одну цифру результата посимвольного вычитания в другую позицию, так что полученное целое число имеет только последовательные цифры, отсортированные в порядке возрастания.
В нашем примере выше, пара является парой DJMcMego , потому что если перемещается между и , результат равен , что соответствует критериям. Обратите внимание, что цифры результирующего числа не обязательно должны начинаться с , они просто должны быть последовательными. Когда кто-то не уверен в том, какое решение он должен принять, он всегда может рассчитывать на помощь другого, чтобы разобраться.45 12345
Ваша задача - вывести истинное / ложное значение в зависимости от того, является ли пара положительных целых чисел, заданных в качестве входных данных, парой DJMcMego.
Вам гарантируется, что и будут иметь одинаковое количество цифр, всегда не менее 4.б
Вы можете взять целые числа в любом приемлемом формате (например, собственные целые числа, строки, списки цифр и т. Д.)
Вы можете соревноваться на любом языке программирования и можете принимать и выводить данные любым стандартным методом , при этом отмечая, что эти лазейки по умолчанию запрещены. Это код-гольф , поэтому выигрывает самое короткое представление (в байтах) для каждого языка .
Контрольные примеры
a, b -> Output
31716, 45941 -> Truthy
12354, 11111 -> Truthy
56798, 22222 -> Truthy
23564, 11111 -> Truthy
1759, 2435 -> Truthy
12345, 11111 -> Falsy
3333, 2101 -> Falsy
22354, 22222 -> Falsy
31717, 45941 -> Falsy
14325, 11111 -> Falsy
89789, 78865 -> Falsy
14954, 61713 -> Falsy
25631, 11114 -> Falsy
Или в другом формате .
источник
25631, 11114
качестве примера. Различия в том,14523
что смущает некоторые из текущих программОтветы:
05AB1E , 18 байт
Попробуйте онлайн!
источник
1
является единственным истинным числом в 05AB1E; если бы мистер Xcoder не сообщил мне об этом факте, я бы поставил под сомнение обоснованность этого решения. Не могли бы вы добавить объяснение, когда у вас есть время?C (gcc) ,
259258254253250248233222 байтаfor(...;l++)b*=B[l]==-~B[l-1];
в гольфfor(...;b*=B[l]==-~B[~-l++]);
(скорее всего, полагаясь на неопределенное поведение, так как оно требует сначала оценки,B[l]
а затем --~B[~-l++]
).трипять байтов.пятнадцатьдвадцать шесть байтов благодаря функциюcatcat .Попробуйте онлайн!
Пояснение (248-байтовая версия)
Попробуйте онлайн!
источник
j=0
как в 41-м символеj
значение,0
которое не обязательно имеет место после нескольких вызовов. Функция, однако, должна быть произвольно часто вызываемой и все же решать проблему ( соответствующая метапост ).j
ноль перед циклом и таким образом сохранить байт.f(char*A,char*B){
->f(A,B)char*A,*B;{
.JavaScript (ES6), 130 байт
Принимает ввод в виде двух массивов цифр в синтаксисе карри
(a)(b)
. Возвращает логическое значение.Попробуйте онлайн!
источник
SWI-Пролог, 157 байт
Не очень короткая, но проблема казалась особенно подходящей для декларативных предикатов, привязки переменных и рекурсии, т.е. Prolog :)
Позвоните, например,
n([3,1,7,1,6],[4,5,9,4,1]).
Объяснение: переместите элемент в обоих списках на новую позицию (используя
nth0
встроенный SWI-Prolog ) и проверьте, является ли различие новых списков последовательным.источник
J , 27 байт
−8 байт благодаря FrownyFrog
Попробуйте онлайн!
Начальное решение:
J 35 байт
Попробуйте онлайн!
объяснение
Принимает списки цифр в качестве ввода
|@-
находит абсолютную разницу между цифрами списков1=1#.0<2-/\]
Проверяет, если только одна цифра не на своем месте. Сначала я нахожу различия между всеми парами соседних цифр и проверяю, положительна ли только одна из них.*
Умножьте результат вышеприведенного теста (1 или 0) на следующий тест:1=[:*/2-/\\:~
Все ли цифры подряд? Я сортирую список вниз, беру различия для всех пар соседних цифр, умножаю их и проверяю, равен ли он 1источник
25634 11111
(как и многие другие представления)Желе , 14 байт
Попробуйте онлайн!
Как это устроено
источник
Japt , 18 байт
Принимает ввод в виде 2-значных массивов, выходов
0
дляtrue
или любого другого числа дляfalse
.Попробуйте или проверьте все тесты
объяснение
И, чтобы пройти через этот процесс на нескольких тестовых примерах:
источник
25634 11111
(как и многие другие представления)Perl
121118 байтТест в bash:
источник
25634 11111
(как и многие другие представления)Java 8 ,
245227223194188 байтСпасибо Кевину за сохранение ~ 29 байт
Еще раз спасибо Кевину за еще 6 байтов
Следуя той же схеме, что придумал Гален для своего J-ответа.
Попробуйте онлайн!
источник
z->{int l=z.length/2,c[]=new int[l],i=0,j=0,d[];for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(d=c.clone());for(i=0;i<l-1;j+=d[i+1]-d[i++]!=1?1:0)j+=c[i]-c[i+1]>0?1:0;return j==1;}
я объединилint
иint[]
в начале; используетсяl=z.length/2
один раз и используется повторноl
вместо 4 раз; изменено ,if(...)j++
чтобыj+=...?1:0
таким образом они могут быть размещены внутри петель и скобка и вторая запятая могут быть удалены; удаляемi++
и делаем++
непосредственно на последнемi
в цикле; и т. д.z->{int l=z.length/2,c[]=new int[l],i=0,j=0;for(;i<l;)c[i]=Math.abs(z[i]-z[i+++l]);java.util.Arrays.sort(z=c.clone());for(i=0;i<l-1;j+=z[i]-z[i-1]!=1?1:0)j+=c[i]-c[++i]>0?1:0;return j==1;}
. Удаленd[]
и повторно использован вход, которыйz
вам больше не нужен; Поменялj+=c[i]-c[i+1]?1:0;
иj+=d[i+1]-d[i++]!=1?1:0
наj+=c[i]-c[++i]?1:0;
иj+=z[i]-z[i-1]?1:0
. +1 от меня, хотя. Хороший ответ! :)25634 11111
(как и многие другие представления)Сетчатка , 102 байта
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Возвращает количество способов перемещения цифр для достижения возрастающей последовательности, которое равно 2 для прямого обмена, поскольку в этом случае любая цифра может быть перемещена за другую. Объяснение:
Соедините цифры.
Преобразовать в одинарный.
Возьмите разницу, но затем добавьте 1, потому что работать с нулем в Retina сложно.
Перечислите все последовательности цифр, полученные перемещением ровно одной цифры.
Проверьте последовательные цифры.
источник
Perl 5 , -F
878483 байтаПодсчет по старому стилю: 86 байт (
+3
для-F
)Дайте ему цифры в виде 2 строк на STDIN, последней строки без завершающей строки.
Печатает строку разницы до 2 раз для true, ничего для false
Длинная
A0123456789
строка действительно раздражает.Попробуйте онлайн!
Я уверен, что это
79
считается действительным:Сбой для правильной пары, поэтому вы получаете ненулевой код выхода. Он ничего не делает, если не пара, и завершается с кодом выхода 0. Я знаю, что возвращать результат через код выхода разрешено, но правильно ли они верны и ошибочны или фактически обращены (для оболочки
0
это правда)?источник
Рубин ,
124 113 9995 байтПопробуйте онлайн!
источник
25634 11111
(как и многие другие представления)+1
:-)Пыть ,
2018 байтПопробуйте онлайн!
Объяснение:
источник
25634 11111
(как и многие другие представления)Добавить ++ , 105 байт
Попробуйте онлайн!
Определяет лямбда-функцию, которая принимает два списка цифр в качестве входных данных. Выводит положительное целое число, делимое на 24 1 для пар DJMcMego, 0 в противном случае.
1: если это слишком ограничительно, он также выводит положительное целое число для пар DJMcMego и 0 в противном случае
Как это устроено
Здесь мы выполняем 4 проверки, чтобы определить, является ли ввод действительным. Части кода, которые выполняют эти проверки
Здесь мы возьмем список абсолютных разностей цифр, а затем посчитаем количество перекрывающихся пар, отсортированных по убыванию. Каждая пара DJMcMego дает результат 1 , но они не уникальны в этом аспекте. Мы также сохраняем абсолютные разности входных цифр, чтобы сохранить байты позже. Этот массив будет упоминаться как A во всем.
Далее мы берем поэлементные различия между отсортированными A и A , прежде чем утверждать, что хотя бы одно из этих различий является отрицательным.
В-третьих, мы проверяем , содержится ли пара [1, 2] в приращениях A вперед . Это проверяет, что, по крайней мере, в одной позиции A он отсортирован, что является критерием для пар DJMcMego.
В нашей последней проверке, мы утверждаем , что второй элемент A никогда не 0 . Чтобы пара X и Y была парой DJMcMego, мы можем предположить, что их A всегда уникален, так как массив с дубликатами в нем никогда не может быть сделан последовательным путем замены одного значения другим.
Наконец, мы проверяем, что первые три из этих тестов вернули 1 , а четвертый вернул значение x такое, что x ≠ 0
Шаг для пошагового прохождения кода выглядит следующим образом
источник
R ,
110 10684 байтаПопробуйте онлайн!
@JayCe со смешным 22-байтовым сохранением!
Рабочая лошадка здесь
adist
, которая дает «обобщенное расстояние редактирования Левенштейна» между двумя строками. По умолчанию расстояние - это количество минимальных количеств вставок, удалений и замен, необходимых для преобразования одной строки в другую. Ноadist
позволяет вам взвешивать вещи так, как вам нравится - поэтому я взвесил каждую замену, чтобы добавить 9 к расстоянию, а не 1. Это фактически заставляет алгоритм искать только вставки и удаления.Этот код принимает векторы целых чисел, вычисляет абсолютные поэлементные различия и переводит результат в 1, вызывая его
w
.Затем вычисляемое пользователем взвешенное расстояние Левенштейна вычисляется между
w
вставленными вместе, чтобы создать строку и строку"1234..."
(на самом деле utf-8"\001\002\003\004...
", ноadist
это не важно.) С тем же количеством символов, что иw
.Единственный способ, которым строка может иметь ровно одну цифру не на своем месте, - это если вы делаете одно удаление и одну вставку, давая расстояние 2.
источник
paste0
может быть толькоpaste
потому, что есть только один вход.p=intToUtf8
?w=z-min(z)+1)adist(p(1:max(w))
с ,w=z-min(z))adist(p(0:max(w))
но она не работает , так какintToUtf8(\000)
это NULL.JavaScript,
137136135134132123 байтаПринимает ввод в виде двух массивов цифр в синтаксисе каррирования, вывод
0
дляtrue
и любое другое число дляfalse
.Тестовые случаи
источник
[...u].sort(y=0)
неверный javascript, аргумент для сортировки должен быть функцией25634 11111
(как и многие другие представления)» - ТонPython 2 ,
116119106 байтСпасибо г-ну Xcoder за
116->84
сокращение, но я обнаружил, что пропустил критерий «порядковый номер», поэтому для этой цели добавлено 26 байтов :(После этого еще -1 спасибо, мистер Xcoder, и -13 спасибо ovs
Попробуйте онлайн!
Та, что ниже,
25634 - 11111
решает проблему, но с двойной длиной (211206145142B) ... Гольф ...Попробуйте онлайн!
И поздравляю новых модераторов :)
Объяснение:
Формирует список абсолютных различий цифр.
Вычисляет смещение от правильной позиции.
Если последовательность не является непрерывной, то сумма смещения «обычно» не будет равна 0. Но даже если она равна 0, последующие блокируют их.
Только 0 или 1 элемент будет иметь абсолютное смещение больше 1 (тот, который имеет неправильную позицию, и 0 в случае, как
1,2,3,5,4
)Блокирует случай, когда все числа находятся в правильных положениях
источник
m([3,3,3,3],[2,1,0,1])
(возвращаетсяTrue
) Тио25634 11111
(как и многие другие представления)Haskell ,
182163162132 байтаВводит в виде списка цифр. Вспомогательная функция,
p
которая дает все возможные способы разбить список на две части, используется для извлечения элемента и его повторной вставки в другое место.Попробуйте онлайн!
источник