Ispirato dalla recente mania per un altro linguaggio a due personaggi, ;#
Intro
Secondo il consenso della comunità , le risposte accettabili su questo sito devono usare linguaggi di programmazione che, come minimo:
- Può determinare se un numero naturale è primo
- Può aggiungere due numeri naturali insieme
- Può rappresentare un elenco / tupla di numeri, nonché un singolo numero
Ai fini di questa sfida, ignoreremo il n. 3. Pertanto, il linguaggio più semplice che potrebbe essere utilizzato su questo sito (ignorando il n. 3) avrebbe esattamente due comandi isPrime
e add
. Per facilità di interpretazione e conteggio dei byte, assegniamo isPrime
a p
e add
a +
. Quindi, abbiamo la nostra lingua +p
,. La tua sfida è interpretare un po 'di +p
codice.
Comportamento
+
l'add
istruzione prende due numeri, li aggiunge e genera il risultatop
l'isPrime
istruzione accetta un singolo numero e viene emessa1
se è primo e0
se non lo è
Regole
- È necessario scrivere un programma / funzione che, data una stringa di caratteri, interpreta quella stringa come
+p
codice. Puoi assumere input ben formati (solo+
ep
caratteri). - L'input è flessibile. È possibile considerare il programma come una stringa, una matrice di caratteri, una matrice intera di punti di codice, ecc. Anche l'input per il programma da interpretare è flessibile. È possibile inserire un array intero e utilizzare le voci durante l'esecuzione del programma oppure ciascuna istruzione (
+
ep
) può richiedere singolarmente l'input. Si può presumere che ci sarà abbastanza input per ogni istruzione. È garantito che l'input sia composto da numeri compresi tra 0 e 200 (ma i tuoi algoritmi dovrebbero teoricamente funzionare per qualsiasi input intero positivo). - L'output è anche flessibile. Puoi stampare i risultati, restituirli come elenco, restituire una stringa che contiene tutti i risultati, ecc. Se stampato o restituito come stringa, l'output deve essere separato da un separatore coerente non a cifre, come una nuova riga, scheda, spazio o
,
carattere. È possibile che si disponga di un separatore finale o di uno spazio bianco finale. Inoltre,p
l'output può essere qualsiasi valore di verità o falsità, come definito dalla lingua in cui si sta lavorando, piuttosto che1
o0
. - L'interprete può terminare o meno (se si tratta di un programma completo), ma deve interrompere la stampa dopo aver interpretato tutte le istruzioni. (Non può continuare a stampare il separatore per sempre, o un carattere null, ecc.).
- Queste scappatoie standard sono vietate per impostazione predefinita
- Questo è code-golf , la risposta con il minor numero di byte vince
Casi test
Program: +
Input: [56, 50]
Output: 106
----------------------------------
Program: p
Input: [12]
Output: 0
----------------------------------
Program: p
Input: [13]
Output: 1
----------------------------------
Program: ++
Input: [172, 120, 33, 58]
Output: 292 91
----------------------------------
Program: p
Input: [29]
Output: 1
----------------------------------
Program: pp
Input: [176, 12]
Output: 0 0
----------------------------------
Program: ++++p
Input: [32, 16, 69, 197, 73, 171, 21, 178, 72]
Output: 48 266 244 199 0
----------------------------------
Program: pp+++p+pp+
Input: [151, 27, 119, 189, 198, 107, 174, 15, 166, 106, 134, 108, 169, 55, 42]
Output: 1 0 308 305 189 0 240 0 0 97
----------------------------------
Program: p+p+++++++pp+p
Input: [143, 67, 30, 149, 178, 52, 112, 122, 55, 122, 142, 199, 20, 175, 138, 80, 116, 180, 50, 116, 15, 92, 74]
Output: 0 97 1 230 234 177 341 195 218 296 0 0 107 0
----------------------------------
Program: ++p++p+pp+++++p+p+pp++
Input: [120, 177, 23, 116, 163, 52, 65, 98, 177, 16, 96, 131, 160, 48, 153, 0, 139, 33, 62, 49, 129, 86, 99, 135, 187, 80, 137, 130, 113, 136, 0, 1, 186, 100, 38, 153]
Output: 297 139 1 117 275 0 227 0 0 153 172 111 215 234 0 217 0 249 0 0 286 191
----------------------------------
Program: ++p+++++p+p+++++++
Input: [181, 169, 6, 84, 68, 171, 129, 107, 106, 114, 197, 58, 11, 88, 156, 169, 43, 77, 49, 43, 102, 78, 93, 51, 91, 37, 64, 93, 82, 126, 181, 81, 44]
Output: 350 90 0 300 213 311 69 244 0 120 0 145 171 142 101 175 307 125
----------------------------------
Program: ++p+
Input: [131, 127, 115, 40, 113, 196, 83]
Output: 258 155 1 279
----------------------------------
Program: +ppp++p+ppp+p++++++++p+p+++pp+ppp++
Input: [6, 9, 187, 168, 96, 167, 178, 139, 86, 148, 99, 103, 166, 18, 119, 15, 132, 77, 16, 88, 139, 34, 58, 90, 43, 69, 68, 152, 59, 106, 134, 49, 155, 100, 52, 55, 27, 188, 41, 77, 23, 49, 171, 23, 193, 84, 111, 165, 80, 18, 63, 23, 116, 112, 119]
Output: 15 0 0 0 345 225 0 202 0 0 0 147 0 104 173 148 112 220 165 183 255 0 82 0 118 72 194 1 0 276 0 0 0 139 231
----------------------------------
Program: ++++++++p++++++++++++
Input: [156, 5, 34, 25, 117, 98, 139, 131, 88, 82, 191, 13, 1, 170, 51, 116, 144, 85, 92, 170, 25, 94, 149, 131, 19, 161, 115, 160, 8, 6, 195, 101, 11, 185, 87, 50, 33, 140, 188, 135, 164]
Output: 161 59 215 270 170 204 171 167 0 177 195 243 150 276 168 201 112 272 83 328 299
----------------------------------
Molti, molti, casi di test molto lunghi
Il codice java utilizzato per generare casi di test
Esempio
Di seguito è una funzione java non golfata che interpreterà +p
:
public static void interpret(String program, int[] input) {
int index = 0;
for (char inst : program.toCharArray()) {
switch (inst) {
case '+':
System.out.print((input[index++] + input[index++]) + " ");
break;
case 'p':
int n = input[index++];
System.out.print((isPrime(n) ? 1 : 0) + " ");
break;
}
}
}
public static boolean isPrime(long n) { //Taken from /programming//a/2385999/4484294
if (n < 2) return false;
if (n == 2 || n == 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
long sqrtN = (long) Math.sqrt(n) + 1;
for (long i = 6L; i <= sqrtN; i += 6) {
if (n % (i - 1) == 0 || n % (i + 1) == 0) return false;
}
return true;
}
Nota: utilizzando la query di ricerca prime AND add AND interpret is:question
, non sembrano esserci duplicati di questa domanda. Se ce n'è uno, scusa.
isprime
in julia.
p
s sono concatenati senza separatore, è previsto?