Вступление
Я хочу найти подстроку с самым 1
большим в последовательности 0
's и 1
'.
вход
Ваша программа имеет два входа , последовательность и длину подстроки.
Последовательность является любым числом 0
«s и 1
» s:
01001010101101111011101001010100010101101010101010101101101010010110110110
Длина подстроки - это любое положительное ненулевое целое число:
5
Выход
Ваша программа должна вывести начальный индекс первой подстроки заданной длины, содержащей наибольшее 1
. С учетом вышеприведенного ввода, вывод:
10
Первый символ в строке начинается с индекса 0
.
счет
Самый короткий код выигрывает!
правила
- Ваша программа должна всегда выводить правильный индекс для любых допустимых входных данных.
- Вы можете выбрать свой метод ввода / вывода из любого ответа с положительным счетом по умолчанию . Пожалуйста, укажите метод, который вы выбрали в своем ответе.
1
, вы выводите первую найденную подстроку. Вы идентифицируете подстроки с индексом первого символа в этой подстроке. Это помогает?Ответы:
Дьялог АПЛ, 11
Попробуй это здесь. Использование:
объяснение
Это двоичная (то есть двоичная) функция, которая берет длину подстроки слева, а последовательность - справа. Его структура следующая:
Объяснение взрывом:
В качестве примера возьмем
4
и в0 1 1 0 1 1 1 0
качестве входных данных. Сначала мы применяем функцию+/
к ним и получаем2 3 3 3 3
. Затем+
и⌈/
применяется к этому массиву дают себя и3
, и2 3 3 3 3 ⍳ 3
оценивает2
, так как3
первый встречается как второй элемент. Вычитаем1
и получаем1
как конечный результат.источник
m
те, гдеm
есть максимален.Руби, 42
Принимает ввод, вызывая его, например,
f['01001010101101111011101001010100010101101010101010101101101010010110110110',5]
Это сравнивает подстроки, используя их общее значение ASCII и возвращает индекс максимума. Я не уверен,
max_by
требуется ли спецификация Ruby для стабильности, но, похоже, это происходит в C-реализации.источник
Python 2, 56
Принимает массив целых чисел, а затем длину.
источник
[int(s) for s in "010010...0"]
f(ss, 999)
вернет 0 (вместо None). Вы можете это исправить? Возможно, это нарушает правило 1.ss
?None
в любом случае никогда не является желаемым выводом, поскольку ответ является целым числом.Партия - 222
Пакетный, очевидно, идеальный язык для такого рода операций.
Без гольфа / расчлененный:
Начальная настройка. Переменная
s
является входной строкой иl
будет длиной входной строки минус длина подстроки (инициализируется отрицательным значением,%2
где%2
заданная длина подстроки).Получите длину ввода как
l
, используя чистое решение для определения длины строки Batch - это искажает переменную,s
содержащую входную строку, поэтому мы затем устанавливаем ее снова.Значение
x
используется, чтобы проверить, какая подстрока имела наибольшее количество единиц. Начните цикл с 0 до длины строки минус длина подстроки (переменнаяl
). Получить подстроку, начиная с текущей точки в цикле (%%a
),c
задается в качестве входной строки, начиная с%%a
и принимая%2
(заданную длину подстроки) символы. Любые0
s удаляются изc
, затем значениеc
сравнивается значениеx
- т.е.111
это большее число, чем,11
поэтому мы можем просто использовать «строку», чтобы сделать сравнение больше, чем.y
затем устанавливается текущее местоположение в строке - которая в итоге выводится.Пример использования ОП -
источник
C # (Regex), 196
Реальное регулярное выражение не так долго, но все пухи, необходимые программе C # для компиляции, удваивают размер кода.
Фактическое регулярное выражение, установив длину до 5:
(?=((?<o>1)|0){5})
: Заблаговременно прочитать 5 символов без использования и поместить все1
в «стек»o
.(?=[10]{5})(?!((?<-o>1)|0){5})
: На позиции, которая имеет 5 символов впереди, в «стеке» недостаточно элемента,o
чтобы выскочить, то есть подстрока имеет строго больше,1
чем у нас в текущей позиции.(?!.+(?=[10]{5})(?!((?<-o>1)|0){5}))
: Позиция, как описано выше, не может быть найдена для остальной части строки, т.е. все позиции имеют меньше или равное число1
's.Взятие первого результата дает ответ, так как все подстроки перед ним имеют некоторую подстроку вперед с большим
1
числом, и мы должны проверить, что любой индекс, больший, чем текущий индекс, имеет меньшее или равное число1
единиц.(И я узнал кое-что приятное: «стек» восстанавливается при возврате).
источник
Пиф , 12
Это определяет функцию
g
, которая требует список чисел и число в качестве ввода. НапримерВы можете проверить это здесь: Pyth Compiler / Executor
Объяснение:
Альтернатива:
источник
ho/<>zNQ\0Uz
К сожалению, подсчет строки не преобразует автоматическиJ,
1514 символовисточник
Матлаб (42)
Позвольте
s
обозначить строку иn
длину подстроки. Результат естьr
.Вычислить свертку
s
с последовательностьюn
единиц, а затем найти максимум. Свертка выполняется легкоconv
, иmax
функция возвращает позицию первого максимума. К1
полученному индексу необходимо вычесть , потому что индексация Matlab начинается с1
, а не с0
.Golfed:
источник
Haskell,
6462 байтаИспользование:
источник
n#l=...
p
. Кроме того, я думаю, что0
это избыточно (хотя скобки нет, и вам может понадобиться пробел вместо этого0
).JavaScript (ES6) 73
Функция, возвращающая запрошенное значение. Цикл for сканирует входную строку, сохраняя промежуточный итог, сохраняя положение максимального значения.
Ungolfed
Тест в консоли FireFox / FireBug
Выход
10
источник
x
иr
. Это должно уменьшить 4 байта, являясь конечной длиной 69 байтов. Кроме того, вы, вероятно, сможете заменить&&
на&
. Но хороший с~~
подвохом!t > x
. Вам нужно инициализировать r: tryF("00000")
. И && необходимо подражать иif
(x=t, r=i-n+1)
если онt
был ниже или равен чемx
. Это хорошее использование ленивой оценки! Хотелось бы, чтобы его где-то отрубили, но, думаю, ты сделал всю работу.PHP (96)
for($a=$b=$c=0;(($d=@substr_count($s,1,$a,$n))>$c&&($b=$a)&&($c=$d))||$a++<strlen($s););echo $b;
http://3v4l.org/J4vqa
переменные
$s
и$n
должны быть определены в командной строке для строки поиска и длины подстроки соответственно.Это также будет работать на любом C-подобном языке с соответствующими функциями для
substr_count()
иstrlen()
.источник
Математика,
3836Пример:
Выход:
источник
C # (Linq), 148 байтов
отформатирован:
Принимает данные как параметры метода.
Что оно делает:
источник
Скала - 70 байт
Но с именами функций, такими как zipWithIndex, я думаю, Scala - не лучший выбор для гольф-кода.
источник
С
245185отформатирован:
Использование:
источник
CJam,
2521 байтПроверьте это здесь.
Принимает input как целое число для длины подстроки, а массив нулей и единиц как последовательность:
объяснение
Результат распечатывается автоматически в конце программы.
Обратите внимание, что я также рассматриваю срезы, которые начинаются ближе к концу, чем желаемая длина подстроки, но это нормально, потому что они являются подстроками последней допустимой подстроки и поэтому никогда не будут иметь больше
1
s, чем эта последняя допустимая подстрока.источник
Java 329 байт
собирался реализовать .matches (regex), но это было бы почти идентично решениям Python выше, поэтому вместо этого я попробовал скользящее окно. новинка здесь, так что если у кого-нибудь есть какие-либо указатели, буду рад их услышать.
}
источник
i
в третьей строке. Большая часть пробела может быть удалена. ИспользуйтеSystem.out.print(
(новая строка не требуется). ВместоInteger.valueOf(
вы можете использоватьnew Integer(
.