Транспонуйте квінку


10

У цьому варіанті quine ваша програма повинна виводити свій вихідний код, перенесений по діагоналі, зверху вліво-внизу праворуч. Наприклад:

ваша програма
на
чотири рядки

виходи

 yof
 ono
 u u
 r r
    
 p l
 r i
 o n
 g e
 r s
 a
 m

Пробіл у висновку не є довільним. Прогалини з'являються в двох випадках: коли є простір , в оригіналі (наприклад , між rі lв четвертій колонці) і , де це необхідно заповнює символом (. Наприклад , всі прогалини в першому стовпці) Обидва необхідні і прогалини не можуть з'являтися в будь-якому місці інше у виході.

Один окремий зворотний рядок у висновку може необов'язково ігноруватися. Обмеження нових рядків у вихідному коді не впливає на вихід, і провідними новинками у вихідному коді потрібно обробляти, як у наведеному вище прикладі. Припустимо, що кожен символ, який не є новим рядком, має один стовпчик у ширину та один ряд у висоту, навіть якщо для символів на зразок вкладки це може призвести до некрасивого виводу.

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

Недозволені лайки, які читаються з файлу, що містить їх вихідний код, витягують дані з URL-адреси, використовують вбудовані вбудовані модулі тощо.

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


Чи потрібно це бути справжньою королевою?
lirtosiast

2
@ThomasKwa На відміну від?
Мартін Ендер

@ MartinBüttner Можливо, є мова, куди переносяться буквальні перегуки. Про всяк випадок.
lirtosiast

@ThomasKwa Це добре, якщо воно дотримується всіх правил.
Лука

Чи заборонено використання зовнішніх бібліотек (наприклад, Lodash у Javascript)?
Mama Fun Roll

Відповіді:


5

CJam, 14 байт

{`"_~".+N*}
_~

Тестуйте це тут.

Хоча коротше, напевно, трохи менш цікаво, ніж рішення Fission.

Пояснення

{       e# Quine framework. Runs the block while another copy of it is on the stack.
  `     e# Stringify the block.
  "_~"  e# Push the remaining code as a string.
  .+    e# Element-wise append... essentially puts the two strings in a grid and 
        e# transposes it.
  N*    e# Join with linefeeds.
}_~

10

Ділення , 17 байт

Досі моя улюблена мова для лайків ...

'"
!0
0+
;!
DN
"!

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

Пояснення

Це досить схоже на базову квітку Fission . Насправді, якби не правило "повинно мати принаймні два рядки з принаймні двома символами, які не є новим рядком", я просто міг би перенести це і замінити Rна D. Це правило робить речі дещо цікавішими, оскільки нам потрібно надрукувати ще один рядок.

Контрольний потік починається Dз одного атома, що йде на південь. Після удару "він обернеться і надрукується

'!0;D

до STDOUT, аналогічно тому, як це було б у звичайній квині. '!потім встановлює масу атома на код символу !. Це 0телепортатор, який транспортує атом до другої колони, де він все ще рухається на південь.

З +ми збільшуємо масу атома до значення ". !N!цитати відбитків, виправлення ліній, цитата. Тепер STDOUT виглядає так:

'!0;D"
"

Після обгортання атом потрапляє на інший "і тепер друкує другий рядок дослівно:

'!0;D"
"0+!N!

Зараз ми закінчили. Атом знову використовує телепортер і потрапляє в той, ;що знищує його і тим самим припиняє програму.

Я вважаю, що найменший біт тут ставить один "внизу, а другий вгорі, щоб я міг надрукувати їх за один перехід, не вказуючи значення !ще раз (тому що він буде перезаписаний, ввівши знову рядовий режим).


3

Javascript ES6, 90 байт

$=_=>[...(_=`$=${$};$()`.split`
`)[0]].map((x,y)=>_.map(v=>[...
v][y]).join``).join`
`;$()

Непогано, не погано.

Пояснення

Ось стандартний каркас Quine:

$=_=>`$=${$};$()`;$()

Щоб змінити, я просто розділив рядок quine на нові рядки та символи, щоб створити матрицю символів, перемістивши за допомогою двох функцій карти і долучившись до створення виводу.



2

Befunge-93 , 57 байт

^
_^
,@
+,
5*
52
,+
*9
28
+|
9
8#
|!
 ,
##
!:
,^
#
:
^
""

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

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


Чи може бути коротше перемістити цитату у другому стовпчику вгору, як я це зробив у своїй відповіді Fission?
Мартін Ендер

Я можу перенести цитату до верхньої частини і змінити другий стовпчик, і він все ще працює, але він все ще складає 57 байт, оскільки перший стовпець все ще повинен бути однакової висоти
Кевін В.

Хм гаразд, я подумав, що це може дозволити вам генерувати "єдиний раз, щоб ви могли перенести якийсь код з першого стовпця на другий.
Мартін Ендер

1

Python 2, 91 75 69 байт

s='#%r;print"s#\\n="+"\\n".join(s%%s)';print"s#\n="+"\n".join(s%s)
##

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

Пояснення:

Для цього використовується модифікація стандартної квінки:

s='s=%r;print s%%s';print s%s

Після модифікації:

s='s=%r;print"\\n".join(s%%s)';print"\n".join(s%s)

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

Щоб правильно надрукувати його зараз, я повинен надрукувати #в кінці перших двох рядків. Тому я видаляю перші два символи з рядка sі друкую ті, до яких #до друку s%s. Я ставлю один з #на початку, sщоб зберегти кілька байтів, видаливши літерал нового рядка.

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