Quasi Illegal Strings, Mark II (Cops)

Nov 04 2020

Modifica 2020-11-06: questa sfida è stata modificata con nuove disposizioni per incoraggiare la partecipazione. Le modifiche sono state evidenziate in grassetto .

Benvenuto in una versione di poliziotti e ladri di Find an Illegal String .

Una stringa illegale è "una stringa di caratteri che non può apparire in nessun programma legale nel tuo linguaggio di programmazione preferito" (dal post collegato).

Per questa sfida, definiremo una stringa quasi illegale , che è una stringa di caratteri che è molto difficile, ma non impossibile, includere in un programma valido.

La sfida dei poliziotti

  • Scegli un linguaggio di programmazione e scegli una "stringa quasi illegale": questa è una sequenza di caratteri che è molto difficile da includere in un programma valido senza causare errori.
  • Scrivete un programma che contenga la "stringa quasi illegale" come sottostringa contigua che non comporti errori.
  • Facoltativamente, puoi anche specificare un set di caratteri vietati. Questi sono caratteri che non compaiono nel tuo programma, tranne che nella "stringa quasi illegale". (Pertanto: i caratteri vietati possono ancora apparire all'interno della stringa quasi illegale)

Questo è tutto! Rivelerai il linguaggio di programmazione, la stringa quasi illegale e il set di caratteri vietati e sfiderai i ladri a scrivere un programma che contiene la stringa illegale ma non genera errori.

Ai fini di questa sfida, definiamo "non errore" come:

  • Il programma termina con il codice di uscita 0.
  • Il programma non stampa alcun output sull'errore standard.
  • Il tuo programma può stampare qualsiasi cosa sullo standard output, se lo desideri, ma non è necessario.
  • Se (e solo se) la tua lingua stampa sempre l' output sull'errore standard indipendentemente dal programma, come il debug o le informazioni di temporizzazione, puoi invece progettare un programma che lo restituisca solo all'errore standard. Se stai facendo uso di questa clausola, menzionala nel tuo poliziotto.

La sfida dei ladri

Trova una risposta integra. Scrivere un programma nella lingua specificata che contenga come sottostringa contigua la stringa specificata quasi illegale e che non comporti errori. Il tuo programma non può utilizzare alcun carattere nella serie di caratteri vietati, a meno che non faccia parte della stringa quasi illegale. Non è necessario che il tuo programma sia esattamente quello che aveva in mente il poliziotto. Pubblica una risposta al thread del ladro e lascia un commento sulla risposta della polizia per risolverlo.

Chiarimenti

  • Se la risposta del tuo poliziotto richiede un ambiente operativo o una versione specifici, devi specificarlo nella risposta.
  • La stringa quasi illegale del poliziotto che rivelano deve essere interpretata rispetto alla codifica standard per l'interprete della lingua. Per la maggior parte dei programmi, questo sarà UTF8.
  • Le soluzioni non dovrebbero ricevere alcun input (tramite input standard, argv o qualsiasi altra fonte) e potrebbero presumere che non venga fornito alcun input di questo tipo.
  • Le soluzioni devono terminare in un periodo di tempo finito. Ciò significa che entrare in un ciclo infinito e rimanere ucciso dal timeout di 60 secondi di TIO non è una soluzione valida.
  • I poliziotti dovrebbero assicurarsi che la loro stringa quasi illegale contenga nuove righe iniziali o finali che sia molto chiaro che lo faccia. I ladri dovrebbero annotare attentamente ogni nuova riga iniziale o finale nel posto di un poliziotto.

Suggerimento per la formattazione

Il modo più chiaro per includere le nuove righe iniziali o finali è utilizzare la sintassi del backtick per il tuo post:

```

foo

```

Rende come:


foo

Per rimuovere qualsiasi ambiguità, menziona esplicitamente le nuove righe iniziali / finali nel tuo post.

Punteggio

Dopo 10 giorni senza crack, un poliziotto può contrassegnare la risposta come sicura e rivelare la soluzione. Una volta che il poliziotto ha rivelato la loro soluzione, non è più possibile decifrarla.

I poliziotti vengono valutati in base alla lunghezza (in byte) della loro stringa quasi illegale nelle loro risposte sicure, con un valore inferiore è migliore.

I ladri vengono valutati in base al numero di risposte che risolvono, con maggiore è migliore.


Esempio

Python 3, 5 byte

Stringa illegale:

"'1/0

Personaggi banditi:

#'

Python 3, crepa la risposta dell'esempio

Programma:

""" "'1/0 """

L'idea è che possiamo semplicemente commentare la stringa, poiché "non è vietata.

Risposte

6 xnor Nov 06 2020 at 08:26

Python 2 , 5 byte ( crackato da tsh )

bin()

Provalo online!

Bandito: tutti i caratteri tranne i caratteri alfanumerici

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Quindi, ti sono consentiti i personaggi sopra e nient'altro (oltre a bin()se stesso).

(Questa idea non è mia, la ricordo da una sfida precedente, ma non ricordo chi meriti il ​​merito.)

4 cairdcoinheringaahing Nov 06 2020 at 08:40

Jelly , 4 byte, crackato da HyperNeutrino



«{

Provalo online!

Non puoi usare le nuove righe. Qualsiasi altro carattere / byte è un gioco leale


La mia soluzione prevista era uno qualsiasi dei personaggi vietati qui a parte . Ciascuno di questi caratteri interrompe l'analisi del collegamento, il che significa che tutto ciò che precede viene ignorato:

Provalo online!

3 cairdcoinheringaahing Nov 06 2020 at 09:01

Gelatina , 4 byte, incrinata da una stringa non correlata



«{

Provalo online!

Sto dando un altro tentativo a Jelly, ma con un po 'più di restrizioni. E 'vietato utilizzare quƁƘȤ(ƈɦƙɱɲƥʠʂȥ(i comandi non implementati in gelatina), o ritorni a capo, come questi rendono di gran lunga troppo banale di crack (grazie a HyperNeutrino per aver dimostrato che)


Né il crack di HyperNeutrino nei commenti, né il crack di Unrelated String erano la mia soluzione prevista. Mettere un Œ(o uno qualsiasi di ÐÆØœæ) senza nulla dopo di esso alla fine causa lo stesso comportamento di qualsiasi altro quƁƘȤ(ƈɦƙɱɲƥʠʂȥ, poiché si aspettano sempre di avere un personaggio dopo di loro. Senza alcun carattere, causano un'interruzione nella catena del programma, il che significa che tutto ciò che li precede viene ignorato:

Provalo online!

3 binarycat Nov 07 2020 at 05:42

Haskell, 3 byte


#"

(inizia con una nuova riga)

Personaggi non consentiti: -

3 RobinRyder Nov 12 2020 at 03:35

R , 2 byte, crackato da Dominic van Essen

'"

Provalo online!

Personaggi banditi (le nuove righe sono bandite):

'"`#\qel
    

Questo vieta le crepe ovvie a cui riesco a pensare, ma non sarei sorpreso se venissi con una crepa molto diversa da quello che intendo.

Dominic van Essen ha decifrato una prima versione di questa sfida, e poi una seconda ; poi Giuseppe creò una terza versione. Ho aggiunto qelnuove righe all'elenco dei personaggi vietati per eludere le loro crepe.


La soluzione che avevo in mente era

assign(intToUtf8(c(37,39,34,37)), c); 1 %'"% 2

Provalo online!

La chiamata di assegnazione crea un nuovo operatore binario %'"%,; è equivalente a "%'"%" <- c. In R, è possibile creare nuovi operatori della forma %x%in cui xè qualsiasi stringa: %}%, %$@%e %µ£$%sono tutti nomi di operatori validi. Qui, il nuovo operatore è uguale alla funzione di concatenazione ce quindi l'output è il vettore 1 2.

Il crack di Dominic non definisce l'operatore; l'ha semplicemente seppellito in una trychiamata, che è anche un codice R valido.

Il trucco usato qui significa che qualsiasi tentativo futuro di una stringa quasi illegale dovrà probabilmente bandire il %personaggio.

2 binarycat Nov 07 2020 at 06:13

Ruby, 17 byte, rotto da Dingus

=end
#{"""'}
=end

(nessuna nuova riga all'inizio)

Personaggi non consentiti: N

2 binarycat Nov 07 2020 at 05:58

Julia, 5 byte, incrinata da Dingus

?""":

Personaggi non consentiti: #

2 binarycat Nov 09 2020 at 03:15

Julia, 6 byte

?""":

C'è uno spazio di larghezza zero prima di :

Caratteri non consentiti: #

1 binarycat Nov 07 2020 at 06:59

Ruby, 17 byte

=end
#{"""'}
=end

Caratteri non consentiti: N,%

Questa volta l'ho reso un po 'più difficile.

1 binarycat Nov 07 2020 at 07:47

Ruby, 18 byte

=end
#{/"""'}
=end

Caratteri non consentiti: N, %,/

la mia variazione finale, si spera che la prossima soluzione sia quella prevista.

1 pxeger Nov 07 2020 at 15:01

Zsh

 
#include <cstdlib> 
#include <iostream> 
 
int main() { 
    srand(time(NULL)); 
    hello(); 
    return rand() % 2; 
} 
 
/* 
  main 
  a=0 
  \ 
  print "$((1/$a))" 
*/ 
 
void hello() std::cout << "Hello, World!" << std::endl; 
 
  • Caratteri consentiti: tutti gli ASCII stampabili tranne blxy<'`$ (B minuscola, L, X e Y, virgolette singole, tomba, simbolo del dollaro)
  • Si prega di notare tutti gli spazi bianchi iniziali e finali.

Probabilmente non è troppo difficile, ma potresti imparare molto sui molti - dovremmo dire "stranezze" - di zsh.

1 AidenChow Nov 10 2020 at 05:04

Desmos, 2 byte, crackato da PkmnQ

Sottostringa:


\

(Nota la nuova riga all'inizio)

Caratteri vietati: tutti i caratteri alfanumerici

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Spero che la maggior parte delle persone non abbia familiarità con Desmos qui, quindi la gente non saprebbe cosa provare.

Nota:

Un'espressione in Desmos sarebbe considerata un errore se mostra un "segno di pericolo" accanto all'espressione, come questo: