To wyzwanie składa się z dwóch części. Zwycięzcą zostanie rozwiązanie o najniższej całkowitej liczbie bajtów. Do obu wyzwań należy użyć tego samego języka.
Część 1:
Napisz funkcję lub program, który pobiera zdanie zawierające tylko poprawne słowa jako dane wejściowe i wyświetla listę używanych znaków, liczbę przypadków użycia każdej litery oraz liczbę liter w każdym ze słów w oryginalnym zdaniu. Dane wyjściowe z tego programu muszą być poprawnymi danymi wejściowymi do następnego programu (dokładnie tak, jak są wysyłane)
W dalszej części dodam przykłady i szczegółowe zasady.
Część 2:
Napisz funkcję lub program, który pobiera dane wyjściowe z pierwszego programu jako dane wejściowe i wykorzystuje tę listę angielskich słów i odtwarza zdanie z informacjami z danych wyjściowych. Zdanie nie musi być takie samo jak zdanie oryginalne.
Więcej informacji. zasady i ograniczenia:
Część 1:
- Pierwsze wejście może być w dowolnym odpowiednim formacie, ze znakami cudzysłowu lub bez, jako argument funkcji lub ze STDIN, z nawiasami lub bez itp.
- Zdanie wejściowe nie będzie zawierało znaków interpunkcyjnych ani specjalnych, z wyjątkiem kropki / kropki na końcu. Z wyjątkiem symbolu kropki wszystkie znaki na wejściu będą na liście słów.
- Pierwsza litera zdania będzie pisana wielkimi literami, reszta będzie pisana małymi literami.
- Wyjście z części 2 musi zaczynać się od tej samej wielkiej litery, co oryginalne zdanie (więc konwersja tekstu na małe nie jest zalecana (ale OK).
- Dane wyjściowe mogą być w dowolnym odpowiednim formacie:
- Musi istnieć możliwość skopiowania i wklejenia wyjścia bezpośrednio do następnego programu / funkcji
- Podczas wklejania kopii nie można wprowadzać żadnych zmian, całe wyniki należy skopiować i wkleić jako całość, a nie w częściach.
- Możesz na przykład wypisać histogram wszystkich liter w alfabecie lub tylko tych, które zostały użyte (ogólnie wszystko, co jest konieczne do wypełnienia części 2)
- Nie można wypisać listy znaków, w których powtarzanych jest wiele wystąpień. Na przykład,
The queue
nie może dać wyjście:Teeehquu (3,5)
powinno być coś takiego:Tehqu, (1 3 1 1 2),(3 5)
.
Część 2:
- Program / funkcja musi zaakceptować dane wejściowe dokładnie tak, jak w części 1 (jeden wyjątek, patrz komentarz poniżej dotyczący przyjmowania nazwy pliku jako danych wejściowych.).
- Jeśli do przeanalizowania danych wejściowych konieczne są otaczające nawiasy kwadratowe, znaki cudzysłowu itp., Muszą one stanowić część wyniku z części 1.
- Lista słów znajduje się tutaj.
- Listę słów można zapisać lokalnie jako
w.txt
lub pobrać z adresu URL. Adres URL będzie liczył się tylko jako 5 bajtów, więc nie potrzebujesz skracacza adresów URL. - Jeśli program nie może otworzyć plik bez czytania nazwy jako dane wejściowe ze standardowego wejścia (wierzę, że to
znaczybyło w przypadku Pyth co najmniej), a następnie nazwę pliku można traktować jako oddzielną argumentu wejściowego.
- Listę słów można zapisać lokalnie jako
- Wynikiem musi być tylko zdanie (lista prawidłowych słów), kończące się kropką i opcjonalnym znakiem nowej linii.
- Wynik musi zawierać słowa z taką samą liczbą liter jak oryginalne zdanie w części 1 (w odpowiedniej kolejności)
- Wszystkie litery użyte w pierwotnym zdaniu muszą zostać użyte w nowym wyjściu.
- Zdanie musi zaczynać się od tej samej wielkiej litery, co oryginalne zdanie wejściowe i kończyć się kropką.
Obie części:
- Wykonanie żadnej z części nie powinno zająć więcej niż 2 minuty (losowe wybieranie słów do momentu rozwiązania problemu nie jest akceptowane).
Zgodnie z zasadami wymienionymi powyżej powinna istnieć spora szansa na odtworzenie dokładnie tego samego zdania, jednak nie jest to wymagane.
Przykłady:
W poniższych przykładach pokazano kilka różnych formatów wejściowych i wyjściowych. Wiele innych jest akceptowanych.
Część 1:
Wejście:
Zulus win.
Typ wyjścia 1:
Z i l n s u w
1 1 1 1 1 2 1
5 3
Typ wyjścia 2:
(('Z',1),('i',1),('l',1),('n',1),('s',1),('u',2),('w',1)), (5,2)
Typ wyjścia 3:
'Zilnsuuw',[1,1,1,1,1,2,1],[5,2]
Część 2:
Dane wejściowe: dokładna kopia wyniku z części 1. Dane wyjściowe:
Zulus win.
Zauważ, że inne kombinacje słów są akceptowane, o ile zaczynają się od Z
, a pierwsze słowo ma 5 liter, a drugie 3.
Najkrótszy kod w bajtach wygrywa.
f1
które zostały wklejone, f2
muszą zawierać wszystkie dane określone w wyzwaniu. Żadne dodatkowe dane nie mogą być częścią danych wyjściowych f1
. Żadne dane nie mogą być „przechowywane” w celu f1
udostępniania informacji podczas ich wywoływania f2
. f1
może przyjmować tylko jeden ciąg jako dane wejściowe na połączenie.