케이스 반전 당신의 퀸

Aug 19 2020

소스 코드에서 가능한 한 많은 ASCII 문자의 대소 문자를 반전 시키려고 시도하는 퀸을 작성하십시오. 예를 들어 javascript에서 :

(x=function(y){return ('(x='+y+')(x)').toUpperCase();})(x)
  • 표준 퀸 규칙이 적용됩니다.

  • 점수는 다음과 같이 주어진다 소스 코드의 바이트 수 - 경우 역전의 수 . 예를 들어, 위의 퀸은 29 점입니다.

  • 점수가 가장 낮은 프로그램이 승리합니다. 두 프로그램의 점수가 같으면 짧은 프로그램이 이깁니다.

답변

26 SE-stopfiringthegoodguys Aug 19 2020 at 17:51

> <> , 점수 479-479 = 0

lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllbfppllfepeeppppgglcepppbeppppppppppplfdppedpddpgglcdppbdpfcpecpggldcppllccpbcpplfbpebppldbppcbpggcbglefgpgbeglefgpgcbglefgpgggggedglefgpgccglefgpgfdglefgpgebglefgpgecglefgpggdcglefgpgceglefgpgeeglefgpgbcglefgpgfbglefgpgcdgfefgpbdgeefgpfegdefgpccgcefgpfdgbefgpdbgaefgpppddglefgpgbcglefgpgfcglefgpgdbglefgpgdcglefgpgecglefgpgddglefgpgdbglefgplffpbfgffgefgpcbgefgefgp

온라인으로 시도하십시오!

작동 원리

> <>의 유용한 지침은 문자입니다. 그러나 l스택의 길이를 스택으로 밀어 넣는는 여전히 있습니다 . 따라서 임의의 값을 스택에 (매우 장황하게) 푸시 할 수 있습니다. 따라서 문자열은 a스택의 길이를 늘리 g거나 p줄이는 데 사용하여 brainfuck과 비슷한 방식으로 인코딩 할 수 있습니다 .

보통 quine의 규칙에 따라, g대신 같은 위치에서 레지스터를 유지, 소스 코드 자체를 읽는 데 사용되지 bbbc등등.

인코딩 된 문자열은 접두사입니다.

"r&:20&3-:&?.p48*-od0l2)?.;lllll"]"

7,000 개 이상의 명령어 후에 원래 문자열을 대문자로 출력합니다.

10 JoKing Aug 19 2020 at 20:14

골> <> , 77 75-75 = 0

urassssissezplzelssmzmzpssazmkqjmkrmbrrrrrtsuotlballsssssassmzpsssssbssmzpu

온라인으로 시도하십시오!

를 기반으로 버블의 대답 이도를 넣어 더 나아가 "점수를 얻기 위해 코드의 시작 0!

설명

ur       Move over one on the stack tape and reverse the stack
  assssissez      Push 10+16*4=74,-1+16*2=31,!(15)=0
            p     And put the 74 (J) at position 0,31

lz            Push 0 if there is anything on the stack
  e           Push 14 for later
   lssmzmz    Push 2+16*2=34, !(-1)=0, !(-1)=0
          p   Put the 34 (") at position 0,0

sss           Add 3*16 to the -1 from earlier
   az         Push !(10)=0
     mkq      Some no-ops
        J     And jump to 0,47 if the stack was initially empty

lballsssssassmzp  Put T at position 0,43
sssssbssmzpu      Put S at position 0,44
u                 Move one over on the stack again (effectively resetting the stack)

"                 Wrap, pushing everything to the stack
 r                Reverse
  .........       Put everything again
           J      But this time don't jump, since the stack is not empty

mk           Copy the bottom of the stack (u)
  rm         Push a -1 to the bottom of the stack
    brrrrr   No-ops

T   t      Finally, loop over the stack, 
 Suo       Capitalising then outputting everything until we get to the -1
8 Bubbler Aug 19 2020 at 11:28

Gol> <> , 점수 34-33 = 1

"mrllssslssscsmzpdsmzprrrrrrtsuota

온라인으로 시도하십시오!

다음을 출력하고 오류로 종료되며 선행을 제외한 모든 문자는 대문자 "입니다.

"MRLLSSSLSSSCSMZPDSMZPRRRRRRTSUOTA

작동 원리

로 표시된 줄 *은 이전 버전과의 차이점입니다.

"..."    Push every char except `"`
mrl      Push -1, reverse stack, push stack length (34 = `"`)
* lsss   Push stack length (35) and add 16 three times (83 = S)
* lsss   Push stack length (36) and add 16 three times (84 = T)
* csmzp  Push 13, add 16 (29), push -1, boolean negate (0), and
         replace the command at (29,0) by T
* dsmzp  Push 14, add 16 (30), push -1, boolean negate (0), and
         replace the command at (30,0) by S
* rrrrrr  Reverse the stack 6 times;
          no-op to move the positions to overwrite
TSuot    Infinite uppercase-print loop; halt by error at -1
a        Not executed

Gol> <> , 점수 34-31 = 3

"mrlTSuotaaaaaaaaaaaaaaaaaaaaaaaaa

온라인으로 시도하십시오!

다음을 출력하고 오류로 종료합니다.

"MRLTSUOTAAAAAAAAAAAAAAAAAAAAAAAAA

모든 소문자는 대문자이므로 수정되지 않은 유일한 문자는 "TS.

작동 원리

"..."  Start string literal, push every char in the source code (except `"`),
       wrap around and end string literal
mr     Push -1 and reverse the stack
       (setup the chars for printing from top, and bury the trap at the bottom)
l      Push length of stack, which gives 34 == `"`
T...t  Infinite loop until it errors in the middle:
 Su     Uppercase the char at the top (errors when trying to uppercase -1)
 o      Pop and print as char
a...   Not reached

2 개 이하가 가능할 것 같습니다.

6 Dingus Aug 19 2020 at 11:25

V (vim) , 점수 3

2i2I

온라인으로 시도하십시오!

1 개의 케이스 반전이있는 4 바이트. 2i문자열을 두 번 삽입 ( )합니다 2I.

6 ErikF Aug 21 2020 at 04:58

80186+ 기계 코드 (MS-DOS .COM 형식), 115-115 = 0

난 단지에 접근했다으로는,이 작업을 수행하는 것이 조금 까다했다 INC, DEC, PUSH, 특정 POP변형, POPA, IMUL, 특정 조건 점프. 다행히도이 IMUL도전을 위해 무거운 짐을들 수 있습니다!

나는 함께 곱해지는 일련의 값으로 인쇄를 수행하는 실제 코드를 인코딩했습니다. 이 값 (16 비트 값으로 잘림)을 계산하고 코드 바로 위에 있도록 이동 한 스택에 저장 한 다음 생성 된 코드로 이동하여 반대의 경우 프로그램 코드를 인쇄합니다.

기계 코드 :

hrXhCNhGUhnPhPwhYkhvLhKwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPQRjZTUVjfaiQVGARiQSCARiQPQARiQMJARiQJZARiQGuARiQDkARiQAWARpI

어셈블러 소스 :

IDEAL
P186

MODEL   TINY
CODESEG
ORG 100H

MAIN:
        ; Encoded code:
        ;   MOV SI,100H
        ;   MOV CX,73H
        ; PRINT:
        ;   LODSB
        ;   XOR AL,20H
        ;   INT 29H
        ;   NOP
        ;   LOOP PRINT
        ;   INT 20H
               ; Offset Bytes Multiplier
    PUSH 5872H ; +41    BE 00 4157H
    PUSH 4E43H ; +44    01 B9 416BH
    PUSH 5547H ; +47    73 00 4175H
    PUSH 506EH ; +4A    AC 34 415AH
    PUSH 7750H ; +4D    20 CD 414AH
    PUSH 6B59H ; +50    29 90 4151H
    PUSH 4C76H ; +53    E2 F8 4143H
    PUSH 774BH ; +56    CD 20 4147H

REPT 30
    POPA ; Adjust stack to point to end of generated code
ENDM

    PUSH AX
    PUSH CX
    PUSH DX
    PUSH 5AH
    PUSH SP
    PUSH BP
    PUSH SI
    PUSH 66H
    POPA ; Use POPA as POP DX and POP DI are not in [A-Za-z]
    IMUL DX,[BX+DI+56H],4147H
    PUSH DX
    IMUL DX,[BX+DI+53H],4143H
    PUSH DX
    IMUL DX,[BX+DI+50H],4151H
    PUSH DX
    IMUL DX,[BX+DI+4DH],414AH
    PUSH DX
    IMUL DX,[BX+DI+4AH],415AH
    PUSH DX
    IMUL DX,[BX+DI+47H],4175H
    PUSH DX
    IMUL DX,[BX+DI+44H],416BH
    PUSH DX
    IMUL DX,[BX+DI+41H],4157H
    PUSH DX
    JO $+4BH ; Jump to start of generated code

END MAIN
ENDS
5 the-cobalt Aug 20 2020 at 06:58

05AB1E, 16-6 = 10

0"D34çýu"D34çýu

(후행 개행)

설명

0"D34çýu"D34çýu # full code
0"D34çý "D34çý  # standard 05AB1E quine
       u      u # uppercase string in stack
                # implicit print

아니 최고의 골프,하지만 내이다 첫번째 그래서 자비를 베푸소서 골프하시기 바랍니다.

온라인으로 시도하십시오!


05AB1E (레거시), 16-8 = 8

0"D34çýš"D34çýš

(후행 개행)

설명

0"D34çýu"D34çýu # full code
0"D34çý "D34çý  # standard 05AB1E quine
       š      š # switch case builtin
                # implicit print

-2 점을받은 Kevin Cruijssen에게 감사드립니다. 현재 05AB1E에서는 작동하지 않습니다. 스위치 케이스 기능으로 인해 바이트 수가 더 커집니다.

온라인으로 시도하십시오!

5 Dingus Aug 19 2020 at 10:08

루비 , 점수 24 20 16 12

eval S="print'EVAL s=';p S.swapcase"

온라인으로 시도하십시오!

25 개의 케이스 반전이있는 37 바이트. 출력에서 모든 문자의 대소 문자가 변경됩니다.

3 DomHastings Aug 19 2020 at 13:51

Perl 5 , 37 바이트, 스왑 된 케이스 20 개, 점수 17

-1에 대한 @Dominic van Essen 에게 감사드립니다 !

eval($a=q{print uc"eval(\$a=q{$a})"})

온라인으로 시도하십시오!

3 SeanSchricker Aug 22 2020 at 06:45

자바 스크립트 (Node.js) , 70-38 = 32

f=x=>`f=${f}`.replace(/(.)/g,y=>y<'`'?y.toLowerCase():y.toUpperCase())

온라인으로 시도하십시오!

BTW : 이것은 저의 첫 번째 기여이며 약간 혼란 스럽습니다. 가능한 모든 캐릭터를 교체했습니다. 예제는 대문자입니다. 실제로 케이스를 바꿀 필요가 없다면 위에 주어진 대답의 단순화 된 변형으로 11-0 = 11을 얻을 수 있습니다.

f=x=>"f="+f
2 Lyxal Aug 19 2020 at 11:33

케그 , 점수 4

`④`④

온라인으로 시도하십시오!

대소 문자 변환이없는 4 바이트.

케이스 변환이없는 표준 quine은 케이스 변환이있는 모든 Keg 접근 방식을 쉽게 능가합니다. 케이스 변환 기술을 믹스에 넣을 때쯤에는 멋진 세부 사항없이 표준 quine을 작성했을 수도 있습니다.

2 Shaggy Aug 20 2020 at 00:22

자바 스크립트, 27-13 = 14

f=x=>`f=${f}`.toUpperCase()

온라인으로 시도하십시오!

1 ovs Aug 19 2020 at 13:23

Python 2 , 점수 52-33 = 19

s='S=%r;PRINT S%%S.SWAPCASE()';print s%s.swapcase()

온라인으로 시도하십시오!

Case는 Quine의 모든 문자를 반전시킵니다.

1 DominicvanEssen Aug 19 2020 at 17:17

R , 점수 = 78-53 = 25

a="a=%s;cat(toupper(sprintf(a,squote(a))))";cat(toupper(sprintf(a,sQuote(a))))

온라인으로 시도하십시오!