Introducción
Cada año, Dyalog Ltd. celebra una competencia estudiantil. El desafío es escribir un buen código APL. Esta es una edición de código de golf agnóstico del octavo problema de este año.
Tengo permiso explícito para publicar este desafío aquí del autor original de la competencia. No dude en verificar siguiendo el enlace proporcionado y contactando al autor.
Problema
Dada una lista booleana *, "apague" todas las Verdades después de la primera Verdad.
No hay verdades? ¡No hay problema! Simplemente devuelva la lista sin modificar.
Ejemplos
[falsy,truthy,falsy,truthy,falsy,falsy,truthy] → [falsy,truthy,falsy,falsy,falsy,falsy,falsy]
[] → []
[falsy,falsy,falsy,falsy] → [falsy,falsy,falsy,falsy]
* Todas tus verdades deben ser idénticas, y todas tus falsedades deben ser idénticas. Esto incluye salida.

Respuestas:
Python 2 , 35 bytes
Pruébalo en línea! La entrada y la salida son líneas de verdadero / falso.
Basado en la solución de Dennis . Redefine la variable
Trueque seráFalsedespués de queTruese encuentre una entrada. De esa manera, cualquier entrada adicional deTruese evaluaráFalsee imprimirá como tal.La redefinición es
True&=b<1, es decirTrue = True & (b<1). Cuando la entradabesTrue, entonces(b<1)es False (sinceTrue==1), entonces seTrueconvierte enFalse.fuente
True, False = False, True.APL , 2 bytes
Evalúa la función "escanear con menos de". Pruébalo en línea!
Explicación
En APL, el operador
\(exploración) reduce cada prefijo no vacío de una matriz desde la derecha utilizando la función proporcionada. Por ejemplo, dada la matriz0 1 0, calcula0(prefijo de longitud 1),0<1(prefijo de longitud 2) y0<(1<0)(prefijo de longitud 2) y coloca los resultados en una nueva matriz; los paréntesis se asocian a la derecha. Reducir<desde la derecha da como resultado1exactamente cuándo el último elemento de la matriz es1y el resto son0, por lo que el prefijo correspondiente al extremo izquierdo1se reduce a1y los demás a0.fuente
Aceto ,
1917 bytes no competitivosNueva versión (17 bytes):
Esta nueva versión toma los caracteres de uno en uno y se ejecuta mejor con la
-Fopción. Funciona de manera similar, pero no idéntica a la solución anterior:Respuesta anterior (19 bytes):
(No compite porque tuve que corregir dos errores en el intérprete)
Diría que esta es la primera respuesta de Aceto que resalta lo que puede hacer relativamente bien. Las "listas" son flujos de entrada, con una entrada por línea, "1" para verdadero y "0" para falso, con una cadena vacía que significa el final de la lista.
Los programas de Aceto se ejecutan en una curva de Hilbert, comenzando en la parte inferior izquierda y terminando en la parte inferior derecha. Primero,
rcolocamos una cadena, ladduplicamos y la negamos (!), convirtiendo las cadenas vacías en Verdadero, todo lo demás en Falso. Luego hay un espejo horizontal condicional (|): si el elemento superior de la pila es verdadero, refleje horizontalmente. Esto sucede cuando la cadena estaba vacía. Si hacemos el reflejo, aterrizamos en elX, que mata al intérprete.De lo contrario, convertimos la copia restante en la pila a un
integer y hacemos otro espejo horizontal condicional: esta vez, debido a que 1 es verdadero y 0 es falso, reflejamos si vemos el (primer) valor verdadero. Si no reflejamos (entonces vimos un 0),pdesciframos lo que está en la pila (ya que la pila está vacía, un cero) yOsaltamos al rigin de la curva, donde comenzamos, comenzando todo el proceso nuevamente.De lo contrario, cuando vimos un 1, reflejamos y aterrizamos en el
u, que invierte la dirección en que nos movemos en la curva de Hilbert.1pimprime un 1, y ahora continuamos de la misma maneraOque hubiéramos ido si hubiéramos visto un 0, pero dado que estamos en "modo inverso", nuestro origen está en la parte inferior derecha , así que saltamos allí.Ahora
rcolocamos otra cuerda y la negamos. Si la cadena estaba vacía, y por lo tanto el elemento de la pila superior es Truthy,`será no escapar el comando siguiente (X), lo que nos dejamos.En caso contrario (si la cadena no estaba vacía), que sí escapar del
Xe ignorarlo. En ese caso, vamos a la izquierda (<),print 0 (porque la pila está vacía) y volvemos alOrigin.fuente
Java8,
2419 bytesEspero que esto sea legal; Tengo la impresión de que la entrada / salida no tiene que evaluarse como verdadero / falso en el lenguaje. Toma un largo como entrada y da uno como salida, con unos verdaderos y ceros falsos en la representación binaria. Por ejemplo, el binario 00101 es 5 y devolvería el binario 00100 que es 4.
Cinco bytes gracias a @puhlen
fuente
Long::highestOneBitque produce el resultado idéntico con una sintaxis más cortajava.langpaquete se importa de forma predeterminada. De la especificación de idioma "Una unidad de compilación tiene acceso automáticamente a todos los tipos declarados en su paquete y también importa automáticamente todos los tipos públicos declarados en el paquete predefinido java.lang".Retina , 6 bytes
Pruébalo en línea!
La entrada es una lista de
0s (para Falso)1ys (para Verdadero).Coincide con todos
1y reemplaza cada uno excepto el primero (1>) con a0.fuente
V , 7 bytes
Pruébalo en línea!
Mi primera presentación de V! \ o /
Cómo funciona
fuente
r0con<C-x>para disminuir los y guardar un byte.Haskell , 25 bytes
Función anónima que toma y devuelve una lista de
Bools.Usar como
(foldr(\x l->x:map(x<)l)[])[False,True,False,False].Pruébalo en línea!
Cómo funciona
xes el elemento que debe anteponerse a la sublistal.Falsese compara menosTrue, por lomap(x<)lque convertirá cualquierTrues enlenFalsesixesTrue.fuente
Jalea , 4 bytes
Pruébalo en línea!
Aquí hay un algoritmo bastante diferente a la mayoría de las otras soluciones de lenguaje de golf (aunque después de que lo publiqué, noté que la solución R también usa este algoritmo), y lo relaciono con el actual poseedor del récord Jelly.
Explicación
Mientras todos los elementos a la izquierda de un elemento sean 0, la suma acumulativa hasta un elemento será igual al elemento mismo. A la derecha del primer 1, los dos son diferentes (porque ahora estamos agregando el total distinto de cero de los elementos a la izquierda). Por lo tanto,
+\=nos da una lista que contiene 1 (es decir, verdadero) e incluye el primer elemento de verdad. Finalmente, lógico Y con la lista original nos dará un 1 solo para el primer elemento de verdad.fuente
JavaScript (ES6),
3326 bytesI / O está en matrices de 0s y 1s.
fuente
05AB1E , 6 bytes
Código:
Explicación:
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
1k>sƶ-_es otra, peor sin embargo. Sinliftembargo, la idea puede tener potencial.Simulador de máquina de Turing , 39 bytes.
Pruébalo en línea!
fuente
brainfuck , 55 bytes
Pruébalo en línea!
fuente
Jalea , 4 bytes
Un puerto de mi respuesta 05AB1E.
Explicación (argumento α ):
Pruébalo en línea!
fuente
R , 24 bytes
Pruébalo en línea!
Ejemplo:
Para la entrada
FALSE TRUE TRUE FALSEcumsum(T<-scan(,F))==TdevuelveTRUE TRUE FALSE FALSE. La F en el escaneo asegura la entrada lógica.FALSE TRUE TRUE FALSEyTRUE TRUE FALSE FALSEesFALSE TRUE FALSE FALSE. Un single&hace una comparación por elementos.fuente
Octava, 23 bytes
Pruébalo en línea!
Primera diferencia del máximo acumulativo de la lista.
fuente
J , 3 bytes
Define un verbo monádico. Este es un puerto trivial de mi respuesta APL . Pruébalo en línea!
fuente
Python, 58 bytes
Si
x[i]es falso, la salida es falsa; de lo contrario, da si el elemento es o no la primera aparición en la matriz de sí mismo.fuente
PHP, 37 bytes
fuente
Perl 5, 20 bytes
Truthy is
1y falsey is''(una cadena vacía).Explicación:
maprecorre los elementos de la lista@_, los argumentos pasados a la subrutina, configurando cada elemento en $ _ localmente y devolviendo una matriz de los valores de retorno que calcula de cada elemento.$_&&!$x++salidas$_si$_es falsey y!$x++si es verdad. (Tenga en cuenta que && está en cortocircuito, por!$x++lo que no se ejecuta hasta que se alcanza el primer valor verdadero).$x++vuelve0(que es falsey) la primera vez que se ejecuta y luego se incrementa cada vez (y así sigue siendo verdad). Se!niega$x++, por lo que devuelve la verdad la primera vez que se encuentra y se desvanece a partir de entonces.fuente
sub{...}).Pyth - 9 bytes
Pruébalo aquí
fuente
m&!~|Z.Python 2 ,
4536 bytesLa entrada y la salida son un booleano ( verdadero o falso ) por línea.
Pruébalo en línea!
fuente
C #, 77 bytes
Compila a a
Func<bool[], bool[]>. Nada realmente inteligente, solo una solución directa.fuente
sed ,
1619 bytes15código fuentede18 bytes + 1 byte para el indicador -r (o el indicador -E para BSD sed).Pruébalo en línea!
Editar: Gracias Riley por señalar un error.
fuente
Jalea , 4 bytes
Pruébalo en línea!
¿Cómo?
Esto hace lo que se le pidió en un sentido bastante literal:
fuente
c (con gcc incorporado), 40
Un enfoque ligeramente diferente:
Esto puede considerarse inválido, en cuyo caso lo marcaré felizmente como no competitivo.
Las "matrices" de entrada y salida son enteros sin signo de 32 bits; esto limita el tamaño de la lista de entrada a ser exactamente 32; esto puede ser un descalificador. Si la entrada tiene menos de 32 bits, puede rellenarse con cero bits al final.
Pruébalo en línea .
fuente
Lote,
8573 bytesToma datos como argumentos de línea de comando. Por ejemplo:
1.bat 0 1 0 1 0 0 1Versión previa
fuente
Brain-Flak , 230 bytes
Lo explicaré pronto, pero mi mamá me preparó unas papas fritas.Pruébalo en línea!
Gracias especiales
¡Un agradecimiento especial a Wheat Wizard y Riley por ayudarme mucho con el código!
fuente
Python 3,
696664605453 bytesToma una serie de
falsesytrues. Esta es una lista de comprensión defalses excepto si el valor de la iteración actual estruey es el primerotrueen la entrada.Esto parece un poco largo (y es mi primer lambda), así que si puedes encontrar una forma de jugarlo, ¡sería muy apreciado!
fuente
0 for0for.Brain-Flak ,
146144 bytesPruébalo en línea!
fuente
Perl 5 , 12 bytes
Código de 10 bytes + 2 para
-pl.Pruébalo en línea!
fuente