Sporco e unico


26

In questa domanda parlerò dei programmi come stringhe, si tratta di stringhe di byte, non di caratteri. Il modo in cui il tuo programma risultante viene visualizzato o visualizzato non è importante per questa sfida, solo il modo in cui appare in memoria è importante.

Un programma incontaminato è un programma che quando viene eseguito non presenta errori, tuttavia si verificherà un errore in ogni sottostringa continua di dimensione , dove, è rimosso.Sn1n<|S|

Un programma sporco è l'opposto, è un programma che quando eseguito fa errore, tuttavia ogni volta che una sottostringa continua di dimensione , dove, viene rimosso, non si verifica un errore.Sn1n<|S|

Per questa sfida un errore è l'output non vuoto su STDERR.

La tua sfida è quella di scrivere un programma sporco che utilizza quanti più byte unici possibili. Ciò significa che otterrai un punto per ogni byte univoco che appare nel tuo codice con un punteggio più grande che è migliore. Il punteggio massimo è quindi 256.


È anche possibile rispondere a questa domanda in lingue che includono parentesi / parentesi? Sarebbe possibile rimuovere alcune sottostringhe dal codice in modo che ci siano parentesi non corrispondenti.
JungHwan Min

@JungHwanMin Se la lingua impone parentesi equilibrate, sospetterei che sarebbe impossibile.
Wheat Wizard

@CatWizard, quindi un programma sporco non si guasta quando viene rimossa una sottostringa continua di caratteri (cioè non un insieme continuo di byte), giusto?
JungHwan Min

@JungHwanMin Siamo spiacenti. Potrebbe o no. Ci preoccupiamo solo di stringhe continue.
Wheat Wizard

Risposte:


18

Unario , 14 byte

123456789ABCDE

Questo codifica il programma brainfuck [, che causa errori tra parentesi impareggiabili.

Rimozione byte comporterà >, <, +, -, ., ,o il programma vuoto, che sono programmi BrainFuck validi.


Questa è la soluzione ottimale, poiché qualsiasi soluzione più lunga potrebbe essere ridotta a questa soluzione, che errori
Jo King

Questa è anche l'unica soluzione.
user202729

13

R , 3 byte

qrt

Provalo online!

Un nome di un oggetto è un programma valido in R.

qrt non è il nome di nulla, quindi restituisce un errore.

q è la funzione di uscita

qr è la funzione di decomposizione QR

rt è la funzione di campionamento della distribuzione t

qt è il CDF inverso della distribuzione t

t è la funzione di trasposizione


2
@pajonk ma "r" è una sottostringa continua. Rimozione che lascia "qt"
Orphevs

3
Esiste esattamente un programma sporco in R di lunghezza 3, e questo è tutto! (i programmi validi solo singolo char sono 0-9cqtCDFIT, ogni programma deve iniziare con cm, qf, qr, qt, tso Im. La lunghezza tre possibilità sono qrf, qrm, qrt, qtse tsdsolo uno di questi è sporco (gli altri non possono essere estese o per renderli sporco come non ci sono funzioni rm*, rf*, ts*, sd*)
JDL

@Orphevs il mio male, ho letto male la sfida.
pajonk,

10

Gelatina , 4 5 6 7 8 10 11 byte

“a”;⁽PFð+µU

Provalo online!

Verificalo

Cerca di aggiungere una stringa con un numero intero.

Alcuni dei possibili sottoprogrammi:

“a” è una stringa letterale.

“a è la stessa stringa letterale.

è la stringa vuota.

“a”; concatena "a" con se stessa.

... troppi per elencarli tutti.


1
Fortunatamente Jelly ti permette ancora di sbagliare.
user202729

6

Poliglotta, 3 byte

1 2

Funziona in:

  • JavaScript
  • Rubino
  • R
  • Ottava
  • GHCi
  • Julia

In JavaScript, genera SyntaxError: token imprevisto: letterale numerico o un errore simile.

Tutte le altre stringhe sono letterali numerici validi ( 1 , 2 o 12 ).


In GHCi questo genera

<interactive>:1:1: error:
     Non type-variable argument in the constraint: Num (t1 -> t2)
      (Use FlexibleContexts to permit this)
     When checking the inferred type
        it :: forall t1 t2. (Num t1, Num (t1 -> t2)) => t2

Questo è perché cerca di applicare 1a 2come una funzione, ma non può. Quando una parte di questo viene rimossa, diventa semplicemente un valore letterale numerico.


Polyglot: R, Octave, Ruby, the Pythons ...
ngm

1
Anche @ngm GHCi, tuttavia errori `2` in Python.
Wheat Wizard

Sospettavo che fosse molto generico. L'ho trasformato in wiki della comunità, quindi sentiti libero di modificarlo con tutte le lingue per cui funziona!
Arnauld,


5

Python 2/3 , 3 byte

4\f2

O

4\x0c2

Provalo online!

In python "\ f" è uguale a "\ x0c" ed è un carattere di feed del modulo . Ciò significa che indica che una stampante passa alla riga successiva.

Se un'espressione python inizia o termina con \f, viene sostanzialmente ignorata, quindi \f2è un'espressione valida.

Il 4e 2può essere qualsiasi numero 0-9. Tuttavia, affinché il primo byte sia 0valido solo in Python 2.7.15, come è 02stata fatta una dichiarazione legale di 2.

Quindi l'espressione stessa non riesce con un errore di sintassi, perché ci sono due numeri separati da uno spazio bianco. Tuttavia, qualsiasi accorciamento mette \fall'inizio o alla fine, dove non importa, o crea ciò 42che è valido.

(Vale la pena notare che in IDLE questo file si apre come "42".)

Fonte di spiegazione del feed del modulo: /programming//a/26184126


3
Questo sarebbe più facile da capire se hai utilizzato il codice effettivo nel sorgente senza il \f. Ecco un link di prova online da cui è possibile ottenere una risposta preformattata.
Wheat Wizard

1
L'ho aggiunto come variante per chiarimenti. Inoltre, grazie per il suggerimento del link.
The Matt

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.