Valide a sintaxe 2Col!


11

Como algumas pessoas devem ter notado ultimamente, abandonei o desenvolvimento de Braingolf em grande parte porque é chato e sem inspiração, e mudei para o 2Col, que é um pouco mais interessante e não foi projetado para ser uma linguagem de golfe.

O recurso definidor do 2Col é que toda linha de código deve ter exatamente 2 caracteres, excluindo a nova linha. Isso significa que a duração de um programa 2Col sempre pode ser calculada como 3n-1onde nestá o número de linhas no programa.

Então, eis o meu desafio: dado o código 2Col como uma sequência, efetue a saída se for um código 2Col válido (cada linha tem exatamente 2 caracteres e está de acordo com a 3n-1fórmula) e, caso contrário, falsey.

Entrada

A entrada deve ser tomada como uma única sequência ou uma matriz de caracteres.

Resultado

Um valor verdadeiro se a sequência de entrada for um layout válido e um valor falsey caso contrário.

Seu código deve ser consistente nos valores de verdade / falsey que ele usa

Casos de teste

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


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


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


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

----
falsey
======


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


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


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


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


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

Pontuação

Isso é e o menor número de bytes vence!


@Shaggy nenhuma, a não ser por algum motivo a linguagem que você usa considera trueFalsey e falsetruthy
Skidsdev

1
@StephenS Will do
Skidsdev

@Mayube graças, desculpe, eu esqueci de acrescentar "você poderia" na frente do que xD
Stephen

Eu sugiro que você adicionar um caso de teste: puzzle. Isso tornará as soluções que executam todo o comprimento do módulo 3 da string e, em seguida, são negadas (o que funciona para todos os casos de teste atuais).
Camarada SparklePony

@ComradeSparklePony vai fazer
Skidsdev 25/05

Respostas:


6

Braquilog (2), 4 bytes

ṇl₂ᵐ

Experimente online!

Programa completo (porque esse é um ; os programas completos do Brachylog são gerados false.se houver uma falha de asserção, true.sem uma).

Explicação

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

Os subscritos em lsão um dos recursos mais recentes do Brachylog (embora ainda sejam mais antigos que o desafio), e esse é um bom desafio para usá-los.


Embora ṇlᵛ2e ṇlᵛ²também funcionaria.
String não relacionada

3

JavaScript (ES6), 24 28 25 24 bytes

Programa fixo e raspado de três bytes graças a @ PunPun1000

Raspou um byte graças a @Shaggy

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

Retorna true se válido e false se não.

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

t=
`22
22
22
22
22`

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


Só de olhar para isso, não acho que funcione para dois dos casos de teste (o verdadeiro com apenas 2 caracteres e sem nova linha e o falsey com uma nova linha à direita). No entanto s=>s.match(/^(..\n)*..$/)deve corresponder corretamente tanto daqueles, sendo também menor a 25 bytes
PunPun1000

@ PunPun1000 obrigado, você está correto.
Stephen

Infelizmente, isso é inválido, pois os 2 valores de saída não são consistentes. No entanto, você deve poder corrigir isso e salvar um byte usando em testvez de match.
Shaggy

@Shaggy graças - a razão de eu não ver que quando eu respondi, porque isso foi apenas editado em
Stephen

Eu sei, é por isso que eu apontei;) Você pode atualizar a nota sobre seus valores de retorno.
Shaggy

2

Cubix , 20 bytes

Retorna 1 para verdade e nada para falsey

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

Cubificado

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq ingerir toda a entrada, inverta-a e empurre o EOI (-1) para a parte inferior da pilha
  • >;; Entre no loop e remova itens da pilha
  • ? Teste para EOI (-1).
    • Se encontrado, 1uO@pressione 1 para a pilha, gire para a saída inteira e pare
    • Caso contrário, _reflita novamente no ?que redireciona para a wmudança de faixa
  • N-!$@;U empurre o avanço de linha (10) para a pilha, subtraia, resultado do teste, pule a parada se falso, remova o resultado e gire
  • ;;> remova os feeds de linha da pilha e redirecione para o loop.

Experimente online!


2

Python, 51

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

Corredor do caso de teste:

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 bytes

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

Eu me inspirei em algumas outras soluções, truque inteligente adicionando isso "\n".


Eu o corrigi, mas rasgue minha pequena solução.
homem Programa



1

JavaScript (ES6), 35 24 bytes

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

Tente

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! Yup (e os meus provavelmente não é o ideal)
Stephen


1

J-uby , 19 18 bytes

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

:=~&cria uma função anônima que aceita xe retorna 0se corresponder ao regex /^(..\n*)..$/mou de niloutra forma.



0

Utilitários Bash + GNU, 13

grep -qv ^..$

Isso define o valor de retorno do shell (acessível em $?) para 0 para false e 1 para true. Esse é, na verdade, o sentido oposto comparado à convenção shell normal ; portanto, para fazer isso direito, você precisa fazer:

Utilitários Bash + GNU, 15

! grep -qv ^..$


0

Japonês , 7 6 bytes

·eÈʶ2

Experimente online


Explicação

     :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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.