(basato su questo post e sulla conseguente discussione in chat - grazie anche a Dennis per TIO!)
La sfida
Scegli una lingua attualmente disponibile sul sito TryItOnline , ad esempio PowerShell . Scrivi il codice in quella lingua su quella pagina, che non accetta alcun input, in modo tale che quando si fa clic sul pulsante Esegui , l'output su quella pagina è esattamente lo stesso di quello che si trova nel campo "URL normale" quando il Salva / Store si fa invece clic sul pulsante.
Per un esempio fittizio, supponiamo che aaa
fosse il codice per una soluzione a questo in PowerShell. Quindi, il risultato del clic su Esegui con aaa
come codice attivo https://tio.run/#powershell
dovrebbe essere visualizzato https://tio.run/##K8gvTy0qzkjNyfn/PzEx8f9/AA
, che è anche il campo "URL normale" quando si fa clic sul pulsante Salva / Store .
punteggio
L' URL risultante è l'invio di questa sfida. Il vincitore è l'URL più breve misurato in byte. Per l'esempio sopra, l'URL https://tio.run/##K8gvTy0qzkjNyfn/PzEx8f9/AA
è l'invio alla sfida, a 44 byte . L'URL più breve che soddisfa il resto di questa sfida vince la sfida e guadagna punti brownie (punti non riscattabili). Dato che esiste una lunghezza minima possibile distinta, se due invii si legano in lunghezza, vince l'invio precedente.
Generazione URL
Questo è l'inizio dell'algoritmo di generazione degli URL nel repository. Puoi vedere come viene presa l'area di codice principale, vengono aggiunti eventuali elementi extra, la stringa viene sgonfiata e convertita Base64, quindi ##
anteposta, ecc. Non entrerò nei dettagli qui; parte della sfida è analizzare e comprendere come vengono generati gli URL al fine di sfruttare eventuali potenziali stranezze in detto algoritmo.
Regole / Chiarimenti
- Il codice effettivo non dovrebbe ricevere input e produrre solo l'URL quine come output.
- questo significa gli unici campi di testo che deve essere compilato quando si fa clic nell'URL sono iCode
,Header
,Footer
o corrispondenti campi "Compiler Flag"; i campiInput
eArguments
sono vietati e devono rimanere vuoti / inutilizzati. Fare clic sul pulsante Esegui dovrebbe solo modificare ilOutput
campo. Per questa sfida, ilDebug
campo viene ignorato in tutte le situazioni. - Le regole quine usuali si applicano al codice nella misura del possibile (ad esempio, il codice non può leggere il proprio codice sorgente tramite
.code.tio
). - Includi una descrizione di come funziona il codice nel tuo invio.
- L'invio di un quine "poco costoso" inviando una richiesta pull Git al repository TIO per creare un URL "scorciatoia" o un collegamento o simili non è consentito.
- Allo stesso modo, non è consentito inviare una richiesta pull per aggiornare una determinata lingua per produrre un URL "trucco".
- Sii gentile con i server di Dennis e non abusarne o tentare exploit per il bene di questa sfida.
https://tio.run/##a+a
che si collega a un programma che genera https://tio.run/##a+a
, è valido anche se il collegamento generato da saveState
sarebbe statohttps://tio.run/##a@a