Ciclico Polyglot Challenge (Poliziotti)


11

Sfida ciclica poliglotta

Questo è il thread della polizia. Puoi trovare il thread dei ladri qui .

Polyglot ciclico

Un poliglotta ciclico N-element è un programma completo che può essere eseguito in N lingue diverse. In ogni lingua, quando il programma viene eseguito senza input (possibilmente soggetto a questa eccezione ), dovrebbe stampare il nome di una lingua su STDOUT. In particolare, se il programma viene eseguito nella lingua Kth, dovrebbe stampare il nome della (K + 1) lingua. Se il programma viene eseguito nell'ennesima lingua (ovvero, la lingua finale in un ciclo dell'elemento N), dovrebbe stampare il nome della prima lingua.

Un esempio potrebbe essere utile.

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

L'esecuzione di questo programma con Lua stampa la stringa "Ruby". L'esecuzione di questo programma in Ruby stampa la stringa "Befunge". L'esecuzione di questo programma in Befunge stampa la stringa "Lua", completando il ciclo. Questo programma costituisce un ciclo di 3 cicli composto da Lua, Ruby e Befunge.

La stessa lingua non può apparire due volte in un ciclo e versioni diverse della stessa lingua (come Python 2 e Python 3) non possono apparire nello stesso ciclo l'una dell'altra.

Cops

La tua sfida è scrivere un poliglotta N-ciclico, dove N è almeno 2. Quindi, è necessario aggiungere, sostituire ed eliminare un numero di caratteri al programma per produrre un poliglotta M-ciclico, dove M è strettamente maggiore di N Dovresti quindi pubblicare il poliglotta N-ciclico più corto (e le lingue in cui scorre), nonché il numero di caratteri che hai cambiato per produrre il poliglotta più lungo. Il tuo punteggio è N, il numero di lingue nel tuo ciclo più breve.

I ladri cercheranno di identificare il tuo ciclo più lungo. Se, dopo sette giorni, nessuno ha risolto con successo la soluzione, è necessario modificare la risposta dichiarando che è sicura. Dovresti anche pubblicare il tuo poliglotta M-ciclico più lungo in questo momento.

Robbers

Dato il poliglotto N-ciclico di un poliziotto e il numero di caratteri che hanno aggiunto per produrre un ciclo poliglotta più grande, il tuo obiettivo è quello di produrre quel ciclo più grande. Se riesci a produrre un ciclo più lungo aggiungendo, eliminando o sostituendo il maggior numero di caratteri del poliziotto o meno personaggi , hai rotto il poliglotta del poliziotto. Il tuo punteggio è la durata del nuovo ciclo che hai creato. Il tuo nuovo poliglotta non deve necessariamente essere uguale o addirittura simile al poliglotta segreto del poliziotto; deve solo essere più grande di quello esistente.

La tua soluzione potrebbe anche essere rotta. Se arriva un altro ladro e produce un ciclo rigorosamente più lungo del tuo, a partire dallo stesso poliglotta del poliziotto, hanno rubato i tuoi punti.

Linguaggi di programmazione validi

Poiché questa sfida implica indirettamente indovinare i linguaggi di programmazione utilizzati da altri partecipanti, la definizione di un linguaggio di programmazione ai fini di questa sfida sarà un po 'più rigorosa della definizione abituale. Un linguaggio di programmazione utilizzato in questa sfida deve soddisfare tutte le seguenti condizioni.

Note finali

  • Il codice che scrivi dovrebbe essere un programma autonomo in ogni lingua in cui è previsto l'esecuzione. Non sono consentite funzioni o frammenti di codice.
  • Al programma non verrà fornito alcun input tramite STDIN. Allo stesso modo, il programma non dovrebbe stampare nulla su STDERR.
  • Il punteggio di un poliziotto è il numero di lingue nel ciclo del poliglotta che hanno pubblicato. Il poliziotto dovrebbe pubblicare le lingue in cui il poliglotta pubblicato funziona correttamente, così come il numero di caratteri aggiunti per produrre un poliglotta più lungo. Essi sono non responsabili per la pubblicazione le lingue le piste, poliglotti più nascosta fino a quando la loro risposta è sicura.
  • Il punteggio di un ladro è il numero di lingue in cui viene eseguito il poliglotta modificato. Come per il poliziotto, il ladro dovrebbe pubblicare l'elenco delle lingue in cui il poliglotta corre correttamente.
  • Il numero di caratteri modificati deve essere calcolato a distanza di Levenshtein.

3
"La lingua deve avere un interprete o un compilatore liberamente disponibili. Siamo spiacenti, fan di Mathematica, ma i ladri devono essere in grado di verificare la soluzione." Cosa c'è che non va nel Wolfram Open Cloud? sandbox.open.wolframcloud.com
Scott Milner,

Non ero a conoscenza di una cosa del genere, dato che ho una copia locale di Mathematica sul mio computer. Commento rimosso.
Silvio Mayolo,

Va bene per N = 2 e M = 3?
mdahmoune,

Si va bene. Il tuo punteggio sarà semplicemente 2 allora, ma è perfettamente accettabile.
Silvio Mayolo,

Risposte:


1

C (gcc) , 126 byte

M=N+1

Levenshtein(polyglot(M),polyglot(N))è di 36 byte

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

Provalo online!


Cracked (con Levenshtein di 10)
Stephen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.