Почему 6 боялись 7? Потому что 7 8 9!
Для заданной строки примените следующие преобразования:
- Если есть 6 рядом с 7, удалите 6 (6 боится 7)
- Если появляется последовательность «789», удалите 8 и 9 (7 съел 9)
(Если я не ошибаюсь, не имеет значения, в каком порядке вы выполняете преобразования)
Продолжайте применять эти преобразования, пока вы не можете больше.
Пример:
78966
Сначала мы видим «789», поэтому строка становится «766». Затем мы видим «76», поэтому мы вынимаем 6, и строка становится «76». Затем мы снова видим «76», поэтому у нас остается «7».
Тестовые случаи:
987
=>987
(Не в правильном порядке. Ничего не делает.)6 7
=>6 7
(Пробел действует как буфер между 6 и 7. Ничего не происходит)676
=>7
7896789
=>77
7689
=>7
abcd
=>abcd
68978966897896
=>68977
Ответы:
Сетчатка , 12
Перевод ответа sed:
Попробуйте онлайн
источник
Javascript ES6, 29 байт
Контрольная работа:
источник
Ява,
126816658 байтСпасибо @GamrCorps за предоставление лямбда-версии этого кода!
Спасибо @ user902383 за указание на хитрость автобокса!
...Ага.
Это на самом деле дольше, чем я ожидал - Java заменяет элементы в строках по одному
replaceAll()
разу на совпадение, а не несколько раз, пока не перестанет меняться. Поэтому мне пришлось использовать модный цикл.Лямбда-форма:
Форма функции:
Тестируемый код Ungolfed:
источник
.equals
к!=
, который не не делать то же самое.==
(или!=
) сравнивает по шестнадцатеричному расположению объекта, а не по значению. Это же длина в противном случае.while()
7 байтов,for(;;)
7 байтов.ГНУ Сед, 17
Оценка включает +1 для
-r
варианта.источник
67789
должен вернуться,77
но вместо этого возвращается677
s/67|7(6|89)/7/
вместоs/6?7(6|89)/7/
s///g
?Perl 6 ,
1918 байт(Обратите внимание, что
[6|89]
версия без записи(6|89)
написана как(?:6|89)
в Perl 5.<[6|89]>
Это то, как вы написали бы то, что написано, как[6|89]
в Perl 5)использование:
источник
6*
и[6|89]*
что-либо не совпадает, что останавливает7
замену7
до бесконечности?7
с7
потом снова начинается в следующей позиции, не работает свой путь до конца.:g
коротка для:global
нетrepeat until it doesn't match anymore
.s/67|76|789/7/
к работе,667
мне нужно было бы написать это как-то так:while s/67|76|789/7/ {}
что, конечно, никогда не остановится, если вы напишите так,while s/6*7[6|89]*/7/ {}
как вы ожидаете. Кроме того, конец предыдущего комментария может показаться подлым, это не так, как было задумано[]
быть изменен на()
? Вы не хотите соответствовать трубы или79999
.[]
- это не захватывающая версия Perl 6()
, о которой вы думаете, написано как<[6|89]>
в Perl 6.Pyth, 17 байт
Попробуй это здесь.
Дрянная Монахиня обошла это байтом в комментариях.
источник
Perl 5 , 17 байт
использование:
источник
Mathematica, 52 байта
Объяснение:
источник
Ржавчина, 96 байт
Безнадежно долго, как обычно для Rust ...
Ungolfed:
источник
Emacs Lisp, 59 байт
Это становится немного понятнее с пробелами:
источник
Рубин, 27 байт
Это решение от комментариев, спасибо Брэду Гилберту b2gills .
Рубин, 37 байт
(старое решение)
Это решение использует тот факт, что вам никогда не придется заменять больше раз, чем символы в строке.
источник
chars
вместо того,size.times
чтобы сохранить несколько байтов.sub()
иgsub()
методы, которые нужно заменить в первую очередь или все. Таким образом, глобальный на один символ длиннее.->s{s.gsub /6*7(6|89)*/,'7'}
и пустьgsub
выполнит всю работу по зацикливанию.gsub /6*7(6|89)*/,?7
используя егоruby -pe "gsub /6*7(6|89)*/,?7"
в общей сложности 20 + 1 байтJapt , 15 байт
Простое решение RegEx
Попробуйте онлайн
источник
PowerShell, 27 байт
Использование:
-replace
глобальной замены по умолчанию в PowerShell-regex
оператор к массиву$args
, применяя его ко всем элементам индивидуально, и здесь есть только один элемент, потому что есть только один параметр сценария, поэтому он работает нормально, и мы можем избежать индексации элемента[0]
.Новизна предыдущей попытки, прежде чем реализовать глобальную замену, сделает это; 74 байта для построения цепочки «-replace -replace -replace» с использованием умножения строки, столько раз, сколько длина строки, а затем eval () с ее помощью:
(С небольшим количеством подстановок строк, чтобы сократить количество замен).
источник
CJam,
7064 байтаСпасибо @Peter Taylor за то,
{"789":I}{"76:":I}?
что"789""76"?:I
"67":Iq:A{AI#:B){AB<7+A{BI,+}~>+s:A];}{"76"I={"789":I}{"76":I}?];}?}/A"67":Iq:A{AI#:B){AB<7+A{BI,+}~>+s:A];}{"76"I="789""76"?:I];}?}/A
Я знаю, что это, вероятно, может быть гораздо дальше, и ваша помощь будет принята с благодарностью, но, честно говоря, я просто счастлив, что мне удалось получить ответ. Это была моя первая попытка написания CJam.
Объяснение:
источник
/
и*
. Также обратите внимание, что для того, чтобы привыкнуть к языкам, похожим на C, нужно думать в терминах стеков. Например,{"789":I}{"76":I}?
можно вытащить задание стать"789""76"?:I
, к которому можно в дальнейшем играть78976`3/?:I
.78976`3/
дает массив["789" "76"]
; тогда вместо использования?
вам нужно будет использовать=
для индексации; но это задом наперед, поэтому нужно будет перевернуть индекс, потеряв преимущество.MATL , 17 байт
пример
РЕДАКТИРОВАТЬ : попробуйте это онлайн!
объяснение
Это работает путем применения регулярной замены выражений столько раз, сколько имеется символов в исходной строке . Этого достаточно, так как каждая замена уменьшает количество символов.
источник
Серьезно, 29 байт
Принимает ввод в виде строки в двойных кавычках, например
"6789"
. Попробуйте онлайн (вам нужно будет вручную указать ввод).Объяснение:
источник
Чт , 26 байт
включая завершающий перевод строки.
Ввод добавляется в программу перед ее запуском.
Вывод считывается из состояния программы при его завершении, аналогично машине Тьюринга.
(Thue действительно имеет выходной поток, но его трудно использовать правильно, поэтому я не уверен, является ли это приемлемым методом вывода)
источник
Баш,
1028267 (+7)? байтовверсия extglob
Это должно быть помещено в файл и вызвано с помощью например
bash -O extglob 789.sh 6567678989689789656
. (+7)? байты для, если опция extglob учитывается в байтах.Спасибо @BinaryZebra за указание на особенности экстглоба!
Версия без экстглоба (82 байта)
Это должно быть помещено в файл и вызвано с помощью например
./789.sh 65678989656
.Он использует расширение параметров для поиска и замены в цикле. Я использовал серию расширений для замены, так как я не знаю способа более эффективной цепочки расширений.
источник
@()
синтаксис. Я знал, что должен быть способ объединить их. И @Mego, спасибо за прием!R 35 байт
Я не знал, что смогу использовать
gsub
этот способ, большое спасибо за каждый ответ, который заставил меня узнать что-то новое.источник
PHP 51 символов
Контрольный пример написан длинной рукой
Это выполняет сравнение строк и заменяет строку в условии while. Если условие выполняется, обновляется левая часть сравнения с результатом. Дайте мне знать о любых улучшениях.
источник
Джольф , 15 байт
Попробуй это здесь! Я действительно должен объяснить?
источник
PHP, 36 байт
Решение регулярных выражений, принимает $ строку и заменяет через выражение.
источник
$argv
STDIN или.Clojure, 71 байт
Clojure менее чем идеален для игры в гольф из-за своей многословной природы, но, тем не менее, это интересное упражнение:
Гольф версия, с использованием взаимодействия Java:
Версия без игры в гольф, использующая взаимодействие с Java:
Версия "чистого Clojure" без гольфа:
источник
/// , 19 байт (не конкурирующих)
Вы не можете фактически обеспечить ввод на этом языке, поэтому предполагаемый ввод идет справа от кода.
источник
Python 3, 46 байт
источник
Japt v2.0a0, 12 байт
Попробуйте онлайн!
Как это устроено
String.e
является рекурсивной функцией замены. Japt 2 имеет новый синтаксис регулярных выражений и автоматическое заполнение скобок внутри регулярных выражений, что сохраняет здесь один байт. (В Japt 1.x нам пришлось передавать строки вместо регулярных выражений, что было довольно неуклюже.)источник
Дьялог АПЛ , 17 байт
'6*
любое число шестерок,7
за которым следует семерка(
... с)*'
последующим нулем или несколькими последовательностями из ...6|89
шестерки или восьми-девяти⎕R
R eplace , что с'7'
семеркаисточник
05AB1E , 12 байтов
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник