W tym wyzwaniu, biorąc pod uwagę listę duchów z Pac-Mana, musisz podać, których duchów brakuje. Musisz to zrobić w jak najmniejszej liczbie bajtów
Wkład
Dane wejściowe będą składać się z łańcucha lub listy, która będzie zawierać wiele duchów, które mogą obejmować;
- Mrugnięcie
- Atramentowy
- mały palec
- Clyde
Jednak dane wejściowe mogą również obejmować Pac-Man (z tą interpunkcją). Zatem maksymalna liczba pozycji na liście będzie wynosić pięć, w dowolnej kolejności. Można założyć, że na liście nie będzie żadnych nieprawidłowych pozycji
Wydajność
Dane wyjściowe będą składać się z ciągu lub listy. Obejmuje to wszystkie duchy, których nie ma na wejściu, w dowolnej kolejności. Jeśli jednak Pac-Man jest na wejściu, wszystkie duchy zostaną uznane za zaginione (ponieważ je je).
Przypadki testowe
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
To jest codegolf, więc im niższa liczba bajtów, tym lepiej.
[null]
?Odpowiedzi:
Galaretka ,
2522 bajtówTo jest funkcja monadyczna. I / O ma postać list. Wypróbuj online!
Jak to działa
źródło
Siatkówka , 45 bajtów
Końcowe podawanie linii jest znaczące. Wejścia i wyjścia są oddzielone przecinkami.
Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Wyjaśnienie
Nie spodziewałem się, że będę mógł tak szybko pochwalić się najnowszym dodatkiem Retiny (etapy deduplikacji), ale jest to naprawdę pomocne w tym wyzwaniu. :)
Etap 1: Anti-Grep
Etapy anti-grep odrzucają wszystkie wiersze pasujące do podanego wyrażenia regularnego. Wyrażenie regularne jest po prostu,
-
a wejście jest zawsze pojedynczą linią, więc odrzuca wszystkie duchy, jeśli dane wejściowe zawierająPac-Man
.Etap 2: Zmiana
To po prostu dołącza stały ciąg
,;BliNClyde,INPiN
. Będzie to lista duchów na wyjściu po pewnym czyszczeniu.Etap 3: Zmiana
Zauważ, że napisaliśmy trzy
*nky
duchy za pomocąN
na poprzednim etapie (i pominęliśmy przecinek po nich), i teraz rozszerzamy ten skrót, który oszczędza kilka bajtów. Po każdym duchu jest teraz przecinek, a mamy duchy wejściowe i listę wszystkich duchów oddzielonych średnikiem.Etap 3: deduplikacja
To jest nowa część. Etapy deduplikacji znajdują wszystkie wystąpienia podanego wyrażenia regularnego i odrzucają wszystkie dopasowane podciągi, które są równe wcześniej dopasowanemu podciągowi. Wyrażenie regularne po prostu pasuje do wszystkich duchów, zarówno na wejściu, jak i na liście potencjalnych wyników. Jeśli dane wejściowe zawierają ducha, ten sam duch zostanie ponownie dopasowany na drugiej liście i zostanie odrzucony. W przeciwnym razie duch zostanie dopasowany po raz pierwszy na drugiej liście i zachowany. Po tym lista po średniku jest naszym pożądanym wynikiem. Pozostało tylko trochę oczyszczenia:
Etap 5: Zmiana
Po prostu dopasowujemy wszystko do średnika, a także przecinka na końcu łańcucha i usuwamy je.
źródło
Python 3, 75 bajtów
Dane wejściowe to łańcuch rozdzielany przecinkami, a wynikiem będzie lista.
źródło
if(x in s)<1
część jest sprytna! +1JavaScript ES6,
8578 bajtówJako funkcja anonimowa
Dzisiaj dowiedziałem się o tej
filter
funkcji. Zabawa!15 bajtów zapisanych dzięki Neilowi.
Stosowanie:
źródło
Pac-Man
poza filtrem, myślę, że możesz dodać go tak, jaka.includes("Pac-Main")||!a.includes(c)
w filtrze, w tym momencie masz tylko jedno zastosowanie,g
a zatem możesz go wstawić i przekształcić blok w wyrażenie, unikając w ten sposóbreturn
wyrażenia.return
i{}
i zapisane mnóstwo bajtów, dzięki!a.includes
za[z="includes"]
(pierwszy) ia[z]
(II). Myślę też, że można zapisać kolejny bajt, używając bitowej OR (|
) na wynikach logicznych zamiast logicznej OR (||
).Pac-Man
jest najdłuższy możliwy wejściowy (i nieważne wejścia są niemożliwe), możemy przetestować na istnienie siódmego znaku testPac-Man
:c=>!a.includes(c)||a.some(v=>v[6])
. Używanie tego z bitowym OR obniża wynik do 78.Rubin,
5549 bajtówWypróbuj online!
-6 bajtów od @MartinEnder
Tablice Ruby mogą podlegać odejmowaniu, dzięki czemu bardzo łatwo można usunąć odpowiednie duchy.
źródło
a*''
i regex-porównuje go do-
teraźniejszości w nazwiePac-Man
. Jeśli jest obecny, nie odejmuje niczego od listy duchów, a jeśli nie jest, odejmuje listę danych wejściowych (więc każdy element na liście danych wejściowych jest usuwany z listy duchów)Perl, 51 bajtów
Kod 50 bajtów + 1 dla
-n
Stosowanie
Mogę zmiany sygnału, jeżeli jest to konieczne, dodanie miejsca po każdej duch do + 3 bajty zastępujących
print$@
zprint"$@ "
.-6 bajtów dzięki @MartinEnder !
Perl, 53 bajty
Kod 51 bajtów + 2 dla
-na
Alternatywne rozwiązanie z wykorzystaniem operatora smartmatch:
Stosowanie
Wymaga listy danych oddzielonych spacjami:
źródło
Pyth -
45 3835 bajtów-1 więcej bajtów dzięki Leaky Nun!
Dane wejściowe muszą być rozdzielane spacjami, wszystkie małe litery; wyświetla brakujące duchy w osobnych liniach, chyba że na wejściu znajduje się pac-man.
źródło
}\az
sprawdza również, czyz
zawiera literęa
. 1 bajt krótszy.C, 171 bajtów
Przekaż tablicę zakończonych znakiem NULL ciągów
f()
, a wyświetli brakujące nazwy.Wypróbuj na ideone.
źródło
PowerShell v4 +, 107 bajtów
Trochę nieporadny w porównaniu do innych, ponieważ PowerShell nie ma trójskładnikowego operatora lub innego rodzaju
map
operatora. W rezultacie budujemy własne.Pobiera dane wejściowe
$n
jako jawną tablicę ciągów znaków (np.\which-ghosts-are-missing.ps1 @('Clyde','Blinky')
. Reszta programu to jeden pseudo-trójskładnik, który składa się z tablicy, którą indeksujemy za pomocą jakiejś logiki[...]
. Logika polega po prostu na tym, czy-
znak jest w dowolnym miejscu w tablicy wejściowej-join
razem w pojedynczy łańcuch, a następnie ponownie rzutowany jakochar
tablica, aby użyć-in
operatora. Zatem jeśliPac-Man
znajduje się w tablicy wejściowej, będzie to$TRUE
i wybierany będzie drugi element tablicy pseudo-trójskładnikowej, w przeciwnym razie pierwsza być wybranym.Jeśli tak jest w przypadku, gdy
Pac-Man
nie ma go w tablicy, wyprowadzana jest pierwsza część pseudo-trójskładnikowej tablicy. Jest to kombinacja tablicy wejściowej$n
połączonej z tablicą wszystkich duchów (zapisanych w$x
). Podłączamy tę nową tablicę, doGroup-Object
której będą grupować podobne elementy, a następnie wybieramy za pomocąWhere-Object
(aliasy|?{...}
tylko przez elementy, do których.count
są-eq
one potrzebne1
. To wszystko jest zamknięte w parens, i wybieramy.Name
właściwość. To tutaj pojawia się wymaganie v4, tak jak w v4, możesz odwoływać się do takiej etykiety hashtable, zamiast używać czegoś takiego|Select Name
, co oszczędza kilka bajtów.W przeciwnym razie, ponieważ
Pac-Man
znajduje się w tablicy wejściowej, musimy wyprowadzić wszystkie duchy. Na szczęście już je zapisaliśmy$x
, więc w tym przypadku to jest wybór. Tak czy inaczej, potok zawiera teraz szereg duchów, a dane wyjściowe są niejawne.Przykłady
źródło
Python 2,
666196 bajtówDane wejściowe muszą być listą, dane wyjściowe będą ciągiem nazw oddzielonych znakiem
,
.Wersja 61 bajtów, która nie obsługuje Pac-Mana:
źródło
set[...]
. Po prostu użyj{...}
zestawu literału.Haskell, 91 bajtów
Dane wejściowe to lista ciągów znaków. Decyduje, czy użyć listy w stanie, w jakim jest, czy zrobić różnicę w zależności od obecności „Pac-Man”.
Dla dodatkowej zabawy nie ma Pac-Mana:
Wkrótce poprawię tę odpowiedź, zrobiłem to bardzo późno w nocy.
źródło
Python 3, 77 bajtów
Oto kolejna odpowiedź przy 89 bajtach, z którą bawiłem się, ale się nie udało :(
A oto oryginał w 85 bajtach:
Wszystkie one biorą pojedynczy ciąg nazw oddzielony spacjami / przecinkami.
źródło
05AB1E,
4744 bajtówWyjaśnienie
Wypróbuj online
źródło
Python 2, 151 bajtów
Ponieważ są już odpowiedzi w Pythonie przy użyciu zestawów i ciągów, postanowiłem ograniczyć się do pracy z listami, które okazały się dość długie i niekonkurencyjne. Ponieważ jednak zastosowane podejście różni się od powszechnie stosowanego, oto ono:
gdzie oczekiwanym wejściem jest lista ciągów.
Podejście polega na brutalnym wykorzystaniu wszystkich możliwych kombinacji (bez uwzględnienia kolejności) 0,1,2,3 i 4 elementów. Odbywa się to przez
który zwraca
i znajdź tę, która oprócz listy danych wejściowych daje pełną listę duchów.
Następnie sprawdzane jest, czy ciąg znaków
'Pac-Man'
jest częścią danych wejściowych, a jeśli tak, zwracana jest cała lista duchów. Jeśli nie, zwracane są tylko te, które nie są częścią danych wejściowych.Zauważ, że lista zawierająca wszystkie nazwy duchów (
o
) jest posortowana alfabetycznie i to samo dotyczy listy zbudowanej jako (sorted(l+x)
). Wynika to z faktu, że w Pythonie['a','b']==['b','a']
jest oceniany jako,False
podczas gdy['a','b']==['a','b']
jest oceniany jakoTrue
.Można zapisać 3 bajty, jeśli dozwolone jest zwrócenie odpowiedzi w postaci listy list (poprzez usunięcie znaku
[0]
na końcu pierwszej listy). Ale ponieważ nie jestem pewien, czy jest to poprawny wynik, liczę je.źródło
Obiekt Pascal,
204200 bajtówDwie pętle, za pomocą pliku binarnego, aby znaleźć, które duchy + pacman są obecne. Pobiera argumenty z wiersza polecenia. Dzięki @manatwork za zaoszczędzenie trochę więcej bajtów!
Nie golfowany:
Stara wersja przy użyciu zestawu,
227209 bajtówDwie pętle, za pomocą zestawu znajdź duchy + pacman. Pobiera argumenty z wiersza polecenia.
Nie golfowany:
źródło
integer
→byte
; usuń deklaracjęg
i użyj jej bezpośrednio,ParamCount
→5
(jak rozumiem to zadanie, i tak nie będzie żadnych zduplikowanych lub nieprawidłowych elementów wejściowych). Przynajmniej w FreePascal literały liczbowe mogą dotykać słów kluczowych, takich jaki:=1to 5do
lub5in s
. Sprawdź, czy też to obsługuje.set
byłoby korzystne: pastebin.com/r2nB5wY3ParamCount
, że zachowanie jest niezdefiniowane dla liczb większych niż rzeczywiste parametry wejściowe (przynajmniej nie ma w tym nic w dokumentacji), nawet jeśli działa.Program PHP, 84 bajty
przykłady:
Funkcja PHP, 90 bajtów
pobiera i zwraca tablicę, użyj pustej tablicy dla pustych danych wejściowych, żadnych innych wartości falsy!
dalsze przemyślenia
in_array(...)
wstrstr(join($argv),'-')
celu wykrycia-
zamiastPac-Man
(-2)ereg('-',join($argv))
zamiast (kolejne -2)register_globals
włączonym<?print_r(
z<?=join(',',
(+2). Możesz dodać;echo""
do połączenia podział liniiźródło
jq, 69 znaków
Dane wejściowe to JSON, dane wyjściowe to JSON, składnia warunkowa to ból.
Przykładowy przebieg:
Test on-line:
źródło
TSQL (sqlserver 2016), 114 bajtów
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
Lotus Notes @ Język Formula,
85847574 znaków-1 znak poprzez odwrócenie przypisania @If
-9 Zmieniono @Contains (i; "-") na @Like (i; "% -%") i usunięto @Trim (niepotrzebne, jeśli wyświetla się za pomocą spacji jako separatora)
-1 poprzez usunięcie nowej linii
Utwórz formularz z dwoma polami: i (Tekst, Edytowalny, Wiele wartości) i o (Tekst, Obliczony, Wiele wartości). Wprowadź następującą formułę we:
W kliencie Notes utwórz nowy dokument za pomocą formularza, wprowadź nazwy w polu i i naciśnij klawisz F9, aby odświeżyć dokument. Odpowiedź wyświetlana w polu o.
Wykorzystuje to fakt, że @Like i @Replace mogą być używane zarówno w łańcuchu, jak i na liście łańcuchów.
źródło
C #
135 bajtów126 bajtów(gdzie i jest tablicą łańcuchów zawierających dane wejściowe)
Po przejrzeniu innych przykładów widzę, że C # jest raczej pełnym językiem :)
źródło
Pyke,
4539383732 bajtówWypróbuj tutaj!
źródło
Partia, 141 bajtów
(Odejmij 6 bajtów,
:~1,-1
jeśli dopuszczalne są początkowe i końcowe białe znaki). Wymaga Pac-Mana w tytule, ale duchy nie rozróżniają wielkości liter.źródło
Japt , 38 bajtów ( niekonkurencyjny )
Pobiera dane wejściowe jako tablicę ciągów, generuje tablicę ciągów
Wypróbuj online
źródło