Neste desafio, dada uma lista de fantasmas do Pac-Man, você deve exibir quais fantasmas estão faltando. Você deve fazer isso no menor número de bytes possível
Entrada
A entrada consistirá em uma sequência ou lista, que incluirá um número de fantasmas, que pode incluir;
- Blinky
- Inky
- Pinky
- Clyde
No entanto, a entrada também pode incluir o Pac-Man (com essa pontuação). Portanto, a quantidade máxima de itens em uma lista será cinco, em qualquer ordem. Pode-se supor que nenhum item inválido estará na lista
Saída
A saída consistirá em uma sequência ou lista. Isso incluirá todos os fantasmas que não estão na entrada, em nenhuma ordem. No entanto, se Pac-Man estiver na entrada, todos os fantasmas serão considerados desaparecidos (porque ele os come).
Casos de teste
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 é um codegolf, portanto, quanto menor o número de bytes, melhor.
[null]
?Respostas:
Geléia ,
2522 bytesEsta é uma função monádica. A E / S está na forma de listas. Experimente online!
Como funciona
fonte
Retina , 45 bytes
O avanço de linha à direita é significativo. Entrada e saída são separadas por vírgula.
Experimente online! (A primeira linha ativa um conjunto de testes separado por avanço de linha.)
Explicação
Eu não esperava poder exibir a última adição da Retina (estágios de desduplicação) tão cedo, mas é realmente útil para esse desafio. :)
Etapa 1: Anti-Grep
Os estágios do anti-grep descartam todas as linhas que correspondem ao regex especificado. O regex é justo
-
e a entrada é sempre uma única linha; portanto, isso descarta todos os fantasmas se a entrada contiverPac-Man
.Etapa 2: Substituição
Isso simplesmente acrescenta a sequência fixa
,;BliNClyde,INPiN
. Esta será a lista de fantasmas na saída após alguma limpeza.Etapa 3: Substituição
Observe que escrevemos os três
*nky
fantasmas com umN
no estágio anterior (e omitimos a vírgula após eles), e agora expandimos essa abreviação, que economiza alguns bytes. Agora existe uma vírgula após cada fantasma, e temos os fantasmas de entrada e a lista de todos os fantasmas separados por ponto e vírgula.Etapa 3: Desduplicação
Esta é a nova parte. Os estágios de redução de redundância localizam todas as instâncias do regex especificado e descartam todas as substrings correspondentes que são iguais a uma substring correspondente anterior. A regex simplesmente corresponde a todos os fantasmas, tanto na entrada quanto na lista de possíveis saídas. Se a entrada contiver um fantasma, o mesmo fantasma será correspondido novamente na segunda lista e será descartado. Caso contrário, o fantasma é correspondido pela primeira vez na segunda lista e mantido. Então, depois disso, a lista após o ponto e vírgula é a saída desejada. Tudo o que resta é um pouco de limpeza:
Etapa 5: Substituição
Simplesmente combinamos tudo até o ponto-e-vírgula e a vírgula no final da string e os removemos.
fonte
Python 3, 75 bytes
A entrada é uma sequência separada por vírgula e a saída será uma lista.
fonte
if(x in s)<1
parte é inteligente! +1JavaScript ES6,
8578 bytesComo uma função anônima
Hoje eu aprendi sobre essa
filter
função. Diversão!15 bytes salvos graças a Neil.
Uso:
fonte
Pac-Man
fora do filtro, acho que você pode adicioná-lo comoa.includes("Pac-Main")||!a.includes(c)
no filtro; nesse momento, você tem apenas um usog
e, portanto, pode incorporá-lo e transformar seu bloco em uma expressão, evitando areturn
declaração.return
o{}
arquivo ee salvou uma tonelada de bytes, obrigado!a.includes
pora[z="includes"]
(primeiro) ea[z]
(segundo). Além disso, acho que você pode salvar outro byte usando OR (|
) bit a bit nos resultados booleanos, em vez de OR (||
) lógico .Pac-Man
é a entrada mais longa possível (e entradas inválidas são impossíveis), podemos testar a existência de um sétimo personagem para testePac-Man
:c=>!a.includes(c)||a.some(v=>v[6])
. Usando que, com o bit a bit OR traz a pontuação para baixo para 78.Ruby,
5549 bytesExperimente online!
-6 bytes de @MartinEnder
As matrizes Ruby podem sofrer subtração de conjunto, facilitando a remoção dos fantasmas apropriados.
fonte
a*''
e compara-a com o regex ao-
presente no nomePac-Man
. Se ele está presente, ele subtrai nada da lista de fantasmas, e se ele não é, ele subtrai a lista de entrada (de modo que cada elemento na lista de entrada é removida da lista de fantasmas)Perl, 51 bytes
Código de 50 bytes + 1 para
-n
Uso
Posso alterar a saída, se necessário, adicionando um espaço após cada fantasma, para + 3 bytes substituindo
print$@
porprint"$@ "
.-6 bytes graças a @MartinEnder !
Perl, 53 bytes
Código de 51 bytes + 2 para
-na
Uma solução alternativa, usando o operador smartmatch:
Uso
Requer uma lista de entradas separada por espaço:
fonte
Pyth -
45 3835 Bytes-1 byte a mais, graças a Leaky Nun!
A entrada deve ser delimitada por espaço, todas em minúsculas; produz fantasmas ausentes em linhas separadas, a menos que pac-man esteja na entrada.
fonte
}\az
também testa sez
contém a letraa
. 1 byte mais curto.C, 171 bytes
Passe uma matriz de seqüências terminada em NULL para
f()
e ela imprimirá os nomes ausentes.Experimente em ideone.
fonte
PowerShell v4 +, 107 bytes
Um pouco desajeitado em comparação com outros, pois o PowerShell não possui um operador ternário ou qualquer tipo de
map
operador estilo. Como resultado, construímos nossos próprios.Recebe a entrada
$n
como uma matriz explícita de strings (por exemplo,.\which-ghosts-are-missing.ps1 @('Clyde','Blinky')
o resto do programa é um pseudo-ternário que é composto por uma matriz na qual indexamos por meio de alguma lógica[...]
. A lógica é simplesmente se o-
caractere está em algum lugar da matriz de entrada-join
editado juntos em uma única string e depois convertida novamente como umachar
matriz, a fim de usar o-in
operador.Portanto, sePac-Man
estiver na matriz de entrada, esse será$TRUE
o segundo elemento da matriz pseudo-ternária, caso contrário, o primeiro será ser escolhido.Se for o caso que
Pac-Man
não está na matriz, a primeira parte da matriz pseudo-ternária é emitida. Essa é uma combinação da matriz de entrada$n
concatenada com uma matriz de todos os fantasmas (salvos em$x
). Canalizamos essa nova matriz naGroup-Object
qual agrupamos itens semelhantes e, em seguida, selecionamos usandoWhere-Object
(aliasizado|?{...}
apenas pelos itens em que eles.count
são-eq
ual1
. Isso é tudo encapsulado em uma parênteses, e selecionamos a.Name
propriedade. É aí que entra o requisito da v4, como na v4, você pode fazer referência a um rótulo de hashtable como este, em vez de usar algo como|Select Name
, o que economiza vários bytes.Caso contrário, como
Pac-Man
está na matriz de entrada, precisamos gerar todos os fantasmas. Felizmente, já salvamos aqueles em$x
, então essa é a escolha neste caso. De qualquer forma, o pipeline agora contém uma matriz de fantasmas e a saída está implícita.Exemplos
fonte
Python 2,
666196 bytesA entrada deve ser uma lista, a saída será uma sequência de nomes separados por a
,
.Versão de 61 bytes que não lida com o Pac-Man:
fonte
set[...]
. Basta usar um{...}
conjunto literal.Haskell, 91 bytes
Entrada é uma lista de cadeias. Ele decide se deve usar a lista como está ou fazer uma diferença de lista com base na presença de "Pac-Man".
Para diversão extra, aqui não é o Pac-Man:
Estará melhorando esta resposta em breve, fez super tarde da noite.
fonte
Python 3, 77 bytes
Aqui está outra resposta com 89 bytes em que eu estava jogando, mas não deu certo :(
E aqui está o original em 85 bytes:
Todos eles usam uma única sequência de nomes separados por espaços / vírgulas.
fonte
05AB1E,
4744 bytesExplicação
Experimente online
fonte
Python 2, 151 bytes
Como já existem respostas em Python usando conjuntos e seqüências de caracteres, decidi me restringir ao trabalho com listas, que se mostraram bastante longas e pouco competitivas. No entanto, como a abordagem adotada é diferente da utilizada, aqui está:
onde a entrada esperada é uma lista de cadeias.
A abordagem é aplicar força bruta em todas as combinações possíveis (sem levar em consideração a ordem) de 0,1,2,3 e 4 elementos. Isso é feito por
que retorna
e encontre o que, além da lista de entrada, resulta na lista completa de fantasmas.
Então é verificado se a string
'Pac-Man'
faz parte da entrada e, no caso, a lista inteira de fantasmas é retornada. Caso contrário, somente os que não fazem parte da entrada são retornados.Observe que a lista que contém todos os nomes fantasmas (
o
) é classificada em ordem alfabética e o mesmo vale para a lista criada como (sorted(l+x)
). Isto é devido ao fato de que em Python,['a','b']==['b','a']
é avaliada comoFalse
enquanto['a','b']==['a','b']
é avaliada comoTrue
.Podem ser salvos 3 bytes se for permitido retornar a resposta como uma lista de listas (removendo a compreensão
[0]
no final da primeira lista). Mas como não tenho certeza se é uma saída válida, estou contando-os.fonte
Objeto Pascal,
204200 bytesDois loops, usando um binário para descobrir quais fantasmas + pacman estão presentes. Aceita os argumentos da linha de comando. Obrigado a @manatwork por salvar mais alguns bytes!
Ungolfed:
Versão antiga usando um conjunto,
227209 bytesDois loops, usando um conjunto para descobrir quais fantasmas + pacman estão presentes. Aceita os argumentos da linha de comando.
Ungolfed:
fonte
integer
→byte
; remova a declaraçãog
e use seu valor diretamente,ParamCount
→5
(como eu entendo a tarefa, não haverá itens de entrada duplicados ou inválidos). Pelo menos nos literais numéricos do FreePascal podem tocar palavras-chave, comoi:=1to 5do
ou5in s
. Veja se o seu suporte também.set
seria benéfico: pastebin.com/r2nB5wY3ParamCount
porque o comportamento é indefinido para números maiores que os parâmetros reais de entrada (pelo menos não há nada sobre isso nos documentos), mesmo que funcione.Programa PHP, 84 bytes
exemplos:
Função PHP, 90 bytes
pega e retorna uma matriz, use matriz vazia para entrada vazia, nenhum outro valor falso!
pensamentos adicionais
in_array(...)
porstrstr(join($argv),'-')
para detectar em-
vez dePac-Man
(-2)ereg('-',join($argv))
vez disso (outro -2)register_globals
on<?print_r(
por<?=join(',',
(+2). Convém adicionar;echo""
à chamada uma quebra de linhafonte
jq, 69 caracteres
A entrada é JSON, a saída é JSON, a sintaxe condicional é problemática.
Exemplo de execução:
Teste on-line:
fonte
TSQL (sqlserver 2016), 114 bytes
Golfe:
Ungolfed:
Violino
fonte
Idioma do Lotus Notes @Formula,
85847574 caracteres-1 caractere invertendo a atribuição @If
-9 Alterou @Contains (i; "-") para @Like (i; "% -%") e removeu @Trim (não é necessário se exibido usando o espaço como separador)
-1 removendo a nova linha
Crie um formulário com dois campos: i (Texto, Editável, Multi-valor) e o (Texto, Computado, Multi-valor). Digite a seguinte fórmula em o:
No cliente Notes, crie um novo documento usando o formulário, insira os nomes no campo i e pressione F9 para atualizar o documento. Resposta exibida no campo o.
Isso tira proveito do fato de que @Like e @Replace podem ser usados tanto em uma string quanto em uma lista de strings.
fonte
C #
135 bytes126 bytes(onde i é uma matriz de cadeias contendo a entrada)
Depois de examinar os outros exemplos, vejo que o C # é uma linguagem detalhada :)
fonte
Pyke,
4539383732 bytesExperimente aqui!
fonte
Lote, 141 bytes
(Subtraia 6 bytes para
:~1,-1
se os espaços em branco à esquerda e à direita forem aceitáveis.) Requer Pac-Man na maiúscula, mas os fantasmas não fazem distinção entre maiúsculas e minúsculas.fonte
Japt , 38 bytes (Não concorrente)
Recebe entrada como uma matriz de strings, gera uma matriz de strings
Experimente online
fonte