Wprowadzenie
Twoim zadaniem jest kradzież tajnych planów od nowego startupu technologicznego Dejavu. Przekradasz się przez tylną ścianę, ale znajdujesz drzwi, które do otwarcia wymagają szpilki. Rozpoznajesz markę zamka i wiesz, że wymaga on 5-cyfrowego kodu PIN, używając wszystkich cyfr od 0 do 4. Po każdej wprowadzonej cyfrze zamek sprawdza ostatnie 5 wprowadzonych cyfr i otwiera się, jeśli kod jest poprawny. Musisz szybko ominąć tę blokadę.
Superpermutacje w pigułce
Permutacja to wszystkie możliwe kombinacje określonego zestawu cyfr. na przykład wszystkie permutacje cyfr 0, 1, 2 to:
012, 021, 102, 120, 201 i 210.
Jeśli połączymy wszystkie te permutacje razem, otrzymamy superpermutację:
012021102120201210
ta superpermutacja zawiera wszystkie permutacje 0, 1, 2, ale możliwe jest, aby jedna była krótsza od tej. Pominę tutaj trochę, ale najkrótsza superpermutacja tych cyfr to:
012010210
Dla naszych celów i celów jest to zasadniczo najkrótszy ciąg cyfr, który zawiera wszystkie możliwe kombinacje tych cyfr, tj. Superpermutację.
Zadanie
Twoje zadanie jest nieco trudniejsze niż przykład superpermutacji, jak pokazano powyżej, ponieważ masz jeszcze dwie cyfry do zmartwienia. - Jeśli nie czytałeś o superpermutacjach lub mój powyższy przykład był nieco niejasny, gorąco polecam przeczytanie tego wspaniałego artykułu Patricka Honnera na ten temat (wyzwanie to było dość mocno zainspirowane jego artykułem, więc chwała mu): https://www.quantamagazine.org/unscrambling-the-hidden-secrets-of-superpermutations-20190116/ . Twoim celem jest napisanie możliwie najkrótszego programu, który generuje superpermutację cyfr od 0 do 4.
Punktacja
Twój program nie pobiera żadnych danych wejściowych i generuje superpermutację cyfr od 0 do 4. Wynikowa superpermutacja musi zostać wydrukowana na konsoli lub widocznie wyświetlona użytkownikowi w zakresie podanym przez wybrany język. To nie musi być najkrótsza możliwa permutacja, musi to być tylko prawidłowa superpermutacja. Z tego powodu celem jest napisanie najkrótszego programu z najkrótszą superpermutacją, więc powinieneś obliczyć swój wynik w następujący sposób:
rozmiar pliku (bajty) * wygenerowana długość superpermutacji (cyfry)
na przykład, jeśli miałbym program 40-bajtowy, a moja superpermutacja ma długość 153 cyfr, mój wynik wyniesie:
40 * 153 = 6120
jak zawsze, celem jest uzyskanie jak najniższego wyniku.
Szablon
Oto jak powinieneś opublikować swoją odpowiedź:
Język | Wynik
link do kodu w środowisku pracy (jeśli to możliwe)
code snippet
objaśnienie kodu itp.
Finały
To jedno z moich pierwszych pytań na tej stronie. Więc proszę powiedz mi, czy coś mi brakuje, lub część mojego wyzwania jest niejasna. Dziękuję i baw się dobrze grając w golfa!
źródło
Odpowiedzi:
05AB1E , wynik = 1673 (7 bajtów · 239)
Wypróbuj online!
Jak to działa
Pyth , wynik = 1944 (9 bajtów · 216)
Wypróbuj online!
Jak to działa
źródło
vy3yJ
zapisuje bajtm+d
->+R
zapisuje bajt.Brachylog , wynik = 2907 (19 bajtów × 153)
Zbyt powolny, aby cokolwiek zobaczyć, ale po zmianie
4
przez2
można go przetestować: Spróbuj online!Znajduje najkrótszą superpermutację jako taką:
źródło
JavaScript (ES6), 26975 (325 * 83 bajtów)
Dzięki temu systemowi punktacji nie ma miejsca na coś pomiędzy „kodowaniem optymalnym supermutacji na twardo” a „po prostu użyciem krótkiego wbudowanego do łączenia wszystkich permutacji” , przynajmniej w wersjach innych niż esolangi.
To i tak próba.
Wypróbuj online!
Generuje ciąg 325 bajtów:
źródło
26975/153-153>23
n
sufiksu, któryconsole.log
wyświetla)Python 2 , Wynik:
24327151471285212628 (154 * 82 bajtów)Wypróbuj online!
Również:
Python 2 , 12628 (154 * 82 bajtów)
Wypróbuj online!
źródło
05AB1E , wynik:
53552160 (216 * 10 bajtów )Port odpowiedzi Pyth @AndersKaseorg , więc upewnij się, że go głosujesz!
Wypróbuj online.
Wyjaśnienie:
źródło
Oktawa , 27 x 442 = 11934
Wypróbuj online!
Okazuje się, że naiwnie generuje wszystko permutacji, a następnie obcinanie do najkrótszego podłańcucha, który wciąż jest prawidłową superpermutacją, jest krótsze niż generowanie najkrótszej superpermutacji. Niestety, tym razem wynik nie jest palindromem.
Oktawa , 97 x 153 = 14841
Wypróbuj online!
Wpis zaktualizowano o kilka rzeczy
a++
nie jest zaimplementowany dla liczb symbolicznych.contains()
nie jest zaimplementowany w Octave. Zamieniono naany(regexp())
.a
wpisałem bardzo zbliżone do superpermutacji o długości 153. Umożliwia to weryfikację rozwiązania.źródło
CJam (6 * 240 = 1440)
Demo online , sprawdzanie poprawności (wyświetla indeks, przy którym
0..4
można znaleźć każdą permutację ; musi spłaszczyć dane wyjściowe, ponieważ oryginalny program podaje odpowiednie wyjście na standardowe wyjście, ale to, co umieszcza na stosie, nie jest bezpośrednio użyteczne).Podejście skradzione z Sanchises , chociaż kolejność permutacji CJam jest inna, co daje inne podciągi.
CJam (22 * 207 = 4554)
Demo online , sprawdzanie poprawności .
Sekcja
Wykorzystuje prostą konstrukcję rekurencyjną.
źródło
Galaretka , 3000 (600 * 5 bajtów)
Wypróbuj online!
źródło
Węgiel drzewny , 29 bajtów, długość wyjściowa 153, wynik 4437
Wypróbuj online!Link jest do pełnej wersji kodu. Objaśnienie: Podobnie jak @TFeld, po prostu drukuję połowę superpermutacji i odbijam ją. Obliczyłem superpermutację za pomocą następującego kodu:
To przekłada się na 45-bajtowy program w Charcoal, więc zdobyłby 6885.
źródło
MATL , 16 x 442 = 7072
Wypróbuj online!
Port MATL mojej odpowiedzi Octave. -442 dzięki Luisowi Mendo
źródło
Japt-P, 2376 (11 x 216)
Spróbuj!
-1 bajt dzięki @ Shaggy!
Port Anders Kaseorg znajduje Pyth odpowiedź .
źródło
q<space>
;)Perl 6 , 7191 (153 * 47 bajtów)
Wypróbuj online!
Znajduje pierwszą liczbę, która zawiera wszystkie permutacje cyfr od 0 do 4. Wykonanie tej operacji zajmie dużo czasu, ale możesz ją przetestować za pomocą dwóch pierwszych permutacji
0
i0,1
źródło
Wolfram Language (Mathematica) , 153 * 95 bajtów, 14535
Wypróbuj online!
źródło