Исходный код селфи


20

Задача:

Гуру однажды сказал, что селфи с идеальным кодом лучше всего снимать по диагонали из левого верхнего угла. Селф кода почти как Quine - но повернут на 45 градусов по часовой стрелке. Ваша миссия - написать программу, которая выводит селфи кода.

Правила:

  1. Вы можете использовать любой язык программирования.
  2. Ваши программы не должны принимать данные из файла, имени файла, сети или чего-либо еще.

Обязательные критерии:

Селфи - это мотив и фон, поэтому пробелы (и другой невидимый контент, такой как перевод строки и т. Д.) Не считаются частью числа символов. Все видимые символы ограничены для вывода в правильном положении на 45 градусов, в то время как все невидимые символы не ограничены в правильном положении на 45 градусов. Подобно цветовой палитре для обычного селфи, для селфи кода обязательно, чтобы оно содержало как минимум 16 из следующих символов: {a-zA-Z0-9}

Пример:

Если этот пример действительный исходный код:

Output abcd
Output efgh
Output ijkl
Output mnop

Пример кода должен вывести это:

   O         
  O u
 O u t
O u t p
 u t p u
  t p u t
   p u t
    u t   a  
     t   e b
        i f c
       m j g d
        n k h
         o l
          p

Это код-гольф, выигрывает самый короткий исходный код в байтах!


2
16 уникальных [a-zA-Z0-9]?
Оптимизатор

Как бы мы оценили представление в Whitespace?
Sp3000

Пробелы невозможны, поскольку пробелы не учитываются. Да, 16 уникальных [a-zA-Z0-9], не менее 16 символов.
Пларсен

Эта проблема смещена против языков, которые требуют разрывов строк в своем коде. В этом вызове гораздо сложнее поддерживать мультилинию.
nderscore

1
@nderscore Возможно, вы правы в этом. Ну, мы все здесь для развлечения, верно? Сделай лучшее из ситуации! ;)
Пларсен

Ответы:


7

Javascript ( ES6 ), 72 байта

16 уникальных буквенно-цифровых символов паллета: fjalert0plcgmixn

(f=j=>alert(`(f=${f})(0)`.replace(/./gmi,x=>' '.repeat(j++)+x+'\n')))(0)

mи iфлаги добавляются в регулярное выражение для соответствия минимальным требованиям палитры.


4

CJam, 30 28 25 байт

{95c103ic]seeSf.*N*Xmr}_g

Это довольно долго из-за 16 символов из A-Za-z0-9лимита.

Это немного нетривиальный вариант стандартной квин в CJam. Скоро добавлю объяснения.

ОБНОВЛЕНИЕ - 2 байта сохранены благодаря Мартину, 3 байта сохранены благодаря Деннису

Попробуйте онлайн здесь


1

Ява, 312

class Z{public static void main(String[]a){String s="class Z{public static void main(String[]a){String s=%c%s%1$c,t;for(int i=0,j;i<326;System.out.println(t+s.format(s,34,s).charAt(i++)))for(j=i,t=%1$c%1$c;j-->0;)t+=' ';}}",t;for(int i=0,j;i<326;System.out.println(t+s.format(s,34,s).charAt(i++)))for(j=i,t="";j-->0;)t+=' ';}}

На самом деле это 326 байтов, но если я правильно понимаю правила, мне не нужно считать 14 пробелов.

Программа в основном стандартная Java quine, плюс много пробелов.


1

Python 3, 139 символов - 10 пробелов = 129 символов

sjxd='sjxd=%r;[print(" "*i+(sjxd%%sjxd)[i]) for i in range(len(sjxd%%sjxd))]';[print(" "*i+(sjxd%sjxd)[i]) for i in range(len(sjxd%sjxd))]

Так как мой код был одной строкой, мне нужно было распечатать программу по диагонали. Моя строка имеет странное имя 'sjxd', поэтому мой код может содержать 16 уникальных буквенно-цифровых символов.


0

CSS, 69 байт

<style>:before,*{transform:rotate(45deg;display:block;content:'<style>

Вставьте пустую HTML-страницу, чтобы избежать конфликта с другими тегами.

Палитра: stylebfortanm45dgiplck(22 символа)


0

MATLAB, 40 байт

Немного сложно с рекурсией - как вы печатаете свой собственный исходный код, когда добавление кода в строку для печати увеличивает размер самого исходного кода. Но, тем не менее, следующее сделает это:

123456;disp(diag('123456;disp(diag())'))

123456;Немного есть для удовлетворения требуемых 16 уникальных персонажей. Используются следующие:

'()123456;adgips

Приведенный выше код по какой-то причине не работает в Octave, но работает в MATLAB. Ниже вывод:

1                  
 2                 
  3                
   4               
    5              
     6             
      ;            
       d           
        i          
         s         
          p        
           (       
            d      
             i     
              a    
               g   
                (  
                 ) 
                  )

Теперь, если вы не возражаете против того, ans=что MATLAB любит помещать, следующее будет работать для 32 байтов :

12345678;diag('12345678;diag()')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.