Это нить грабителя. В нитка полицейского здесь .
Матрица змей - это квадратная матрица, которая следует этому шаблону:
3-на-3:
1 2 3
6 5 4
7 8 9
и 4 на 4:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
Ваша задача - написать код, который принимает входные данные n
и создает такую матрицу на том же языке, что и сообщение полицейского, и с кодом, соответствующим регулярному выражению полицейского. Выходной формат вашего кода должен соответствовать выходному формату кода полицейского.
Пожалуйста, оставьте комментарий под сообщением полицейского, чтобы указать, что вы взломали его.
Критерий победы:
Победителем станет пользователь, взломавший наибольшее количество заявок. В случае ничьей победителей будет несколько.
источник
¦
работы убивает меня каждый раз, я попробовал это вчера, но сṚ
чемU
и решил, чтоḤ
не получилось.F
была отличная идея,J
вместоF
.J
... я пытался,LR
но не смог получить его до 11 байт05AB1E, Эминья
Это был мой первый раз, используя 05AB1E. Получил это с небольшой помощью. Это было весело. :)
Попробуйте онлайн
Объяснение:
Я действительно нашел эту похожую программу самостоятельно, но формат вывода другой:
Попробуйте онлайн
Смотрите историю изменений для моих предыдущих двух попыток.
источник
not bool(reversed(str(bin(N))).index('1'))
... Я думаю, что это самый абсурдный способ, которым я видел, как кто-то делалN%2
операцию.Python 2, Деннис
Это забавная проблема в гольф.
Проверка регулярных выражений
источник
О, Ник Клиффорд
Моя первая попытка Ом.
Действительно хороший язык, который я с нетерпением жду, чтобы использовать снова :)
объяснение
Моя первая попытка, которая не работала как добавление массива и int, невозможна:
Моя вторая попытка, которая не соответствовала регулярному выражению:
источник
05AB1E, Эминья (2-е представление)
Первый раз работаю с 05AB1E.
Попробуйте онлайн! | Проверка регулярных выражений
объяснение
источник
)
думая, что это будет единственный способ получить правильный результат в стеке.)
когда вы можете использовать только 2 не буквенно-цифровых символа. Сложная часть здесь должна была структурировать программу так, чтобы она использовала только 2 подстановочных знака и имела их последовательно. Скорее всего, было бы немного сложнее без других решений, но в этом должны были быть некоторые загадки :)^\w*..$
возможно.UV
есть после+ˆ
. Я не могу придумать другой способ сделать это только с двумя символами подстановки в конце. Это может быть сделано с 3-мя подстановочными знаками.CJam , Линн
Все переводы строки предназначены для косметических целей и могут быть удалены без ущерба для программы.
Попробуйте онлайн!
объяснение
После удаления Линн
{|}
из списка разрешенных персонажей, мне пришлось попробовать что-то новое. Оказывается, мы все еще можем создавать произвольные строки и оценивать их как код.Во-первых, нам нужно получить какое-то значение в стеке. Доступны только встроенные модули , которые толкают что - то не выскакивают что - то еще первый (и без чтения входа) являются
es
,ea
иet
. Я уверен, что вы могли бы начать со всех этих тем или иным образом, но я пошел с тем,es
что толкает текущую метку времени. Так как я не хотел делать какие-либо предположения относительно его фактического значения, я проверяю его первичность с помощьюmp
(который дает0
и1
) и проверяю первичность этого значения, чтобы убедиться, что у меня есть0
стек.1
Будет более полезным, поэтому мы вычислимexp(0)
сme
и превратить его в целое число сi
. Итак, все цифры начинаются с:Теперь у нас есть целая куча унарных математических операторов для работы:
Мы также можем объединить несколько встроенных функций для более сложных функций
x
:Используя их, мы можем получить любое число
0 <= x < 128
(и многие другие) менее чем за 10 шагов1
. Я уверен, что гораздо меньшего подмножества этих команд также будет достаточно. Я написал небольшую программу Mathematica, чтобы определить все эти фрагменты (она не очень читаема, извините):При этом мы можем просто выдвинуть произвольный список кодов символов, преобразовав каждый из них в символ с
c
последующим. Как только мы поместили весь код, который хотим выполнить, мы нажимаем95
(]
). Мы оцениваем это с помощью,~
чтобы обернуть все остальные в строку, а затем мы проверяем эту строку с~
.Фактический код, выполняемый в конце программы, снова:
Смотрите мое предыдущее решение для объяснения.
источник
Python 3, TuukkaX
Извините, регулярное выражение, которое вы использовали, было слишком легко упростить. Нет
0
,#
или? Нет проблем!
Возможно, я неверно истолковал пример вывода, но все еще довольно легко настроить, так как у меня осталось 45 свободных символов
источник
R, MickyT
Тестовые случаи:
И подтверждение регулярного выражения: https://regex101.com/r/OB8ZIM/1
У меня также было:
который дает тот же результат и соответствует тому же регулярному выражению .
источник
lets_make_a_snake
... Я был бы удивлен, если бы это было намеченное решение: Pfor
` и `if
`, но намного лучше, чем мой.Röda , fergusq
Это анонимная функция , которая соответствует этому PCRE регулярное выражение:
^{(\|[^\/#\s]*){8}$
.Попробуйте онлайн!
источник
Баш, @ Маркос М
Prettified:
Первая часть подкоманды будет генерировать
1 2 3 4
,9 10 11 12
и вторая часть будет генерировать8 7 6 5
,16 15 14 13
. Внешнийsort -n
будет правильно смешивать их вместе, чтобы сформировать рисунок змеи.Я использовал трюк в /superuser//a/101760 для печати нечетных и четных строк. Спасибо Маркос, действительно веселый.
источник
Javascript, Том
источник
Python 3, @TuukkaX
Слегка анализируя регулярные выражения полицейского, мы видим фиксированный шаблон:
где
_
любой символ кроме[ '"#]
и^
любой из[int()2/]
.В
"*n)
конце четко отображаетсяeval("..."*n)
илиexec("..."*n)
происходит, поэтому нам просто нужно убедиться, что"..."
печатается j-й ряд.for i in range(j,
Слишком близко к концу строки, намекая список понимание без каких - либоif
. Таким образом , мы должны построить и -й столбец , используя теi%n
,2*n
вещи.источник
постоянный ток , Mitchell Spector
Это было моей первой записью в полицию и грабителей, и мне было очень весело. Регулярное выражение, которое нужно было подобрать, было простым,
^[^# !]{59}$
что в основном превратило мою работу в игру в гольф, без использования этих трех символов. Первоначально у меня были трудности с получением меньше 60 байт, но в итоге я взломал его.Попробуйте онлайн!
Объяснение:
Мой код использует один цикл с N 2 итерациями, сохраняя счетчик на основе нуля (1D), и вычисляет, какое число должно быть напечатано на основе соответствующей строки строки и координат столбца (r, c).
Пример того, что я имею в виду, если N = 4:
Это выглядит сложно, но промежуточный шаг полезен. Кроме того, я попытался использовать 2 цикла с самого начала, но в итоге я превысил ограничение на количество символов в регулярном выражении. Генерация чисел на каждой итерации (от нуля):
r % 2 = 0
(нормальный ряд),n = (r * N) + c = counter
r % 2 = 1
(перевернутая строка),n = ((r + 1) * N) - c - 1 = counter + N - (2 * c) - 1
Или все сразу, как одна основанная нумерация:
n = counter + ((N - (2 * c) - 1) * (r % 2)); n++
источник
~
для расчета индексов строк и столбцов за один раз. Но одна из моих предыдущих попыток рассчитала их отдельно, как вы. Великие умы думают одинаково? :)~
чтобы сократить код.?sN0[AP]sP[ddlN~_2*lN+1-r2%*+1+n32P1+dlN%0=PdvlN>L]dsLx
tio.run/nexus/…PowerShell, ConnorLSW
трещина
Я начал с небольшого решения проблемы и добавил имена переменных, чтобы регулярное выражение соответствовало. Я думаю, что пытаться найти применение для толстой кишки было самой сложной частью, чтобы обернуть мою голову.
объяснение
источник
$script
переменную и некоторые действительно грязные циклы, чтобы дополнить ее,[array]::Reverse()
хотя она была правильной, поздравляю - я думаю, что вы, возможно, захотите выровнять длину$i
и$MySnakeIndex
хотя.CJam, Линн
Что-то вроде этого:
Все пробелы предназначены для ... "читабельности" ... и могут быть опущены в соответствии с регулярным выражением Линн.
Попробуйте онлайн!
объяснение
Регулярное выражение требует, чтобы мы решили проблему, используя только:
{}
, который можно использовать для создания блоков.|
, в основном используется для побитового ИЛИ.~
, "eval" и побитовое НЕ (также "массив массивов", но я не собираюсь его использовать).Поскольку у нас есть,
~
если мы можем построить произвольные строки, мы можем запустить произвольный код. Однако поначалу не очевидно, как это сделать.Первая часть головоломки состоит в том, что блоки представляют собой биты кода, которые не могут быть оценены и могут превращаться в строки
s
. Так{abc}s
дает нам"{abc}"
. Далее мы можем использоватьeu
для преобразования этих строк в верхний регистр.Преимущество этого состоит в том, что заглавные буквы являются предварительно инициализированными переменными, поэтому мы можем получить много постоянных значений, создав такую строку и оценив ее дважды (один раз, чтобы превратить строку обратно в блок, и один раз в выполнить этот блок). Мы не можем получить все буквы, потому что некоторые, например
x
, не являются действительными командами (поэтому CJam откажется анализировать блок, содержащий их). Мы не можем использоватьf
как есть, потому что за ней должна следовать другая команда, но мы можем использоватьfb
и затем ИЛИ два значения вместе. Аналогично, мы можем использоватьee
вместоe
. При том, что мы можем получить число0
,-1
,3
и10
к19
. Это-1
удобно, потому что если мы превратим его в строку ("-1"
), то в символ ('-
), а затем оцените его, мы можем получить либо вычитание, либо установить разницу. Как я уже сказал, мы не можем получитьX
(для1
), но мы можем принять абсолютное значение-1
сz
.Мы также можем использовать,
s
чтобы получить строку, содержащую пробел, и использовать,c
чтобы превратить ее в символ пробела :Это удобно, потому что оттуда мы можем получить много полезных команд в нижнем диапазоне ASCII, ИЛИ пространство с различными числами. Чтобы получить некоторые символы выше кодовой точки
48
,'0
вместо этого мы используем символ в качестве основы:Этого уже достаточно для создания произвольных строк, потому что мы можем получить
'+
(сложение и объединение строк) из следующего фрагмента:И у нас есть литерал,
1
так что мы можем просто помещать пробелы, увеличивать их до нужного значения, а затем объединять их все вместе, но это немного скучно, и код станет массовым.Вместо этого я сгенерировал
[
и]
оценил их, чтобы все символы, которые я нажимаю, автоматически помещались в строку. Вот эти две строки:И, наконец, нам понадобится
f
и~
строка, которую мы генерируем. Хотя они уже являются допустимыми символами, у нас нет строковых литералов или символьных литералов, поэтому мы должны их сгенерировать, и создание больших кодовых точек из пространства немного раздражает. Вместо этого я использовал вычитание набора здесь, но вычитая два блока (чтобы избавиться от{}
):Это почти все, что нужно сделать. Мы оценили
[
. Мы толкаем все символы, полученные с помощью различных вычислений из нескольких встроенных констант мы имеем,|
,-
(через Eval) и+
(через Eval). Мы оценили]
. Мы сплющиваем все это в строку, потому что в какой-то момент я добавил несколько строк или чисел в список. Мы оцениваем нашу произвольную строку с~
.Они
ri...p
являются частью окончательной конечной программы, но я извлек их, потому что они не нуждаются в кодировании.Наконец, это программа, которую мы на самом деле запускаем:
источник
tinylisp , @DLosc
Попробуйте онлайн!
Это определяет функцию,
f
которая возвращает ответ. Он также печатает имена функций, которые я определил, для stdout, но я предполагаю, что это не имеет значения, поскольку, по крайней мере, [нам разрешено выбирать наш выходной поток] для кода golf. Если это большое дело, я думаю, что я могу настроить его, чтобы не печатать их. Как я это сделал? Я начал с чего-то довольно стандартного:Затем я заметил, что можно преобразовать определения функций следующим образом:
становится
И вызовы функций так:
становится
Я использовал этот рекурсивный Vim макро, сохраненный в регистре
q
, чтобы сделать второй (яjk
сопоставляется с<Esc>
):f s(v(h(q(jkea))))jk@q
.Этих двух преобразований было достаточно, чтобы устранить все пробелы.
источник
Свифт, @ Джеймс Вебстер
Подтверждение: https://regex101.com/r/7ukrM0/1
источник
(…)(4)
, нет необходимости приводить целочисленный литерал в CShort.PHP, @ JörgHülsermann
221 байт слишком длинен (таким образом, змея), и отсутствие пробела можно легко обойти.
Prettified:
источник
Желе, длина 12, @JonathanAllan
Попробуйте онлайн!
Как это устроено
источник
Желе , 12 байт, трещины @ второй ответ Джонатана Аллана
Попробуйте онлайн!
объяснение
Это почти так же, как мой другой ответ . Я только что сделал два изменения:
Сначала я изменил
U
(«перевернуть каждый элемент») наṚ€
(«перевернуть» «каждый элемент»). Это не помогает само по себе, потому чтоṚ
также запрещено.Затем я изменил
Ṛ
(«реверс») на;@/
(/
«сворачивание»;
«конкатенация»@
«в порядке, обратном исходному списку»). Это позволяет избежать всех запрещенных персонажей, давая правильное решение.Я предполагаю, что следующим шагом будет запрет на манипуляции с массивами в дополнение к атомам.
источник
€
...€
в терминах/
тоже. Это просто более многословно, чем это решение.;@\ṫ0
, регулярное выражение становится длинным.Желе, длина 13, @JonathanAllan
Попробуйте онлайн!
Как это устроено
источник
m
?!Желе, длина 14, @JonathanAllan
Попробуйте онлайн!
источник
Scala, @Soapy
Давненько не трогал Скалу, было весело вернуться. К сожалению, в этом решении отсутствуют многие интересные функции Scala.
Попробуй здесь
Regex Подтверждение
источник
QBasic (QB64), @DLosc
Обратите внимание, что, поскольку
.
не совпадает\n
(U + 000A, LF), новая строка здесь является\r
(U + 000D, CR).Убедитесь, что:
Основная сложность заключается в том, как вставить слово после
;
. К счастью, QB64 рассматривает CR как новую строку, а регулярное выражение Python - нет, поэтому мы могли быREM\r
здесь остановиться . Из пяти разрешенных ароматов регулярных выражений,"\r" =~ /./
!/./.test('\r')
(\n
,\r
,\u2028
,\u2029
все линейные сепараторы )re.match('.', '\r')
( только\n
считается разрыв строки )regexp.Match(".", "\r")
/./ =~ "\r"
Так что с этим треском все в порядке, пока мы не упоминаем JavaScript ... 🤐
источник
REM
сразу же следует оператор без разделителя операторов. Мое оригинальное решение не использовало комментарии. У меня есть еще один вариант, который я скоро опубликую. : DПитон 3, кеннитм
Проверка регулярных выражений
источник
> <>, торкадо
источник
C, @ Yimin Rong
Программа не может содержать числа, но мы можем получить числа через:
c
, широко известный как "argc", который всегда равен 2.+
и-
доступны, поэтому мы можем создать 0 сn-n
, и создать 1 сo=c;--o
.источник
Рубин, @Value Ink
[(-=Z-~]*
означает "я могу написать все, что мне нравится :)"источник
tinylisp, @DLosc
Очень простое решение и совершенно неоптимизированное :)
Позвонить как
(disp (f 4))
.(p m n)
вычисляет m + n, используя вычитаниеs
(m + n == m - ((1 - 1) - n))(j f g)
генерирует(f f+1 f+2 ... g-1)
(r f g)
генерирует(g-1 g-2 g-3 ... f)
(k m o f g n)
сгенерируйте одну строку матрицы змей, а затем вернитесь к следующей строке, пока не будет создано n строк. Аргументыm
,o
заменяютсяj
/r
для генерации увеличения или уменьшения строк. Аргументыf
,g
работают индексы , чтобы знать , в какой строке мы на.(f n)
призывает(k j r 1 1 n)
начать поколение.источник
(f 4)
-disp
это подразумевается.)PHP, @Ionut Botizan
На данный момент у меня нет лучшей идеи взломать оригинальное решение.
Поддерживает п <= 15
Это первый раз, когда я использую getopt. Возможно, не лучшая идея использовать опции в качестве входных данных.
начать с командной строки, как это
Оригинал Regex
1-й уровень:
Очень хорошая комбинация букв. Не стесняйтесь голосовать за ветку полицейских.
Он блокирует мне такие функции, как - strrev - array_reverse - get_defined_vars
https://regex101.com/r/5rGTnw/2
Уровень 2:
https://regex101.com/r/XtVl9G/1
Решение
Уровень 2:
источник