In dieser Herausforderung müssen Sie anhand einer Liste von Geistern aus Pac-Man ausgeben, welche Geister fehlen. Sie müssen es in so wenigen Bytes tun, wie Sie können
Eingang
Die Eingabe besteht aus einer Zeichenfolge oder Liste, die eine Anzahl von Geistern enthält, die Folgendes enthalten könnten.
- Blinky
- Inky
- kleiner Finger
- Clyde
Die Eingabe kann jedoch auch Pac-Man (mit dieser Interpunktion) umfassen. Die maximale Anzahl von Elementen in einer Liste beträgt also fünf in beliebiger Reihenfolge. Es kann davon ausgegangen werden, dass keine ungültigen Elemente in der Liste enthalten sind
Ausgabe
Die Ausgabe besteht aus einer Zeichenfolge oder Liste. Dies schließt alle Geister, die nicht in der Eingabe enthalten sind, in beliebiger Reihenfolge ein. Wenn sich Pac-Man jedoch in der Eingabe befindet, werden alle Geister als vermisst betrachtet (weil er sie isst).
Testfälle
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
Das ist Codegolf. Je niedriger der Bytecount, desto besser.
[null]
?Antworten:
Jelly ,
2522 BytesDies ist eine monadische Funktion. I / O ist in Form von Listen. Probieren Sie es online!
Wie es funktioniert
quelle
Netzhaut , 45 Bytes
Der Zeilenvorschub am Ende ist signifikant. Eingabe und Ausgabe sind durch Kommas getrennt.
Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
Erläuterung
Ich hatte nicht erwartet, dass ich Retinas neueste Erweiterung (Deduplizierungsphasen) so bald vorführen kann, aber es ist wirklich hilfreich für diese Herausforderung. :)
Stufe 1: Anti-Grep
Anti-Grep-Stufen verwerfen alle Zeilen, die dem angegebenen regulären Ausdruck entsprechen. Der reguläre Ausdruck ist gerecht
-
und die Eingabe ist immer eine einzelne Zeile. Dadurch werden alle Geister verworfen, wenn die Eingabe enthältPac-Man
.Stufe 2: Substitution
Hiermit wird einfach die feste Zeichenfolge angehängt
,;BliNClyde,INPiN
. Dies ist die Liste der Geister in der Ausgabe nach einer Bereinigung.Stufe 3: Substitution
Beachten Sie, dass wir die drei
*nky
Geister mit einemN
in der vorherigen Phase geschrieben haben (und das Komma nach ihnen weggelassen haben), und dass wir jetzt diese Kurzform erweitern, wodurch ein paar Bytes gespart werden. Nach jedem einzelnen Geist steht jetzt ein Komma, und wir haben die Eingabegeister und die Liste aller Geister, die durch ein Semikolon getrennt sind.Stufe 3: Deduplizierung
Das ist der neue Teil. Deduplizierungsstufen finden alle Instanzen des angegebenen regulären Ausdrucks und verwerfen alle übereinstimmenden Teilzeichenfolgen, die einer früheren übereinstimmenden Teilzeichenfolge entsprechen. Der reguläre Ausdruck stimmt einfach mit allen Geistern überein, sowohl in der Eingabe als auch in der Liste der möglichen Ausgaben. Wenn die Eingabe einen Geist enthält, wird derselbe Geist erneut in der zweiten Liste abgeglichen und verworfen. Andernfalls wird der Geist zum ersten Mal in der zweiten Liste abgeglichen und beibehalten. Danach ist die Liste nach dem Semikolon unsere gewünschte Ausgabe. Alles was übrig bleibt, ist ein bisschen aufzuräumen:
Stufe 5: Substitution
Wir ordnen einfach alles dem Semikolon sowie dem Komma am Ende der Zeichenkette zu und entfernen sie.
quelle
Python 3, 75 Bytes
Die Eingabe ist eine durch Kommas getrennte Zeichenfolge und die Ausgabe ist eine Liste.
quelle
if(x in s)<1
Teil ist schlau! +1JavaScript ES6,
8578 BytesAls anonyme Funktion
Heute habe ich diese
filter
Funktion kennengelernt. Spaß!Neil spart 15 Bytes.
Verwendung:
quelle
Pac-Man
außerhalb des Filters eine spezielle Schreibweise zu verwenden , können Sie sie wiea.includes("Pac-Main")||!a.includes(c)
im Filter einfügen. An diesem Punkt haben Sie nur noch eine Verwendungg
und können sie daher in die Zeile einfügen und Ihren Block in einen Ausdruck umwandeln, wodurch diereturn
Anweisung vermieden wird .return
und das ausschneiden{}
und eine Menge Bytes sparen, danke!a.includes
durcha[z="includes"]
(erstes) unda[z]
(zweites) ersetzen . Ich denke auch, dass Sie ein weiteres Byte speichern können, indem Sie bitweise OR (|
) für Ihre booleschen Ergebnisse anstelle von logischem OR (||
) verwenden.Pac-Man
ist die längste mögliche Eingabe (und ungültige Eingaben sind nicht möglich), können wir für die Existenz eines siebten Zeichens Test testenPac-Man
:c=>!a.includes(c)||a.some(v=>v[6])
. Wenn Sie das mit dem bitweisen ODER verwenden, wird die Punktzahl auf 78Ruby,
5549 BytesProbieren Sie es online!
-6 Bytes von @MartinEnder
Ruby-Arrays können einer Mengen-Subtraktion unterzogen werden, wodurch es sehr einfach wird, die entsprechenden Geister zu entfernen.
quelle
a*''
und vergleicht es mit der-
Gegenwart im NamenPac-Man
. Wenn es vorhanden ist, subtrahiert es nichts von der Liste der Geister, und wenn es nicht vorhanden ist, subtrahiert es die Eingabeliste (sodass jedes Element in der Eingabeliste aus der Liste der Geister entfernt wird)Perl, 51 Bytes
50 Byte Code + 1 für
-n
Verwendung
Ich kann die Ausgabe bei Bedarf ändern, um einen Raum nach jeder Zugabe Geister, für + 3 Bytes ersetzen
print$@
mitprint"$@ "
.-6 Bytes dank @MartinEnder !
Perl, 53 Bytes
51 Byte Code + 2 für
-na
Eine alternative Lösung mit dem Smartmatch-Operator:
Verwendung
Benötigt eine durch Leerzeichen getrennte Liste der Eingaben:
quelle
Pyth -
45 3835 Bytes-1 weiteres Byte dank Leaky Nun!
Die Eingabe muss durch Leerzeichen getrennt und in Kleinbuchstaben erfolgen. Gibt fehlende Geister in separaten Zeilen aus, es sei denn, pac-man ist in der Eingabe.
quelle
}\az
testet auch, obz
der Buchstabe enthalten ista
. 1 Byte kürzer.C 171 Bytes
Übergeben Sie ein NULL-terminiertes Array von Zeichenfolgen an
f()
, um die fehlenden Namen auszudrucken.Probiere es auf ideone aus.
quelle
PowerShell v4 +, 107 Byte
Ein wenig klobig im Vergleich zu anderen, da PowerShell keinen ternären Operator oder irgendeine Art von
map
Operator hat. Infolgedessen bauen wir unsere eigenen.Nimmt die Eingabe
$n
als explizite Array von Zeichenketten (zB.\which-ghosts-are-missing.ps1 @('Clyde','Blinky')
. Der Rest des Programms ist eine pseudo-ternäre , die aus einem Array zusammengesetzt ist , dass wir Index in über eine gewisse Logik[...]
. Die Logik ist einfach , ob das-
Zeichen überall im Eingabearray-join
zusammen edchar
Um den-in
Operator zu verwenden ,Pac-Man
wird er in eine einzelne Zeichenfolge umgewandelt und dann als Array neu umgewandelt$TRUE
und das zweite Element des pseudoternären Arrays wird ausgewählt, andernfalls das erste gewählt werden.Wenn dies nicht der Fall
Pac-Man
ist, wird der erste Teil des pseudoternären Arrays ausgegeben. Dies ist eine Kombination des Eingabearrays, das$n
mit einem Array aller (in$x
) gespeicherten Geister verknüpft ist . Wir Rohr , dass neue Array inGroup-Object
denen Gruppe wie Elemente zusammen, wählen Sie dann mitWhere-Object
(aliased über|?{...}
die Elemente nur dann, wenn ihr.count
ist-eq
ual zu1
. Das ist alles in einem Pars gekapselt und wir die wählen.Name
Eigenschaft. Hier wird die Anforderung v4 kommt, Wie unter v4 können Sie auf ein solches Hashtable-Label verweisen, anstatt so etwas zu verwenden|Select Name
, das mehrere Bytes spart.Andernfalls
Pac-Man
müssen alle Geisterbilder ausgegeben werden , da sie sich im Eingabearray befinden. Zum Glück haben wir diese bereits in gespeichert$x
, also ist das in diesem Fall die Wahl. In beiden Fällen enthält die Pipeline jetzt ein String-Array mit Geistern, und die Ausgabe ist implizit.Beispiele
quelle
Python 2,
666196 BytesDie Eingabe muss eine Liste sein. Die Ausgabe erfolgt in Form einer durch ein Zeichen getrennten Namensfolge
,
.61-Byte-Version, die Pac-Man nicht unterstützt:
quelle
set[...]
. Verwenden Sie einfach ein{...}
Set-Literal.Haskell, 91 Bytes
Die Eingabe ist eine Liste von Zeichenfolgen. Es entscheidet, ob die Liste unverändert verwendet wird oder ob ein Listendifferenz basierend auf dem Vorhandensein von "Pac-Man" durchgeführt wird.
Für zusätzlichen Spaß gibt es hier keinen Pac-Man:
Wird diese Antwort bald verbessern, hat es super spät in der Nacht.
quelle
Python 3, 77 Bytes
Hier ist eine weitere Antwort bei 89 Bytes, mit der ich gespielt habe, die aber nicht geklappt hat :(
Und hier ist das Original mit 85 Bytes:
Diese setzen sich aus einer einzelnen Zeichenfolge von durch Leerzeichen / Kommas getrennten Namen zusammen.
quelle
05AB1E,
4744 BytesErklärung
Probieren Sie es online aus
quelle
Python 2, 151 Bytes
Da es bereits Python-Antworten mit Mengen und Zeichenfolgen gibt, habe ich mich darauf beschränkt, mit Listen zu arbeiten, die sich als ziemlich lang und nicht wettbewerbsfähig herausstellten. Da der gewählte Ansatz jedoch anders ist als der übliche, ist er hier:
wobei die erwartete Eingabe eine Liste von Zeichenfolgen ist.
Der Ansatz besteht darin, alle möglichen Kombinationen (ohne Berücksichtigung der Reihenfolge) von 0,1,2,3 und 4 Elementen zu erzwingen. Dies geschieht durch
was zurückkehrt
und finde den, der zusätzlich zu der Eingabeliste die vollständige Liste der Geister ergibt.
Dann wird geprüft, ob der String
'Pac-Man'
Teil der Eingabe ist, und falls dies der Fall ist, wird die gesamte Liste der Geister zurückgegeben. Wenn nicht, werden nur diejenigen zurückgegeben, die nicht Teil der Eingabe sind.Beachten Sie, dass die Liste mit allen Geisternamen (
o
) alphabetisch sortiert ist und dass dies auch für die Liste gilt, die als (sorted(l+x)
) erstellt wurde. Dies liegt daran, dass in Python['a','b']==['b','a']
ausgewertet wird alsFalse
wohingegen['a','b']==['a','b']
ausgewertet wird alsTrue
.3 Bytes können gespeichert werden, wenn die Antwort als Liste von Listen zurückgegeben werden darf (indem das
[0]
am Ende der ersten Liste stehende Verständnis entfernt wird). Aber da ich nicht sicher bin, ob es eine gültige Ausgabe ist, zähle ich sie.quelle
Object Pascal,
204200 BytesZwei Schleifen mit einer Binärdatei, um herauszufinden, welche Geister + Pacman vorhanden sind. Übernimmt die Argumente von der Kommandozeile. Vielen Dank an @manatwork für das Speichern weiterer Bytes!
Ungolfed:
Alte Version unter Verwendung eines Satzes,
227209 BytesZwei Loops mit einem Set, um herauszufinden, welche Geister + Pacman vorhanden sind. Übernimmt die Argumente von der Kommandozeile.
Ungolfed:
quelle
integer
→byte
; Entfernen Sie die Deklaration vong
und verwenden Sie ihren Wert direkt.ParamCount
→5
(Soweit ich die Aufgabe verstehe, gibt es sowieso keine doppelten oder ungültigen Eingabeelemente.) Zumindest in FreePascal können numerische Literale Schlüsselwörter wiei:=1to 5do
oder berühren5in s
. Sehen Sie, ob Ihr es auch unterstützt.set
wäre von Vorteil: pastebin.com/r2nB5wY3ParamCount
, weil das Verhalten für Zahlen, die größer als die tatsächlichen Eingabeparameter sind, undefiniert ist (zumindest gibt es in den Dokumenten nichts darüber), obwohl es funktioniert.PHP-Programm, 84 Bytes
Beispiele:
PHP-Funktion, 90 Bytes
Nimmt ein Array und gibt es zurück, verwende ein leeres Array für leere Eingaben, keinen anderen falschen Wert!
weitere gedanken
in_array(...)
mitstrstr(join($argv),'-')
zu erkennen-
stattPac-Man
(-2)ereg('-',join($argv))
stattdessen (ein anderes -2)register_globals
on verlieren<?print_r(
durch<?=join(',',
(+2). Möglicherweise möchten Sie;echo""
dem Anruf einen Zeilenumbruch hinzufügenquelle
69 Zeichen
Eingabe ist JSON, Ausgabe ist JSON, bedingte Syntax ist Schmerz.
Probelauf:
Online-Test:
quelle
TSQL (SQL Server 2016), 114 Byte
Golf gespielt:
Ungolfed:
Geige
quelle
Lotus Notes @Formula-Sprache,
85847574 Zeichen-1 Zeichen durch Umkehren der @ If-Zuweisung
-9 @Contains (i; "-") wurde in @Like (i; "% -%") geändert und @Trim entfernt (nicht erforderlich, wenn Leerzeichen als Trennzeichen verwendet werden)
-1 durch Entfernen der Newline
Erstellen Sie ein Formular mit zwei Feldern: i (Text, Bearbeitbar, Mehrfachwert) und o (Text, Berechnet, Mehrfachwert). Geben Sie die folgende Formel in o ein:
Erstellen Sie im Notes-Client ein neues Dokument mit dem Formular, geben Sie den oder die Namen in das Feld i ein und drücken Sie F9, um das Dokument zu aktualisieren. Antwort wird in Feld o angezeigt.
Dies nutzt die Tatsache aus, dass sowohl @Like als auch @Replace entweder für eine Zeichenfolge oder für eine Liste von Zeichenfolgen verwendet werden können.
quelle
C #
135 Bytes126 Bytes(wobei i ein String-Array ist, das die Eingabe enthält)
Wenn ich mir die anderen Beispiele anschaue, sehe ich, dass C # eher eine ausführliche Sprache ist :)
quelle
Pyke,
4539383732 BytesProbieren Sie es hier aus!
quelle
Batch, 141 Bytes
(Subtrahieren Sie 6 Bytes,
:~1,-1
wenn führende und nachfolgende Leerzeichen zulässig sind.) Erfordert Pac-Man in Groß- und Kleinschreibung, aber bei den Ghosts wird die Groß- und Kleinschreibung nicht berücksichtigt.quelle
Japt , 38 Bytes (nicht konkurrierend)
Nimmt Eingaben als ein Array von Zeichenfolgen und gibt ein Array von Zeichenfolgen aus
Probieren Sie es online aus
quelle