Cyclic Polyglot Challenge (Cops)

11

Cyclic Polyglot Challenge

Ceci est le fil des flics. Vous pouvez trouver le fil des voleurs ici .

Polyglotte cyclique

Un polyglotte cyclique à N éléments est un programme complet qui peut être exécuté dans N langues différentes. Dans chaque langue, lorsque le programme est exécuté sans entrée (éventuellement sous réserve de cette exception ), il doit afficher le nom d'une langue dans STDOUT. Plus précisément, si le programme est exécuté dans la Kème langue, il doit afficher le nom de la (K + 1) ème langue. Si le programme est exécuté dans la Nième langue (c'est-à-dire la dernière langue dans un cycle à N éléments), il doit afficher le nom de la première langue.

Un exemple pourrait être utile.

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

L'exécution de ce programme avec Lua imprime la chaîne "Ruby". L'exécution de ce programme dans Ruby imprime la chaîne "Befunge". L'exécution de ce programme dans Befunge imprime la chaîne "Lua", terminant le cycle. Ce programme constitue un cycle de 3 composé de Lua, Ruby et Befunge.

La même langue ne peut pas apparaître deux fois dans un cycle, et différentes versions de la même langue (telles que Python 2 et Python 3) ne peuvent pas apparaître dans le même cycle.

Flics

Votre défi est d'écrire un polyglotte N-cyclique, où N est au moins 2. Ensuite, vous devez ajouter, remplacer et supprimer un certain nombre de caractères dans le programme pour produire un polyglotte M-cyclique, où M est strictement supérieur à N Vous devez ensuite publier le polyglotte N-cyclique le plus court (et les langues dans lesquelles il s'exécute), ainsi que le nombre de caractères que vous avez modifiés pour produire le polyglotte le plus long. Votre score est N, le nombre de langues dans votre cycle plus court.

Les voleurs essaieront d'identifier votre cycle plus long. Si, après sept jours, personne n'a réussi à résoudre votre solution, vous devez modifier votre réponse en déclarant qu'elle est sûre. Vous devez également publier votre polyglotte M-cyclique plus long à ce moment.

Voleurs

Étant donné le polyglotte N-cyclique d'un policier et le nombre de caractères qu'il a ajoutés pour produire un cycle polyglotte plus grand, votre objectif est de produire ce cycle plus grand. Si vous pouvez produire un cycle plus long en ajoutant, supprimant ou remplaçant autant de caractères que le flic ou moins de caractères , vous avez craqué le polyglotte du flic. Votre score est la longueur du nouveau cycle que vous avez créé. Votre nouveau polyglotte n'a pas besoin d'être identique ou même similaire au polyglotte secret du flic; il doit seulement être plus grand que celui existant.

Votre solution peut également être fissurée. Si un autre voleur arrive et produit un cycle strictement plus long que le vôtre, à partir du même polyglotte du flic, il vous a volé vos points.

Langages de programmation valides

Comme ce défi implique indirectement de deviner les langages de programmation utilisés par d'autres participants, la définition d'un langage de programmation aux fins de ce défi sera un peu plus stricte que la définition habituelle. Un langage de programmation utilisé dans ce défi doit satisfaire à toutes les conditions suivantes.

Notes finales

  • Le code que vous écrivez doit être un programme autonome dans toutes les langues dans lesquelles il est destiné à s'exécuter. Les fonctions ou les extraits de code ne sont pas autorisés.
  • Votre programme ne recevra aucune contribution via STDIN. De même, votre programme ne doit rien imprimer sur STDERR.
  • Le score d'un flic est le nombre de langues dans le cycle du polyglotte qu'ils ont posté. Le policier doit publier les langues dans lesquelles le polyglotte publié s'exécute correctement, ainsi que le nombre de caractères qu'ils ont ajoutés pour produire un polyglotte plus long. Ils ne sont pas responsables de la publication des langues pendant les périodes de polyglotte cachées plus longues jusqu'à ce que leur réponse soit sûre.
  • Le score d'un voleur est le nombre de langues dans lesquelles le polyglotte modifié s'exécute. Comme pour le flic, le voleur doit publier la liste des langues dans lesquelles le polyglotte s'exécute correctement.
  • Le nombre de caractères modifiés doit être calculé en distance Levenshtein.
Silvio Mayolo
la source
3
"La langue doit avoir un interprète ou un compilateur disponible gratuitement. Désolé, les fans de Mathematica, mais les voleurs doivent pouvoir vérifier votre solution." Quel est le problème avec Wolfram Open Cloud? sandbox.open.wolframcloud.com
Scott Milner
Je n'étais pas au courant d'une telle chose, car j'ai une copie locale de Mathematica sur mon ordinateur. Commentaire supprimé.
Silvio Mayolo
Est-ce correct pour N = 2 et M = 3?
mdahmoune
Oui c'est bon. Votre score sera alors simplement de 2, mais c'est parfaitement acceptable.
Silvio Mayolo

Réponses:

1

C (gcc) , 126 octets

M=N+1

Levenshtein(polyglot(M),polyglot(N))est de 36 octets

#include<stdio.h>
#define print(a) main(){int z[1];if(sizeof(0,z)==4)printf("C(gcc)");else printf("Perl5");}
print("C++(gcc)")

Essayez-le en ligne!

mdahmoune
la source
Cracked (avec Levenshtein de 10)
Stephen