กรณีกลับ quine ของคุณ
เขียน quine ซึ่งพยายามกลับตัวอักษร ascii ในซอร์สโค้ดให้มากที่สุด ตัวอย่างเช่นใน javascript:
(x=function(y){return ('(x='+y+')(x)').toUpperCase();})(x)
ใช้กฎ quine มาตรฐาน
คะแนนจะได้รับจากจำนวนไบต์ในรหัสที่มา - จำนวนกรณี inversions ตัวอย่างเช่น quine ด้านบนมีคะแนน 29
โปรแกรมที่มีคะแนนต่ำสุดจะชนะ หากสองโปรแกรมมีคะแนนเท่ากันรายการที่สั้นกว่าจะชนะ
คำตอบ
> <>คะแนน 479 - 479 = 0
lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllbfppllfepeeppppgglcepppbeppppppppppplfdppedpddpgglcdppbdpfcpecpggldcppllccpbcpplfbpebppldbppcbpggcbglefgpgbeglefgpgcbglefgpgggggedglefgpgccglefgpgfdglefgpgebglefgpgecglefgpggdcglefgpgceglefgpgeeglefgpgbcglefgpgfbglefgpgcdgfefgpbdgeefgpfegdefgpccgcefgpfdgbefgpdbgaefgpppddglefgpgbcglefgpgfcglefgpgdbglefgpgdcglefgpgecglefgpgddglefgpgdbglefgplffpbfgffgefgpcbgefgefgp
ลองออนไลน์!
มันทำงานอย่างไร
คำแนะนำที่มีประโยชน์น้อยมากใน> <> คือตัวอักษร อย่างไรก็ตามเรายังคงมีการl
ผลักความยาวของสแต็กไปที่สแต็ก ดังนั้นจึงเป็นไปได้ที่จะ (อย่างละเอียดมาก) พุชค่าตามอำเภอใจไปยังสแต็ก ดังนั้นสตริงจึงสามารถเข้ารหัสในลักษณะเดียวกับ Brainfuck โดยใช้a
เพื่อเพิ่มความยาวของสแต็กและg
หรือp
เพื่อลดความยาว
ตามกฎของควินปกติg
ไม่ได้ใช้ในการอ่านรหัสที่มาของตัวเองแทนการรักษาลงทะเบียนที่สถานที่เช่นbb
และbc
และอื่น ๆ
สตริงที่เข้ารหัสคือคำนำหน้า:
"r&:20&3-:&?.p48*-od0l2)?.;lllll"]"
ซึ่งหลังจากคำสั่งมากกว่า 7,000 คำสั่งจะแสดงสตริงต้นฉบับเป็นตัวพิมพ์ใหญ่
โกล> <> , 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
โกล> <>คะแนน 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 หรือต่ำกว่าอาจเป็นไปได้
V (กลุ่ม)คะแนน 3
2i2I
ลองออนไลน์!
4 ไบต์พร้อมการผกผัน 1 กรณี แทรกสองครั้ง ( 2i
) 2I
สตริง
รหัสเครื่อง 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
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 ปัจจุบันเนื่องจากฟังก์ชั่นเคสสวิตช์.š
ซึ่งทำให้จำนวนไบต์ใหญ่ขึ้น
ลองออนไลน์!
ทับทิมคะแนน24 20 16 12
eval S="print'EVAL s=';p S.swapcase"
ลองออนไลน์!
37 ไบต์พร้อม 25 กรณีผกผัน ตัวพิมพ์ของทุกตัวอักษรมีการเปลี่ยนแปลงในเอาต์พุต
Perl 5 , 37 ไบต์, เคสแบบสลับ 20 ตัว, คะแนน 17
ขอบคุณ@Dominic van Essenสำหรับ -1!
eval($a=q{print uc"eval(\$a=q{$a})"})
ลองออนไลน์!
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
ถังคะแนน 4
`④`④
ลองออนไลน์!
4 ไบต์พร้อมการแปลงกรณี 0
quine มาตรฐานที่ไม่มีการแปลงกรณีสามารถเอาชนะวิธีการ Keg ที่จะมีการแปลงกรณีได้อย่างง่ายดายเมื่อคุณโยนเทคนิคการแปลงกรณีลงในส่วนผสมคุณอาจเขียน quine มาตรฐานโดยไม่มีรายละเอียดแฟนซี
Javascript, 27 - 13 = 14
f=x=>`f=${f}`.toUpperCase()
ลองออนไลน์!
Python 2คะแนน 52 - 33 = 19
s='S=%r;PRINT S%%S.SWAPCASE()';print s%s.swapcase()
ลองออนไลน์!
กรณีกลับตัวอักษรทุกตัวใน quine
Rคะแนน = 78 - 53 = 25
a="a=%s;cat(toupper(sprintf(a,squote(a))))";cat(toupper(sprintf(a,sQuote(a))))
ลองออนไลน์!