Инвертировать Quine!


11

Мы все знаем, что такое лоза . Перевернутый Куайн непустая программа , которая печатает обратный его исходный код , не читая его исходный код, и состоит исключительно из печати ASCII-символов (пробел через ~).

Здесь «обратный к исходному коду» означает следующее: выходные данные вашей программы должны содержать каждый печатный символ ASCII (m - c) раз, где c - количество раз, когда указанный символ встречается в вашем коде, а m - максимальное количество повторений любого символа в вашем коде.

(Другими словами: ваш код + ваш вывод = перестановка m раз все для печати-ASCII.)

Например, если ваша программа 12345, то m = 1 , и вы должны вывести любую перестановку этой строки:

 !"#$%&'()*+,-./06789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Если ваша программа AAB, то m = 2 , и вы должны вывести любую перестановку:

  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@BCCDDEEFFGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~

Обратите внимание, что есть два пропущенных Aи один пропущенный B.

Хотя программа, которая содержит все печатные символы ASCII и ничего не выводит, является действительной обратной квинной (удовлетворяющей m = 1 ), такой ответ не будет очень конкурентоспособным, учитывая его длину.

Вы должны написать программу, которая является перевернутой формой, как описано в предыдущем абзаце. Поскольку это , победит самая короткая программа в байтах. Удачи!


1
Пробел, табуляция и перевод строки?
Стьюи Гриффин,

11
Вы должны подчеркнуть, что duplicated for every repeated character in the source codeэто имеет все значение в вызове
Род

6
Не могли бы вы привести пример обратного, когда несколько символов повторяются (и несколько раз)? Скажи 11234512345?
Джузеппе

4
Как это дубликат? Связано, да. Дубликатов нет! Это путь более трудное в языках , где вы должны иметь повторяющиеся символы. Обратите внимание, что вы не можете просто дублировать строку, так как количество символов, которые вы должны удалить из каждой строки, варьируется.
Стьюи Гриффин

1
@StewieGriffin Я бы назвал это как «неясное», а не как «обман», потому что (почти) в каждом ответе есть комментарий, в котором пытались выяснить, что duplicated for every repeated character in the source codeозначает или является ли представление действительным по этому критерию, потому что ОП не рассматривал довольно несколько вопросов здесь.
Джузеппе

Ответы:


7

Brain-Flak , 221 207 байт

Включает +1 для -A

(((((((()()()()){}){}()){}){})()){}{}){({}[()]<((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>((()()()()){}){({}[()]<(({})())>)}{}({}()())<>{{({}<>[()]<(({})())><>)}{}<>(({}())()())<>}<>>)}{}

Попробуйте онлайн!

# Push 206 (the number of times to duplicate the output)
(((((((()()()()){}){}()){}){})()){}{})

# For 0 to 206
{({}[()]<

    # Push 32 on this stack and 18, 28 and 29 to the other
    # 18, 28 and 29 are the distances between the sets of braces 
    ((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>

    # For 0 to 8
    ((()()()()){}){({}[()]<

        # Push TOS, TOS + 1
        (({})())

    # end For 0 to 8
    >)}{}

    # Push TOS + 2 
    # skips '(' and ')'
    ({}()())

    # For each value on the off stack (18, 28, 28)
    <>{

        # For 0 to that number
        {({}<>[()]<

            # Push TOS, TOS + 1
            (({})())

        # End for 0 to that number
        ><>)}{}

        # Push TOS + 1, TOS + 3 (skips this set of braces)
        <>(({}())()())<>

    # End for each value on the off stack (18, 28, 28)
    }<>

 # End for 0 to 206
 >)}{}

Я думаю, что вы должны удалить только [пять раз, а не все. Обратите внимание, что 2в примере удаляется только один раз. Задача немного запутанная, хотя.
Стьюи Гриффин

Интересно, как это значительно короче, чем стандартная квин. +1:)
Джеймс

2
Это действительно неубедительно и значительно менее интересно, чем ваш ответ, но технически !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` получит лучший результат: /
Джеймс

6

CJam , 17 байт

{s95c+'|,32>\-}_~

Попробуйте онлайн!

Печать

 !"#$%&()*./014678:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^`abdefghijklmnopqrtuvwxyz

объяснение

Цель состояла в том, чтобы изменить стандартный Quine

{"_~"}_~

такой, что ни один символ не повторяется в программе. Причиной этого является то, что в CJam есть оператор набора, который мы можем использовать для удаления символов из диапазона ASCII для печати, но он не учитывает количество вхождений. Реализация этого вручную, вероятно, займет больше времени, поэтому мне нужно было убедиться, что каждый символ появляется только один раз, и нам не нужно беспокоиться о появлении.

{      e# Quine framework. Executes the block while leaving another copy of the
       e# block on the stack.
  s    e#   Stringify the block, giving us "{s95c+'|,32>\-}".
  95c  e#   Convert 95 to a character, which gives us '_' without repeating
       e#   it in the source code.
  +    e#   Append it to the string. We don't need to worry about '~', we'll just
       e#   leave it out of the printable ASCII range to begin with.
  '|,  e#   Get a character range from the null byte up to '{'. This omits "|}~",
       e#   but those are in the program anyway, it doesn't matter.
  32>  e#   Discard the unprintable characters.
  \-   e#   Subtract the source string from the printable ASCII range.
}_~


2

05AB1E , 95 61 60 байт (не 58 б / с, мне это не нравится)

A?9L<J, !"'#$%&()*+-./:;=>@BCDEFGHIKMNOPQRSTUVWXYZ[\]^_`{|}~

Попробуйте онлайн!

Старый ответ признан недействительным только для символов ASCII, многие команды здесь недопустимы.

Он печатается abcdefghijklmnopqrstuvwxyz012345678один раз, так как нет повторяющихся символов.


Версия с BCDEFGHIKMNOPQRSTUVWXYZудаленным:

Работа в процессе ... Я думаю, что ~ 60 байтов меньше, чем вы получаете без символов не ASCII в 05AB1E ..

05AB1E , 58 байт

T5+FA'uK?Au"ADLJFKST"SK?9L<5KJ?} !#$%&()*>-./:;=@[]^_`{|~\

Попробуйте онлайн!

Печатает вывод x12 из-за повторяющихся символов:

['""', '55', '???', 'AAA', 'FF', 'JJ', 'KKKK', 'LL', 'SS', 'TT', 'uu']

Это также не совсем правильно завершается, работая над этим сейчас ...


Неверные старые ответы (из-за не-ASCII символов) были удалены, см. Историю изменений.


«Перевернутая квинна - это непустая программа, которая печатает инверсию своего исходного кода без чтения исходного кода и состоит исключительно из символов printable-ascii ». Я тоже работал над ответом 05AB1E, пока не заметил этого.
KSmarts

1
Исправлено @KSmarts стоимостью 76 байт.
Волшебная Урна Осьминога

2
Как правило, в соревновании по коду для гольфа можно ожидать, что 05AB1E будет немного лучше, чем «превосходит Java».
KSmarts

@KSmarts пожать плечами, если вы не позволяете esolangs легко конкурировать по определению, вы заслуживаете саркастического ответа esolang: P.
Волшебная Урна Осьминога

0

Java 8, 106 99 190 байт

class i {/*{}!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`claibdefghjkmnopqrtuvwxyz|~*/}

Вы, вероятно, можете i {
Okx

1
Я считаю, что каждый персонаж должен встречаться одинаковое количество раз, чтобы это было действительным
Роберто Грэхем

Я не уверен, полностью ли я понимаю проблему, но не class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}достаточно ли? Он содержит все printable-ASCII в своем исходном коде и ничего не выводит. Часть « дублируется для каждого повторного символа в исходном коде » относится к выходу, так что даже если sдублируется classи *и /дублируются из - за /* */, выводя четыре раза ничего до сих пор ничего.
Кевин Круйссен,

Кроме того, если я действительно прав, вы также можете interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~
Кевин Круйссен

0

Javascript (ES6), 103 101 байт

_=>` !"#$%&'()*+,-.0123456789:;<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~`//_=>\\

Старый раствор (103 байт , используя alert)

alert;;alert`\ \!"#$%&'()*+,-./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_bcdfghijkmnopqsuvwxyz{|}~`

Старое (недействительное) решение (96 байт)

alert()// !"#$%&'*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghijkmnopqsuvwxyz{|}~

У вас есть два //, что означает, что вы должны вывести печатные символы, один из которых /удален. (Я думаю)
Стьюи Гриффин

@StewieGriffin Исправлено
Херман Л
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.