Zadanie
W tym wyzwaniu Twoim zadaniem jest napisanie kodu, który generuje losowo jeden z wybranych anagramów z równomiernym rozkładem, ale nigdy nie powinien wypisywać się sam.
Opracowanie
Bez danych wejściowych program powinien wypisać dowolny z anagramów kodu źródłowego. Twój program nigdy nie powinien wyświetlać własnego źródła takim, jakim jest, tzn. Nigdy nie powinno być quine.
Wejście
Twój program nie może przyjmować żadnych danych wejściowych. Jeśli jednak Twój język wymaga wprowadzania danych jako konieczności, możesz założyć, że będzie on pisany małymi literami a
. Nie wolno jednak używać danych wejściowych w jakikolwiek sposób.
Wynik
Twój program może generować dane w dowolny sposób, z wyjątkiem zapisu w zmiennej. Zapis do pliku, konsoli, ekranu itp. Jest dozwolony. Funkcja return
jest również dozwolona.
Dodatkowe zasady
Kod źródłowy twojego programu musi mieć co najmniej 3 znaki (nie 3 bajty).
Kod źródłowy twojego programu musi mieć co najmniej 3 możliwe anagramy (z wyłączeniem siebie). Na przykład
aab
nie liczy się jako prawidłowe zgłoszenie, ponieważaab
ma tylko dwa anagramy inne niżaab
(baa
iaba
).Twój program nie może generować błędów.
Twój program powinien wypisywać dokładnie swoje anagramy .
Przykład
Załóżmy, że kod źródłowy twojego programu to abc
. Powinien losowo generować dowolne z poniższych (z równomiernym rozkładem):
acb
bca
bac
cba
cab
I nigdy nie powinien generować abc
.
Zwycięskie kryterium
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach! W przypadku remisu wcześniej opublikowane rozwiązanie wygrywa!
źródło
Odpowiedzi:
Galaretka , 15 bajtów
Po prostu na początek; jest to prawie na pewno do pokonania. Jest to w zasadzie połączenie uniwersalnego konstruktora quine i funkcji „wybierz losową permutację inną niż wejściowa”; ten drugi może być ulepszony, pierwszy prawie na pewno.
Wyjaśnienie
Uniwersalny konstruktor quine
Może to być postrzegane jako quine, jeśli jest uruchamiane samo. Jest to również właściwy quine według większości znanych mi definicji; nie odczytuje własnego źródła (raczej zawiera literał, który jest „ewaluowany” i otrzymuje kopię siebie jako argumentu), może przenosić ładunek (jak pokazano tutaj!), a
v
poza nim ciąg dosłowność jest zakodowana przezv
wnętrze.Wybierz losowy anagram
To jest naprawdę nieskuteczne na tak długim ciągu, więc nie byłem w stanie przetestować programu jako całości, ale przetestowałem go na krótszych ciągach i wydaje się, że działa poprawnie.
źródło
Q
. Jednak myślę, że można zmienić to „wszystkie permutacje” metody z pomocą „Shuffle” jeden z zastosowaniemẊ⁼¿
, oszczędzając bajt jednocześnie pozwalając go do pracy na TIO.CJam , 17 bajtów
To się wkrótce nie skończy, więc tym razem nie ma łącza do TIO.
Na pocieszenie oto 20-bajtowe rozwiązanie, które kończy się bardzo szybko:
Wypróbuj online!
Wyjaśnienie
Zamiast tego 20 bajtowe rozwiązanie tasuje kod źródłowy, aż różni się od oryginału.
źródło
Python 2, 117 bajtów
Nieoczekiwanie to rozwiązanie jest krótsze niż się spodziewałem. Tasuje kod źródłowy, aż różni się od oryginału.
-2 bajty, dzięki @ mbomb007-3
bajty, dzięki @Wondercricket
Wypróbuj online
Jest to jedna z podstawowych quin w Pythonie, którą zmodyfikowałem
Generowanie anagramu odbywa się za pomocą losowego modułu
Gdzie R zawiera kod źródłowy
Potrzeba było potrójnych cudzysłowów, ponieważ byłem zmuszony utrzymywać separatory linii w kodzie. Anagramy i tak będą miały 3 linie.
źródło
exec s
zamiastexec(s)
str
jest niezmienne, można zaoszczędzić bajtów wykonującL=R
i korzystaniasample
naL
zamiast używaćshuffle
nalist
. repl.it . Pomysł pochodzi z tego StackoverflowJava 7,
376428426428 bajtów+52 i +2 bajty dla dwóch poprawek błędów. Nie sprawdzałem (poprawnie), czy Losowo generowany Ciąg był równy oryginalnemu kodowi źródłowemu. Szanse na to są astronomiczne, biorąc pod uwagę liczbę zaangażowanych postaci, ale muszę to zweryfikować niezależnie od zgodności z regułami wyzwań.
Mój pierwszy Quine odpowiedź w Javie ..
Spróbuj tutaj.
Możesz usunąć oba
Collections.shuffle(l)
i dodać!
przed nimi,x.equals(s)
aby sprawdzić, czy dane wyjściowe rzeczywiście odpowiadają programowi:Wypróbuj tutaj.
Wyjaśnienie:
String s
Zawiera kod źródłowy niesformatowany.%s
służy do wprowadzania tego ciągu do siebie za pomocąs.format(...)
.%c
,%1$c
i34
służą do formatowania podwójnych cudzysłowów.s.format(s,34,s)
łączy to wszystko razemTa część kodu odpowiada za generowanie losowego anagramu:
źródło
05AB1E , 22 bajty
To tworzy listę, która jest zbyt duża dla TIO, więc link używa mniejszego ciągu, ale pomysł jest taki sam.
Wypróbuj online!
źródło
JavaScript (ES6), 128 bajtów
Używa sort () zwracającego losowo -1,0 lub 1 do losowego przetwarzania danych wyjściowych.
źródło
Bash,
2796 bajtówfold
dzieli kod na linie,shuf
tasuje linie itr
składa kod z powrotemnaprawiono problem z wyjściem samego siebie, teraz nigdy się nie wyprowadza
Wypróbuj online!
źródło
$0
wygląda na naruszenie „Twój program nie może przyjmować żadnych danych”.