Проверьте синтаксис 2Col!


11

Как могли заметить несколько человек в последнее время, я в значительной степени отказался от разработки Braingolf, потому что он скучный и скучный, и перешел на 2Col, который немного интереснее и не предназначен для игры в гольф.

Отличительной особенностью 2Col является то, что каждая строка кода должна быть ровно 2 символа, исключая символ новой строки. Это означает , что длина программы 2Col всегда можно рассчитать , как , 3n-1где nэто число строк в программе.

Итак, вот моя проблема: учитывая код 2Col в виде строки, выведите true, если это правильный код 2Col (каждая строка ровно 2 символа, и она соответствует 3n-1формуле), и false в противном случае.

вход

Ввод должен быть взят в виде одной строки или массива символов.

Выход

Истинное значение, если входная строка является допустимым макетом, и ложное значение в противном случае.

Ваш код должен соответствовать тем значениям true / falsey, которые он использует

Testcases

======
F!
$^
----
truthy
======


======
*8
+1
Sq
----
truthy
======


======
nop
xt
----
falsey
======


======
+1
+1
#^

----
falsey
======


======
<empty string>
----
falsey
======


======
ye
----
truthy
======


======
no<space>
----
falsey
======


======
test
----
falsey
======


======
puzzle
----
falsey
======

счет

Это поэтому побеждает меньше байтов!


@ Шагает, нет, если только по какой-то причине язык, который вы используете, считает trueфальшивым и falseправдивым
Skidsdev


@Mayube спасибо, извините, я забыл добавить «мог бы» перед этим xD
Стивен

Я предлагаю вам добавить тестовый пример: puzzle. Это сделает решения, которые делают всю длину строки по модулю 3, затем отмененными (что работает для всех текущих тестовых случаев), недействительными.
Товарищ SparklePony

@ComradeSparklePony сделает
Skidsdev

Ответы:


6

Brachylog (2), 4 байта

ṇl₂ᵐ

Попробуйте онлайн!

Полная программа (потому что это ; полный вывод программ на брахилоге, false.если была ошибка подтверждения, true.без таковой ).

объяснение

ṇl₂ᵐ
ṇ     Split input into lines
   ᵐ  For each line:
 l₂     Assert that that line has length 2

Подписки lявляются одной из новейших функций Brachylog (хотя они и старше, чем испытания), и это хорошая задача для их использования.


Хотя ṇlᵛ2и ṇlᵛ²сработало бы.
Несвязанная Строка

3

JavaScript (ES6), 24 28 25 24 байта

Исправлена ​​программа и побрилось три байта благодаря @ PunPun1000

Сбросил один байт благодаря @Shaggy

s=>/^(..\n)*..$/.test(s)

Возвращает true, если допустимо, и false, если нет.

f=
s=>/^(..\n)*..$/.test(s)

t=
`22
22
22
22
22`

console.log(f(t));
console.log(f(t.slice(0, -1)));


Просто глядя на это, я не думаю, что это работает для двух тестовых случаев (правдивого, содержащего только 2 символа и без новой строки, и ложного с последующим переводом строки). Тем s=>s.match(/^(..\n)*..$/)не менее, они должны правильно соответствовать обоим, а также быть короче на 25 байтов
PunPun1000

@ PunPun1000 спасибо, вы правы.
Стивен

К сожалению, это неверно, так как 2 выходных значения не согласованы. Тем не менее, вы должны иметь возможность исправить это и сохранить байт, используя testвместо match.
Лохматый

@ Shaggy спасибо - причина, по которой я не видел этого, когда я ответил, потому что это было только что отредактировано
Стивен

Я знаю, поэтому я указал на это;) Вы можете обновить примечание о возвращаемых значениях.
Лохматый

2

Cubix , 20 байтов

Возвращает 1 для правды и ничего для фальси

@1OuABq>;;?w-!$@;U_N

Cubified

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq хлебать во все входные данные, повернуть его вспять и нажать EOI (-1) на дно стека
  • >;; Шаг в петле и удалить предметы из стека
  • ? Тест на ВЗ (-1).
    • Если найдено, 1uO@нажмите 1 в стек, развернитесь к целочисленному выводу и остановитесь
    • В противном случае _отразить обратно на ?который перенаправляет на wсдвиг полосы
  • N-!$@;U вставьте перевод строки (10) в стек, вычтите, результат теста, пропустите остановку, если ложь, удалите результат и разверните
  • ;;> удалить перевод строки из стека и перенаправить в цикл.

Попробуйте онлайн!


2

Python, 51

lambda s:all(len(l)==2for l in(s+"\n").splitlines())

Тестовый кейс бегун:

tcs = {
    "F!\n$^": 1,
    "*8\n+1\nSq": 1,
    "nop\nxt": 0,
    "+1\n+1\n#^\n": 0,
    "": 0,
    "ye": 1,
    "no ": 0,
    "test": 0,
    "puzzle": 0
}
f = lambda s:all(len(l)==2for l in(s+"\n").splitlines())
for tc, expected in tcs.items():
    assert f(tc) == expected

2

Haskell, 23 52 32 байта

all((==2).length).lines.(++"\n")

Я получил вдохновение от некоторых других решений, умный трюк добавляет это "\n".


Я исправил это, но RIP мое короткое решение.
Программист



1

JavaScript (ES6), 35 24 байта

s=>!/^.?$|.../gm.test(s)

Попробуй

f=
s=>!/^.?$|.../gm.test(s)
oninput=_=>o.innerText=f(i.value)
o.innerText=f(i.value=`F!
$^`)
<textarea id=i></textarea><pre id=o>


There's gotta be a shorter way to do this with RegEx! Да (и мой, вероятно, не оптимально)
Стивен


1

J-uby , 19 18 байт

:=~&/^(..\n*)..$/m

:=~&создает анонимную функцию, которая принимает xи возвращает, 0если это соответствует регулярному выражению /^(..\n*)..$/m, или nilиначе.


0

Java (OpenJDK 8) , 25 байт

s->s.matches("(..\n)*..")

Попробуйте онлайн!

Проверяет, есть ли во входной строке любое количество строк, за которым следует перевод строки и последняя строка без таковой (обеспечивает как минимум одну строку)


0

Утилиты Bash + GNU, 13

grep -qv ^..$

Это устанавливает возвращаемое значение оболочки (доступно в $?) равным 0 для false и 1 для true. Это на самом деле противоположный смысл по сравнению с обычным соглашением оболочки , поэтому чтобы сделать это правильно, вам нужно сделать следующее:

Утилиты Bash + GNU, 15

! grep -qv ^..$


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.