Dans ce défi, étant donné une liste de fantômes de Pac-Man, vous devez générer les fantômes manquants. Vous devez le faire en aussi peu d'octets que possible
Contribution
L'entrée consistera en une chaîne ou une liste, qui comprendra un certain nombre de fantômes, qui pourraient inclure;
- Blinky
- Inky
- Pinky
- Clyde
Cependant, l'entrée peut également inclure Pac-Man (avec cette ponctuation). Ainsi, le nombre maximal d'éléments dans une liste sera de cinq, dans n'importe quel ordre. On peut supposer qu'aucun élément invalide ne figurera dans la liste
Sortie
La sortie consistera en une chaîne ou une liste. Cela comprendra tous les fantômes qui ne sont pas dans l'entrée, dans n'importe quel ordre. Cependant, si Pac-Man est en entrée, tous les fantômes seront considérés comme manquants (car il les mange).
Cas de test
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
Il s'agit de codegolf, donc plus le bytecount est bas, mieux c'est.
[null]
?Réponses:
Gelée ,
2522 octetsIl s'agit d'une fonction monadique. Les E / S se présentent sous forme de listes. Essayez-le en ligne!
Comment ça marche
la source
Rétine , 45 octets
Le saut de ligne arrière est important. L'entrée et la sortie sont séparées par des virgules.
Essayez-le en ligne! (La première ligne active une suite de tests séparés par un saut de ligne.)
Explication
Je ne m'attendais pas à pouvoir montrer le dernier ajout de Retina (étapes de déduplication) si tôt, mais c'est vraiment utile pour ce défi. :)
Étape 1: Anti-Grep
Les étapes anti-grep rejettent toutes les lignes qui correspondent à l'expression régulière donnée. Le regex est juste
-
et l'entrée est toujours une seule ligne, donc cela rejette tous les fantômes si l'entrée contientPac-Man
.Étape 2: substitution
Cela ajoute simplement la chaîne fixe
,;BliNClyde,INPiN
. Ce sera la liste des fantômes dans la sortie après un nettoyage.Étape 3: substitution
Notez que nous avons écrit les trois
*nky
fantômes avec unN
dans l'étape précédente (et omis la virgule après eux), et nous développons maintenant ce raccourci, qui économise quelques octets. Il y a maintenant une virgule après chaque fantôme, et nous avons les fantômes d'entrée et la liste de tous les fantômes séparés par un point-virgule.Étape 3: déduplication
Ceci est la nouvelle partie. Les étapes de déduplication trouvent toutes les instances de l'expression régulière donnée et ignorent toutes les sous-chaînes correspondantes qui sont égales à une sous-chaîne correspondante précédente. Le regex correspond simplement à tous les fantômes, à la fois dans l'entrée et dans la liste des sorties potentielles. Si l'entrée contient un fantôme, le même fantôme sera à nouveau mis en correspondance dans la deuxième liste et sera rejeté. Sinon, le fantôme est mis en correspondance pour la première fois dans la deuxième liste et conservé. Donc après cela, la liste après le point-virgule est notre sortie souhaitée. Tout ce qui reste est un peu de nettoyage:
Étape 5: Substitution
Nous faisons simplement correspondre le tout au point-virgule ainsi qu'à la virgule à la fin de la chaîne et les supprimons.
la source
Python 3, 75 octets
L'entrée est une chaîne séparée par des virgules et la sortie sera une liste.
la source
if(x in s)<1
partie est intelligente! +1JavaScript ES6,
8578 octetsEn tant que fonction anonyme
Aujourd'hui, j'ai découvert cette
filter
fonction. Amusement!15 octets économisés grâce à Neil.
Usage:
la source
Pac-Man
dehors du filtre, je pense que vous pouvez l'ajouter commea.includes("Pac-Main")||!a.includes(c)
dans le filtre, auquel cas vous n'avez qu'une seule utilisationg
et pouvez donc l'inclure et transformer votre bloc en une expression évitant ainsi lareturn
déclaration.return
et le{}
et j'ai économisé une tonne d'octets, merci!a.includes
para[z="includes"]
(premier) eta[z]
(second). De plus, je pense que vous pouvez enregistrer un autre octet en utilisant OR au niveau du bit (|
) sur vos résultats booléens au lieu de OU logique (||
).Pac-Man
est la plus longue entrée possible (et les entrées invalides sont impossibles), nous pouvons tester l'existence d'un septième caractère testPac-Man
:c=>!a.includes(c)||a.some(v=>v[6])
. Utiliser cela avec le bitwise OR ramène le score à 78.Rubis,
5549 octetsEssayez-le en ligne!
-6 octets de @MartinEnder
Les tableaux Ruby peuvent subir une soustraction d'ensemble, ce qui permet de supprimer très facilement les fantômes appropriés.
la source
a*''
et le compare avec regex au-
présent dans le nomPac-Man
. S'il est présent, il ne soustrait rien à la liste des fantômes, et s'il ne l'est pas, il soustrait la liste d'entrée (de sorte que chaque élément de la liste d'entrée est supprimé de la liste des fantômes)Perl, 51 octets
Code 50 octets + 1 pour
-n
Usage
Je peux modifier la sortie si nécessaire, en ajoutant un espace après chaque fantôme, pour + 3 octets en remplaçant
print$@
parprint"$@ "
.-6 octets grâce à @MartinEnder !
Perl, 53 octets
Code de 51 octets + 2 pour
-na
Une solution alternative, utilisant l'opérateur smartmatch:
Usage
Nécessite une liste d'entrées séparées par des espaces:
la source
Pyth -
45 3835 octets-1 octet de plus grâce à Leaky Nun!
L'entrée doit être délimitée par des espaces, toutes en minuscules; affiche les fantômes manquants sur des lignes distinctes sauf si pac-man est en entrée.
la source
}\az
teste également siz
contient la lettrea
. 1 octet plus court.C, 171 octets
Passez un tableau de chaînes terminé par NULL à
f()
, et il imprimera les noms manquants.Essayez-le sur ideone.
la source
PowerShell v4 +, 107 octets
Un peu maladroit par rapport aux autres, car PowerShell manque d'un opérateur ternaire ou de toute sorte de
map
opérateur style. En conséquence, nous construisons le nôtre.Prend l'entrée
$n
comme un tableau explicite de chaînes (par exemple.\which-ghosts-are-missing.ps1 @('Clyde','Blinky')
,. Le reste du programme est un pseudo-ternaire qui est composé d'un tableau dans lequel nous indexons via une logique[...]
. La logique est simplement de savoir si le-
caractère est n'importe où dans le tableau d'entrée-join
édité ensemble en une seule chaîne, puis refondue enchar
tableau, afin d'utiliser l'-in
opérateur. Ainsi, siPac-Man
est dans le tableau d'entrée, ce sera$TRUE
et le deuxième élément du tableau pseudo-ternaire sera choisi, sinon le premier sera être choisi.Si c'est le cas qui
Pac-Man
n'est pas dans le tableau, la première partie du tableau pseudo-ternaire est sortie. C'est une combinaison du tableau d'entrée$n
concaténé avec un tableau de tous les fantômes (enregistrés dans$x
). Nous dirigeons ce nouveau tableau versGroup-Object
lequel regrouper les éléments similaires, puis sélectionnons usingWhere-Object
(aliasé|?{...}
uniquement par les éléments où leur.count
est-eq
ual1
. Tout est encapsulé dans une parens, et nous sélectionnons la.Name
propriété. C'est là que l'exigence v4 entre en jeu, comme sous v4, vous pouvez référencer une étiquette de hachage comme celle-ci plutôt que d'utiliser quelque chose comme|Select Name
, ce qui économise plusieurs octets.Sinon, puisque se
Pac-Man
trouve dans le tableau d'entrée, nous devons sortir tous les fantômes. Heureusement, nous les avons déjà enregistrés$x
, c'est donc le choix dans ce cas. Dans les deux cas, le pipeline contient désormais un tableau de chaînes de fantômes et la sortie est implicite.Exemples
la source
Python 2,
666196 octetsL'entrée doit être une liste, la sortie sera une chaîne de noms séparés par un
,
.Version de 61 octets qui ne gère pas Pac-Man:
la source
set[...]
. Utilisez simplement un{...}
ensemble littéral.Haskell, 91 octets
L'entrée est une liste de chaînes. Il décide d'utiliser la liste telle quelle ou de faire une différence de liste en fonction de la présence de "Pac-Man".
Pour plus de plaisir, voici pas de Pac-Man:
Améliorera bientôt cette réponse, l'a fait très tard dans la nuit.
la source
Python 3, 77 octets
Voici une autre réponse à 89 octets avec laquelle je jouais mais qui n'a pas fonctionné :(
Et voici l'original à 85 octets:
Ils prennent tous une seule chaîne de noms séparés par des espaces / virgules.
la source
05AB1E,
4744 octetsExplication
Essayez-le en ligne
la source
Python 2, 151 octets
Comme il existe déjà des réponses Python utilisant des ensembles et des chaînes, j'ai décidé de me limiter à travailler avec des listes, qui se sont révélées assez longues et non compétitives. Cependant, comme l'approche adoptée est différente de l'approche courante utilisée, la voici:
où l'entrée attendue est une liste de chaînes.
L'approche consiste à brutaliser toutes les combinaisons possibles (sans tenir compte de l'ordre) de 0,1,2,3 et 4 éléments. Cela se fait par
qui revient
et trouver celui qui, en plus de la liste d'entrée, donne la liste complète des fantômes.
Ensuite, il est vérifié si la chaîne
'Pac-Man'
fait partie de l'entrée et, si c'est le cas, la liste entière des fantômes est retournée. Sinon, seuls ceux qui ne font pas partie de l'entrée sont retournés.Notez que la liste contenant tous les noms fantômes (
o
) est triée par ordre alphabétique et il en va de même pour la liste construite en tant que (sorted(l+x)
). Cela est dû au fait qu'en Python,['a','b']==['b','a']
est évalué commeFalse
alors qu'il['a','b']==['a','b']
est évalué commeTrue
.3 octets peuvent être sauvegardés s'il est permis de renvoyer la réponse sous forme de liste de listes (en supprimant le
[0]
à la fin de la première compréhension de liste). Mais comme je ne suis pas sûr que ce soit une sortie valide, je les compte.la source
Pascal Objet,
204200 octetsDeux boucles, utilisant un binaire pour trouver quels fantômes + pacman sont présents. Prend les arguments de la ligne de commande. Merci à @manatwork d'avoir économisé encore plus d'octets!
Non golfé:
Ancienne version utilisant un ensemble,
227209 octetsDeux boucles, en utilisant un ensemble pour trouver quels fantômes + pacman sont présents. Prend les arguments de la ligne de commande.
Non golfé:
la source
integer
→byte
; supprimer la déclaration deg
et utiliser sa valeur directement,ParamCount
→5
(si je comprends bien la tâche, il n'y aura de toute façon aucun élément d'entrée dupliqué ou invalide). Au moins dans FreePascal, les littéraux numériques peuvent toucher des mots clés, commei:=1to 5do
ou5in s
. Voyez si vous le supportez aussi.set
serait bénéfique: pastebin.com/r2nB5wY3ParamCount
, car le comportement n'est pas défini pour des nombres plus grands que les paramètres d'entrée réels (au moins il n'y a rien à ce sujet dans les documents), même si cela fonctionne.Programme PHP, 84 octets
exemples:
Fonction PHP, 90 octets
prend et retourne un tableau, utilisez un tableau vide pour une entrée vide, aucune autre valeur falsifiée!
pensées supplémentaires
in_array(...)
parstrstr(join($argv),'-')
pour détecter-
au lieu dePac-Man
(-2)ereg('-',join($argv))
place (un autre -2)register_globals
on<?print_r(
par<?=join(',',
(+2). Vous voudrez peut-être ajouter;echo""
à l'appel pour un saut de lignela source
jq, 69 caractères
L'entrée est JSON, la sortie est JSON, la syntaxe conditionnelle est douloureuse.
Exemple d'exécution:
Test en ligne:
la source
TSQL (sqlserver 2016), 114 octets
Golfé:
Non golfé:
Violon
la source
Langue Lotus Notes @Formula,
85847574 caractères-1 caractère en inversant l'affectation @If
-9 Changé @Contains (i; "-") en @Like (i; "% -%") et supprimé @Trim (pas nécessaire si affiché en utilisant l'espace comme séparateur)
-1 en supprimant la nouvelle ligne
Créez un formulaire avec deux champs: i (Texte, Modifiable, Multi-valeur) et o (Texte, Calculé, Multi-valeur). Entrez la formule suivante en o:
À partir du client Notes, créez un nouveau document à l'aide du formulaire, entrez le (s) nom (s) dans le champ i et appuyez sur F9 pour actualiser le document. Réponse affichée dans le champ o.
Cela profite du fait que @Like et @Replace peuvent tous deux être utilisés soit sur une chaîne, soit sur une liste de chaînes.
la source
C #
135 octets126 octets(où i est un tableau de chaînes contenant l'entrée)
Après avoir regardé les autres exemples, je vois que C # est plutôt un langage verbeux :)
la source
Pyke,
4539383732 octetsEssayez-le ici!
la source
Lot, 141 octets
(Soustrayez 6 octets
:~1,-1
si les espaces de début et de fin sont acceptables.) Requiert Pac-Man dans le cas de titre mais les fantômes ne sont pas sensibles à la casse.la source
Japt , 38 octets (non concurrent)
Prend l'entrée comme un tableau de chaînes, génère un tableau de chaînes
Essayez-le en ligne
la source