задача
Учитывая непустой массив 0
и 1
, пополам длины серий 0
.
вход
Массив 0
и 1
. Приемлемый формат:
- Реальный массив на вашем языке
- Строка, разделенная строкой
0
и1
- Смежные строки
0
и1
- Любой другой разумный формат
Например, следующие три входа все приемлемы:
[1, 0, 0, 1]
"1\n0\n0\n1"
(где\n
перевод строки U + 000A)"1001"
Вы можете предположить, что трассы 0
будут иметь четную длину .
Выход
Массив 0
и 1
в допустимых форматах выше.
Testcases
input ↦ output
[1,0,0,1,0,0,1] ↦ [1,0,1,0,1]
[1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1]
[1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1]
[1,1,1] ↦ [1,1,1]
[0,0,1] ↦ [0,1]
[0,0] ↦ [0]
[1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0]
счет
Это код-гольф . Кратчайший ответ в байтах побеждает.
Применяются стандартные лазейки .
code-golf
array-manipulation
Дрянная Монахиня
источник
источник
true
иfalse
вместо1
и0
?0
правдивым.Ответы:
Сетчатка , 4 байта
Попробуйте онлайн!
источник
05AB1E , 5 байтов
Попробуйте онлайн!
объяснение
источник
00
странное поведение ...11
что одиннадцать и нет1,1
. Побочным эффектом является то, что00
становится00
вместо0,0
:)0
или0 0
вместо этого, но что угодно.Haskell , 33 байта
Попробуйте онлайн! Использование:
f[1,1,0,0,1,1,0,0,1]
. Перебирает список и заменяет два последовательных нуля на один ноль.источник
C (gcc) , 35 байт
48 - это код ASCII '0'
лучшая версия 43 байта, как предложил Нил
на этот раз еще 40 байт (опять же, как предложено Neil & VisualMelon) :)
а затем 35 байтов благодаря Khaled.K
Попробуйте онлайн!
источник
s+=2-*s%2
работать?for(;*s;s+=2-*s%2)putchar(*s);
сохраняет еще один байт.s+=50-*s
? Не делал C целую вечность и не хочу смущать себя, вызывая неопределенное поведение (исходящее из C # там, где его нет)putchar
документы, вы можете сделатьf(char*s){for(;*s;s+=50-putchar(*s));}
?f(char*s){*s&&f(s+50-putchar(*s));}
sed , 8 байт
Попробуйте онлайн!
источник
0
s на0
.Октава, 22 байта
Проверьте все контрольные примеры здесь.
Это анонимная функция, принимающая строку в формате в
'1001000011'
качестве ввода и заменяющая два последовательных нуля одним нулем.источник
Java, 50 байт
Попробуйте онлайн
источник
s->s.replaceAll("00","0")
.replace
вместо того,replaceAll
чтобы сохранить 3 байтаreplace
заменит только первое вхождениеHaskell , 28 байт
Попробуйте онлайн!
Рекурсивно берет первый элемент, отбрасывая второй, если первый равен нулю, пока список пуст. Если первая запись
h
, то первая1-h
удаляется из остальных.источник
Japt ,
7 65 байтПопробуйте онлайн!
Просто заменяет каждую серию из двух нулей на входе одним нулем. Использует ввод строки (то есть
"1001001"
).источник
'
я думаю"00"
на'0²
:-)PHP, 26
просто заменить все
00
на0
.источник
Алиса , 13 байт
Попробуйте онлайн!
объяснение
Это простой шаблон для линейных программ, которые работают полностью в обычном режиме. Начальная
/
буква отражает IP для перемещения на юго-восток, а затем она пересекает код по диагонали вверх и вниз до зеркал в конце. Они просто смещают позицию на единицу, так что на обратном пути IP пересекает остальные ячейки. Читая код зигзагообразно, он становится:Это простая замена строки:
Есть несколько других способов сдвинуть две строки, например,
'00'0
илиe000t
, но я не нашел там ничего, что било бы 5 байт (и мне пришлось бы сбрить два байта, чтобы иметь возможность сократить программу).источник
Пролог (SWI) , 42 байта
Попробуйте онлайн!
источник
*
оператора.Java ,
131123 байтаПопробуйте онлайн!
источник
JavaScript (ES6),
2621 байтПринимает входные данные в виде строки и возвращает строку.
Попытайся
источник
Луа, 33 байта
Принимает строку через вход и конденсирует двойные нули. Легко.
источник
Желе , 8 байт
Попробуйте онлайн!
Возможно, другие ответы на языках без
.replace()
или аналогичные могут использовать этот трюк.объяснение
источник
Алиса ,
1210 байт2 байта сэкономлено благодаря Мартину Эндеру
Попробуйте онлайн!
объяснение
Это 1-D код, работающий в кардинальном режиме, поэтому легко следить за его ходом:
источник
i.h%...
Python (список ввода / вывода), 36 байт
Попробуйте онлайн!
Рекурсивно берет первый элемент, затем удаляет оставшийся, если первый был нулевым.
38 байт:
Попробуйте онлайн. Он берет список Python и выводит список Python, выполняя замену его строкового представления. Строковый ввод / вывод позволил бы более прямое и более короткое решение, такое как
для
'1001'
формата.источник
lambda s:s.replace('00','0')
все должно быть в порядке.APL (Дьялог) , 9 байт
Попробуйте онлайн!
источник
Perl 5, 7 + 1 (флаг -p) = 8 байт
Принимает ввод в виде разделенных новой строкой чисел Пропускает следующую строку, если видит ноль.
источник
V , 4 байта
Попробуйте онлайн!
источник
MATL , 5 байтов
Попробуйте онлайн!
объяснение
Это похоже на октавский ответ Стью Гриффин :
8 байт
Это позволяет избежать встроенной замены строки / массива.
Попробуйте онлайн!
объяснение
Рассмотрим ввод
[1,0,0,1,0,0,1]
в качестве примера:источник
Брахилог , 10 байт
Попробуйте онлайн!
Не уверен, что это оптимально ...
объяснение
Это эксплуатирует ошибку, что
c
в списке целых чисел с начальными нулями произойдет сбой.источник
[0,0,4,2]
в42
. Ведущие нули делают его ошибочным прямо сейчас, потому что он здесь, чтобы предотвратить бесконечные ведущие нули, когда вход является переменной, но здесь вход полностью заземлен, так что ограничения не должно существовать.C #, 191 байт
Попробуйте онлайн!
Он не чистый и не короткий, но работает.
Принимает ввод как непрерывную строку символов, выводит в том же формате
Объяснение:
Заметка
Да, я знаю, что это можно просто сделать, используя
s.Replace("00","0")
мою цель, чтобы избежать использования очевидного решения. В конце концов, весь смысл PPCG в том, чтобы повеселиться, верно? ;)источник
Replace
Я использую C #, так что я не заблуждаюсь о получении кратчайшего кода, особенно с такими языками, как Jelly, так что, возможно, стоит немного повеселиться в процессе.string a(string s){var r="";for(int i=0;i<s.Length;i+=50-s[i])r+=s[i];return r;}
(похоже, что это в основном ответ C)Pyth, 8 байт
Попробуй ссылку.
Объяснение:
источник
Awk - 18 байт
Сначала попробуйте сделать что-нибудь с Awk, чтобы можно было больше играть в гольф.
Использование:
echo "1001001" | awk '{gsub(00,0);print}'
источник
Пакетный, 24 байта
Принимает участие в STDIN. Несколько конкурентоспособен на этот раз.
источник
Common Lisp, SBCL,
4832 байта-16 байт благодаря Джулиану Вольфу
вход:
выход:
объяснение
Читаем входной список. Список используется в
format
функции. Мы перебираем его, выводя,1
если элемент есть,1
и выводя0
и пропуская следующий элемент списка0
.источник
~[
а не~:[
позволяет вам индексировать 0 и 1 напрямую, что должно сэкономить вам кучу байтовMathematica, 24 байта
Функция, которая ожидает строку
"0"
s и"1"
s и возвращает похожую строку. Самоочевидный синтаксис. Mathematica имеет много встроенных трансформаций; ключ должен использовать тот, который преобразует каждое соответствующее подвыражение (в отличие от/.
), но проходит через выражение только один раз (в отличие от//.
).источник
Желе , 10 байт
Попробуйте онлайн!
объяснение
источник