Zadanie
W tym wyzwaniu Twoim zadaniem jest napisanie trzech programów, które tworzą rodzaj systemu podobnego do quine. Nazwijmy programy A
, B
a C
. Jeżeli jeden z programów podaje jako źródło źródło innego programu, wysyła źródło trzeciego programu. Na przykład, jeśli A
podano B
jako dane wejściowe, generuje dane wyjściowe C
. Jeśli programy zostały podane jako własne źródło wejścia, są one zobowiązane do wyjścia trzy struny "three"
, "mutual"
i "quines"
(bez cudzysłowów). We wszystkich przypadkach mogą wyświetlać jeden dodatkowy znak nowej linii. W przypadku innych danych wejściowych programy mogą robić wszystko, w tym awarię.
Przykład
Na przykład załóżmy, że kody źródłowe A
, B
i C
to aSdf
, ghJk
i zxcV
. Następnie programy powinny zachowywać się w następujący sposób.
Source Input Output
--------------------
aSdf aSdf three
aSdf ghJk zxcV
aSdf zxcV ghJk
ghJk aSdf zxcV
ghJk ghJk mutual
ghJk zxcV aSdf
zxcV aSdf ghJk
zxcV ghJk aSdf
zxcV zxcV quines
Zasady i punktacja
Rozwiązania A
, B
i C
mogą być zarówno funkcje lub pełne programy, ale muszą one być całkowicie niezależny: nie wspólny kod jest dozwolony.
Obowiązują standardowe luki i reguły quine , więc programy nie mogą uzyskać dostępu do własnych kodów źródłowych w żaden sposób.
Twój wynik to łączna liczba bajtów A
, B
a im C
niższy wynik, tym lepiej.
public static void main
gdzieś ma swoją część). A może po prostu nie możesz napisać funkcji wywoływanej przez wszystkie trzy?Odpowiedzi:
CJam,
16514711410899 bajtówDzięki @ MartinBüttner za sugestię, która pomogła zaoszczędzić 48 bajtów!
Wypróbuj online w interpretatorze CJam .
Weryfikacja
Pomysł
Zbiór {0, 1, 2, 3} to grupa pod operacją ^ (binarne wyłączne OR), w której każdy element jest własną odwrotnością.
Jeśli wszystkie trzy programy są identyczne, z wyjątkiem pierwszego znaku (element {0, 1, 2, 3} ), możemy je łatwo odróżnić i wydrukować:
Zaczynamy od XOR cyfry na początku kodu źródłowego i wejścia.
Jeśli wynik wynosi 0 , źródło i wejście są zgodne.
Tak więc drukujemy jedno z trzech słów wybranych przez tę wspólną cyfrę.
Jeśli wynikiem nie jest 0 , to element {1, 2, 3} nie znajduje się ani w źródle, ani w danych wejściowych.
W ten sposób drukujemy go, a następnie resztę danych wejściowych.
Jak to działa
źródło