Проверьте синтаксис 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
======

счет

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

Skidsdev
источник
@ Шагает, нет, если только по какой-то причине язык, который вы используете, считает trueфальшивым и falseправдивым
Skidsdev
1
@StephenS
@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) в стек, вычтите, результат теста, пропустите остановку, если ложь, удалите результат и разверните
  • ;;> удалить перевод строки из стека и перенаправить в цикл.

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

MickyT
источник
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иначе.

Cyoce
источник
0

Java (OpenJDK 8) , 25 байт

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

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

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

PunPun1000
источник
0

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

grep -qv ^..$

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

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

! grep -qv ^..$
Цифровая травма
источник
0

Japt , 7 6 байт

·eÈʶ2

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


объяснение

     :Implicit input of string "U"
·    :Split to array on newline
eÈ   :Maps over the array, checking that every item's ...
Ê    :length ...
¶2   :Equals 2
     :Implicit output of result
мохнатый
источник