Lo scopo di questa sfida è scrivere un programma che soddisfi le seguenti condizioni:
Il programma non è palindromico, o essenzialmente palindromico (nel senso che è possibile rimuovere i caratteri per renderlo un palindromo senza modificare gli effetti del programma).
Il programma non è un'involuzione (nel senso che non produce l'input originale quando viene eseguito sull'output)
Il programma a polarità inversa è l'inverso del programma normale; quindi quando il programma invertito viene eseguito sull'uscita del programma normale, restituisce l'input originale.
Cosa significa inversione di polarità ? Bene, differisce tra le lingue.
- Per la maggior parte dei non-esolang, ciò significa invertire l'ordine delle sotto-operazioni in una singola operazione, invertire l'ordine degli argomenti e invertire il contenuto di elenchi / array / tuple / dizionari / stack / code / ecc. come invertire l'ordine dei blocchi di codice e delle linee autonome (ma non delle linee all'interno dei blocchi)
Esempi:
Haskell :
x`mod`y
-> y`mod`x
; zipWith ((*3).(+)) [1,2,3] [4,5,6]
->zipWith ((+).(*3)) [6,5,4] [3,2,1]
Python : 2**3
-> 3**2
; for x,y in [(1,2),(3,4),(5,6)]
->for y,x in [(6,5),(4,3),(2,1)]
Per le lingue che hanno funzioni a 1 carattere (come Pyth, APL), è sufficiente invertire la stringa di istruzioni
Per esolang unidimensionali come BF, invertire le istruzioni o scambiare la polarità; gli scambi di polarità sono
[]
->{}
,+
->-
,-
->+
,>
-><
,<
->>
,.
->,
e,
->.
(ma non entrambi)Per gli esolang bidimensionali come Befunge, è possibile eseguire una riflessione sugli assi X o Y o una diagonale, ruotare di 180 gradi o combinare una riflessione e una rotazione
Sono consentite operazioni commutative, ma non quelle palindromiche: 2*x
va bene, ma x+x
è male. La definizione di inversione di polarità è piuttosto ampia, ma usa il tuo giudizio su ciò che ha senso; l'obiettivo non è trovare la scappatoia più intelligente, ma trovare la soluzione più intelligente.
Questa è una gara di popolarità, quindi una scappatoia molto intelligente può essere popolare, ma cerca di mantenere lo spirito di questa sfida. Il vincitore verrà annunciato una volta che ci saranno almeno 10 soluzioni con almeno 1 voto, e c'è almeno una soluzione con più voti di quanti siano gli invii con almeno 1 voto; o tra 1 mese, a seconda dell'evento che si verifica per primo. Questa è la mia prima sfida, quindi cerca di essere onesto e dammi un feedback costruttivo, ma fammi anche sapere se questa è una sfida irragionevole o è in qualche modo erroneamente categorizzata o ambigua. Se hai domande su una lingua che non si adatta a nessuno dei buchi che ho esposto qui, commenta e mi piegherò alla volontà della comunità se c'è una forte protesta per un particolare chiarimento o cambio di regole.
AGGIORNARE
È passato esattamente 1 mese da quando è iniziato questo concorso (mi è capitato di controllarlo per caso, non sapendo di essere in tempo). Trattandosi di un concorso di popolarità, il vincitore (da una frana) è Pietu1998-Befunge . Anche se i componenti inferiori (l'invertitore di testo e l'alfabeto all'indietro) sono entrambi involuzioni, l'encoder / decodificatore non lo sono, quindi non vi sono problemi. Punti bonus (nella mia mente) per riuscire a scrivere "BEFUNGE" nel mezzo. Personalmente mi è piaciuta la novità della soluzione Theseus di Zgarb , perché la lingua sembra interessante (se limitata). Grazie a tutti per la partecipazione e, mentre il vincitore è stato scelto, lascio questo concorso completamente aperto e accolgo con favore i futuri contributi.
()
palindromico? Tecnicamente, è il contrario )(
.