クアット。クイン+猫


22

Quatは、と人気のあるエソランキャットプログラムの組み合わせです。

チャレンジ

課題は、標準的なcatプログラムを作成することです。ユーザーが何を入力しても、プログラムは入力を標準出力にエコーします。
しかし、入力の長さが0よりも大きい場合及び 4の倍数、プログラムすべき出力独自のソースコード。Quatはポルトガル語のquatroに由来し、「four」に変換されます。

ルール

  • 標準的な抜け穴が適用されます
  • あなたはファイルからソースコードを読まないかもしれません
  • 空の入力は空の出力を生成するはずです

ボーナス

入力長が4の倍数である場合、クインlength/4タイムを印刷することで25%のボーナスを獲得できます。出力をスペースで区切ると、さらに5%のボーナス(末尾のスペースは許可されません)。

テストケース

次のテストケースがプログラムに適用されますin%4=0?cat:self(実際の言語ではありません)。

<empty input> -> <empty output>
input -> input
1234 -> in%4=0?cat:self
12345678 -> in%4=0?cat:self 0%ボーナス
12345678 -> in%4=0?cat:selfin%4=0?cat:self 25%ボーナス
12345678 -> in%4=0?cat:self in%4=0?cat:self 30%ボーナス

得点

これはです。バイト単位の最短コードが優先されます。


入力に複数の行を含めることはできますか?
LegionMammal978

LegionMammal978勿論、@、聞かせて\n入力の1バイトのための改行文字、なる
Bassdrop Cumberwubwubwub

さて、それは私の言語での入力を複雑にしているだけです。
LegionMammal978

クインの組み込みは許可されていますか?(参照:真剣に
アディソンクランプ

@FlagAsSpam気にしませんが、ここではメタ投稿の方が適切だと思います。
バスドロップCumberwubwubwub

回答:


8

CJam、23 * 0.75 = 17.25バイト

標準の一般化されたクイン...

{`"_~"+q:Q,4md@@*Q\?}_~

または

{`"_~"+q_,4md@@]:\*?}_~

ここでテストしてください。

説明

{`"_~"+  e# Generalised quine framework. Leaves the source code on the stack.
  q:Q    e# Read input and store it in Q.
  ,      e# Get its length.
  4md    e# Divmod 4.
  @      e# Pull up the source code.
  @      e# Pull up the div.
  *      e# Repeat the source code that many times.
  Q\     e# Push the input and swap it below the repeated source.
  ?      e# Pick the right output based on the modulo.
}_~

もう1つのバージョンでは、stack-rotation trickを使用して変数の使用を回避しています]:\


4

真剣に、8 9バイト

Q,ó;l4@%I

オンラインで試す

(空の入力をテストするには、入力ボックスに1回入力します。)

最初のボーナスは12バイト(16 * .75)で実行できます:

Q,ó;l;4@\(*)4@%I

説明:

Q                   Push program source to stack
 ,ó                 Push input string, and terminate if it's empty
   ;l               Push length of input
     4@%            Take the length mod 4.
        I           Pick the next stack element (input) if nonzero,
                    else the next next (program source)

Seriouslyのquiningビルトインの使用Qを好まない人もいるため、参照に使用しないこの22バイトバージョンを提供します。

`è";ƒ"(+,ó;l4@%I`;ƒ

あなたがそれらの人々の一人である場合、これを決定的なバージョンと考え(現時点では)、クインの組み込みの使用に関するメタスレッドを開始してください。


6
クワイン挑戦、私はあなたがプログラムソースを読むことができないと信じています。
コナーオブライエン

3
指示には、ファイルから読み取ることができないと書かれています。Qは、ソースが空の場合にソースをスタックにプッシュする組み込みコマンドです。これは「言語の強みを
活かす

4
組み込みのquining関数はソースコードを読み取ると思います。これは、「ビルトイン階乗なし」と言われるときに、二項係数チャレンジにビルトインを使用するようなものです。
マーティンエンダー

4
Qは、プログラムのソースを技術的にはファイルから読み取りません-インタープリターによって保存されたRAMにあります。ルールには「ファイルから」と明記されているため、これは有効です。
Mego

3
これが、HQ9 +やIsmaelのMarioGolfなど、組み込みのクイン演算子を持つ以前のどの言語よりも人気があるのか​​、本当にわかりません。しかし、いずれの場合でも、プログラムは空の入力に対して正しく動作しないようです。
マーティンエンダー

2

パイス、33 * .75 = 24.75

?%lz4z*/lz4jN*2]"?%lz4z*/lz4jN*2]

テストスイート

結合を使用した標準のPythクイン。これは、オンライン通訳者の真のクインであり、最後の改行を追加しません。

最終的なボーナスを取得すると、39 * .7 = 27.3のスコアが得られます。

?%lz4zjd*/lz4]jN*2]"?%lz4zjd*/lz4]jN*2]

2

Vitsy18 17バイト

とても近いユス。私は今、クインカーで構築されていない中で勝ち取っています!まじめにまぶしさ

zl4M([&'rd3*8\}]Z
z                 Grab ALL THE INPUT! :D
 l4M([         ]  If the input is a multiple of four, do the stuff in brackets.
      &           Generate a new stack and move to it.
       'rd3*      Standard quine.
            8\}   Push the bottom 8 items of the stack to the top.
                Z Output the current stack.

ボーナスの後に行く理由はありません-彼らはより多くのバイトをチャックします。

不正行為のバージョン、12バイト:

zl4M([&iG`]Z
zl4M([&   ]Z  Same as above.
       i      Push -1.
        G     Get the name of the file with this index of use (-1 is self)
         `    Read the file with the given name and push its contents to the stack.

G` かっこいい!単純なQコマンドよりも合法的なようです。
コナーオブライエン

ファイルI / Oを必要とする方法として、私にはあまり合法ではないようです。
キントピア

@CᴏɴᴏʀO'BʀɪᴇɴQuintopiaは正しいです-ファイル参照を取得したからといって、それが良いとは限りません。:P
アディソンクランプ

2

Emacs Lisp(323 * 0.75 = 242.25)

((lambda (s) (let* ((a (read-string "")) (l (string-bytes a))) (if (> (% l 4) 0) (message a) (dotimes (v (/ l 4)) (prin1 (list s (list (quote quote) s))))))) (quote (lambda (s) (let* ((a (read-string "")) (l (string-bytes a))) (if (> (% l 4) 0) (message a) (dotimes (v (/ l 4)) (prin1 (list s (list (quote quote) s)))))))))

これは、Lispの引用メカニズムを使用して、ソースコードをそれ自体への入力として提供します。

古い不正版

:; exec emacs -Q -script $0
(find-file(nth 2 command-line-args))(set'b(buffer-string))(set's(read-string""))(set'l(string-bytes s))(if(>(% l 4)0)(message s)(dotimes(v(/ l 4))(message"%s"b)))

ゴルフをしていない:

:; exec emacs -Q -script $0
(find-file(nth 2 command-line-args)) ; open self
(set'b(buffer-string))               ; read own code to string
(set's(read-string""))               ; read input
(set'l(string-bytes s))              ; length of input
(if(>(% l 4)0)                       ; l % 4 > 0 ?
    (message s)                      ; output input
  (dotimes(v(/ l 4))                 ; (implicit else) repeat l/4 times
    (message"%s"b)))                 ; output own code

2
これは、「ファイルからソースコードを読み取ってはならない」という規則に違反していませんか?
ThisSuitIsBlackNot

@ThisSuitIsBlackNotあなたは正しい...私はエリスプで非不正なクインを探す必要があると思います
主ゆうま

1

JavaScript、57 56 72バイト* 0.75 = 54

@Neilに1バイトの節約をありがとう!

(f=_=>alert(!(p=prompt())||(l=p.length)%4?p:`(f=${f})()`.repeat(l/4)))()

私が見つけた最短の解決策は、非常に簡単でした。

したがって、ここにいくつかのボーナス(より興味深い)ソリューションがあります。

JavaScript、82 81バイト* 0.75 = 60.75

f=_=>{try{p=prompt();a=`f=${f};f()`.repeat(p.length/4)}catch(e){a=p}alert(a)};f()

これrepeatは、非整数が渡された場合に例外をスローする機能を悪用します。

JavaScript、83バイト* 0.70 = 58.1

(f=_=>alert((a=(p=prompt()).split(/.{4}/)).pop()?p:a.fill(`(f=${f})()`).join` `))()

この最後のものは間違いなく私のお気に入りであり、regexを使用して入力を4文字ごとに分割します/.{4}/。文字列の末尾にが残っている場合pop、4で割り切れないため、入力に注意してください。それ以外の場合は、pop配列の長さを1つ減らしたため、この時点で配列の長さは入力の長さ/ 4に等しくなります。この場合、fillそれはクインとjoinスペースのみです。


条件を反転することで1バイト節約できると思います。&&toを変更し||、の!前にを置き(p=prompt())、を削除して<1pをtoの内側に移動します?:
ニール

1

Perl、68 65 * 0.75 = 48.75バイト

perl -e'$_=q{print+($l=($~=<>)=~y///c)%4?$~:"\$_=q{$_};eval"x($l/4)};eval'

こちらのオンラインテストスイートをご覧ください。

壊れた

perl -e'
    $_=q{                      # store source code in $_
        print+(
            $l=($~=<>)=~ y///c # read STDIN into $~, assign length to $l
        )%4 ?                  # if length is a multiple of 4
             $~ :              # print $~
             "\$_=q{$_};eval"  # otherwise, print source code
             x($l/4)           # length/4 times
    };
    eval'                      # eval $_ to execute its contents

0

Mathematica、229バイト

($RecursionLimit = Infinity; WriteString[$Output, If[Mod[StringLength[a = (If[(a = InputString[]) === EndOfFile, "", StringJoin["\n", a, #0[]]] & )[]], 4] == 1, ToString[#0, InputForm][], If[a == "", "", StringDrop[a, 1]]]]) & []

すべての空白はInputForm、プログラムの実際のコードと一致するためのものです。


0

Javascript ES6、45バイト

$=(_=prompt())=>_.length%4?_:`$=${$};$()`;$()

21バイトのBling Quineの拡張。混合promptと関数の出力が許可されることを願っています。


0

JavaScript、33バイト

f=(i,l=i.length)=>l%4?i:("f="+f).repeat(l/4)
  • +44バイト
  • -25%ボーナス

その他の解決策:

44 36バイト

f=(i,l=i.length)=>l%4?i:("f="+f).repeat(!!l)

f=(i,l=i.length)=>l%4?i:l?("f="+f):i

38.5バイト

f=(i,l=i.length)=>l%4?i:Array(l/4).fill("f="+f).join` `
  • +55バイト
  • -25%ボーナス
  • -5%ボーナス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.