En este desafío, dada una lista de fantasmas de Pac-Man, debe mostrar qué fantasmas faltan. Debes hacerlo en tan pocos bytes como puedas
Entrada
La entrada consistirá en una cadena o lista, que incluirá un número de fantasmas, que podrían incluir;
- Blinky
- Tinta
- Meñique
- Clyde
Sin embargo, la entrada también puede incluir Pac-Man (con esa puntuación). Por lo tanto, la cantidad máxima de elementos en una lista será de cinco, en cualquier orden. Se puede suponer que no habrá elementos inválidos en la lista
Salida
La salida consistirá en una cadena o lista. Esto incluirá todos los fantasmas que no están en la entrada, en cualquier orden. Sin embargo, si Pac-Man está en la entrada, se considerará que faltan todos los fantasmas (porque se los come).
Casos de prueba
input: Clyde
output: Blinky, Inky, Pinky
alternate output: Inky, Pinky, Blinky
or one of the other 4 permutations
input: Clyde, Blinky # or however you delimit it
output: Inky, Pinky
alt: Pinky, Inky
input: Pac-Man, Clyde
Output: Blinky, Inky, Pinky, Clyde
or you could output one of the other 23 permutations
input:[null]
Output: Blinky, Inky, Pinky, Clyde
or you could output one of the other 23 permutations
Este es codegolf, por lo que cuanto menor sea el bytecount, mejor.
[null]
?Respuestas:
Jalea ,
2522 bytesEsta es una función monádica. I / O está en forma de listas. Pruébalo en línea!
Cómo funciona
fuente
Retina , 45 bytes
El avance de línea final es significativo. La entrada y la salida están separadas por comas.
Pruébalo en línea! (La primera línea habilita un conjunto de pruebas separado por salto de línea).
Explicación
No esperaba poder mostrar la última incorporación de Retina (etapas de deduplicación) tan pronto, pero es realmente útil para este desafío. :)
Etapa 1: Anti-Grep
Las etapas anti-grep descartan todas las líneas que coinciden con la expresión regular dada. La expresión regular es justa
-
y la entrada siempre es una sola línea, por lo que descarta todos los fantasmas si la entrada contienePac-Man
.Etapa 2: sustitución
Esto simplemente agrega la cadena fija
,;BliNClyde,INPiN
. Esta será la lista de fantasmas en la salida después de una limpieza.Etapa 3: sustitución
Tenga en cuenta que hemos escrito los tres
*nky
fantasmas con unN
en la etapa anterior (y omitimos la coma después de ellos), y ahora ampliamos esta taquigrafía, lo que ahorra un par de bytes. Ahora hay una coma después de cada fantasma, y tenemos los fantasmas de entrada y la lista de todos los fantasmas separados por punto y coma.Etapa 3: deduplicación
Esta es la nueva parte. Las etapas de deduplicación encuentran todas las instancias de la expresión regular dada y descartan todas las subcadenas coincidentes que son iguales a una subcadena coincidente anterior. La expresión regular simplemente coincide con todos los fantasmas, tanto en la entrada como en la lista de salidas potenciales. Si la entrada contiene un fantasma, el mismo fantasma volverá a coincidir en la segunda lista y se descartará. De lo contrario, el fantasma se compara por primera vez en la segunda lista y se mantiene. Entonces, después de esto, la lista después del punto y coma es nuestra salida deseada. Todo lo que queda es un poco de limpieza:
Etapa 5: sustitución
Simplemente hacemos coincidir todo con el punto y coma, así como con la coma al final de la cadena y los eliminamos.
fuente
Python 3, 75 bytes
La entrada es una cadena separada por comas, y la salida será una lista.
fuente
if(x in s)<1
parte es inteligente! +1JavaScript ES6,
8578 bytesComo una función anónima
Hoy aprendí sobre esta
filter
función. ¡Divertido!15 bytes guardados gracias a Neil.
Uso:
fuente
Pac-Man
fuera del filtro, creo que puede agregarlo comoa.includes("Pac-Main")||!a.includes(c)
en el filtro, en cuyo punto solo tiene un usog
y, por lo tanto, puede alinearlo y convertir su bloque en una expresión, evitando así lareturn
declaración.return
y el{}
y ahorré una tonelada de bytes, ¡gracias!a.includes
cona[z="includes"]
(primero) ya[z]
(segundo). Además, creo que puede guardar otro byte utilizando OR (|
) bit a bit en sus resultados booleanos en lugar de OR lógico (||
).Pac-Man
es la entrada más larga posible (y entradas no válidas son imposibles), podemos comprobar la existencia de un séptimo carácter de prueba paraPac-Man
:c=>!a.includes(c)||a.some(v=>v[6])
. Usar eso con el OR bit a bit reduce el puntaje a 78.Ruby,
5549 bytesPruébalo en línea!
-6 bytes de @MartinEnder
Las matrices de rubíes pueden sufrir una resta determinada, lo que facilita la eliminación de los fantasmas apropiados.
fuente
a*''
y regex lo compara con el-
presente en el nombrePac-Man
. Si está presente, no resta nada de la lista de fantasmas, y si no lo está, resta la lista de entrada (por lo que cada elemento en la lista de entrada se elimina de la lista de fantasmas)Perl, 51 bytes
Código de 50 bytes + 1 para
-n
Uso
Puedo modificar la salida si es necesario, agregando un espacio después de cada fantasma, para reemplazar
print$@
con + 3 bytesprint"$@ "
.-6 bytes gracias a @MartinEnder !
Perl, 53 bytes
Código de 51 bytes + 2 para
-na
Una solución alternativa, utilizando el operador smartmatch:
Uso
Requiere una lista de entrada separada por espacios:
fuente
Pyth :
45 3835 bytes-1 byte más gracias a Leaky Nun!
La entrada debe estar delimitada por espacios, todo en minúsculas; genera fantasmas faltantes en líneas separadas a menos que pac-man esté en la entrada.
fuente
}\az
También prueba siz
contiene la letraa
. 1 byte más corto.C, 171 bytes
Pase una serie de cadenas terminadas en NULL
f()
e imprimirá los nombres que faltan.Pruébalo con ideone.
fuente
PowerShell v4 +, 107 bytes
Un poco torpe en comparación con otros, ya que PowerShell carece de un operador ternario o cualquier tipo de
map
operador de estilo. Como resultado, construimos el nuestro.Toma la entrada
$n
como un conjunto explícito de cadenas (p.\which-ghosts-are-missing.ps1 @('Clyde','Blinky')
. Ej . , El resto del programa es un pseudoternario que está compuesto por un conjunto que indexamos mediante alguna lógica[...]
. La lógica es simplemente si el-
carácter está en algún lugar del conjunto de entrada-join
editado conjuntamente en una sola cadena y luego volver a emitir como unachar
matriz, para usar el-in
operador. Por lo tanto, siPac-Man
está en la matriz de entrada, será$TRUE
y se elegirá el segundo elemento de la matriz pseudoternaria, de lo contrario, el primero será ser elegidoSi es el caso que
Pac-Man
no está en la matriz, se emite la primera parte de la matriz pseudoternaria. Esa es una combinación de la matriz de entrada$n
concatenada con una matriz de todos los fantasmas (guardados en$x
). Conectamos esa nueva matriz en laGroup-Object
que se agruparán los elementos similares, luego seleccionaremos usandoWhere-Object
(alias|?{...}
solo a través de los elementos donde.count
están-eq
normalmente1
. Eso está todo encapsulado en un parens, y seleccionamos la.Name
propiedad. Aquí es donde entra el requisito de v4, como en v4 puede hacer referencia a una etiqueta de tabla hash como esta en lugar de usar algo como|Select Name
, que ahorra varios bytes.De lo contrario, dado que
Pac-Man
está en la matriz de entrada, necesitamos generar todos los fantasmas. Afortunadamente, ya los guardamos$x
, así que esa es la opción en este caso. De cualquier manera, la canalización ahora contiene una serie de cadenas de fantasmas, y la salida es implícita.Ejemplos
fuente
Python 2,
666196 bytesLa entrada debe ser una lista, la salida será una cadena de nombres separados por a
,
.Versión de 61 bytes que no maneja Pac-Man:
fuente
set[...]
. Solo usa un{...}
conjunto literal.Haskell, 91 bytes
La entrada es una lista de cadenas. Decide si usar la lista tal como está o hacer una diferencia de lista basada en la presencia de "Pac-Man".
Para mayor diversión, aquí no hay Pac-Man:
Estará mejorando esta respuesta pronto, lo hizo muy tarde en la noche.
fuente
Python 3, 77 bytes
Aquí hay otra respuesta de 89 bytes con la que estaba jugando pero que no funcionó :(
Y aquí está el original en 85 bytes:
Todos estos toman una sola cadena de los nombres separados por espacios / comas.
fuente
05AB1E,
4744 bytesExplicación
Pruébalo en línea
fuente
Python 2, 151 bytes
Como ya hay respuestas de Python utilizando conjuntos y cadenas, decidí limitarme a trabajar con listas, que resultaron ser bastante largas y poco competitivas. Sin embargo, como el enfoque adoptado es diferente al utilizado comúnmente, aquí está:
donde la entrada esperada es una lista de cadenas.
El enfoque consiste en aplicar fuerza bruta a todas las combinaciones posibles (sin tener en cuenta el orden) de 0,1,2,3 y 4 elementos. Esto se hace por
que vuelve
y encuentre el que, además de la lista de entrada, da como resultado la lista completa de fantasmas.
Luego se verifica si la cadena
'Pac-Man'
es parte de la entrada y, en caso de serlo, se devuelve toda la lista de fantasmas. Si no, solo se devuelven los que no son parte de la entrada.Observe que la lista que contiene todos los nombres de fantasmas (
o
) está ordenada alfabéticamente y lo mismo ocurre con la lista creada como (sorted(l+x)
). Esto se debe al hecho de que en Python,['a','b']==['b','a']
se evalúa comoFalse
mientras que['a','b']==['a','b']
se evalúa comoTrue
.Se pueden guardar 3 bytes si se permite devolver la respuesta como una lista de listas (eliminando la
[0]
comprensión al final de la primera lista). Pero como no estoy seguro de que sea una salida válida, los estoy contando.fuente
Objeto Pascal,
204200 bytesDos bucles, usando un binario para encontrar qué fantasmas + pacman están presentes. Toma los argumentos de la línea de comandos. ¡Gracias a @manatwork por guardar algunos bytes más!
Sin golf:
Versión anterior que usa un conjunto,
227209 bytesDos bucles, usando un conjunto para encontrar qué fantasmas + pacman están presentes. Toma los argumentos de la línea de comandos.
Sin golf:
fuente
integer
→byte
; eliminar la declaración deg
y usar su valor directamente,ParamCount
→5
(según tengo entendido la tarea, de todos modos no habrá elementos de entrada duplicados o inválidos). Al menos en FreePascal, los literales numéricos pueden tocar palabras clave, comoi:=1to 5do
o5in s
. Mira si tu también lo admite.set
sería beneficioso: pastebin.com/r2nB5wY3ParamCount
porque el comportamiento no está definido para números más grandes que los parámetros de entrada reales (al menos no hay nada de eso en los documentos), a pesar de que funciona.Programa PHP, 84 bytes
ejemplos:
Función PHP, 90 bytes
toma y devuelve una matriz, usa una matriz vacía para la entrada vacía, ¡ningún otro valor falso!
pensamientos adicionales
in_array(...)
constrstr(join($argv),'-')
para detectar en-
lugar dePac-Man
(-2)ereg('-',join($argv))
en su lugar (otro -2)register_globals
on<?print_r(
con<?=join(',',
(+2). Es posible que desee agregar;echo""
a la llamada un salto de líneafuente
jq, 69 caracteres
La entrada es JSON, la salida es JSON, la sintaxis condicional es dolorosa.
Ejecución de muestra:
Prueba en línea:
fuente
TSQL (sqlserver 2016), 114 bytes
Golfizado:
Sin golf:
Violín
fuente
Lenguaje Lotus Notes @Formula,
85847574 caracteres-1 carácter invirtiendo la asignación @ If
-9 Cambió @Contains (i; "-") a @Like (i; "% -%") y eliminó @Trim (no es necesario si se muestra usando el espacio como separador)
-1 eliminando la nueva línea
Cree un formulario con dos campos: i (Texto, Editable, Valor múltiple) yo (Texto, Computado, Valor múltiple). Ingrese la siguiente fórmula en o:
Desde el cliente Notes, cree un nuevo documento utilizando el formulario, ingrese los nombres en el campo i y presione F9 para actualizar el documento. La respuesta se muestra en el campo o.
Esto aprovecha el hecho de que @Like y @Replace pueden usarse tanto en una cadena como en una lista de cadenas.
fuente
C #
135 bytes126 bytes(donde i es una matriz de cadenas que contiene la entrada)
Después de mirar los otros ejemplos, veo que C # es más bien un lenguaje detallado :)
fuente
Pyke,
4539383732 bytesPruébalo aquí!
fuente
Lote, 141 bytes
(Reste 6 bytes
:~1,-1
si el espacio en blanco inicial y final es aceptable.) Requiere Pac-Man en el caso del título, pero los fantasmas no distinguen entre mayúsculas y minúsculas.fuente
Japt , 38 bytes (no competidor)
Toma la entrada como una matriz de cadenas, emite una matriz de cadenas
Pruébalo en línea
fuente