กรณีกลับ quine ของคุณ

Aug 19 2020

เขียน quine ซึ่งพยายามกลับตัวอักษร ascii ในซอร์สโค้ดให้มากที่สุด ตัวอย่างเช่นใน javascript:

(x=function(y){return ('(x='+y+')(x)').toUpperCase();})(x)
  • ใช้กฎ quine มาตรฐาน

  • คะแนนจะได้รับจากจำนวนไบต์ในรหัสที่มา - จำนวนกรณี inversions ตัวอย่างเช่น quine ด้านบนมีคะแนน 29

  • โปรแกรมที่มีคะแนนต่ำสุดจะชนะ หากสองโปรแกรมมีคะแนนเท่ากันรายการที่สั้นกว่าจะชนะ

คำตอบ

26 SE-stopfiringthegoodguys Aug 19 2020 at 17:51

> <>คะแนน 479 - 479 = 0

lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllbfppllfepeeppppgglcepppbeppppppppppplfdppedpddpgglcdppbdpfcpecpggldcppllccpbcpplfbpebppldbppcbpggcbglefgpgbeglefgpgcbglefgpgggggedglefgpgccglefgpgfdglefgpgebglefgpgecglefgpggdcglefgpgceglefgpgeeglefgpgbcglefgpgfbglefgpgcdgfefgpbdgeefgpfegdefgpccgcefgpfdgbefgpdbgaefgpppddglefgpgbcglefgpgfcglefgpgdbglefgpgdcglefgpgecglefgpgddglefgpgdbglefgplffpbfgffgefgpcbgefgefgp

ลองออนไลน์!

มันทำงานอย่างไร

คำแนะนำที่มีประโยชน์น้อยมากใน> <> คือตัวอักษร อย่างไรก็ตามเรายังคงมีการlผลักความยาวของสแต็กไปที่สแต็ก ดังนั้นจึงเป็นไปได้ที่จะ (อย่างละเอียดมาก) พุชค่าตามอำเภอใจไปยังสแต็ก ดังนั้นสตริงจึงสามารถเข้ารหัสในลักษณะเดียวกับ Brainfuck โดยใช้aเพื่อเพิ่มความยาวของสแต็กและgหรือpเพื่อลดความยาว

ตามกฎของควินปกติgไม่ได้ใช้ในการอ่านรหัสที่มาของตัวเองแทนการรักษาลงทะเบียนที่สถานที่เช่นbbและbcและอื่น ๆ

สตริงที่เข้ารหัสคือคำนำหน้า:

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

ซึ่งหลังจากคำสั่งมากกว่า 7,000 คำสั่งจะแสดงสตริงต้นฉบับเป็นตัวพิมพ์ใหญ่

10 JoKing Aug 19 2020 at 20:14

โกล> <> , 77 75 - 75 = 0

urassssissezplzelssmzmzpssazmkqjmkrmbrrrrrtsuotlballsssssassmzpsssssbssmzpu

ลองออนไลน์!

จากคำตอบของ Bubblerสิ่งนี้จะไปได้ไกลกว่าเดิมโดยใส่"ที่จุดเริ่มต้นของรหัสเพื่อรับคะแนน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

โกล> <>คะแนน 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

โกล> <>คะแนน 34 - 31 = 3

"mrlTSuotaaaaaaaaaaaaaaaaaaaaaaaaa

ลองออนไลน์!

แสดงผลลัพธ์ต่อไปนี้และออกโดยข้อผิดพลาด

"MRLTSUOTAAAAAAAAAAAAAAAAAAAAAAAAA

ทุกตัวอักษรตัวพิมพ์เล็กจะ uppercased "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 (กลุ่ม)คะแนน 3

2i2I

ลองออนไลน์!

4 ไบต์พร้อมการผกผัน 1 กรณี แทรกสองครั้ง ( 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

ขอบคุณ Kevin Cruijssen สำหรับ -2 คะแนน ไม่ทำงานกับ 05AB1E ปัจจุบันเนื่องจากฟังก์ชั่นเคสสวิตช์ซึ่งทำให้จำนวนไบต์ใหญ่ขึ้น

ลองออนไลน์!

5 Dingus Aug 19 2020 at 10:08

ทับทิมคะแนน24 20 16 12

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

ลองออนไลน์!

37 ไบต์พร้อม 25 กรณีผกผัน ตัวพิมพ์ของทุกตัวอักษรมีการเปลี่ยนแปลงในเอาต์พุต

3 DomHastings Aug 19 2020 at 13:51

Perl 5 , 37 ไบต์, เคสแบบสลับ 20 ตัว, คะแนน 17

ขอบคุณ@Dominic van Essenสำหรับ -1!

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

ลองออนไลน์!

3 SeanSchricker Aug 22 2020 at 06:45

JavaScript (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 ไบต์พร้อมการแปลงกรณี 0

quine มาตรฐานที่ไม่มีการแปลงกรณีสามารถเอาชนะวิธีการ Keg ที่จะมีการแปลงกรณีได้อย่างง่ายดายเมื่อคุณโยนเทคนิคการแปลงกรณีลงในส่วนผสมคุณอาจเขียน quine มาตรฐานโดยไม่มีรายละเอียดแฟนซี

2 Shaggy Aug 20 2020 at 00:22

Javascript, 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()

ลองออนไลน์!

กรณีกลับตัวอักษรทุกตัวใน 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))))

ลองออนไลน์!