Ao revisar o código, deparei-me com o código a seguir, que testa o status de uma caixa de seleção:
if (!isNotUnchecked()) { ... }
Eu tive que pensar por 30 minutos para descobrir qual o status real da caixa de seleção que o código estava esperando. Por favor, escreva-me um programa que possa simplificar essas expressões tolas!
O programa deve aceitar como entrada uma string representando a expressão para simplificar (por exemplo !isNotUnchecked()
:). O programa deve gerar uma expressão simplificada logicamente equivalente, isChecked()
ou !isChecked()
.
O nome do método na expressão de entrada sempre começa com is
, contém 0..n Not
e termina com Checked()
ou Unchecked()
. O método pode ser prefixado por qualquer número de !
.
Exemplos
isChecked() => isChecked()
isUnchecked() => !isChecked()
isNotChecked() => !isChecked()
!isNotChecked() => isChecked()
!!!isNotNotUnchecked() => isChecked()
notunischecked
?isnotunchecked
por exemplo.Respostas:
Python , 51 bytes
Experimente online!
fonte
s[-8:]
'isC'+s[-8:]
um byte é maior que'isChecked'
?s[-8:]
é / faz?hecked()
.Retina , 23 bytes
Experimente online!
Explicação
Transformar
Unchecked
em!Checked
.Transforme todos os
Not
s em!
. Agora temos algo parecido!!!is!!!!Checked()
.Classifique todas as correspondências de
is
ou!
. Como! < is
isso move tudo!
para o início da string, o exemplo acima se tornaria!!!!!!!isChecked()
.Remova os pares de
!
para cancelar a negação repetida.fonte
/// , 26 bytes
Experimente online!
Porto da minha resposta Retina .
fonte
Python , 43 bytes
Uma função sem nome que pega a string
s
e retorna uma string.Experimente online!
Não há necessidade de verificar a existência de caracteres quando
!
,Not
eUn
todos têm exatamente um ordinal estranho (ec
eC
são ambos ímpar), então apenas resumir os ordinais e usar o valor do módulo 2 de decidir se queremos uma!
ou não.Fora isso, o formulário é o mesmo da resposta do xnor , pois não encontrei nada melhor. O seguinte também é 43:
fonte
JavaScript (ES6),
5150 bytesFunciona através da procura
!
,N
en
personagens, que inverter o estado verificado.split
retorna um comprimento de matriz ímpar por padrão, então adicionamos!
quando osplit
comprimento é par. Editar: salvou 1 byte graças a @ETHproductions. Versão alternativa, também para 50 bytes:fonte
g
na edição mais recente./!|N/i
/!|N/
, sem oi
modificadorRetina , 24 bytes
Experimente online!
fonte
Java 7,
10077 bytesExpansão:
Código do teste:
Experimente aqui.
Resultado:
fonte
Aceto , 49 bytes
yadda yadda Curva de Hilbert.
Primeiro, colocamos os três caracteres importantes na pilha:
Em seguida, definimos uma marca de captura e começamos lendo um único caractere. Nós o
d
duplicamos e o negamos, e se o resultado for verdadeiro (por isso, se a string estiver vazia; a entrada terminou), pularemos para o final:Com a cópia restante do caractere de entrada, verificamos se ele está contido no restante da pilha (ou seja, se é um de!, N, U). Caso contrário, apresentamos um erro, lançando-nos de volta à nossa marca de captura, onde lemos outro personagem:
Caso contrário, carregamos o que está no armazenamento rápido (essencialmente um registro que é inicialmente uma string vazia; falsy), negamos e o enviamos de volta ao armazenamento rápido, e também aumentamos o erro (voltando à leitura dos caracteres):
Quando a entrada parou, somos enviados para o fim. Lá, invertemos a direção, pressionamos um ponto de exclamação, carregamos um armazenamento rápido e o negamos. Se isso é verdade (ou seja, tivemos um número ímpar de coisas de negação), imprimimos o ponto de exclamação que pressionamos:
Por fim, empurramos a sequência em duas partes e as imprimimos (por motivos de economia de espaço):
Posteriormente, o programa ainda volta ao início original, mas como nenhum dos comandos gera nada ou possui comportamento em loop, isso não importa. Na verdade, o primeiro comando non-nopping que alcançamos gera uma exceção, pulando a maior parte do código porque saltamos para a marca de captura, o que significa que tudo o que Aceto vê nessa parte é:
Desde
U
agora não é precedido por um caractere de aspas simples e, portanto, não é visto como um caractere literal, ele é interpretado como um comando:U
inverte todos os elementos na pilha (agora é!
,N
,U
, a partir do topo), e'N
e'!
empurrar mais caracteres, o que significa que terminamos com a pilha[U, N, !, N, !]
.Nota lateral: Este é o primeiro programa do Aceto escrito (em parte) com a ajuda do novo editor do Aceto .
fonte
C,
787068 bytesObrigado Christoph!
Experimente online
Resultado:
fonte
c;f(char*s){for(c=1;*s;)c^=!!strchr("!NU",*s++);s="!isChecked()"+c;}
usar xor para inverterc
economiza 2 bytes.Perl 5 , 31 bytes
-2 bytes graças a @Dom Hastings .
30 bytes de código +
-p
sinalizador.Experimente online!
y/UN!//
conta o número de ocorrências deUn
,Not
e!
. O resultado é que muitos!
módulos 2, seguidos porisChecked()
.Outra tentativa, com base no regex, de 38 bytes (Dom Hastings salvou 1 byte nesse):
Experimente online!
fonte
c
sUnchecked
./g
flag). Os casos de teste parecem bons para mim (consulte o link TryItOnline). Então, eu realmente não vejo o que quer dizer ...c
emUnchecked
há também um emChecked
, então quando você subsitute que você acabar comCheCked
.Scala ,
3930 bytesExperimente online!
Infelizmente não consegui deduzir o tipo de s.
Edit: Moveu a declaração de tipo para o cabeçalho (acho que isso é permitido, se não, vou colocá-lo de volta).
fonte
Ruby , 40 bytes
Experimente online!
fonte
05AB1E , 22 bytes
Experimente online!
fonte
05AB1E , 16 bytes
Experimente online!
Usa o truque de somar os ordinais da resposta em python de Jonathan Allan .
Explicação
fonte
Japonês ,
2423 bytesExplicação
Experimente online!
fonte
o
diferencia maiúsculas de minúsculas? Eu não sabia o que ... #PHP (5.5 - 5.6),
525049 bytesExperimente aqui .
PHP (> = 5,5),
666561Sem regex, fica um pouco mais compex :) Experimente aqui .
fonte
error_reporting
valor padrão éE_ALL&~E_NOTICE&~E_STRICT&~E_DEPRECATED
.$b^=$a
Very nice find! Você também pode fazer isso sem as tags PHP do mesmo tamanho.for($b=b;$a=$argn[$i++];)$b^=$a;echo$b&"!"|" ","isChecked()";
Geléia ,
1615 bytesUm programa completo que usa a string como argumento de linha de comando e imprime o resultado
Experimente online!
OSḂ⁾!iṫ-7³ṫṭ⁾sC
ouOSḂ⁾!iṫ-7³ṫ⁾sC;
ambos também trabalhariam para 15.Quão?
Utiliza a mesma ideia da minha resposta Python , mas salva bytes usando uma construção diferente de
!isC
ouisC
e alguma impressão implícita no Jelly ...previous @ 16 bytes 9 (usando concatenação e emparelhamento com a mesma ideia subjacente):
fonte
OS1&”!x;“isC”;ṫ-7$
Perl 6 ,
3531 bytesTente
Experimente
(requer uma sequência de entrada mutável que será mutilada)
Expandido:
fonte
Sed, 36 bytes
A mesma idéia que todas as outras respostas de substituição direta.
fonte
sed,
3738 bytes37 + 1 para o
-r
comutador:fonte
s/c/C/
problemas causados pela resposta Perl 5 ...s/c/C/
é pegar o segundo "c" em casos sem "Un"g
e movendo os/!!//
interior do loop.Mathematica,
826160 BytesPequenos ajustes, adicionado mais um operador de infix:
Anteriormente:
Contar todos os o's, n's e! 'S então mod 2 e colocar tantos! em frente.
Versão antiga:
fonte
Excel, 90 bytes
fonte
Lote do Windows, 120 bytes
Anteriormente, 268 257 253 245 239 221 182 176 169 123 bytes
Os programas substituem todo o
!
conteúdoN#
. Como agora todos os sinais de negação,! (Agora éN#
),Not
eUn
contémN
, o programa pode contar o número de aparênciasN
e determinar se uma liderança!
é necessária.Cada vez que o programa conta um
N
, o contador é adicionado por 5. O motivo da adição de 5 é porque cada valor alternativo ao adicionar 5 termina em 0 ou 5. Isso pode ser usado para determinar se o valor é ímpar ou par e o principal!
adicionado se necessário.Além disso, o truque dos últimos oito caracteres do xnor é utilizado.
fonte
Geléia ,
29282521 bytesExperimente online!
-4 bytes graças a Jonathan Allan!
-4 bytes graças a Jonathan Allan! (usando cadeias compactadas)
fonte
jellyCompress.Compress().string("is").dictionary("Checked").string("()").go()
. (Se você estiver executando em um Windows cmd instalar e mudar para a fonte DejaVu Sans Mono e alterar a página de código com o comandochcp 65001
antes de lançar Python para obter os caracteres para exibir)PHP, 55 bytes
Experimente online!
PHP, 58 bytes
em vez disso,
"#[!NU]#"
você pode usar"#[!N]#i"
Experimente online!
PHP, 68 bytes
Versão sem Regex
Experimente online!
fonte
<?=preg_match_all("#[!UN]#",$argn)&1?"!":""?>isChecked()
-2 bytescount(split())
: D @Titus boa ideia!" !"[$d&1]
salva outro byte se o espaço em branco à esquerda estiver ok.$d^=!trim($c,"UN!")
economiza 3 bytes (porque você não precisa&1
mais)."!"[!$d]
em vezJaponês , 19 bytes
Experimente online!
Descompactado e como funciona
Usando o truque de soma de código de código da solução Python de Jonathan Allan .
fonte
Pascal (FPC) , 119 bytes
Experimente online!
Usando o método que quase todas as respostas fazem, somando pontos de código de caracteres na entrada e verificando a paridade da soma.
fonte