쿼트. 퀸 + 고양이


22

Quat은 과 인기있는 esolang cat 프로그램 의 조합입니다 .

도전

문제는 표준 고양이 프로그램을 작성하는 것입니다. 사용자가 무엇을 입력하든 프로그램은 입력을 표준 출력에 반영합니다.
그러나, 입력의 길이가 0보다 큰 경우 (4)의 여러 프로그램을 출력해야 자체 소스 코드. 콰트 는 포르투갈어 콰트로 에서 유래 하며 '4'로 번역됩니다.

규칙

  • 표준 허점 적용
  • 파일에서 소스 코드를 읽을 수 없습니다
  • 빈 입력은 빈 출력을 생성해야합니다

보너스

입력 길이가 4의 배수 인 경우 quine 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 물론, \n1 바이트 입력을위한 줄 바꿈 문자
Bassdrop Cumberwubwubwub

좋아, 그것은 단지 내 언어로 입력을 복잡하게하며, 한 번에 한 줄씩 읽어야합니다.
군단 포유류 978

quine에 대한 내장이 허용됩니까? (참조 : 심각하게 )
Addison Crump

@FlagAsSpam 상관 없지만 메타 포스트가 더 적합하다고 생각합니다.
Bassdrop 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.
}_~

다른 버전에서는 스택 회전 트릭을 사용하여 변수를 사용하지 ]:\않습니다.


4

진심으로, 8 9 바이트

Q,ó;l4@%I

온라인으로 사용해보십시오

빈 입력을 테스트하려면 입력 상자에 한 번 입력하십시오.

첫 번째 보너스는 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`;ƒ

당신이 그 사람들 중 하나라면,이 결정적인 버전 (현재)을 고려한 다음 quines에 내장 된 사용에 관한 메타 스레드를 시작하십시오.


6
A의 quine의 도전, 당신은 프로그램 소스를 읽을 수 없습니다 생각합니다.
Conor O'Brien

3
지시 사항에 따르면 파일에서 읽을 수 없습니다. Q는 비어있을 때 소스를 스택으로 푸시하는 기본 제공 명령입니다. 나는 이것이 "언어의 강점에 따라 연주"에 속한다고 생각합니다
quintopia

4
내장 quining 함수가 소스 코드를 읽는다고 생각합니다. 도전에 "내장 요인 없음"이 표시 될 때 이항 계수 도전에 내장을 사용하는 것과 같습니다.
Martin Ender

4
Q는 기술적으로 파일에서 프로그램의 소스를 읽지 않습니다-인터프리터가 저장 한 RAM에 있습니다. 규칙은 구체적으로 "파일에서"를 나타내므로 유효해야합니다.
Mego

3
나는 이것이 왜 HQ9 +와 Ismael의 MarioGolf를 포함하여 내장 된 키네 연산자를 가진 이전의 언어보다 더 인기가 있는지 이해하지 못합니다. 그러나 어쨌든 빈 입력에 대해서는 프로그램이 올바르게 작동하지 않는 것 같습니다.
Martin Ender

2

Pyth, 33 * .75 = 24.75

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

테스트 스위트

결합을 사용한 표준 Pyth quine. 이것은 온라인 통역사에서 진정한 소란이며 최종 후행 줄 바꿈을 추가하지 않습니다.

최종 보너스 획득 결과는 39 * .7 = 27.3입니다.

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

2

Vitsy , 18 17 바이트

너무 가까이 . 유스 나는 지금 지어지지 않은 quiners들 사이에서 승리하고 있습니다! 심각하게 눈부심

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명령 보다 합법적 인 것 같습니다 .
Conor O'Brien

파일 I / O가 필요한 방법으로 볼 때 합법적이지 않은 것 같습니다.
quintopia

@ CᴏɴᴏʀO'Bʀɪᴇɴ Quintopia는 옳습니다. 파일 참조를 얻는다고해서 더 나아진 것은 아닙니다. : P
Addison Crump

2

이맥스 리스프 (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 당신이 맞아요 ... Elisp에서 부정 행위가 아닌 Quin을 찾아야 할 것 같아요
Lord Yuuma

1

자바 스크립트, 57 56 72 바이트 * 0.75 = 54

1 바이트 절약을위한 @Neil 덕분에!

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

내가 찾을 수있는 가장 짧은 해결책은 매우 간단했습니다.

그래서 여기 몇 가지 보너스 (더 흥미로운) 솔루션이 있습니다.

자바 스크립트, 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정수가 아닌 것을 전달하면 예외를 던지는 기능을 남용 합니다.

자바 스크립트, 83 바이트 * 0.70 = 58.1

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

이 마지막 것은 확실히 내가 좋아하는 것으로, 정규식을 사용하여 4 문자마다 입력을 나눕니다 /.{4}/. 우리가 문자열 끝에 문자가 남아 있으면 pop4로 나눌 수 없으므로 입력에 경고하십시오. 그렇지 않으면 pop배열의 길이가 1 씩 줄어 들었으므로이 시점에서 배열의 길이는 입력 길이 / 4와 같습니다.이 경우 fill에는 quine과 join공백이 있습니다.


조건을 반전시켜 바이트를 절약 할 수 있다고 생각합니다. (가) 달라 &&||하는 넣어 !전과 (p=prompt())의 제거 <1와 이동 p의 내부에있을 ?:.
Neil

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

수학, 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

자바 스크립트 ES6, 45 바이트

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

21 바이트 블 링퀸 확장. 믹싱 prompt및 기능 출력이 허용되기를 바랍니다.


0

자바 스크립트, 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.