Inspiriert von der jüngsten Begeisterung für eine weitere Sprache mit zwei Charakteren, ;#
Intro
Nach dem Konsens der Community müssen für akzeptable Antworten auf dieser Website Programmiersprachen verwendet werden, die mindestens Folgendes umfassen:
- Kann bestimmen, ob eine natürliche Zahl eine Primzahl ist
- Kann zwei natürliche Zahlen addieren
- Kann eine Liste / ein Tupel von Zahlen sowie eine einzelne Zahl darstellen
Für die Zwecke dieser Herausforderung werden wir # 3 ignorieren. Daher würde die einfachste Sprache, die auf dieser Site verwendet werden könnte (ignoriert # 3), genau zwei Befehle haben, isPrime
und add
. Zur Erleichterung der Interpretation und Byteanzahl, lassen Sie uns assign isPrime
auf p
und add
zu +
. So haben wir unsere Sprache +p
. Ihre Herausforderung besteht darin, +p
Code zu interpretieren .
Verhalten
+
Deradd
Befehl nimmt zwei Zahlen, addiert sie und gibt das Ergebnis ausp
DerisPrime
Befehl nimmt eine einzelne Zahl und gibt aus,1
ob es sich um eine Primzahl0
handelt oder nicht
Regeln
- Sie müssen ein Programm / eine Funktion schreiben, die bei einer gegebenen Zeichenfolge diese Zeichenfolge als
+p
Code interpretiert . Sie können eine wohlgeformte Eingabe annehmen (nur+
undp
Zeichen). - Die Eingabe ist flexibel. Sie können das Programm als Zeichenfolge, Zeichenfeld, ganzzahliges Feld von Codepunkten usw. aufnehmen. Die Eingabe für das zu interpretierende Programm ist ebenfalls flexibel. Sie können ein ganzzahliges Array aufnehmen und Einträge beim Ausführen des Programms verbrauchen, oder jeder Befehl (
+
undp
) fordert einzeln Eingaben an. Sie können davon ausgehen, dass für jede Anweisung genügend Eingaben vorhanden sind. Die Eingabe besteht garantiert aus Zahlen zwischen 0 und 200 (aber Ihre Algorithmen sollten theoretisch für jede positive Ganzzahleingabe funktionieren). - Die Ausgabe ist auch flexibel. Sie können die Ergebnisse drucken, als Liste zurückgeben, eine Zeichenfolge zurückgeben, die alle Ergebnisse enthält usw. Wenn Sie gedruckt oder als Zeichenfolge zurückgegeben werden, muss die Ausgabe durch ein nicht-stelliges, konsistentes Trennzeichen (z. B. eine neue Zeile) getrennt werden. Tabulator, Leerzeichen oder
,
Zeichen. Möglicherweise haben Sie ein nachgestelltes Trennzeichen oder ein nachgestelltes Leerzeichen. Auchp
kann ‚s Ausgang jeder truthy oder Falsey Wert sein, wie sie in der Sprache definiert Sie arbeiten in, statt1
oder0
. - Der Interpreter wird möglicherweise beendet oder nicht (wenn es sich um ein vollständiges Programm handelt), muss jedoch den Druckvorgang beenden, nachdem alle Anweisungen interpretiert wurden. (Es kann nicht für immer das Trennzeichen oder ein Nullzeichen usw. gedruckt werden.)
- Diese Standardlücken sind standardmäßig verboten
- Das ist Code-Golf , die Antwort mit den wenigsten Bytes gewinnt
Testfälle
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
----------------------------------
Viele, viele, sehr lange Testfälle
Der Java-Code, der zum Generieren von Testfällen verwendet wird
Beispiel
Nachfolgend finden Sie eine Java-Funktion ohne Golf, die Folgendes interpretiert +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;
}
Hinweis: Bei Verwendung der Suchabfrage prime AND add AND interpret is:question
scheint es keine Duplikate zu dieser Frage zu geben. Wenn es eine gibt, tut mir leid.
quelle
p
Ergebnisse von s ohne Trennzeichen verkettet. Ist dies beabsichtigt?isprime
in julia.Antworten:
05AB1E , 5 Bytes
Probieren Sie es online!
Erläuterung
Diese Herausforderung passte 05AB1E wie angegossen :)
quelle
+
undp
bedeutet hinzufügen und isPrime in 05AB1E :)Python 2,
135133 Bytes-2 Bytes dank kundor
quelle
i,j=0,0
ist überflüssig, oder? Könnte es nicht seini,j=0
?i=j=0
.Python 2 , 91 Bytes
Probieren Sie es online!
quelle
Haskell,
8879 Bytes"commands" ! [args]
für den Einsatz.Ich lerne immer noch Haskell; Golftipps erwünscht!
quelle
i _[]=[]
kann auch so verschoben werden, dass er die letzte Mustervergleichsregel ist, und dann aufi _ e=e
oder so etwas gekürzt werden ,_!e=e
nachdem Sie auf die Infixnotation umgestellt haben.(min$product ...
kann seinmin(product ...
.product$map(mod a)
kann auf gekürzt werdenfoldr((*).mod a)1
.Ruby 2.4, 77 + 7 = 84 Bytes
Verwendet die
-rprime
Flagge.quelle
Perl 6 , 70 Bytes
Zuerst
rotor
wird die Eingabeliste mit der Methode in Blöcke der Größe 1 oder 2 aufgeteilt, je nachdem, ob das nächste Zeichen des Programms istp
oder nicht. Dann wird diese unterteilte Liste überlagert; Brocken der Größe 2 werden summiert, und Brocken der Größe 1 lassen ihr einziges Element auf Ursprünglichkeit prüfen.quelle
Jelly , 18 Bytes
Probieren Sie es online!
Alternative Lösung, 18 Byte
Versuchen Sie dieses online!
quelle
C #,
130129 BytesProbieren Sie es online!
quelle
(p,d)=>
ump=>d=>
ein Byte zu speichern und eine curried Funktion machen?PowerShell 3+,
151121 BytesPowerShell hat keine eingebauten Prime-Funktionen, daher musste ich meine eigenen rollen. Meine erste Version war schrecklich und ich habe von den meisten anderen, die unter den Modul-Ergebnissen auf 0 testen, genommen, was viel spart. Außerdem werden ein paar Bytes gesäubert, indem
-notin
stattdessen-notcontains
PowerShell v2 verwendet wird.Kommentarbasierte Erklärung
quelle
F #, 130 Bytes
Probieren Sie es online!
quelle
QBasic, 122 Bytes
Nimmt den Code als Eingabezeile und nimmt dann jede Eingabenummer in eine eigene Zeile. Die Ausgaben werden mit den Eingaben gemischt, da sie gedruckt werden, sobald sie berechnet wurden. Der wahre Wert ist
-1
; Falsey ist0
.quelle