Fall invertieren Sie Ihre Quine
Schreiben Sie eine Quine, die versucht, den Fall von möglichst vielen ASCII-Zeichen im Quellcode umzukehren. Zum Beispiel in Javascript:
(x=function(y){return ('(x='+y+')(x)').toUpperCase();})(x)
Es gelten die Standardregeln für Quine.
Die Bewertung wird durch die Anzahl der Bytes im Quellcode angegeben - Anzahl der Fallumkehrungen . Zum Beispiel hat die Quine oben eine Punktzahl von 29.
Das Programm mit der niedrigsten Punktzahl gewinnt. Wenn zwei Programme die gleiche Punktzahl haben, gewinnt das kürzere.
Antworten
> <> , Punktzahl 479 - 479 = 0
lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllbfppllfepeeppppgglcepppbeppppppppppplfdppedpddpgglcdppbdpfcpecpggldcppllccpbcpplfbpebppldbppcbpggcbglefgpgbeglefgpgcbglefgpgggggedglefgpgccglefgpgfdglefgpgebglefgpgecglefgpggdcglefgpgceglefgpgeeglefgpgbcglefgpgfbglefgpgcdgfefgpbdgeefgpfegdefgpccgcefgpfdgbefgpdbgaefgpppddglefgpgbcglefgpgfcglefgpgdbglefgpgdcglefgpgecglefgpgddglefgpgdbglefgplffpbfgffgefgpcbgefgefgp
Probieren Sie es online aus!
Wie es funktioniert
Sehr wenige nützliche Anweisungen in> <> sind Buchstaben. Wir haben jedoch immer noch die lMöglichkeit, die Länge des Stapels auf den Stapel zu verschieben. Daher ist es möglich, (sehr ausführlich) beliebige Werte auf den Stapel zu übertragen. Somit können Strings auf ähnliche Weise wie Brainfuck codiert werden a, um die Länge des Stapels zu erhöhen goder pzu verringern.
Wie üblich quine Regeln gverwendet wird , nicht den Quellcode selbst zu lesen, anstatt Register an Stellen wie die Aufrechterhaltung bbund bcund so weiter.
Die codierte Zeichenfolge ist das Präfix:
"r&:20&3-:&?.p48*-od0l2)?.;lllll"]"
Was nach über 7.000 Anweisungen die ursprüngliche Zeichenfolge in Großbuchstaben ausgibt.
Gol> <> , 77 75 - 75 = 0
urassssissezplzelssmzmzpssazmkqjmkrmbrrrrrtsuotlballsssssassmzpsssssbssmzpu
Probieren Sie es online aus!
Basierend auf der Antwort von Bubbler geht dies noch weiter, indem Sie auch "den Code an den Anfang des Codes setzen, um eine Punktzahl von zu erhalten 0!
Erläuterung
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
Gol> <> , Punktzahl 34 - 33 = 1
"mrllssslssscsmzpdsmzprrrrrrtsuota
Probieren Sie es online aus!
Gibt Folgendes aus und wird fälschlicherweise beendet, wobei jedes Zeichen außer dem führenden in Großbuchstaben geschrieben wird ".
"MRLLSSSLSSSCSMZPDSMZPRRRRRRTSUOTA
Wie es funktioniert
Die mit gekennzeichneten Linien *sind die Unterschiede zur vorherigen Version.
"..." 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> <> , Punktzahl 34 - 31 = 3
"mrlTSuotaaaaaaaaaaaaaaaaaaaaaaaaa
Probieren Sie es online aus!
Gibt Folgendes aus und wird versehentlich beendet.
"MRLTSUOTAAAAAAAAAAAAAAAAAAAAAAAAA
Alle Kleinbuchstaben werden in Großbuchstaben geschrieben, sodass nur Zeichen geändert werden, die nicht geändert werden "TS.
Wie es funktioniert
"..." 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
Ich vermute, dass 2 oder weniger möglich sein könnten.
V (vim) , Punktzahl 3
2i2I
Probieren Sie es online aus!
4 Bytes mit 1 Fallinversion. Zweimal fügt ( 2i) die Zeichenfolge ein 2I.
80186+ Maschinencode (MS-DOS .COM-Format), 115-115 = 0
Es war ein bisschen schwierig , dies zu tun, da ich nur den Zugang zu hatte INC, DEC, PUSH, bestimmte POPVariationen POPA, IMULund bestimmte bedingte Sprünge. Zum Glück IMULkönnte das schwere Heben für diese Herausforderung tun!
Ich habe den eigentlichen Code, der den Druck ausführt, in einer Reihe von Werten codiert, die miteinander multipliziert werden. Ich berechne diese Werte (die auf 16-Bit-Werte abgeschnitten werden), speichere sie auf dem Stapel, den ich so verschoben habe, dass sie sich direkt über dem Code befinden, und springe dann zum generierten Code, um den Code des Programms im umgekehrten Fall zu drucken.
Maschinensprache:
hrXhCNhGUhnPhPwhYkhvLhKwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPQRjZTUVjfaiQVGARiQSCARiQPQARiQMJARiQJZARiQGuARiQDkARiQAWARpI
Assembler-Quelle:
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
(nachfolgende Newline)
Erläuterung
0"D34çýu"D34çýu # full code
0"D34çý "D34çý # standard 05AB1E quine
u u # uppercase string in stack
# implicit print
Nicht das beste Golf, aber es ist mein erstes Golf, also erbarme dich bitte.
Probieren Sie es online aus!
05AB1E (Legacy), 16 - 8 = 8
0"D34çýš"D34çýš
(nachfolgende Newline)
Erläuterung
0"D34çýu"D34çýu # full code
0"D34çý "D34çý # standard 05AB1E quine
š š # switch case builtin
# implicit print
Vielen Dank an Kevin Cruijssen für -2 Punkte. Funktioniert nicht mit dem aktuellen 05AB1E, da die Switch-Case-Funktion .šdie Anzahl der Bytes erhöht
Probieren Sie es online aus!
Ruby , Punktzahl 24 20 16 12
eval S="print'EVAL s=';p S.swapcase"
Probieren Sie es online aus!
37 Bytes mit 25 Fallinversionen. Die Groß- und Kleinschreibung jedes Buchstabens wird in der Ausgabe geändert.
Perl 5 , 37 Bytes, 20 getauschte Groß- und Kleinschreibung, Punktzahl 17
Danke an @Dominic van Essen für -1!
eval($a=q{print uc"eval(\$a=q{$a})"})
Probieren Sie es online aus!
JavaScript (Node.js) , 70 - 38 = 32
f=x=>`f=${f}`.replace(/(.)/g,y=>y<'`'?y.toLowerCase():y.toUpperCase())
Probieren Sie es online aus!
Übrigens: Dies ist mein erster Beitrag und ich bin ein bisschen verwirrt. Ich habe darauf geachtet, jeden möglichen Charakter auszutauschen. Das Beispiel nur Großbuchstaben. Wenn Sie nicht brauchen , um tatsächlich Swap - Fälle, dann kann man 11-0 = 11 mit einer vereinfachten Variante einer Antwort zu bekommen gegeben oben:
f=x=>"f="+f
Fass , Punktzahl 4
`④`④
Probieren Sie es online aus!
4 Bytes mit 0 Fallkonvertierungen.
Das Standard-Quine ohne Case-Konvertierung übertrifft problemlos alle Keg-Ansätze, bei denen Case-Konvertierung möglich wäre: Wenn Sie Case-Conversion-Techniken in den Mix aufgenommen haben, haben Sie möglicherweise auch gerade ein Standard-Quine ohne ausgefallene Details geschrieben.
Javascript, 27 - 13 = 14
f=x=>`f=${f}`.toUpperCase()
Probieren Sie es online aus!
Python 2 , Punktzahl 52 - 33 = 19
s='S=%r;PRINT S%%S.SWAPCASE()';print s%s.swapcase()
Probieren Sie es online aus!
Case kehrt jeden Buchstaben in der Quine um.
R , Punktzahl = 78 - 53 = 25
a="a=%s;cat(toupper(sprintf(a,squote(a))))";cat(toupper(sprintf(a,sQuote(a))))
Probieren Sie es online aus!