Twoim zadaniem jest znaleźć dwie brakujące postacie w tytule odcinka Columbo.
Wejście
Jeden z 69 tytułów odcinka Columbo (wymienionych poniżej), z dokładnie dwiema postaciami *
.
Przykład :
"Ran*om for a *ead Man"
Wynik
Możesz zwrócić pełny tytuł odcinka lub tylko dwie brakujące znaki w dowolnym rozsądnym formacie, pod warunkiem, że kolejność znaków jest jednoznaczna.
Niektóre prawidłowe dane wyjściowe :
"Ransom for a Dead Man"
"sD"
["s", "D"]
Odcinki
Kliknij ten link, aby uzyskać niesformatowaną listę.
Prescription: Murder Swan Song Murder, Smoke and Shadows
Ransom for a Dead Man A Friend in Deed Sex and the Married Detective
Murder by the Book An Exercise in Fatality Grand Deceptions
Death Lends a Hand Negative Reaction Murder: A Self Portrait
Dead Weight By Dawn's Early Light Columbo Cries Wolf
Suitable for Framing Troubled Waters Agenda for Murder
Lady in Waiting Playback Rest in Peace, Mrs. Columbo
Short Fuse A Deadly State of Mind Uneasy Lies the Crown
Blueprint for Murder Forgotten Lady Murder in Malibu
Etude in Black A Case of Immunity Columbo Goes to College
The Greenhouse Jungle Identity Crisis Caution: Murder Can Be Hazardous to Your Health
The Most Crucial Game A Matter of Honor Columbo and the Murder of a Rock Star
Dagger of the Mind Now You See Him... Death Hits the Jackpot
Requiem for a Falling Star Last Salute to the Commodore No Time to Die
A Stitch in Crime Fade in to Murder A Bird in the Hand...
The Most Dangerous Match Old Fashioned Murder It's All in the Game
Double Shock The Bye-Bye Sky High IQ Murder Case Butterfly in Shades of Grey
Lovely But Lethal Try and Catch Me Undercover
Any Old Port in a Storm Murder Under Glass Strange Bedfellows
Candidate for Crime Make Me a Perfect Murder A Trace of Murder
Double Exposure How to Dial a Murder Ashes to Ashes
Publish or Perish The Conspirators Murder With Too Many Notes
Mind Over Mayhem Columbo Goes to the Guillotine Columbo Likes the Nightlife
Wyjaśnienia i zasady
- Przechowywanie listy odcinków (lub przechowywanie wystarczającej ilości informacji, aby odgadnąć brakujące postacie) jest częścią wyzwania. Innymi słowy, nie dostajesz listy „za darmo”. Jeśli używasz plików zewnętrznych, ich długości należy dodać do liczby bajtów.
- Twój program / funkcja musi obsługiwać tytuły dokładnie takie, jak wymienione powyżej:
- Wielkość liter każdej litery musi być dokładnie taka sama.
- Interpunkcja również musi dokładnie pasować.
- Itp...
- Wszystkie znaki w tytule mogą być zastąpione
*
, a nie tylko litery. Mogą być przyległe. - Zamiast tego możesz spodziewać się innej „pustej” postaci
*
, o ile nie pojawi się ona w żadnym tytule. (Jeśli tak, proszę o tym wspomnieć w swojej odpowiedzi).
Ach, jest tylko jedna rzecz. Prawie zapomniałam...
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
Zestaw testowy
Oto link do wszystkich 14252 możliwych danych wejściowych.
code-golf
string
error-correction
Arnauld
źródło
źródło
error-correction
tag, który moim zdaniem jest tutaj odpowiedni.A
i drugiea
na liście unikatowych ciągów, które istnieją.',-.:ABCDEFGHIJLMNOPQRSTUWYabcdefghiklmnopqrstuvwxyz
(i<space>
oczywiście).Odpowiedzi:
Stax , 294 bajty
Uruchom i debuguj
Oto podejście:
Aby zweryfikować, czy nie zostanie wygenerowany niepoprawny wynik, użyłem programu C # do weryfikacji danych wyjściowych dla wszystkich możliwych danych wejściowych. Nie jest bardzo przenośny i działa dość długo. Do tej pory pozwalałem wyszukiwać mianowniki kandydatów przez ponad 24 godziny, więc nie jest to odpowiednie dla TIO. Używam go w LINQPad.
Kolejna uwaga na temat przechowywania wartości skrótu osadzonych w programie. Skróty są sortowane przed osadzeniem w tablicy. Korzystam z funkcji stax zwanej „zatłoczonymi tablicami liczb całkowitych”, która jest sposobem skutecznego reprezentowania tablic liczb całkowitych. Ta reprezentacja jest w stanie przechowywać różnice między elementami, jeśli jest to bardziej wydajne, więc wstępne sortowanie wartości oszczędza niektóre bajty.
Oto rozpakowana reprezentacja z minimalnymi komentarzami.
źródło
Python 2, 862 bajtów
Oto skrypt bash, który składa ten program i demonstruje jego wykonanie.
Wyjaśnienie
Jest to dość proste rozwiązanie: szukałem najbardziej kompresowalnej permutacji tytułów połączonych spacjami. Ten program po prostu zastępuje
*
dane wejściowe przez.
i szuka dopasowania tego wyrażenia regularnego w ciągu.Ciąg dekompresuje się do:
źródło
JavaScript (ES6), 634 bajty
To przesłanie miało pozostać ukryte, dopóki nie zostanie opublikowana odpowiedź mniejsza niż 500 bajtów. Co zostało już zrobione .
Wypróbuj online! (jeden losowy przypadek testowy na odcinek)
W jaki sposób?
Definiujemy chr , listę znaków używanych w tytułach odcinków.
Definiujemy skrót , ciąg zawierający skróty wszystkich nieużywanych tytułów. Każdy skrót składa się z 6-cyfrowej liczby w bazie 36.
Definiujemy H () , prostą funkcję skrótu.
Daje to log 2 (36 6 ) ~ = 31 bitów entropii. Po zaokrągleniu do 4 bajtów i dodaniu rozmiaru chr , całkowity rozmiar danych danych wynosi: 4 * 69 + 53 = 329 bajtów .
Główna funkcja brzmi teraz:
(Zostało to gruntownie przetestowane pod kątem wszystkich możliwych danych wejściowych .)
źródło
Język Wolfram
13831226 bajtówEditDistance znajduje odległość Levenshteina między łańcuchami.
źródło
Galaretka , 752 bajtów
Wypróbuj online!
Służyło to do kompresji listy.
Zakłada się, że nie ma filmu, który miałby dokładnie 2 znaki inne niż inny film, co zostało udowodnione tutaj (wynik
1
).źródło
Rubin ,
11851165 bajtówWypróbuj online!
Lambda przyjmuje łańcuch i zwraca łańcuch. Wykorzystuje pewne rozwinięcie łańcucha domowego. Prawdopodobnie jest miejsce na grę w golfa zarówno w sposobie wyboru tytułu z rozszerzonej listy, jak i w tym, jak dokładnie lista jest skompresowana.
-20 bajtów: Zmień kolejność listy (ręcznie), aby zwiększyć powtarzanie podciągów
Nie golfowany:
Oto fragment chciwego algorytmu wyboru podstawienia, którego użyłem do wygenerowania tego kodu. Pominąłem niektóre szczegóły, więc nie będzie działać tak, jak jest, ale powinno dać sedno.
źródło
Java 10,
142614051381131513131298 bajtów-66 bajtów dzięki @ OlivierGrégoire przez zakodowanie ciągu.
Wyjaśnienie:
Wypróbuj online.
Oto kod enkodera.
źródło
java.nio.Files.readAllBytes(java.nio.Paths.get("a"))
. W ten sposób nie jest wymagany Bas64.796
i1397
zdeterminowany?d.deflate(b)
orazi.inflate(b)
przezSystem.out.println(d.deflate(b))
iSystem.out.println(i.inflate(b))
. Jeśli grasz w golfa w tekście, powinieneś zaktualizować rozmiary tablic.var bytes = new byte[9999]
i wyślij liczbę. Drugie uruchomienie: zastąp9999
wartość wyjściową i usuńSystem.out.println()
. Jeśli tego nie zrobisz, Twój String najprawdopodobniej będzie miał nieprawidłowy rozmiar i wyjście zostanie popsute, prawdopodobnie tak się stało z 1290 golfem. Interfejs API ma współpracować z buforami, ale w naszym przypadku chcemy grać w golfa, więc musimy wstępnie obliczyć te wartości. Jeśli tego nie zrobimy, tracimy bajty.Python 2 , 621 bajtów
Wypróbuj online!
Uwaga: Dang! Właśnie zobaczyłem, że jest to w zasadzie to samo, co rozwiązanie Arnauds ...
Jeszcze nie w pełni golfa ...
Podstawowa idea tutaj: utwórz listę skrótów tytułów, modulo 36 ^ 6 (wymaga to 6 bajtów na tytuł; plus trochę narzutu).
Teraz, biorąc pod uwagę tytuł z dwoma brakującymi znakami, brutalna siła zastępuje dwie możliwe litery i sprawdza, czy hash wynikowego łańcucha znajduje się na liście.
Wstępnie wysyłając „B” do tytułów i używając
hash
funkcji Pythona , otrzymujemy listę, która nigdy nie ma kolizji w tym zadaniu; więc zawsze będzie jedna i tylko jedna możliwa odpowiedź.źródło