Cyclic Polyglot Challenge (Cops)


11

Cykliczne wyzwanie Polyglot

To jest wątek gliniarzy. Można znaleźć złodzieje wątku tutaj .

Cykliczny Polyglot

Cykliczny poliglot N-elementowy to kompletny program, który można uruchomić w N różnych językach. W każdym języku, gdy program jest uruchamiany bez wprowadzania danych (możliwe, że podlega temu wyjątkowi ), powinien wypisać nazwę języka na STDOUT. W szczególności, jeśli program działa w języku Kth, powinien wypisać nazwę (K + 1) tego języka. Jeśli program działa w N-tym języku (to znaczy w języku końcowym w cyklu N-elementowym), powinien wypisać nazwę pierwszego języka.

Przykład może być przydatny.

a = [[ v = 7, puts('Befunge') ]]
__END__
= print("Ruby")
-->*+:292*++,,@
--3    9
--7    *
--^,:-5<

Uruchomienie tego programu z Lua wypisuje ciąg „Ruby”. Uruchomienie tego programu w Ruby wypisuje ciąg „Befunge”. Uruchomienie tego programu w Befunge drukuje ciąg „Lua”, kończąc cykl. Ten program składa się z 3 cykli składających się z Lua, Ruby i Befunge.

Ten sam język nie może pojawić się dwa razy w cyklu, a różne wersje tego samego języka (takie jak Python 2 i Python 3) nie mogą pojawiać się w tym samym cyklu.

Gliny

Twoim wyzwaniem jest napisanie N-cyklicznego poliglota, w którym N wynosi co najmniej 2. Następnie musisz dodać, zastąpić i usunąć pewną liczbę znaków w programie, aby utworzyć M-cykliczny poliglot, w którym M jest ściśle większy niż N Następnie powinieneś opublikować krótszy, N-cykliczny poliglot (i języki, w których się on uruchamia), a także liczbę znaków, które zmieniłeś, aby utworzyć dłuższy poliglot. Twój wynik to N, liczba języków w twoim krótszym cyklu.

Rabusie spróbują zidentyfikować twój dłuższy cykl. Jeśli po siedmiu dniach nikt nie złamie twojego rozwiązania, powinieneś edytować swoją odpowiedź, stwierdzając, że jest on bezpieczny. W tym momencie powinieneś także opublikować swój dłuższy M-cykliczny poliglot.

Rabusie

Biorąc pod uwagę N-cykliczny poliglot gliny i liczbę znaków, które dodali, aby wytworzyć większy cykl poligloty, twoim celem jest wytworzenie tego większego cyklu. Jeśli możesz wydłużyć cykl, dodając, usuwając lub zastępując tyle znaków, co gliniarz, albo mniej znaków , złamałeś poliglotę gliny. Twój wynik to długość nowego cyklu, który utworzyłeś. Twój nowy poliglot nie musi być taki sam, ani nawet podobny do tajnego poliglota gliny; musi być tylko większy niż dotychczasowy.

Twoje rozwiązanie może również zostać złamane. Jeśli pojawi się inny złodziej i wyprodukuje cykl dłuższy niż twój, zaczynając od poligloty tego samego gliniarza, ukradli ci punkty.

Prawidłowe języki programowania

Ponieważ wyzwanie to pośrednio polega na zgadywaniu języków programowania używanych przez innych uczestników, definicja języka programowania na potrzeby tego wyzwania będzie nieco bardziej rygorystyczna niż zwykła definicja. Język programowania używany w tym wyzwaniu musi spełniać wszystkie następujące warunki.

Uwagi końcowe

  • Kod, który napiszesz, powinien być samodzielnym programem w każdym języku, w którym ma być uruchomiony. Funkcje lub fragmenty kodu nie są dozwolone.
  • Twój program nie otrzyma żadnych danych wejściowych przez STDIN. Podobnie twój program nie powinien drukować nic do STDERR.
  • Ocena gliniarza to liczba języków w cyklu opublikowanego przez nich poliglota. Policjant powinien opublikować języki, w których opublikowany poliglot działa poprawnie, a także liczbę znaków, które dodali, aby wyprodukować dłuższy poliglot. Są nie ponosi odpowiedzialności za zamieszczenie języki dłuższe przebiegi poliglota, ukryte, aż ich odpowiedź jest bezpieczny.
  • Ocena rabusia to liczba języków, w których działa zmodyfikowany poliglot. Podobnie jak policjant, rabuś powinien opublikować listę języków, w których poliglot działa poprawnie.
  • Liczbę zmienionych znaków należy obliczyć w odległości Levenshteina.

3
„Język musi mieć swobodnie dostępnego tłumacza lub kompilatora. Przykro mi, fani Mathematiki, ale złodzieje muszą być w stanie zweryfikować twoje rozwiązanie”. Co jest nie tak z Wolfram Open Cloud? sandbox.open.wolframcloud.com
Scott Milner

Nie wiedziałem o takich rzeczach, ponieważ mam lokalną kopię Mathematiki na moim komputerze. Komentarz usunięty.
Silvio Mayolo,

Czy to jest w porządku dla N = 2 i M = 3?
mdahmoune,

Tak, w porządku. Twój wynik będzie wtedy wynosił 2, ale jest to całkowicie do przyjęcia.
Silvio Mayolo

Odpowiedzi:


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.