Cyclic Polyglot Challenge (Policías)

11

Desafío políglota cíclico

Este es el hilo policial. Puedes encontrar el hilo de los ladrones aquí .

Políglota cíclica

Un políglota cíclico de elemento N es un programa completo que se puede ejecutar en N idiomas diferentes. En cada idioma, cuando el programa se ejecuta sin entrada (posiblemente sujeto a esta excepción ), debe imprimir el nombre de un idioma en STDOUT. Específicamente, si el programa se ejecuta en el idioma K, debe imprimir el nombre del idioma (K + 1). Si el programa se ejecuta en el enésimo idioma (es decir, el idioma final en un ciclo de N elementos), debe imprimir el nombre del primer idioma.

Un ejemplo puede ser útil.

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

Ejecutar este programa con Lua imprime la cadena "Ruby". Ejecutar este programa en Ruby imprime la cadena "Befunge". Ejecutar este programa en Befunge imprime la cadena "Lua", completando el ciclo. Este programa constituye un ciclo de 3 que consta de Lua, Ruby y Befunge.

El mismo idioma no puede aparecer dos veces en un ciclo, y las diferentes versiones del mismo idioma (como Python 2 y Python 3) no pueden aparecer en el mismo ciclo entre sí.

Policías

Su desafío es escribir un políglota N-cíclico, donde N es al menos 2. Luego, debe agregar, reemplazar y eliminar cierto número de caracteres al programa para producir un políglota M-cíclico, donde M es estrictamente mayor que N Luego, debe publicar el políglota N-cíclico más corto (y los idiomas en los que se ejecuta), así como la cantidad de caracteres que cambió para producir el políglota más largo. Su puntaje es N, la cantidad de idiomas en su ciclo más corto.

Los ladrones intentarán identificar tu ciclo más largo. Si, después de siete días, nadie ha descifrado con éxito su solución, debe editar su respuesta declarando que es segura. También debe publicar su políglota M-cíclico más largo en este momento.

Ladrones

Dado el políglota N-cíclico de un policía y la cantidad de caracteres que agregaron para producir un ciclo políglota más grande, su objetivo es producir ese ciclo más grande. Si puede producir un ciclo más largo agregando, eliminando o reemplazando tantos caracteres como lo hizo el policía o menos caracteres , habrá descifrado el políglota del policía. Su puntaje es la duración del nuevo ciclo que ha creado. Su nuevo políglota no tiene por qué ser igual o similar al políglota secreto del policía; solo necesita ser más grande que el existente.

Su solución también puede estar agrietada. Si aparece otro ladrón y produce un ciclo estrictamente más largo que el tuyo, comenzando desde el políglota del mismo policía, te han robado tus puntos.

Lenguajes de programación válidos

Dado que este desafío implica indirectamente adivinar los lenguajes de programación utilizados por otros participantes, la definición de un lenguaje de programación para los propósitos de este desafío será un poco más estricta que la definición habitual. Un lenguaje de programación utilizado en este desafío debe cumplir con todas las siguientes condiciones.

Notas finales

  • El código que escriba debe ser un programa independiente en todos los idiomas en los que está destinado a ejecutarse. No se permiten funciones ni fragmentos de código.
  • Su programa no recibirá información a través de STDIN. Del mismo modo, su programa no debería imprimir nada en STDERR.
  • El puntaje de un policía es la cantidad de idiomas en el ciclo del políglota que publicaron. El policía debe publicar los idiomas en los que se ejecuta correctamente el políglota publicado, así como la cantidad de caracteres que agregaron para producir un políglota más largo. Son no responsable de la publicación de los idiomas, las carreras más largas ocultas en políglotas hasta que su respuesta es seguro.
  • El puntaje de un ladrón es la cantidad de idiomas en los que se ejecuta el políglota modificado. Al igual que con el policía, el ladrón debe publicar la lista de idiomas en los que se ejecuta correctamente el políglota.
  • El número de caracteres cambiados debe calcularse en la distancia de Levenshtein.
Silvio Mayolo
fuente
3
"El lenguaje debe tener un intérprete o compilador disponible gratuitamente. Lo siento, fanáticos de Mathematica, pero los ladrones deben poder verificar su solución". ¿Qué pasa con Wolfram Open Cloud? sandbox.open.wolframcloud.com
Scott Milner
No estaba al tanto de tal cosa, ya que tengo una copia local de Mathematica en mi computadora. Comentario eliminado
Silvio Mayolo
¿Está bien para N = 2 y M = 3?
mdahmoune
Si está bien. Su puntaje será simplemente 2, pero eso es perfectamente aceptable.
Silvio Mayolo

Respuestas:

1

C (gcc) , 126 bytes

M=N+1

Levenshtein(polyglot(M),polyglot(N))es de 36 bytes

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

Pruébalo en línea!

mdahmoune
fuente
Agrietado (con Levenshtein de 10)
Stephen