Інвертувати 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це суттєво
Rod

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

4
Як це дублікат? Пов'язані, так. Дублікат, ні! Це шлях більш важкий в мовах , де ви повинні мати повторювані символи. Зауважте, що ви також не можете просто дублювати рядок, оскільки кількість символів, які потрібно видалити з кожної рядки, змінюється.
Стюї Гріффін

1
@StewieGriffin Я б визначив це як "незрозумілий", а не "обдурливий", оскільки (майже) до кожної відповіді є коментар, який намагається з'ясувати, що duplicated for every repeated character in the source codeозначає або якщо подання є дійсним для цього критерію, оскільки ОП не вирішило досить кілька питань тут.
Джузеппе

Відповіді:


7

Мозг-Флак , 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 {|} ~ ` отримав би кращу оцінку: /
James

6

CJam , 17 байт

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

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

Друкує

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

Пояснення

Метою було модифікація стандартної квінти

{"_~"}_~

таким, що жоден символ не повторюється в програмі. Причиною цього є те, що 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 байт - це настільки ж низько, як у 05AB1E, без символів, що не належать до ASCII.

05AB1E , 58 байт

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

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

Друкує вихід x12 за рахунок повторних символів:

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

Він також не закінчується досить правильно, працюючи над цим зараз ...


Недійсні старі відповіді (через символи, що не належать до ASCII) видалено, перегляньте історію редагування.


"Перевернута квінка - це не порожня програма, яка друкує зворотний код свого вихідного коду, не читаючи його вихідного коду, і складається виключно з символів для друку-ascii ." Я також працював над відповіддю 05AB1E, поки не помітив цього.
KSmarts

1
@KSmarts фіксується вартістю 76 байт.
Magic Octopus Urn

2
Зазвичай у кодовому гольф-виклику можна було б очікувати, що 05AB1E буде трохи краще, ніж "б'є Java".
KSmarts

@KSmarts знизає плечима, якщо ви не дозволите esolangs легко конкурувати за визначенням, ви заслуговуєте на саркастичну відповідь езоланг: P.
Чарівна восьминога урна

0

Java 8, 106 99 190 байт

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

Ви, ймовірно, можете i {
пограти в

1
Я вважаю, що кожен персонаж повинен мати однакову кількість разів, щоб це було дійсним
Роберто Грем

Я не впевнений, чи повністю розумію виклик, але чи не class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}достатньо? Він містить усі друковані файли-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 Виправлено
Герман L
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.