2Col 구문의 유효성을 검사하십시오!


11

최근 몇 사람이 눈치 채 셨을 때, 저는 지루하고 영감을 얻지 못한 Braingolf의 개발을 크게 포기 하고 조금 더 흥미롭고 골프 언어가 아닌 2Col넘어갔습니다 .

2Col의 정의 기능은 줄 바꿈을 제외한 모든 코드 줄의 길이가 정확히 2 자 여야한다는 것입니다. 2Col 프로그램의 길이는 항상 다음과 같이 계산 될 수 있음이 수단 3n-1여기서 n프로그램의 행의 수이다.

따라서 내 도전은 다음과 같습니다 .2Col 코드를 문자열로 지정하면 유효한 2Col 코드 (모든 줄이 정확히 2 자이고 3n-1수식을 준수 함 )이면 사실을 출력하고 그렇지 않으면 거짓입니다.

입력

입력은 단일 문자열 또는 문자 배열로 가져와야합니다.

산출

입력 문자열이 유효한 레이아웃이면 참 값, 그렇지 않으면 거짓 값

코드가 사용하는 진실 / 거짓 값에 일관성이 있어야합니다

테스트 케이스

======
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 것입니다
Skidsdev

@Mayube 고마워, 미안, 그 xD 앞에 "could you"를 추가하는 것을 잊었다
Stephen

테스트 사례를 추가하는 것이 좋습니다 puzzle.. 이렇게하면 문자열 모듈로 3의 전체 길이를 수행 한 다음 무효화됩니다 (현재 모든 테스트 사례에서 작동).
스파클 포니 동지

@ComradeSparklePony는
Skidsdev

답변:


6

Brachylog (2), 4 바이트

ṇl₂ᵐ

온라인으로 사용해보십시오!

전체 프로그램 (이것은 이기 때문에 false., 어설 션 오류가 없으면 Brachylog 전체 프로그램이 출력 true.되지 않고 출력 됨 ).

설명

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

아래 첨자 l는 Brachylog의 최신 기능 중 하나이지만 (여전히 챌린지보다 오래되었지만)이를 사용하는 것이 좋습니다.


비록 ṇlᵛ2ṇlᵛ²도 작동합니다.
관련이없는 문자열

3

자바 스크립트 (ES6), 24 28 25 24 바이트

@ PunPun1000 덕분에 프로그램 수정 및 3 바이트 면도

@Shaggy 덕분에 1 바이트를 줄였습니다.

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 감사합니다. 정확합니다.
Stephen

불행히도 이것은 2 개의 출력 값이 일치하지 않기 때문에 유효하지 않습니다. 그러나, 당신은 그 문제를 해결 할 수 있어야 하고 사용하여 바이트 저장 test대신 match.
Shaggy

@Shaggy thanks-방금 편집되어 답변을했을 때 보지 못한 이유
Stephen

나는 그것이 내가 지적한 이유입니다.;) 반환 값에 대한 메모를 업데이트하고 싶을 수도 있습니다.
Shaggy

2

Cubix , 20 바이트

진실에 대해서는 1을 반환하고 거짓에 대해서는 아무것도 반환하지 않습니다

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

Cubified

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq 모든 입력 내용을 확인한 후 뒤집어 EOI (-1)을 스택 맨 아래로 밉니다.
  • >;; 루프로 들어가서 스택에서 항목을 제거하십시오.
  • ? EOI (-1)를 테스트합니다.
    • 발견되면 1uO@1을 스택으로 밀고 정수 출력으로 돌리고 정지합니다.
    • 그렇지 않으면 차선 이동으로 리디렉션되는 방향으로 _다시 반영?w
  • N-!$@;U 라인 피드 (10)를 스택으로 밀고, 빼고, 테스트 결과를, 거짓이면 정지를 건너 뛰고, 결과를 제거하고 u- 턴
  • ;;> 스택에서 라인 피드를 제거하고 루프로 리디렉션하십시오.

온라인으로 사용해보십시오!


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

2

하스켈, 23 52 32 바이트

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

다른 솔루션에서 영감을 얻었습니다 "\n".


나는 그것을 고쳤다. 그러나 나의 짧은 해결책을 찢어 라.
Program man



1

자바 스크립트 (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! (그리고 아마 최적이 아닐 수도 있습니다)
Stephen


1

J-uby , 19 18 바이트

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

:=~&정규 표현식과 일치 하거나 그렇지 않으면 익명 함수를 가져 와서 x반환 0합니다 ./^(..\n*)..$/mnil



0

배쉬 + GNU 유틸리티, 13

grep -qv ^..$

쉘 리턴 값 (에서 액세스 가능 $?)을 false로 0으로 설정하고 true로 1로 설정합니다. 이것은 실제로 일반적인 쉘 규칙에 비해 반대의 의미입니다. 이므로 올바른 작업을 수행하려면 다음을 수행하십시오.

배쉬 + GNU 유틸리티, 15

! grep -qv ^..$


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.