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


11

Як кілька людей, можливо, помітили останнім часом, я значною мірою відмовився від розвитку Braingolf, тому що він нудний і не натхненний, і перейшов на 2Col, що трохи цікавіше, і не призначене для того, щоб бути мовою для гольфу.

Визначальною особливістю 2Col є те, що кожен рядок коду повинен мати рівно 2 символи, виключаючи новий рядок. Це означає, що довжину програми 2Col завжди можна обчислити так, 3n-1де n- кількість рядків у програмі.

Тож ось моє завдання: Давши код 2Col як рядок, виведіть truthy, якщо він є дійсним кодом 2Col (Кожен рядок - це рівно 2 символи і він відповідає 3n-1формулі), а фальси - інакше.

Вхідні дані

Введення слід сприймати як один рядок або масив символів.

Вихідні дані

Значення "truthy", якщо вхідний рядок має правильний макет, а значення фальси - в іншому випадку

Ваш код повинен відповідати тим, які значення truthy / falsey він використовує

Тестові шафи

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


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


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


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

----
falsey
======


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


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


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


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


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

Оцінка балів

Це тому виграє найменше байтів!


@Shaggy ні, якщо тільки з якихось причин мова, яку ви використовуєте, вважає trueфальсією та falseправдою
Skidsdev

1
@StephenS Will do
Skidsdev

@Mayube спасибі, вибач, я забув додати "міг би" перед цим xD
Стівен

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

@ComradeSparklePony зробить
Skidsdev

Відповіді:


6

Брахілог (2), 4 байти

ṇl₂ᵐ

Спробуйте в Інтернеті!

Повна програма (тому що це ; Брахілог виводить повні програми, false.якщо стався збій у твердженні, true.без жодної).

Пояснення

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

Підписки на lодну з найновіших функцій Брахілога (хоча вона ще старша, ніж виклик), і це хороший виклик для використання.


Хоча ṇ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)));


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

@ PunPun1000 спасибі, ти маєш рацію.
Стівен

На жаль, це недійсно, оскільки 2 вихідні значення не відповідають. Однак ви маєте змогу виправити це і зберегти байт, використовуючи testзамість match.
Кудлатий

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

Я знаю, саме тому я вказав на це;) Можливо, ви захочете оновити нотатку про свої повернені значення.
Кудлатий

2

Cubix , 20 байт

Повертає 1 для трити і нічого для фальси

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

Кубіфікований

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

Спробуйте в Інтернеті!


2

Пітона, 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




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

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

grep -qv ^..$

Це встановлює значення повернення оболонки (доступне в $?) до 0 для помилкового та 1 для істинного. Це насправді протилежний сенс порівняно зі звичайною умовою оболонки , тому, щоб зробити це право, вам потрібно буде зробити:

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

! grep -qv ^..$


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.