Golf ein InterpretMe Dolmetscher

8

Dies ist eine sehr einfache Herausforderung.

Die Scherzsprache InterpretMe besteht aus einem Befehl; *, wodurch das Programm die Eingabe eines InterpretMe-Programms übernimmt und ausführt.

Ein InterpretMe-Programm interpretiert so viele InterpretMe-Programme, wie *eingegeben werden.


Ihr Ziel ist es, ein Programm zu erstellen, das InterpretMe in möglichst wenigen Bytes interpretiert.


Eingang

Die Eingabe besteht aus einzeiligen ASCII-Zeichenfolgen, Unicode-utf-8-Zeichenfolgen, wenn Sie dies wirklich möchten, oder einer beliebigen Zeichenkodierung, die Ihre Sprache verwendet, wenn Sie dies wünschen. Diese Zeichenfolgen können entweder zu Beginn oder zu Beginn jedes Laufs des InterpretMe-Interpreters eingegeben werden. Wenn sie alle zu Beginn eingegeben werden, muss das Programm jede Programmzeile beim Start ausgeben.

Ausgabe

Bei dieser Herausforderung gibt es keine Ausgabe, es sei denn, die Option einer Eingabe ist ausgewählt, andernfalls nur Beendigung und Nichtbeendigung


Testfälle bestehen nicht aus Eingabe und Ausgabe, sondern aus Eingabe und Beendigung. Eine neue Zeile kennzeichnet eine neue Eingabe, die als InterpretMe interpretiert werden soll.

Wenn Sie zu Beginn einen Eingang verwenden, kann dies als Ausgabe betrachtet werden, wenn diese Programme eingegeben werden, gefolgt von inaktiven Zeilen (nichts tun).

1. *   (executes input as an interpret me program, finishes)
2. *   (^same)
3. **  (executes input as an interpret me program, then does this again after the first program is done, finishes)
4. hi  (nothing, first star of previous line finishes)
5. **  (same as the other two star line)
6. hi  (nothing, first star of previous line finishes)
7. hi  (nothing, second star of line 5 finishes, so second star of line 3 finishes, so line 2 finishes, so line one finishes)
[termination] (not outputted)

hi  (does nothing and finishes)
[termination]

*hi  (executes inputted program, finishes)
*yo  (executes inputted program, finishes)
hey  (nothing)
[termination]

Auch dies ist , also sind weniger Bytes besser

Zerstörbare Zitrone
quelle
1
Ich verstehe nicht wirklich. Sind das nicht 0 Bytes in so ziemlich jeder Sprache?
James
1
Nein, da Sie so oft Eingaben vornehmen müssen, wie "*" in einem Programm vorhanden sind, und diese dann bei jeder Eingabe wiederholen müssen
Destructible Lemon
Können Sie ein Beispiel für ein Nichtbeendigungsprogramm geben?
Neil
17
Warte kurz? Was?
Rohan Jhunjhunwala
3
Dies scheint keine genau definierte Herausforderung zu sein, da es kein klares Kriterium dafür zu geben scheint, ob ein Programm seine Eingabe "tatsächlich interpretiert" oder nicht.
user2357112 unterstützt Monica

Antworten:

2

05AB1E , 11 Bytes

Code:

[¬'*QiIJ}¦Ž

Erläuterung:

[            # Enter an infinite loop
 ¬           # Get the first character of the input string (leaves the input on the stack)
  '*Qi  }    # If equal to an asterisk...
      I      # Request another line of input and
       J     # Join it to the string that was left on the stack
         ¦   # Remove the first character
          Ž  # If everything is processed, terminate

Verwendet die CP-1252- Codierung. Online ausprobieren? .

Adnan
quelle
10

Python 3, 35 Bytes

i=1
while i:i+=input().count('*')-1

setzt i auf eins, addiert den Betrag von '*' -1 zu i

Ich denke, ich kann das mit ~Tricks reduzieren, die ich nicht konnte

Zerstörbare Zitrone
quelle
9

Python 3, 39 38 Bytes

def f():[f()for c in input()if c=="*"]

1 Byte dank @atlasologist gespeichert

TuxCrafting
quelle
2
35 Bytes in CoffeeScript f=->f()for c in prompt()when c=='*'(ich möchte keine weitere Antwort geben, da es eine direkte Kopie von Ihnen ist)
Bojidar Marinov
2
Ich denke, Sie würden ein Byte sparen, indem Sie eine reguläre Funktion ( def f()anstelle der f=lambda) verwenden.
Atlasologe
8

Ruby, 29 Bytes

i=1
i+=gets.count ?*while$.<i

Rubys magische Variable $.verfolgt die Anzahl der von stdin gelesenen Zeilen. Lesen Sie die Eingabe weiter, während diese Zahl niedriger ist als die Anzahl der Sternchen (plus der ersten 1).

daniero
quelle
6

JavaScript, 53 45 44 Bytes

f=_=>{for(i in prompt().match(/\*/g))f()}f()

Die Verwendung dieses Programms ist aufgrund des Mangels an guter E / A in JavaScript ziemlich ärgerlich.

Fragt nach einem Programm und fragt dann nach einem anderen Programm für jedes *im Eingabeprogramm.

Geschäftskat
quelle
6

Nur Java 45 60 101 100 99 Bytes

Reverse Code-Golf: D. Mir ist aufgefallen, dass ich die Spezifikationen (zweimal) falsch gelesen habe, aber jetzt sollte es funktionieren. Scheint einfach genug, vielleicht gibt es eine bessere Möglichkeit, dies als Lamda-Ausdruck zu schreiben.

void a(char[]a){for(char b:a)if(b==42)a(new java.util.Scanner(System.in).nextLine().toCharArray());}

Etwas schäbiges Betrügen für nur 17 Bytes!

void a(char[]a){}

Diese Version wird durch sehr schnelles Tippen eingegeben

Rohan Jhunjhunwala
quelle
2
if(b=='*')kann if(b==42)für -1 Byte gespielt werden. Und new Java.util.Scanner(sollte mit Kleinbuchstaben sein j. +1 für den Reverse-Code-Golf-Teil. ;)
Kevin Cruijssen
1
Diese Antwort machte meinen Tag: D for(int b:a)speichert ein zusätzliches Byte, also weniger als 100 Bytes für nichts zu tun: D
Frozn
Vielen Dank! @Frozn (diese Zeichen helfen dem Kommentar laut ppcg)
Rohan Jhunjhunwala
4

Mathematica, 38 Bytes

f:=StringCases[InputString[],"*":>f];f
Alephalpha
quelle
4

APL, 15 Bytes

{⍵='*':∇¨⍞⋄⍬}¨⍞

Prüfung:

      {⍵='*':∇¨⍞⋄⍬}¨⍞
*
*
**
hi
**
hi
hi
⍝ termination

Erläuterung:

              ⍞  read a line from the keyboard
{           }¨   for each character:
 ⍵='*':          if it is *:
         ⍞         read another line from the keyboard
       ∇¨          do the same for each character
          ⋄⍬     otherwise, return empty list (which displays as nothing)
Marinus
quelle
2

Perl, 33 Bytes

for(my$c;$c+=()=<>=~/\*/g;$c--){}

Zählt die Häufigkeit, mit der * in der Eingabe vorkommt, und addiert diese zur Häufigkeit der Schleifen. Ich denke, es sollte eine Möglichkeit geben, das Dekrementieren im selben Schritt wie das Inkrementieren durchzuführen, aber ich konnte es nicht herausfinden.

theLambGoat
quelle