ตีกอล์ฟแบบแอนนาแกรม


24

ในคำถามนี้ฉันขอให้คุณเดา anagram quine ตามผลลัพธ์ อย่างไรก็ตามดูเหมือนว่าเรายังไม่มีคำถามที่ถามคำถามเกี่ยวกับแอนนาแกรมตีกอล์ฟ ดังนั้นงานของคุณคือทำให้แอนนาแกรมสั้นที่สุดที่คุณสามารถทำได้

แอนนาแกรมควินคืออะไร

แอนนาแกรมควินเป็นโปรแกรมที่ไม่ว่างที่พิมพ์แอนนาแกรมของซอร์สโค้ดนอกเหนือจากซอร์สดั้งเดิม

นี่คือตัวอย่างของ anagram quine ใน Python 2:

print`'`print`*2'*2`

คุณไม่ควรอ่านแหล่งที่มาของคุณเองสำหรับความท้าทายนี้


2
@LeakyNun ไม่มันไม่เป็นควินิน
ข้าวสาลีตัวช่วยสร้าง

2
รหัสเอาท์พุทจะต้องเป็นโปรแกรมที่ถูกต้องหรือไม่?
MD XF


2
@Okx มันควรเป็นไปตามข้อกำหนดมาตรฐานของเราสำหรับควินิน (นอกเหนือจากมันเป็นควินิน)
ข้าวสาลีตัวช่วยสร้าง

1
@LeakyNun โปรดทราบฉันไม่คิดว่าโปรแกรม 0 ไบต์มีแอนนาแกรมที่ต่างจากของจริง!
Neil

คำตอบ:


29

Pyth , 2 ไบต์

)(

เอาท์พุท

()

ลองออนไลน์!

)  # Ends statement, does nothing in this program
 ( # Create an empty tuple
   # Implicitly print the empty tuple

3
นั่นหมายความว่าคุณค้นพบว่า()ควินินสั้นกว่าที่รู้จักกันดี jN*2]"jN*2]หรือไม่?
Jim

1
@Jim ไม่เพราะไม่สามารถโหลดได้: c
Rod

9

V , 4 ไบต์

2ii2

ขาออก:

i2i2

ลองออนไลน์!


แทรก 2x i2?
CalculatorFeline

1
อ๋อ 2 -> do the next thing twice i -> insert the following
Riley

อาฉันเข้าใจแล้วฉันคิดว่านี่เป็นกลุ่ม
ข้าวสาลีตัวช่วยสร้าง

@WheatWizard Nope นี่เป็นการดัดแปลงเล็กน้อยของ quine V มาตรฐาน
Riley

1
@isaacg: ไม่เป็นกลุ่มคุณจะต้องกด ESC เมื่อเสร็จแล้วซึ่งเป็นปัญหาเพราะไม่มีตัวอักษร ESC ในการส่งออก

9

> <> , 9 8 7 ไบต์

Golfed 1 byte ขอบคุณ @WheatWizard โดยใช้!และเพิ่มขึ้นเพื่อรับ"

Golfed 1 byte ขอบคุณ @ ConorO'Brien โดยใช้#แทน<!

":1->o#

ลองออนไลน์!

"#o>-1:เอาท์พุท

คำอธิบาย

":1->o#"        Push this string (note that the IP wraps around)
:               Duplicate the top value of the stack (35 from the "#")
1-              Subtract one from it to get 34 ('"')
>o#             Print every character on the stack until the program cannot pop any more and still tries to pop a value from the stack afterwards
                The program exits with an error from not being able to pop a value from an empty stack

":1+>o<!สั้นกว่านี้เล็กน้อย
ข้าวสาลีตัวช่วยสร้าง

ขอบคุณ @WheatWizard ว่าเป็นกอล์ฟเรียบร้อย :)
Kritixi Lithos

1
คุณสามารถรับ 7 ไบต์:":1->o#
Conor O'Brien

@ ConorO'Brien ขอบคุณสำหรับเคล็ดลับที่ฉลาดจริงๆ
Kritixi Lithos

ขอบคุณ :) ฉันประหลาดใจที่มันทำงานได้ดีกว่าที่นี่ในquine จริง
Conor O'Brien

9

Brainfuck, 158 ไบต์

>>--<<-[[<+>->+>->+++<<<]>-]<<<<<<[--->>.<<]>>++<<<[->>>.<<<]>>-<<<[--->>>.<<<]>>>--<<<<[++>>>>.<<<<]>>>>+++>--.[---<.>]>+.......++.......<<<>>>>>>>>>-----+++

ลองออนไลน์!

มันอาจไม่ใช่เวอร์ชั่นที่สั้นที่สุด แต่อย่างน้อยก็ใช้งานได้

สนุกจริงรหัสออกสามารถดำเนินการจริง (และมันจะยุติ)

เอาท์พุต

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>--------------------------++++++++++++++++++<....................[[[[[[[]]]]]]]

คำอธิบาย

>>--<<-[[<+>->+>->+++<<<]>-]    Initializes the tape with the
                                help of a recurrence relation.
<<<<<<[--->>.<<]>>++<<<[->>>
.<<<]>>-<<<[--->>>.<<<]>>>--    Prints the characters using
<<<<[++>>>>.<<<<]>>>>+++>--.    classic loops.
[---<.>]>+.......++.......

<<<>>>>>>>>>-----+++            Junk to complete the anagram.


7

Ruby , 8 ไบต์

p"p*2"*2

ลองออนไลน์!

งานพิมพ์นี้

"p*2p*2"

คำอธิบาย

สิ่งนี้ทำงานคล้ายกับคำตอบของหลามในคำถาม มันจะทำให้สตริงp*2p*2แล้วใช้รูบี้pจะพิมพ์การเป็นตัวแทนของสตริง


คุณสามารถใช้pแทนputs! เสียเวลามาก ...
Magic Octopus Urn

4
@carusocomputing มันไม่ใช่สิ่งเดียวกันกับที่วางไว้อย่างแม่นยำ p xเทียบเท่ากับputs x.inspect
Conor O'Brien

6

JavaScript (ES6), 40 32 ไบต์

f=($=`($)=>{$=$+"${"``"}$"}`)=>$+$

ไม่ยุ่งกับ Function.toString อย่างใดอย่างหนึ่ง เป็นโบนัสโค้ดภายในสตริงเกือบจะดูเหมือนถูกกฎหมาย แก้ไข: บันทึก 8 ไบต์โดยใช้แทน+repeat(2)


1
ทำไมไม่ใช้*2แทนมันใช้.repeat(2)ไม่ได้เหรอ?
Magic Octopus Urn

1
@carusocomputing JavaScript ไม่ทำงานมากเกินไป*สำหรับสตริง
Conor O'Brien

1
@carusocomputing ที่ให้ฉันคิดขอบคุณ!
Neil


4

Japt , 10 9 ไบต์

พบวิธีที่ดีกว่า :-)

Q+2ç"Q+2ç

"Q+2çQ+2çเอาท์พุท ทดสอบออนไลน์!

คำอธิบาย

Q+2ç"Q+2ç    // Implicit: Q = quotation mark
    "Q+2ç    // Take this string.     Q+2ç
  2ç         // Repeat it twice.      Q+2çQ+2ç
Q+           // Prepend a quote.      "Q+2çQ+2ç
             // Implicit: output result of last expression

ยังอาจเป็นซึ่งพิมพ์Qi2ç"Qi2ç Qi2çQi2ç"อันนี้ใกล้กับ quine Japt มาตรฐาน:

"iQ ²"iQ ²

แต่ฉันไม่เชื่อว่ามีวิธีง่าย ๆ ในการลิ่มเครื่องหมายคำพูดที่อยู่ตรงกลางของสตริงสำหรับ quine 9 ไบต์


อีก 10 byter:Q+"+Q² " ²
Conor O'Brien

@ ConorO'Brien Yep และคุณสามารถจัดเรียงตัวอักษร 4 ตัวที่อยู่ในสายอักขระในการเปลี่ยนลำดับที่เป็นไปได้ทั้ง 24 นอกจากนี้ฉันเชื่อว่าคุณสามารถแทนที่ช่องว่างทั้งสองด้วยบรรทัดใหม่ได้
ETHproductions

3

Ruby, 20 ไบต์

$><<%q($><<%q()*2)*2

ผลลัพธ์นี้

$><<%q()*2$><<%q()*2

การใช้ประโยชน์จาก%q(...)ไวยากรณ์สตริงของรูบี้ซึ่งรองรับวงเล็บที่ซ้อนกัน


3

เรติน่า 8 ไบต์


_

$nn$

ลองออนไลน์!

พิมพ์


n$_
n$

ทั้งสองมีหนึ่ง_สองnสอง$และสาม linefeeds

โปรดทราบว่าตัวป้อนบรรทัดตามด้วยตัวละครอื่นเกือบทั้งหมดเป็นวิธีแก้ปัญหาเล็กน้อย แต่ก็น่าสงสัยว่ามันถูกต้องหรือไม่เพราะตัวละครตัวที่สองเข้ารหัสตัวเองเท่านั้นและตัวป้อนบรรทัดไม่ได้เข้ารหัสอักขระตัวจริง

คำอธิบาย


_

_แทนการป้อนข้อมูลที่ว่างเปล่าด้วย


$nn$

ตรงกับสตริงที่ว่างเปล่าที่เกิดขึ้นทั้งก่อนหรือหลัง_และใส่เลื่อนบรรทัด ( $n) เป็นและn $เนื่องจากเราใส่เข้าไปครั้งแรกสิ่ง_นี้จะเพิ่มตัวละครแต่ละตัวสองครั้งดังนั้นnและ$บัญชีสำหรับ$nและเราได้รับสองบรรทัดสามบรรทัดที่เราต้องการในผลลัพธ์ บรรทัดที่สามถูกพิมพ์เพราะ Retina พิมพ์เส้นที่ลากตามค่าเริ่มต้น

เราสามารถใช้n$n$ในขั้นตอนนี้ซึ่งจะพิมพ์:

n
$_n
$


3

Python Repl ขนาด 4 ไบต์

นี่เป็นวิธีการแก้ปัญหารหัสกอล์ฟครั้งแรกของฉันดังนั้นฉันหวังว่ามันจะเป็นไปตามกฎ ในล่ามแบบโต้ตอบ Python 2 หรือ 3:

>>> (1),
(1,)

เอาท์พุทเป็นแอนนาแกรมของอินพุต


อื่น ๆ :

>>> 2*'2*'
'2*2*'

ใน Python 2:

>>> type('rst <>'),
(<type 'str'>,)

ใน Python 3:

>> {1, 0}
{0, 1}

อัปเดต 2017-06-25: อีก:

>>> 01.
1.0

1
ฉันคิดว่าคำตอบสุดท้ายที่นี่ละเมิดกฎ quine (ตัวละครทั้งหมดในการส่งออกให้บริการวัตถุประสงค์เดียวกันเป็นตัวละครที่ตรงกันในการป้อนข้อมูล) แม้ว่าคนอื่น ๆ จะสบายดี

2

Haskell , 38 39 ไบต์

main=print$[0,0]>>"main=print$[0,0]>>"

ลองออนไลน์! เอาท์พุท:

"main=print$[0,0]>>main=print$[0,0]>>"

แก้ไข: 1 printไบต์เพราะก่อนหน้านี้ผมลืมเกี่ยวกับการขึ้นบรรทัดใหม่โดยนัยของ


ทางเลือก: (นับไบต์เดียวกัน แต่ไม่มี ASCII-owl)

main=print$e++e;e="main=print$e++e;e="

ลองออนไลน์!

เอาท์พุท:

"main=print$e++e;e=main=print$e++e;e="

เพียงแค่ Anagram แอนนาแกรมแทนที่จะเป็น Quine จริง ....
Feathercrown

2

Groovy 24 24ไบต์

{"""{""*""2""}"""*2}

-4 ต้องขอบคุณ CalculatorFeline ช่องว่างก็ไม่จำเป็นอีกต่อไป!

เอาท์พุท:

{""*""2""}{""*""2""}

คำอธิบาย:

การปิดนิรนามที่เมื่อถูกเรียกจะส่งคืน{""*""2""}สองครั้ง (ตัดแบ่ง)


1
กรุณาอธิบาย นอกจากนี้ไบต์ยังสามารถ (อาจ) บันทึกโดยใช้*2เป็นช่องว่างภายในระหว่างคำพูด:{"""{""*""2""}"""*2}
CalculatorFeline

@CalculatorFeline มันเป็นคำอธิบายที่ค่อนข้างดี แต่ใช่นั่นคือ <s> 100% </s> ความคิดที่ดีกว่าของฉัน 9%
Magic Octopus Urn

3
ที่จริงแล้วมีเพียง 9% ที่ดีกว่า: P
เครื่องคิดเลข

2

05AB1E , 10 ไบต์

'∞∞''∞'JJ∞

ลองออนไลน์!

เอาท์พุท:

∞∞''JJ''∞∞

คำอธิบาย:

Code       | Explanation                | Stack
-----------+----------------------------+-------------------
'∞         | Push literal '∞'.          | ["∞"]
  ∞        | Mirror.                    | ["∞∞"]
   ''      | Push literal "'".          | ["∞∞","'"]
     ∞     | Mirror.                    | ["∞∞","''"]
      'J   | Push literal 'J'.          | ["∞∞","''","J"]
        J  | Join it all together.      | ["∞∞''J"]
         ∞ | Mirror.                    | ["∞∞''JJ''∞∞"]
-----------+----------------------------+-------------------
           | Implicit print.            | ∞∞''JJ''∞∞


1

Bash, 36 ไบต์

tee f<<<'tee f<<<""cat f'"''"
cat f

ผลลัพธ์นี้

tee f<<<""cat f''
tee f<<<""cat f''

(และสร้างไฟล์fเป็นผลข้างเคียง แต่ได้รับอนุญาตต่อเมตา )

ทั้งโปรแกรมและเอาต์พุตมีการขึ้นบรรทัดใหม่

กระบวนการคิด: ฉันคิดว่าวิธีที่ง่ายที่สุดในการส่งออกสตริงสองครั้งนอกเหนือจากการกำหนดให้กับตัวแปรคือต้องทำ

tee f<<<string
cat f

สตริงต้องถูกยกมาเพราะมันจะมีช่องว่างและ<ตัวอักษรดังนั้นฉันมี

tee f<<<'tee f<<<cat f'
cat f

ซึ่งเกือบใช้งานได้ยกเว้นจะไม่ส่งคำพูด โชคดีที่ Bash รองรับการเรียงตัวอักษรแบบสตริงโดยเพียงแค่วางติดกันดังนั้นการผนวก"''"herestring และการแทรก""เข้าไปในส่วนของ single quote ทำให้ได้คำตอบนี้




1

Befunge ขนาด 11 ไบต์

' 2+">:#,_@

พิมพ์:

+2 '@_,#:>"

คำอธิบาย:

' 2+"        Put a " on the stack (32 + 2)
    "        Put the rest of the code on stack (wrap-around string)
     >:#,_   Print stack
          @  End

ใช่. แต่ก็เช่น"กัน ข้อ จำกัด ในสิ่งนั้นคืออะไร?
MegaTom

ฉันไม่คิดว่า"จะถือว่าเป็นการอ่านแหล่งข้อมูลของตัวเองมันเป็นเพียงตัวอักษรสตริง gแต่ค่อนข้างโจ๋งครึ่มอ่านแหล่งที่มาของตัวเอง
ข้าวสาลีตัวช่วยสร้าง

@WheatWizard ไม่เป็นไร ฉันจะเปลี่ยนมัน
MegaTom

":1+>:#,_@!ยังใช้งานได้ แต่ไม่สั้น
ข้าวสาลีตัวช่วยสร้าง

' 2+"8k,@สำหรับ 9 ไบต์
ovs

1

QBICขนาด 8 ไบต์

?A+@?A@+

ฉันเพิ่งรู้วิธีการทำควินินที่เหมาะสมใน QBIC การสร้างแอนนาแกรมออกมาทำได้โดยเพียงแค่สลับไปมารอบตัวอักษรในสตริงตัวอักษร มี 24 anagrams ที่เป็นไปได้ด้วยวิธีนี้





1

ฟิชชัน 2 , 9 8 6 ไบต์

R"'!+O

ลองออนไลน์!

คำอธิบาย

อะตอมถูกสร้างขึ้นที่Rซึ่งเคลื่อนที่ไปทางขวา อะตอมนี้จะผ่าน a "ซึ่งจะเริ่มโหมดการพิมพ์ ในโหมดการพิมพ์ตัวละครทั้งหมด (จนกว่าจะมีการจับคู่") จะถูกพิมพ์ นี่หมายความว่ามันพิมพ์'!+ORในกรณีนี้ จากนั้นทั้งหมดที่เหลือคือการพิมพ์"ซึ่งจะทำโดยตัวละครที่เหลือ '!ชุดมวลอะตอมที่จะรหัสตัวละคร!และเพิ่มขึ้นเป็นโค้ดของตัวละคร+ "จากนั้นโค้ดอักขระจะถูกเอาต์พุตโดยOอะตอมถูกทำลายและจบโปรแกรม

(อันที่จริงนี่เป็นเพียงการหมุนของควินที่สั้นที่สุด)


ฉันเชื่อว่าคุณสามารถใช้ควินมาตรฐานและเปลี่ยนมันแบบวนรอบR"'!+Oได้
Martin Ender

@MartinEnder: คุณพูดถูก Updated ขอบคุณสำหรับการช่วยเหลือ.
ลุค

1

Mathematica, 2 ไบต์

.0

เอาท์พุท:

0.

จำนวนเริ่มต้นด้วยจุดทศนิยมเช่น.123ถูกตีความว่าเป็น0.123จึงถูกตีความว่าเป็น.0 0.0เนื่องจากส่วนของตัวเลขหลังจุดทศนิยมเป็นศูนย์ Mathematica จึงไม่พิมพ์


1
ฉันไม่คิดว่ามันถูกต้อง คำจำกัดความของไซต์ของเราต้องการให้ quines มี "encoder" และ "decoder" ซึ่งห้าม quines ประเภทเดียวเท่านั้น
ข้าวสาลีตัวช่วยสร้าง

กฎสำหรับการทดสอบทั้งหมดดำเนินการต่อความท้าทายนี้
ข้าวสาลีตัวช่วยสร้าง

@Weateatizard: .เข้ารหัสตัวเอง แต่ฉันไม่คิดว่า0จะทำอย่างไร 0 ที่อยู่เหนือจุดทศนิยมไม่สามารถมองเห็นได้ว่าเป็นการเข้ารหัสศูนย์นำหน้าก่อนจุดทศนิยมซึ่งเป็นผลข้างเคียงของการพิมพ์ทศนิยม ดังนั้นภายใต้กฎ quine เก่าไม่มีปัญหาที่นี่ (ฉันไม่แน่ใจว่ากฎใหม่จะมีผลบังคับใช้หรือไม่)

@ ais523 ฉันไม่รู้ บางทีคำถามนี้ควรได้รับการแก้ไขโดยเมตาดาต้า
ข้าวสาลีตัวช่วยสร้าง



1

Stax , 8 4 ไบต์

.S.S

เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!

พอร์ตโดยตรงของคำตอบนี้

รุ่นเก่า 8 ไบต์

..b..LbL

เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!

รุ่นทางเลือกพร้อมกับเคล็ดลับราคาถูกที่สามารถนำไปใช้กับ quines ที่เหมาะสมในเกือบทุกภาษา

"43bL"34bL

เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!

เพราะ"34bL"34bLเป็นควินที่เหมาะสมในสแตกซ์

อีกเวอร์ชันหนึ่งโดยใช้ตัวอักษรสตริงอักขระตัวเดียว

''c'Lc'cccLcLL

เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!

คำอธิบาย

.S.S        Generates powerset ["","S","S.","."]
            Implicit flatten and output

..b         Push string ".b"
   ..L      Push string ".L"
      b     Duplicate both strings
       L    Concatenate all 4 strings to a single one.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.