Quine: Difference between revisions

Jump to navigation Jump to search
261 bytes added ,  22:29, 10 September 2022
m
Text replacement - "</source>" to "</syntaxhighlight>"
m (Text replacement - "<source" to "<syntaxhighlight")
m (Text replacement - "</source>" to "</syntaxhighlight>")
Line 6: Line 6:
<syntaxhighlight lang=apl>
<syntaxhighlight lang=apl>
       1⌽22⍴11⍴'''1⌽22⍴11⍴'''
       1⌽22⍴11⍴'''1⌽22⍴11⍴'''
</source>
</syntaxhighlight>


=== Modern update ===
=== Modern update ===
Line 13: Line 13:
<syntaxhighlight lang=apl>
<syntaxhighlight lang=apl>
       1⌽,⍨9⍴'''1⌽,⍨9⍴'''
       1⌽,⍨9⍴'''1⌽,⍨9⍴'''
</source>
</syntaxhighlight>


==== Explanation ====
==== Explanation ====
This shorter version is explain as follows:<ref>[https://codegolf.stackexchange.com/a/178459/87954 Golf you a quine for great good! – APL (Dyalog Unicode), 18 bytes] – Code Golf Stack Exchange.</ref>
This shorter version is explain as follows:<ref>[https://codegolf.stackexchange.com/a/178459/87954 Golf you a quine for great good! – APL (Dyalog Unicode), 18 bytes] – Code Golf Stack Exchange.</ref>
* <syntaxhighlight lang=apl inline>'''1⌽,⍨9⍴'''</source> the characters <syntaxhighlight lang=text inline>'1⌽,⍨9⍴'</source>
* <syntaxhighlight lang=apl inline>'''1⌽,⍨9⍴'''</syntaxhighlight> the characters <syntaxhighlight lang=text inline>'1⌽,⍨9⍴'</syntaxhighlight>
* <syntaxhighlight lang=apl inline>9⍴</source> reshape to shape 9, resulting in <syntaxhighlight lang=text inline>'1⌽,⍨9⍴''</source>
* <syntaxhighlight lang=apl inline>9⍴</syntaxhighlight> reshape to shape 9, resulting in <syntaxhighlight lang=text inline>'1⌽,⍨9⍴''</syntaxhighlight>
* <syntaxhighlight lang=apl inline>,⍨</source> concatenate with itself, resulting in <syntaxhighlight lang=text inline>'1⌽,⍨9⍴'''1⌽,⍨9⍴''</source>
* <syntaxhighlight lang=apl inline>,⍨</syntaxhighlight> concatenate with itself, resulting in <syntaxhighlight lang=text inline>'1⌽,⍨9⍴'''1⌽,⍨9⍴''</syntaxhighlight>
* <syntaxhighlight lang=apl inline>1⌽</source> rotate one character to the left, getting the characters: <syntaxhighlight lang=text inline>1⌽,⍨9⍴'''1⌽,⍨9⍴'''</source>
* <syntaxhighlight lang=apl inline>1⌽</syntaxhighlight> rotate one character to the left, getting the characters: <syntaxhighlight lang=text inline>1⌽,⍨9⍴'''1⌽,⍨9⍴'''</syntaxhighlight>


== Further Entries ==
== Further Entries ==
Line 27: Line 27:
<syntaxhighlight lang=apl>
<syntaxhighlight lang=apl>
       '{∊⍵⍺⍵⍺,4/⍵}'{∊⍵⍺⍵⍺,4/⍵}''''
       '{∊⍵⍺⍵⍺,4/⍵}'{∊⍵⍺⍵⍺,4/⍵}''''
</source>
</syntaxhighlight>
==== Explanation ====
==== Explanation ====


In this code, the main function is <syntaxhighlight lang=apl inline>{∊⍵⍺⍵⍺,4/⍵}</source> with the right argument <syntaxhighlight lang=apl inline>⍵</source> being single quote literal (spelled with four quotes, <syntaxhighlight lang=apl inline>''''</source>, because single quotes delimit APL character literals, and quotes inside such must be doubled), and the left argument <syntaxhighlight lang=apl inline>⍺</source> being the character vector representation of the function (<syntaxhighlight lang=apl inline>'{∊⍵⍺⍵⍺,4/⍵}'</source>).
In this code, the main function is <syntaxhighlight lang=apl inline>{∊⍵⍺⍵⍺,4/⍵}</syntaxhighlight> with the right argument <syntaxhighlight lang=apl inline>⍵</syntaxhighlight> being single quote literal (spelled with four quotes, <syntaxhighlight lang=apl inline>''''</syntaxhighlight>, because single quotes delimit APL character literals, and quotes inside such must be doubled), and the left argument <syntaxhighlight lang=apl inline>⍺</syntaxhighlight> being the character vector representation of the function (<syntaxhighlight lang=apl inline>'{∊⍵⍺⍵⍺,4/⍵}'</syntaxhighlight>).


The idea behind this quine is that the only thing you need to have a string containing the original code is to reproduce this structure: [quote] [function] [quote] [function] [quote] [quote] [quote] [quote]. This is precisely what the function does. Given the representation of a function <syntaxhighlight lang=apl inline>⍺</source> (itself in this case), and character <syntaxhighlight lang=apl inline>⍵</source> (here, the quote), it produces the structure <syntaxhighlight lang=apl inline>⍵ ⍺ ⍵ ⍺ ⍵ ⍵ ⍵ ⍵</source>. A more explicit version would be <syntaxhighlight lang=apl inline>'{⍵,⍺,⍵,⍺,⍵,⍵,⍵,⍵}'{⍵,⍺,⍵,⍺,⍵,⍵,⍵,⍵}''''</source> which simply concatenates together the required parts. The original quine is very similar, only using the shorter <syntaxhighlight lang=apl inline>4/⍵</source> to produce the 4 occurrences of <syntaxhighlight lang=apl inline>⍵</source>, and [[code golf|golfs]] away the spaces, instead opting for [[Enlist]] (<syntaxhighlight lang=apl inline>∊</source>) to flatten the intermediary [[nested array]].
The idea behind this quine is that the only thing you need to have a string containing the original code is to reproduce this structure: [quote] [function] [quote] [function] [quote] [quote] [quote] [quote]. This is precisely what the function does. Given the representation of a function <syntaxhighlight lang=apl inline>⍺</syntaxhighlight> (itself in this case), and character <syntaxhighlight lang=apl inline>⍵</syntaxhighlight> (here, the quote), it produces the structure <syntaxhighlight lang=apl inline>⍵ ⍺ ⍵ ⍺ ⍵ ⍵ ⍵ ⍵</syntaxhighlight>. A more explicit version would be <syntaxhighlight lang=apl inline>'{⍵,⍺,⍵,⍺,⍵,⍵,⍵,⍵}'{⍵,⍺,⍵,⍺,⍵,⍵,⍵,⍵}''''</syntaxhighlight> which simply concatenates together the required parts. The original quine is very similar, only using the shorter <syntaxhighlight lang=apl inline>4/⍵</syntaxhighlight> to produce the 4 occurrences of <syntaxhighlight lang=apl inline>⍵</syntaxhighlight>, and [[code golf|golfs]] away the spaces, instead opting for [[Enlist]] (<syntaxhighlight lang=apl inline>∊</syntaxhighlight>) to flatten the intermediary [[nested array]].


=== Based on code point of quote ===
=== Based on code point of quote ===
Line 38: Line 38:
<syntaxhighlight lang=apl>
<syntaxhighlight lang=apl>
       {,⍨⍵,⎕UCS 39}'{,⍨⍵,⎕UCS 39}'
       {,⍨⍵,⎕UCS 39}'{,⍨⍵,⎕UCS 39}'
</source>
</syntaxhighlight>
==== Explanation ====
==== Explanation ====
In this code, the main function is <syntaxhighlight lang=apl inline>{,⍨⍵,⎕UCS 39}</source> with the argument <syntaxhighlight lang=apl inline>⍵</source> being the function itself which avoids duplication of quotes by generating the quote from its [[Universal Character Set]] code point (<syntaxhighlight lang=apl inline>⎕UCS</source>).
In this code, the main function is <syntaxhighlight lang=apl inline>{,⍨⍵,⎕UCS 39}</syntaxhighlight> with the argument <syntaxhighlight lang=apl inline>⍵</syntaxhighlight> being the function itself which avoids duplication of quotes by generating the quote from its [[Universal Character Set]] code point (<syntaxhighlight lang=apl inline>⎕UCS</syntaxhighlight>).


The idea behind this quine is that the only thing you need to have a string containing the original code is to reproduce this structure: [function] [quote] [function] [quote]. This is precisely what the function does. Given the representation of a function <syntaxhighlight lang=apl inline>⍵</source> (itself in this case), it generates a quote and concatenates it on the right of the function definition, giving [function] [quote]. It then uses [[commute|self]]-[[catenate|concatenation]] (<syntaxhighlight lang=apl inline>,⍨</source>) to repeat the two parts into the required four.
The idea behind this quine is that the only thing you need to have a string containing the original code is to reproduce this structure: [function] [quote] [function] [quote]. This is precisely what the function does. Given the representation of a function <syntaxhighlight lang=apl inline>⍵</syntaxhighlight> (itself in this case), it generates a quote and concatenates it on the right of the function definition, giving [function] [quote]. It then uses [[commute|self]]-[[catenate|concatenation]] (<syntaxhighlight lang=apl inline>,⍨</syntaxhighlight>) to repeat the two parts into the required four.


== External links ==
== External links ==

Navigation menu