Квін / зворотний квін


26

Напишіть повну програму, яка приймає булеві або невід'ємні цілі числа. Він повинен:

  • Виведіть власний вихідний код, якщо значення вводу є помилковим
  • Виведіть власний вихідний код у зворотному порядку, якщо значення входу є правдивим

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

Це код гольфу - найкоротший код у виграші байтів.


6
Отже ... якщо в моїй мові немає булевих. Але 0 - хибне, а натуральні цілі - правда. Чи можу я припустити, що вхід буде лише 0 або 1 (як очікування для булевих - мова насправді завжди дає один із цих двох в результаті умовного оператора)? Або я повинен підтримувати цілі числа, оскільки я не можу використовувати "фактичні" булеві?
Мартін Ендер

Відповіді:


9

Gol> <> , 9 байт

'rd3*I?rH

Я відчуваю це трохи незручно, оскільки це вже є відповіді Віци та Мінколанга. Єдиними доповненнями до стандартного quine є I(читання введення цілих чисел), ?(виконати наступне, якщо truthy) та r(зворотний стек).

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


Приєднатися до клубу! : D Ви все одно виграєте. +1
Addison Crump

1
8 байт:sP#Hr?I"
Джо Кінг

18

CJam, 17 16 байт

{`"_~"+Wq~g#%}_~

Перевірте це тут.

Досить прямолінійна модифікація стандартної квінти. Інші рішення на 17 байт:

{`"_~"+q~{W%}&}_~
{`"_~"+q~!2*(%}_~

Якщо я можу припустити, що вхід становить лише 0 або 1 (як резервне boolean, для якого у CJam немає виділеного типу), я отримую 15, опустивши g:

{`"_~"+Wq~#%}_~

Пояснення

{`"_~"+  e# Standard generalised quine framework. Leaves the source code on the stack. 
  W      e# Push a -1.
  q~     e# Read and evaluate input.
  g      e# signum, turning truthy values into 1 (leaving 0 unchanged).
  #      e# Power. -1^0 == 1, -1^1 == -1.
  %      e# Select every Nth element: a no-op for 1 and reverses the string for -1.
}_~

Оскільки 0 і 1 - булеви CJam, я не думаю, що вам це потрібно g.
Денніс

@Dennis Так, я не був дуже впевнений у цьому.
Мартін Ендер

Дивно, але я якось це переміг. о, я не здивуюся, якщо ви пограєте ще більше. : D
Аддісон Кримп

9

Піт, 17 байт

_WQjN*2]"_WQjN*2]

Відверта модифікація стандартної Pyth quine.


Чорт, я чекав, щоб опублікувати це ще через годину після того, як це було пісочницею.
lirtosiast

7

> <>, 17 байт

Потрібен прапор -v (+1 байт) для натискання вводу на стек (або для того, щоб ви заздалегідь помістили вхід в стек в онлайн-інтерпретаторі).

'rd3*$?rol?!;70.

Ви можете зробити наведене нижче для тієї ж кількості байтів (без прапора), якщо дозволено лише цілі введення (тобто 0 для фальшивого, 1 для трибути).

'rd3*ic%?rol?!;80.

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

Truthy / хибність для> <> - це що-небудь, не 0 і 0 відповідно.


6

Віци , 15 байт

... я ... я б'ю CJam! (кричить) Мамо! Подивися, мамо, я це зробив!

'rd3 * i86 * -) rl \ O

Пояснення:

'rd3 * i86 * - (rl \ O
Стандартна квітка, але з поворотом:

'Захопіть вихідний код як рядок
 rd3 * Створіть символ 'в ASCII
     i86 * - Отримайте вхідний символ як ASCII і відніміть з нього 48. 
                    Якщо він дорівнює нулю, наступна інструкція пропустить наступний випадок if.
          (r Якщо верхній елемент стека дорівнює нулю, не робіть наступного.
                    Наступний пункт тут - зворотний.
            l \ O Роздрукуйте стек.

Новіша версія Vitsy , 11 байт

v'rd3 *} v) rZ
v Захоплюйте вхід змінною.
 "Захопіть джерело, поки не зустрінете іншого"
  r Переверніть стек.
   d3 * Натисніть 'до стека.
      } Поверніть стек праворуч.
       v) Натисніть на змінну (вхід) до стеку і випробуйте, якщо вона не дорівнює нулю.
         r Якщо так, поверніть стек.
          Z Виведіть все в стеку.

2

Javascript (ES6), 42 байти

$=_=>'$='+(_?$:[...''+$].reverse().join``)

Це модифікація мого Bling Quine . Це і вдвічі довше.


Це насправді щось виводить? Відповіді, які працюють лише у системі REPL, не допускаються.
feersum

1
@ETHproductions Це викликало б функцію, але вона все одно нічого не друкує. Крім того, це вже не було б королевою.
Денніс

@Dennis Right. Ну, я думаю, що prompt()це потрібно, якщо тільки ми не перейдемо на Node.JS. Я вважаю, що $=_=>(A=`$=${$};$(prompt())`,alert(_?A:[...A].reverse().join``));$(prompt())працює належним чином, хоча, можливо, це могло б стати ще більшим.
ETHproductions

1
"Ваша програма не може [...] прочитати власний вихідний код будь-якими способами." Чи відноситься це рішення до цієї категорії?
ETHproductions

2

Бурлеск, 40 байт

ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh

Пояснення:

Бурлеск має вдосконалені вбудовані модулі стека та коду. Насправді ви не можете отримати доступ до вихідного коду програми, але ви можете отримати доступ до решти коду, який повинен бути виконаний у майбутньому. Це означає #Q, що поверне весь код, який слідує за ним, тому ми повинні додати все #Qдо того коду, з яким ми робимо ri#Q.

blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q

++1 2є технічно незаконнім кодом, оскільки він заснований на стеці. Але ми можемо маніпулювати кодом, щоб змусити його виконувати як 1 2++:

blsq ) #Q<-#q++1 2 
12

Робота з цими вбудованими версіями неймовірно складна, і ніхто ще не використовував їх для чогось продуктивного, крім справ, пов’язаних із королевою. Якщо ви реверсуєте, ++1 2ви отримуєте те, 2 1++що виробляло б, 21а ні 12. Причина, яку створює код вище, 12полягає в тому, що він #Qтакож включає <-так, що ми зрештою виконуємо набагато більше, ніж просто 2 1++: p. Ми закінчуємо виконувати те, 2 1++#q<-що виробляє 12.

Насправді ми можемо замінити речі в нашому коді, наприклад, цей код замінює всі виникнення ?+в собі?*

blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25

Використання:

$ echo "1" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
hs fi sp "-<" j +. /\ "Q#ir" -~ HS 2Q#ir
$ echo "0" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh

2

Haskell, 126 118 108 байт

main=readLn>>=putStr.([t,reverse t]!!);t=s++show s;s="main=readLn>>=putStr.([t,reverse t]!!);t=s++show s;s="

Очікує 0або 1як вхід.


2

Мінколанг 0,10 , 13 байт

"66*2-n,?r$O.

Спробуйте тут.

Це так само , як стандартний Куайном цих чотирьох символів , за винятком: n,?r. nприймає ціле число з введення, ,інвертує його, тому ?пропускає, rякщо вхід є правдоподібним. В іншому випадку rповерніть стек так, щоб він виводився у зворотному порядку.


1
Мій грім пропав. : c
Аддісон Кримп


0

Java 10 (повна програма), 282 байти

interface N{static void main(String[]a){var s="interface N{static void main(String[]a){var s=%c%s%1$c;s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}";s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}

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

Java 10 (як лямбда-функція), 154 байти

b->{var s="b->{var s=%c%s%1$c;s=s.format(s,34,s);return b?new StringBuffer(s).reverse():s;}";s=s.format(s,34,s);return b?new StringBuffer(s).reverse():s;}

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

Пояснення:

interface N{                          // Class
  static void main(String[]a){        //  Mandatory main-method
    var s="interface N{static void main(String[]a){var s=%c%s%1$c;s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}";
                                      //   Unformatted source code
    s=s.format(s,34,s);               //   Format the source code (the quine-String)
    System.out.print(                 //   Print:
      new Boolean(a[0])?              //    If the input is true:
       new StringBuffer(s).reverse()  //     Print the quine-String reversed
      :                               //    Else:
       s);}}                          //     Print the quine-String as is

пояснення :

  • var sМістить вихідний код Неформатована
  • %s використовується для того, щоб поставити цю струну в себе s.format(...)
  • %c, %1$cі 34використовуються для форматування подвійних лапок
  • s.format(s,34,s) зводить це все разом

А потім new StringBuffer(s).reverse()використовується для обернення рядка quine-String, якщо необхідно, на основі вхідного-булевого.


0

05AB1E , 21 байт

0"D34çý‚sè"D34çý‚sè

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

Модифікація 0"D34çý"D34çý шляхом додавання ‚sè.

Пояснення:

0                        # Push 0 to the stack
                         #  STACK: [0]
 "D34çý‚sè"             # Push the string 'D34çý‚sè' to the stack
                         #  STACK: [0, 'D34çý‚sè']
            D            # Duplicate this string
                         #  STACK: [0, 'D34çý‚sè', 'D34çý‚sè']
             34ç         # Push '"' to the stack
                         #  STACK: [0, 'D34çý‚sè', 'D34çý‚sè', '"']
                ý        # Join the stack with '"' delimiter
                         #  STACK: ['0"D34çý‚sè"D34çý‚sè']
                 Â       # Bifurcate (short for Duplicate & Reverse)
                         #  STACK: ['0"D34çý‚sè"D34çý‚sè', 'ès‚Âýç43D"ès‚Âýç43D"0']
                        # Pair them up:
                         #  STACK: [['0"D34çý‚sè"D34çý‚sè','ès‚Âýç43D"ès‚Âýç43D"0']]
                   s     # Swap to get the boolean input (0 or 1)
                         #  STACK: [['0"D34çý‚sè"D34çý‚sè','ès‚Âýç43D"ès‚Âýç43D"0'], 1]
                    è    # Index the input into the list
                         #  STACK: ['ès‚Âýç43D"ès‚Âýç43D"0']
                         # (Output the top of the stack implicitly)

PS: Автоматично друкує зворотний новий рядок. Якщо це також слід змінити, це замість цього 23 байти:

0"D34çý‚sè?"D34çý‚sè?

Спробуйте в Інтернеті. ( ?це явна Друк без нового рядка )

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