InterpretMe通訳をゴルフする


8

これは非常に単純な課題です。

ジョーク言語InterpretMeは1つのコマンドで構成されています。*これにより、プログラムはInterpretMeプログラムの入力を取得して実行します。

InterpretMeプログラムは*、入力と同じ数のInterpretMeプログラムを解釈します。


あなたの目標は、InterpretMeをできるだけ少ないバイト数で解釈するプログラムを作成することです。


入力

入力は、1行のASCII文字列、本当に必要な場合はUnicode utf-8文字列、必要な場合は言語が使用する文字エンコーディングで構成されます。これらの文字列は、InterpretMeインタープリターの最初またはすべての実行の開始時に入力できます。それらがすべて最初に入力された場合、プログラムは開始時にすべてのプログラム行を出力する必要があります。

出力

この課題では、1つの入力のオプションを選択しない限り、出力はありません。それ以外の場合は、終了と非終了のみです。


テストケースは、入力と出力ではなく、入力と終了で構成されます。改行は、InterpretMeとして解釈される新しい入力を示します。

最初に1つの入力を使用する場合、これは、これらのプログラムが入力されたときに出力され、非アクティブな(何もしない)行が続くと考えられます。

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]

繰り返しますが、これはなので、バイト数は少ない方が良いです


1
よくわかりません。ほとんどすべての言語でこれは0バイトではありませんか?
— ジェームズ

1
いいえ、プログラムに "*"がある数だけ入力を取る必要があるため、各入力で同じことを繰り返します
— Destructible Lemon

非終了プログラムの例を挙げていただけますか?
— Neil、

17
一瞬待って?何?
— Rohan Jhunjhunwala

3
これは、プログラムが入力を「実際に解釈」するかどうかの明確な基準がないため、明確に定義された課題のようには見えません。
— user2357112は

回答:


2

05AB1E、11バイト

コード:

[¬'*QiIJ}¦Ž

説明:

[            # 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

CP-1252エンコーディングを使用します。オンラインでお試しください。。


10

Python 3、35バイト

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

iを1に設定し、 '*' -1の量をiに追加します

私は~できなかった策略でこれを減らすことができると思います


9

Pythonの3、39の 38バイト

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

@atlasologistのおかげで1バイト節約


2
CoffeeScriptで35バイトf=->f()for c in prompt()when c=='*'(自分の直接のコピーなので、別の回答はしたくない)
— Bojidar Marinov

2
(のdef f()代わりにf=lambda)通常の関数を使用してバイトを節約すると思います。
— アトラスロジスト2016

8

Ruby、29バイト

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

Rubyの魔法の変数$.は、stdinから読み取られた行数を追跡します。この数がアスタリスクの数(プラス1)を下回っている間は、入力を読み続けます。


6

JavaScript、53 45 44バイト

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

JavaScriptには優れたI / Oがないため、このプログラムを使用するのはかなり面倒です。

プログラムを要求し、次に*入力プログラムのすべてに対して別のプログラムを要求します。


6

Javaのみ45 60 101 100 99バイト

逆コードゴルフ:D。仕様を2回読み間違えていることに気づきましたが、今はうまくいくはずです。単純なようですが、おそらくこれをラムダ式として書くより良い方法があるでしょう。

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

わずか17バイトのわずかにだらしない浮気!

void a(char[]a){}

このバージョンは、本当に速いタイピングを介して入力を受け取ります


2
if(b=='*')if(b==42)-1バイトでゴルフできます。そして、new Java.util.Scanner(小文字でなければなりませんj。逆コードゴルフ部分の+1。;)
— Kevin Cruijssen

1
この答えは私の日を作りました:D for(int b:a)は追加のバイトを節約するので、何もしないのに100バイト未満:D
— Frozn

ありがとう!@Frozn(ppcgによれば、これらの文字はコメントに役立ちます)
— Rohan Jhunjhunwala


4

APL、15バイト

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

テスト:

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

説明:

              ⍞  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)

2

Perl、33バイト

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

入力で*が発生する回数をカウントし、それをループ回数に追加します。インクリメントと同じ手順でデクリメントを行う方法があるはずだと思いますが、理解できませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.