Al revisar el código, me topé con el siguiente código, que prueba el estado de una casilla de verificación:
if (!isNotUnchecked()) { ... }
Tuve que hacer una lluvia de ideas durante 30 minutos para averiguar qué estado de casilla de verificación real esperaba el código. ¡Por favor escríbeme un programa que pueda simplificar estas expresiones tontas!
El programa debe aceptar como entrada una cadena que representa la expresión para simplificar (por ejemplo:) !isNotUnchecked()
. El programa debería generar una expresión simplificada lógicamente equivalente, ya sea isChecked()
o !isChecked()
.
El nombre del método en la expresión de entrada siempre comienza con is
, contiene 0..n Not
, y termina con Checked()
o Unchecked()
. El método puede tener como prefijo cualquier número de !
.
Ejemplos
isChecked() => isChecked()
isUnchecked() => !isChecked()
isNotChecked() => !isChecked()
!isNotChecked() => isChecked()
!!!isNotNotUnchecked() => isChecked()
notunischecked
?isnotunchecked
por ejemplo.Respuestas:
Python , 51 bytes
Pruébalo en línea!
fuente
s[-8:]
'isC'+s[-8:]
es un byte más largo que'isChecked'
?s[-8:]
es / qué hace?hecked()
.Retina , 23 bytes
Pruébalo en línea!
Explicación
Conviértete
Unchecked
en!Checked
.Convierte todos los
Not
s en!
. Ahora tenemos algo así!!!is!!!!Checked()
.Ordenar todos los partidos de cualquiera
is
o!
. Desde entonces! < is
, esto mueve todo!
al principio de la cadena, por lo que el ejemplo anterior se convertiría!!!!!!!isChecked()
.Eliminar pares de
!
para cancelar la negación repetida.fuente
/// , 26 bytes
Pruébalo en línea!
Puerto de mi respuesta Retina .
fuente
Python , 43 bytes
Una función sin nombre que toma la cadena
s
y devuelve una cadena.Pruébalo en línea!
No hay necesidad de comprobar la existencia de caracteres cuando
!
,Not
yUn
todos tienen exactamente un ordinal impar (yc
yC
son ambos impares), por lo que sólo resumir los ordinales y utilizar el valor del módulo 2 para decidir si queremos una!
o no.Aparte de eso, la forma es la misma que la respuesta de xnor , ya que no encontré nada mejor. El siguiente también es 43:
fuente
JavaScript (ES6),
5150 bytesFunciona mediante la búsqueda de
!
,N
yn
personajes, que invierten el estado de activación.split
devuelve una longitud de matriz impar de manera predeterminada, por lo que agregamos!
cuando lasplit
longitud es par. Editar: guardado 1 byte gracias a @ETHproductions. Versión alternativa, también para 50 bytes:fuente
g
la última edición./!|N/i
/!|N/
sin eli
modificadorRetina , 24 bytes
Pruébalo en línea!
fuente
Java 7,
10077 bytesExpansión:
Código de prueba:
Pruébalo aquí.
Salida:
fuente
Aceto , 49 bytes
yadda yadda Hilbert curva.
En primer lugar, empujamos los tres personajes importantes en la pila:
Luego establecemos una marca y comenzamos leyendo un solo carácter. Lo
d
duplicamos y lo negamos, y si el resultado de esto es verdadero (por lo tanto, si la cadena estaba vacía; así que la entrada terminó), saltamos al final:Con la copia restante del carácter de entrada, verificamos si está contenido en el resto de la pila (es decir, si es uno de!, N, U). Si no es así, generamos un error, devolviéndonos a nuestra marca de captura donde leemos otro personaje:
De lo contrario, cargamos lo que está en el almacenamiento rápido (esencialmente un registro que inicialmente es una cadena vacía; falso), lo negamos y lo enviamos de vuelta al almacenamiento rápido, luego también generamos el error (volviendo a leer los caracteres):
Cuando la entrada se detuvo, somos enviados al final. Allí, invertimos la dirección, empujamos un signo de exclamación y cargamos el almacenamiento rápido y lo negamos. Si eso es verdad (es decir, hemos tenido un número impar de cosas de negación), imprimimos el signo de exclamación que hemos empujado:
Finalmente, empujamos la cadena en dos partes e las imprimimos (por razones de ahorro de espacio):
Después, el programa todavía se ejecuta de nuevo al principio original, pero dado que ninguno de los comandos genera nada o tiene un comportamiento en bucle, eso no importa. En realidad, el primer comando sin nopping que alcanzamos genera una excepción, omitiendo la mayoría del código porque saltamos a la marca de captura, lo que significa que todo lo que Aceto ve en esa parte es:
Puesto que
U
ahora no está precedido por un carácter de comilla simple y por lo tanto no se ve como un carácter literal, se interpreta como un comando:U
invierte todos los elementos en la pila (ahora es!
,N
,U
, desde la parte superior), y'N
e'!
impulsar más caracteres, lo que significa que terminamos con la pila[U, N, !, N, !]
.Nota al margen: este es el primer programa de Aceto escrito (en parte) con la ayuda del nuevo editor de Aceto .
fuente
C,
787068 BytesGracias Christoph!
Pruébalo en línea
Salida:
fuente
c;f(char*s){for(c=1;*s;)c^=!!strchr("!NU",*s++);s="!isChecked()"+c;}
El uso de xor para voltearc
ahorra 2 bytes.Perl 5 , 31 bytes
-2 bytes gracias a @Dom Hastings .
30 bytes de código +
-p
bandera.Pruébalo en línea!
y/UN!//
cuenta el número de veces que apareceUn
,Not
y!
. El resultado es que muchos!
módulo 2, seguido deisChecked()
.Otro intento, basado en expresiones regulares, para 38 bytes (Dom Hastings guardó 1 byte en ese):
Pruébalo en línea!
fuente
c
sUnchecked
./g
flag). Los casos de prueba me parecen buenos (vea el enlace TryItOnline). Así que realmente no entiendo lo que quieres decir ...c
en laUnchecked
que también es uno deChecked
, por lo que cuando subsitute que se termina conCheCked
.Scala ,
3930 bytesPruébalo en línea!
Lamentablemente no pude deducir el tipo de s.
Editar: moví la declaración de tipo al encabezado (creo que esto está permitido, si no, lo volveré a poner).
fuente
Rubí , 40 bytes.
Pruébalo en línea!
fuente
05AB1E , 22 bytes
Pruébalo en línea!
fuente
05AB1E , 16 bytes
Pruébalo en línea!
Utiliza el truco de sumar los ordinales de la respuesta en pitón de Jonathan Allan .
Explicación
fuente
Japt ,
2423 bytesExplicación
Pruébalo en línea!
fuente
o
insensible a mayúsculas y minúsculas? No sabía que ...PHP (5.5 - 5.6),
525049 BytesProbarlo aquí .
PHP (> = 5.5),
666561Sin expresiones regulares se vuelve un poco más complejo :) Pruébelo aquí .
fuente
error_reporting
valor por defecto esE_ALL&~E_NOTICE&~E_STRICT&~E_DEPRECATED
.$b^=$a
Muy buen hallazgo! También puede hacerlo sin las etiquetas PHP del mismo tamaño.for($b=b;$a=$argn[$i++];)$b^=$a;echo$b&"!"|" ","isChecked()";
Jalea ,
1615 bytesUn programa completo que toma la cadena como argumento de línea de comando e imprime el resultado.
Pruébalo en línea!
OSḂ⁾!iṫ-7³ṫṭ⁾sC
oOSḂ⁾!iṫ-7³ṫ⁾sC;
ambos también funcionarían para 15.¿Cómo?
Utiliza la misma idea que mi respuesta de Python , pero guarda bytes utilizando una construcción diferente de
!isC
oisC
alguna impresión implícita en Jelly ...anterior @ 16 bytes 9 (usando concatenación y emparejamiento con la misma idea subyacente):
fuente
OS1&”!x;“isC”;ṫ-7$
Perl 6 ,
3531 bytesIntentalo
Pruébelo
(requiere una cadena de entrada mutable que será mutilada)
Expandido:
fuente
Sed, 36 bytes
La misma idea que todas las otras respuestas de sustitución directa.
fuente
sed,
3738 bytes37 + 1 para
-r
interruptor:fuente
s/c/C/
causó problemas para la respuesta de Perl 5 ...s/c/C/
está atrapando la segunda "c" en casos sin "Un"g
y moviendo els/!!//
interior del bucle.Mathematica,
826160 BytesPequeño ajuste, se agregó un operador infijo más:
Previamente:
Cuente todas las o's, n's y! 'S luego mod 2 y ponga tantas! Al frente.
Versión antigua:
fuente
Excel, 90 bytes
fuente
Lote de Windows, 120 bytes
Anteriormente 268257253 245 239 221 182 176 169 123 bytes
Los programas reemplazan todo
!
enN#
. Debido a que ahora todas las señales de negación, (ahora lo esN#
),Not
yUn
contieneN
, el programa puede contar la cantidad de apariciónN
y determinar si!
se requiere un inicio .Cada vez que el programa cuenta un
N
, el contador se agrega por 5. La razón para sumar 5 es porque cada valor alterno al sumar 5 termina en 0 o 5. Esto se puede usar para determinar si el valor es impar o par y el valor inicial!
Nosotros agregamos si es necesario.Además, se utiliza el truco de los últimos ocho personajes de xnor.
fuente
Jalea ,
29282521 bytesPruébalo en línea!
-4 bytes gracias a Jonathan Allan!
-4 bytes gracias a Jonathan Allan! (mediante el uso de cadenas comprimidas)
fuente
jellyCompress.Compress().string("is").dictionary("Checked").string("()").go()
. (Si está ejecutando una instalación de cmd de Windows, cambie a la fuente DejaVu Sans Mono y cambie la página de códigos con el comandochcp 65001
antes de iniciar Python para que los caracteres se muestren)PHP, 55 bytes
Pruébalo en línea!
PHP, 58 bytes
en
"#[!NU]#"
su lugar puedes usar"#[!N]#i"
Pruébalo en línea!
PHP, 68 bytes
Versión sin expresiones regulares
Pruébalo en línea!
fuente
<?=preg_match_all("#[!UN]#",$argn)&1?"!":""?>isChecked()
-2 bytescount(split())
: D @Titus ¡buena idea!" !"[$d&1]
guarda otro byte si el espacio en blanco inicial está bien.$d^=!trim($c,"UN!")
ahorra 3 bytes (porque ya no necesita&1
)."!"[!$d]
Japt , 19 bytes
Pruébalo en línea!
Desempaquetado y cómo funciona
Usando el truco charcode-sum de la solución Python de Jonathan Allan .
fuente
Pascal (FPC) , 119 bytes
Pruébalo en línea!
Usando el método que hace casi todas las respuestas, sumando puntos de código de caracteres en la entrada, luego verificando la paridad de la suma.
fuente