Гольф Анаграма Квіне


24

У цьому запитанні я попросив відгадати квітку анаграму на основі її результатів. Однак, схоже, у нас ще немає запитань про те, щоб пограти в гольф з анаграмою. Отже, ваше завдання полягатиме в тому, щоб зробити найкоротший анаграм-квін, який ви можете.

Що таке анаграма ангіна?

Anagram quine - це порожня програма, яка друкує анаграму свого вихідного коду, відмінне від її початкового джерела.

Ось приклад анаграмової анкети в Python 2:

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

Ви не повинні читати власне джерело для цього виклику.


2
@LeakyNun Ні, це не може бути королевою.
Пшеничний майстер

2
Чи повинен виведений код бути дійсною програмою?
MD XF

1
@MDXF Ні, це не так.
Пшеничний майстер

2
@Okx Він повинен відповідати нашим стандартним вимогам до лайки (крім того, що це лайка).
Пшеничний майстер

1
@LeakyNun Зверніть увагу, я не думаю, що у 0-байтних програм є анаграми, які відрізняються від оригіналу!
Ніл

Відповіді:


29

Pyth , 2 байти

)(

Виходи

()

Спробуйте в Інтернеті!

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

3
Чи означає це, що ви виявили, що ()це квітка набагато коротша, ніж добре відома jN*2]"jN*2] ?
Джим

1
@Jim ні, тому що це не здатна до корисної навантаження: c
Rod

9

V , 4 байти

2ii2

Виходи:

i2i2

Спробуйте в Інтернеті!


2x вставка i2?
CalculatorFeline

1
Так. 2 -> do the next thing twice i -> insert the following
Райлі

Ах бачу, я думав, що це Вім.
Пшеничний майстер

@WheatWizard Nope, це тривіальна модифікація стандартної V-квінки.
Райлі

1
@isaacg: ні, у Vim вам потрібно буде натиснути ESC, як тільки ви закінчите, що є проблемою, оскільки у виведенні немає символу ESC.

9

> <> , 9 8 7 байт

Гольф на 1 байт завдяки @WheatWizard, використовуючи !та збільшуючи його, щоб отримати"

Гольф на 1 байт завдяки @ 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

Дякую :) Я приємно здивований, що він працює тут краще, ніж у справжній королеві
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.

8

Python 3, 32 байти

print ("" "p" r "i" n "t" 2 (") *" "" * 2)

Друкується p"r"i"n"t"2(")*p"r"i"n"t"2(")*\n, сортується вихід:\n""""""""""""(())**22iinnpprrtt


На жаль, стара версія :(
CalculatorFeline

1
@Downvoter Скасуйте.
CalculatorFeline

7

Рубін , 8 байт

p"p*2"*2

Спробуйте в Інтернеті!

Це відбитки

"p*2p*2"

Пояснення

Це працює аналогічно відповіді пітона в питанні. Це зробить рядокp*2p*2 після чого за допомогою Ruby's pнадрукує представлення рядка.


Ви можете використовувати pзамість puts?! Стільки витрачено витрачений час ...
Чарівний восьминіг Урна

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 Це дало мені ідею, дякую!
Ніл


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ç". Цей ближче до стандартної джапт-квіне:

"iQ ²"iQ ²

Але я не вірю, що існує якийсь простий спосіб закріпити лапки посеред рядка для 9-байтової квінти.


Ще 10 байт:Q+"+Q² " ²
Conor O'Brien

@ ConorO'Brien Yep, і ви завжди можете розмістити 4 символи всередині рядка в кожній з 24 можливих перестановок. Також я вважаю, що ви завжди можете замінити обидва пробіли новими рядками
ETHproductions

3

Рубін, 20 байт

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

Це виводить

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

Скористаючись %q(...)рядковим синтаксисом Ruby , який підтримує вкладені дужки.


3

Сітківка , 8 байт


_

$nn$

Спробуйте в Інтернеті!

Друкує


n$_
n$

Обидва містять один _, два n, два$ та три канали.

Зауважте, що передача рядків, що супроводжується майже будь-яким іншим символом, є тривіальним рішенням, але сумнівно, чи він дійсний, оскільки другий символ кодує себе сам, а передача рядків насправді не кодує жодного символу виводу.

Пояснення


_

Замініть порожній вхід на a _.


$nn$

Збіжіть порожній рядок, що відбувається перед або після, _і вставіть рядок рядків ( $n), an nі a $. Оскільки ми вперше вставили це _, до цього додається кожен із цих символів двічі, так що nі $обліковий запис$n , і ми отримуємо два з трьох каналів рядків, які нам потрібні у висновку. Третій канал передачі рядків друкується через те, що Retina друкує за замовчуванням зворотну стрічку.

На n$n$цьому етапі ми також могли використати , який потім надрукував:

n
$_n
$


3

Python Repl, 4 байти

Це моє перше рішення Golf Golf, тому я сподіваюся, що він відповідає правилам. У інтерактивному перекладачі Python 2 або 3:

>>> (1),
(1,)

Вихід - анаграма вводу.


Ще:

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

У Python 2:

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

У Python 3:

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

Оновлення 2017-06-15: Ще одне:

>>> 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-сови)

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

Спробуйте в Інтернеті!

Вихід:

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

Тільки ледве анаграмова квітка, а не справжня квіта ....
Feathercrown

2

Groovy, 24 20 байт

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

-4 завдяки CalculatorFeline, пробіл не потрібен був!

Вихід:

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

Пояснення:

Анонімне закриття, яке при дзвінку повертається {""*""2""}два рази (об'єднано).


1
Пояснення будь ласка. Крім того, байти можна (ймовірно) зберегти, використовуючи *2як прокладку між цитатами:{"""{""*""2""}"""*2}
CalculatorFeline

@CalculatorFeline - це досить самостійно. Але так, це <s> 100% </s> 9% краща ідея, ніж моя.
Чарівний восьминога Урна

3
Насправді це лише на 9% краще: P
CalculatorFeline

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

Баш, 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 підтримує буквене буквальне конкатенацію, просто розміщуючи їх поруч, тому додавання "''"до єресту та вставлення ""всередині однієї частини цитати дає це рішення.




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 байт
ов

1

QBIC , 8 байт

?A+@?A@+

Я щойно придумав, як зробити належну квінку в QBIC. Зроблення анаграми робиться шляхом простого перемикання символів у прямому рядку. Таким чином існує 24 можливих анаграми.





1

Fission 2 , 9 8 6 байт

R"'!+O

Спробуйте в Інтернеті!

Пояснення

Атом створюється на R, який рухається вправо. Потім цей атом натрапляє на a ", який запускає режим друку. У режимі друку всі символи (до відповідності ") друкуються. Це означає, що він друкує '!+ORв цьому випадку. Потім все, що залишилося, - це друк ", який робиться іншими символами. '!встановлює масу атома до символьного коду !та +збільшує його до коду символів ". Потім код символу виводиться поO і атом знищується, закінчуючи програму.

(Власне, це лише обертання найкоротшої лайки)


Я вважаю, що ви можете просто використовувати стандартну квінку і циклічно зміщувати її (так щось на кшталт R"'!+O, не перевірене).
Мартін Ендер

@MartinEnder: ти маєш рацію. Оновлено. Дякуємо за допомогу.
Лука

1

Математика, 2 байти

.0

Вихід:

0.

Число, що починається з десяткової крапки, як .123інтерпретується як 0.123, так .0і інтерпретується як 0.0. Оскільки частина числа після десяткової крапки дорівнює нулю, Mathematica не друкує його.


1
I don't think this is valid. Our site definition requires that quines have an "encoder" and a "decoder", this bans literal only type quines.
Wheat Wizard

All the rules for quines carry over to this challenge.
Wheat Wizard

@WheatWizard: The . encodes itself, but I don't think the 0 does? A 0 beyond the decimal point can't sanely be seen as encoding a leading zero before the decimal point, the latter's a side effect of printing a float. So under the old quine rules, there's no problem here. (I'm not sure whether the new rules have come into force yet.)

@ais523 I don't know. Perhaps this should be addressed by a meta question.
Wheat Wizard



1

Стакс , 8 4 байти

.S.S

Запуск та налагодження в Інтернеті!

Прямий порт відповіді.

Стара версія, 8 байт

..b..LbL

Запуск та налагодження в Інтернеті!

Альтернативна версія з досить дешевим трюком, який можна застосувати до належних лайків майже будь-якою мовою.

"43bL"34bL

Запуск та налагодження в Інтернеті!

Тому що "34bL"34bL is a proper quine in Stax.

Ще одна версія, що використовує лише одночастові рядкові літерали.

''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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.