추가 또는 접두사? 달려있다


23

내일은 1 살이 된 뇌 플랙 ! 생일을 축하하기 위해 PPCG 스타일의 생일 파티를 열었습니다. 여러 사용자가 뇌와 관련된 질문을 게시합니다! 우리가 축하하도록 도와주세요! :)


Brain-flak는 모든 명령이 대괄호이고 모든 대괄호가 완전히 일치해야하는 난해한 언어입니다. 내 자신의 정의 를 빌리려면 :

  • 이 과제의 목적 상 "브래킷"은 다음 문자 중 하나 ()[]{}<>입니다.

  • 여는 괄호와 닫는 괄호가 올바른 순서이고 괄호 안에 문자가없는 경우 괄호 쌍은 "일치하는"것으로 간주됩니다.

    ()
    []{}
    

    또는 내부의 모든 하위 요소도 일치하는 경우

    [()()()()]
    {<[]>}
    (()())
    

    하위 요소는 여러 층으로 중첩 될 수도 있습니다.

    [(){<><>[()]}<>()]
    <[{((()))}]>
    
  • 다음과 같은 경우에만 문자열이 "완전 일치"로 간주됩니다.

    1. 모든 단일 문자는 대괄호입니다.

    2. 각 브래킷 쌍에는 올바른 개폐 브래킷이 올바른 순서로 있습니다.

brain-flak의 첫 번째 생일을 축하하면서 오늘날의 과제는 불균형 괄호 세트를 사용하고 뇌 -flak를 유효하게 만드는 데 필요한 작업 유형을 결정하는 것입니다.

  • 예를 들어 ((유효한 brain-flak 코드는 아니지만 추가 ))하면 (())완전히 균형이 잡힌 유효한 brain-flak가됩니다. 이 입력을 추가 할 수 있게합니다 .

  • 마찬가지로, >}유효하지 않지만 우리는 {<그것을 앞에 추가 할 수 있습니다 {<>}. 따라서이 입력을 추가 할 수 있습니다.

  • 일부 입력은 약간 더 복잡합니다. 예를 들어, )][({추가하거나 추가하여 순수하게 유효하게 만들 수 없습니다. 그러나 앞에 추가 하고 추가하여 유효하게 만들 있습니다 . 따라서,이 입력은 둘 다 prependable추가 가능 .[(})]

  • 마지막으로, 일부 입력은 추가하거나 추가하여 조합하여 유효한 뇌-플랙 크 코드를 만들 수 없습니다. 예를 들어, (>유효하지 않을 수 있습니다. (덧붙이는 <생성 <(>및 추기가 )생성 (>)따라서,이 입력은 둘 또는 추가 가능하다 prependable 유효 어느 것도).

오늘날의 과제를 해결하려면 대괄호 문자열을 사용하고 문자열이

appendable
prependable
both
neither

각 사례에 어떤 값을 나타내는 지 선택할 수 있습니다. 예를 들어, 1, 2, 3, 4또는 'a', 'p', 'b', 'n', 또는 1, 'foo', 3.1415, -17, 또는 모든 것이 출력 됩니다. 각 출력이 명확 하고 일관된 한 괜찮습니다. 당신은 있어야 하지만, 분명히 출력에 대응 케이스를 지정합니다.

가장 편리한 형식 (예 : 함수에서 리턴, STDOUT으로 인쇄, 인수 수정, 파일 쓰기 등)으로이 값을 리턴 할 수 있습니다.

입력이 결코 유효한 두뇌 오류이거나 비어 있다고 가정 할 수 있습니다.

다음 입력은 모두 앞에 붙을 수 있습니다 .

))
(((()()())))}
)>}]
()[]{}<>)

이들은 모두 추가 가능합니다 :

(({}{})
((((
([]()())(
{<<{

이들은 모두 둘 다입니다 :

))((
>()[(()){
>{

그리고 이것들 모두는 아닙니다 :

)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]

평소와 같이 이것은 이므로 표준 허점이 적용되며 바이트 단위의 최단 답변이 승리합니다!


이 도전은 특히 뇌-플래그에서 어렵 기 때문에 최대 브라우니 는 뇌-플래 크로 작성된 모든 대답을 가리 킵니다 . :)


1
maximum brownie points나는 최대 브라우니 포인트와 쿠키를 제공하는 것이 Brain-Flak 뿐만 아니라 어떤 언어 에서도 전혀 사소한 것으로 생각하지 않기 때문에 Brain-Flaking이 브라우니 포인트보다 더 많은 도전을 장려한다고 생각합니다 . : P
Outgolfer Erik

참고 : 두 테스트는 모두 열린 괄호로 끝나고 두 테스트는 모두 괄호로 끝납니다.
Jonathan Allan

2
나는 '둘 다'가 잘못된 용어라고 주장 할 것이다. 추가 할 수 있는 문자열 ][은 유효 하지 않기 때문에 같은 문자열 은 추가 할 수 없습니다. 마찬가지로 추가 할 수 없습니다. '삽입 가능'입니다! 문자열에 삽입하여 유효한 Brainflak를 만들 수 있습니다.
orlp

이미 균형 잡힌 줄입니까?
밀 마법사

@wheatwizard 균형 잡힌 문자열은 입력으로 제공되지 않습니다. You can assume that the input will never be valid brain-flak or empty.
DJMcMayhem

답변:


6

젤리 , 33 32 37 35 34 바이트

아드 난의 I 톱의 트릭을 사용하여, 2 바이트 - 버그 끔찍한 수정 +5 바이트, 더 나은 수정, 발견 여기 -1 더.

“({[<“)}]>”Z;@WœṣF¥/µÐLO‘&2µIṀ>0ȯQ

반환 값 :

prepends [2]
 appends [0]
    both [2,0]
 neither 1

유효하지 않은 입력은 잘못된 Brain-flack이지만을 반환하는 가짜 결과를 반환합니다 [].

온라인으로 사용해보십시오! -테스트 스위트 (흐리게 표현 된 것을 인쇄20하고[2,0],- ).


5

망막 , 41 40 41 바이트

@MartinEnder 덕분에 1 바이트 절약

+`\(\)|\[]|{}|<>

[]})>]+
1
\W+
0
...+
01

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

  • 추가 가능 1
  • 추가 가능 0
  • 둘 다 10
  • 없음 01

편집

  • @Neil이 발견 한 버그를 수정하기 위해 1 바이트를 얻었습니다.

[]})>]바이트를 저장합니다.
Martin Ender

@MartinEnder 아, 문자 세트를 비워 둘 수 없기 때문입니다. 감사합니다!
Kritixi Lithos

예를 들어 추가 할 수없는 모든 입력에 대해서는 작동하지 않습니다 (][). 로 변경 101하면 1 바이트의 비용으로 해결할 수 있다고 생각합니다 ...+.
Neil

와 같은 경우가있는 경우 버그를 몰래 주셔서 감사합니다 @Neil, 궁금 Both뿐만 아니라
Kritixi LITHOS

아니요, 10에 대한 유일한 유효한 조합 이라고 생각 합니다 Both.
Neil

3

배치, 337 바이트

@echo off
set/ps=
:g
set "t=%s:<>=%
set "t=%t:()=%
set "t=%t:[]=%
set "t=%t:{}=%
if not "%t%"=="%s%" set "s=%t%"&goto g
set "s=%s:<=[%
set s=%s:>=]%
set s=%s:(=[%
set s=%s:)=]%
set s=%s:{=[%
set s=%s:}=]%
:l
if %s:~,2%==]] set s=%s:~1%&goto l
:r
if %s:~-2%==[[ set s=%s:~,-1%&goto l
if not _%s:~2%==_ set s=[]
echo %s%

출력 ]앞에 추가를위한, [APPEND를위한, ][모두를위한, []아니합니다.


3

하스켈 , 115108 바이트

편집하다:

  • -7 바이트 : 더 많은 가드를 사용하십시오.
(""#)
s#""=[s>"",1>0]
s#(c:d)|Just a<-lookup c$zip"([{<"")]}>"=(a:s)#d|(a:b)<-s=[1|a==c]>>b#d|0<1=take 1$s#d

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

처럼 사용하십시오 (""#) "))". 결과는 다음과 같습니다.

[False,True]: needs nothing
[False]: prependable
[True,True]: appendable
[True]: both
[]: neither

작동 원리

  • 출력 인코딩은 나머지 부분에 대한 결과의 두 번째 요소 (있는 경우)를 드롭하여 프리 펜드 (prepend) 할 필요가 있음을 알리고 모든 요소를 ​​드롭하여 완전한 불일치가 표시되도록 선택합니다.
  • s#d 나머지 문자열을 파싱 ds예상되는 닫는 괄호의 문자열 / 스택 이 주어지면 .
    • 그만큼 s#""선 검사는 모두 닫는 괄호 그렇지 않으면 필요한 추가, 문자열의 끝에서 발견 된 경우.
    • 의 첫 번째 지점 s#(c:d)다음 문자 확인c 가 여는 괄호인지 확인하고, 해당하는 경우 재귀를 위해 스택에 해당 닫는 괄호를 남겨 둡니다.
    • 그렇지 않으면 스택에 닫는 대괄호가 포함되어 있으면 두 번째 분기는 맨 위에있는 문자가 다음 문자와 일치하는지 확인하고 그렇지 않은 경우 재귀 대신 빈 목록을 반환합니다.
    • 마지막으로 마지막 브랜치에서 스택은 비어 있으며 재귀하기 전에 앞에 추가하여 고정 할 수있는 일치하지 않는 닫는 괄호가 있습니다.

2

apt , 44 바이트

=Ue"%(%)|%[]|\{}|<>" ®c -1&2|1})f31 |UfD |Ug

출력 1, prependable에 3, 추가 가능을위한 13모두, 그리고31 도합니다.

온라인으로 테스트하십시오! 또는 모든 테스트 사례를 한 번에 확인하십시오.

작동 원리

 =Ue"%(%)|%[]|\{}|<>" ®   c -1&2|1})f31 |UfD |Ug
U=Ue"%(%)|%[]|\{}|<>" mZ{Zc -1&2|1})f31 |UfD |Ug

                    // "(((()()())))}"  "([({}{})"    ">()[(()){"  "((((<>()]"
Ue"%(%)|%[]|\{}|<>" // Recursively remove all instances of "()", "[]", "{}", and "<>" from U.
                    // "}"              "(["          ">[{"        "((((]"
mZ{Zc -1&2|1}       // Replace each char Z with (Z.charCodeAt() - 1) & 2 | 1.
                    // "1"              "33"          "133"        "33331"
U=                  // Save the result in U.
f31 |UfD |Ug        // Match all instances of "31" and "13" (D = 13) and bitwise-OR the results with the first char.
                    // null|null|1      null|null|3   null|13|1    31|null|3
                    // 1                3             13           31
                    // Implicit: output result of last expression

2

PHP, 137 바이트

for($c=1;$c;)$a=preg_replace("#<>|\(\)|\[\]|\{\}#","",$a=&$argn,-1,$c);echo($a=preg_replace(["#[]})>]+#","#[[{(<]+#"],[1,2],$a))<13?$a:0;

1 => 추가 가능

2 => 소정 가능,

12 => 둘 다

0 => 없음

테스트 케이스


"각 출력이 명확하고 일관된 한 괜찮습니다." 이것은 어느 쪽에도 일관된 가치가없는 것으로 보입니다.
Cyoce

@Cyoce 그것은 수정되었습니다
요 르그 Hülsermann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.