Inspiré par l'engouement récent pour un autre langage à deux caractères, ;#
Intro
Selon le consensus de la communauté , les réponses acceptables sur ce site doivent utiliser des langages de programmation qui, au minimum:
- Peut déterminer si un nombre naturel est premier
- Peut additionner deux nombres naturels ensemble
- Peut représenter une liste / tuple de nombres, ainsi qu'un seul nombre
Aux fins de ce défi, nous ignorerons le numéro 3. Par conséquent, le langage le plus simple qui pourrait être utilisé sur ce site (en ignorant # 3) aurait exactement deux commandes, isPrime
et add
. Pour faciliter l'interprétation et le comptage d'octets, attribuons isPrime
à p
et add
à +
. Ainsi, nous avons notre langue +p
,. Votre défi est d'interpréter du +p
code.
Comportement
+
l'add
instruction prend deux nombres, les ajoute et génère le résultatp
l'isPrime
instruction prend un seul nombre et sort1
si elle est première et0
si elle n'est pas
Règles
- Vous devez écrire un programme / fonction qui, étant donné une chaîne de caractères, interprète cette chaîne comme du
+p
code. Vous pouvez supposer une entrée bien formée (uniquement+
et desp
caractères). - L'entrée est flexible. Vous pouvez prendre le programme sous forme de chaîne, de tableau de caractères, de tableau entier de points de code, etc. L'entrée pour le programme en cours d'interprétation est également flexible. Vous pouvez prendre un tableau d'entiers et utiliser des entrées pendant l'exécution du programme, ou chaque instruction (
+
etp
) peut demander individuellement une entrée. Vous pouvez supposer qu'il y aura suffisamment d'entrées pour chaque instruction. L'entrée est composée de nombres compris entre 0 et 200 (mais vos algorithmes devraient théoriquement fonctionner pour toute entrée entière positive). - La sortie est également flexible. Vous pouvez imprimer les résultats, les renvoyer sous forme de liste, renvoyer une chaîne contenant tous les résultats, etc. S'ils sont imprimés ou renvoyés sous forme de chaîne, la sortie doit être séparée par un séparateur cohérent non numérique, tel qu'une nouvelle ligne, tabulation, espace ou
,
caractère. Vous pouvez avoir un séparateur de fin ou des espaces de fin. De plus,p
la sortie de 'peut être n'importe quelle valeur truey ou falsey, telle que définie par la langue dans laquelle vous travaillez, plutôt que1
ou0
. - L'interpréteur peut se terminer ou non (s'il s'agit d'un programme complet), mais il doit arrêter l'impression une fois que toutes les instructions ont été interprétées. (Il ne peut pas continuer à imprimer le séparateur indéfiniment, ou un caractère nul, etc.).
- Ces failles standard sont interdites par défaut
- C'est le code-golf , la réponse avec le moins d'octets gagne
Cas de 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
----------------------------------
Beaucoup, beaucoup, très longs cas de test
Le code java utilisé pour générer des cas de test
Exemple
Ci-dessous, une fonction java non golfée qui interprétera +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;
}
Remarque: En utilisant la requête de recherche prime AND add AND interpret is:question
, il ne semble pas y avoir de doublons à cette question. S'il y en a un, désolé.
isprime
à dire en julie.
p
résultats sont concaténés sans séparateur, est-ce prévu?