Сделай алфавитный прожектор!


66

Вдохновленная ошибкой в решении этой задачи , ваша задача состоит в том, чтобы создать такой точный текст:

                         ZYXWVUTSRQPONMLKJIHGFEDCBA
                        YXWVUTSRQPONMLKJIHGFEDCBA
                       XWVUTSRQPONMLKJIHGFEDCBA
                      WVUTSRQPONMLKJIHGFEDCBA
                     VUTSRQPONMLKJIHGFEDCBA
                    UTSRQPONMLKJIHGFEDCBA
                   TSRQPONMLKJIHGFEDCBA
                  SRQPONMLKJIHGFEDCBA
                 RQPONMLKJIHGFEDCBA
                QPONMLKJIHGFEDCBA
               PONMLKJIHGFEDCBA
              ONMLKJIHGFEDCBA
             NMLKJIHGFEDCBA
            MLKJIHGFEDCBA
           LKJIHGFEDCBA
          KJIHGFEDCBA
         JIHGFEDCBA
        IHGFEDCBA
       HGFEDCBA
      GFEDCBA
     FEDCBA
    EDCBA
   DCBA
  CBA
 BA
A
  • В первой строке будет 25 пробелов, затем алфавит в обратном направлении, начиная с 26-й буквы ( ZYXWVUTSRQPONMLKJIHGFEDCBA), затем новая строка.
  • Во второй строке будет 24 пробела, затем алфавит в обратном направлении, начиная с 25-й буквы ( YXWVUTSRQPONMLKJIHGFEDCBA), затем новая строка.
  • ...
  • В последней (26-й) строке не будет пробелов, затем алфавит в обратном порядке, начиная с 1-й буквы ( A), затем новая строка.

Дополнительные правила:

  • Ваша программа может использовать любые разрешенные методы вывода.
  • Допускается один завершающий символ новой строки и / или один ведущий символ новой строки.
  • Между строками должна быть одна новая строка, не более.
  • Буквы должны быть заглавными.

Как и в случае с , выигрывает самое короткое представление. Удачи!

Leaderboard:


3
Для меня это похоже на свет,
излучаемый


Может ли каждая строка иметь дополнительный пробел перед ней?
HyperNeutrino

3
Может ли каждая строка иметь завершающие пробелы после последней буквы?
мили

1
@ Майлз да, все в порядке.
MD XF

Ответы:


19

05AB1E , 7 байтов

Код:

₂žp.s1Λ

Использует кодировку 05AB1E . Попробуйте онлайн!

объяснение

 žp.s      # Get the suffixes of ZYX...CBA
      Λ    # Using the canvas mode, print the
₂          # first 26 elements of the array
     1     # into the upper-right direction

2
@MDXF IMO, это действительно
глупое

3
Хм ... Наверное, тогда я уберу правило. статус завершен
MD XF

2
Я мог бы предложить PR, документирующий эту функцию, когда я найду время. Кажется, это хороший способ выучить немного Python из хорошо написанного, легко читаемого кода
scottinet

6
Почему žpсуществует, когда Auзолото? БАДУМ Тисссс
Волшебная Урна Осьминога

5
Используя 05AB1E, создайте файл, документирующий все его возможности, сократите выигрыши в коде: P
Кристиан

22

R , 67 55 байт

for(i in 26:1)cat(rep(" ",i-1),LETTERS[i:1],"
",sep="")

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


4
R побеждает Python на вызове строки? Приятно. +1 за ПИСЬМА
Криминально

1
@CriminallyVulgar это очень странный вызов; Haskell превосходит связь PHP и R, которые оба превосходят Python ... по крайней мере, Perl опережает их всех, как вы могли ожидать.
CR Drost

-2 байта, если вы измените sepна s. Функции будут автоматически завершать именованные аргументы, если нет столкновений
Punintended

1
@Punintended, который не будет работать из-за ...аргумента; Аргументы, которые предшествуют ...(как правило), частично совпадают, а аргументы - нет. Я полагаю, что есть несколько исключений, но catэто не одно из них
Джузеппе

@Giuseppe Я не вижу...
MilkyWay90


15

V , 13 , 11 байтов

¬ZAòY>HGpxl

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

HexDump:

00000000: ac5a 41f2 593e 4847 7078 6c              .ZA.Y>HGpxl

Написано с моего телефона: P.

¬ZA         " Insert the alphabet backwards
   ò        " Recursively:
    Y       "   Yank this current line
     >H     "   Add one space to every line
       G    "   Move to the last line in the buffer
        p   "   Paste the line we yanked
         x  "   Delete one character
          l "   Move one character to the right, which will throw an error on 
            "   the last time through, breaking the loop

1
Я тоже делаю это на своем телефоне, +1
Стэн Струм,

12

PowerShell , 42 байта

25..0|%{' '*$_+-join[char[]]((65+$_)..65)}

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

Объяснение:

25..0|%{                                 } # Loop from 25 to 0
                             (65+$_)..65   # Construct a range of the specific ASCII codes
                    [char[]](           )  # Cast that as a character array
               -join                       # that has been joined together into a string
        ' '*$_+                            # Prepended with the correct amount of spaces


10

/// , 105 97 байт

/:/\\\\*//#/:Z:Y:X:W:V:U:T:S:R:Q:P:O:N:M:L:K:J:I:H:G:F:E:D:C:B:A//\\*/\/\/_____#
\/ //_/     //*#

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

объяснение

/// знает только одну команду, /<pattern>/<substitution>/<text>заменяет все вхождения <pattern>в <text>с <substitution>. Дополнительно \можно использовать для экранирования персонажей.

Сокращенный код для простоты:

/:/\\\\*//#/:E:D:C:B:A//\\*/\/\/__#
\/ //_/  //*#

Первая команда /:/\\\\*/заменяет :с \\*в следующем коде. Это дает:

/#/\\*E\\*D\\*C\\*B\\*A//\\*/\/\/__#
\/ //_/  //*#

Затем /#/\\*E\\*D\\*C\\*B\\*A/заменяется #на \*E\*D\*C\*B\*A:

/\\*/\/\/__\*E\*D\*C\*B\*A
\/ //_/  //*\*E\*D\*C\*B\*A

Затем /\\*/\/\/__\*E\*D\*C\*B\*A<newline>\/ /заменяется \*на //__*E*D*C*B*A<newline>/:

/_/  //*//__*E*D*C*B*A
/ E//__*E*D*C*B*A
/ D//__*E*D*C*B*A
/ C//__*E*D*C*B*A
/ B//__*E*D*C*B*A
/ A

Обратите внимание: я должен был использовать \*для замены. Так *как также является частью подстановки, он будет генерировать бесконечный цикл, если я только заменю *.

Затем команда /_/ /заменяется _пробелами и /*//удаляет все *:

EDCBA
/ E//    EDCBA
/ D//    EDCBA
/ C//    EDCBA
/ B//    EDCBA
/ A

Следующая команда ничего не /#//заменяет #. Поскольку #в коде его нет, он ничего не делает. Это как раз здесь, чтобы удалить два //начала из начала кода. Это оставляет

EDCBA
/ E//    EDCBA
/ D//    EDCBA
/ C//    EDCBA
/ B//    EDCBA
/ 

Затем команда / E//удаляет <space>E, так что это оставит код

    EDCBA
   DCBA
/ D//   DCBA
/ C//   DCBA
/ B//   DCBA
/ 

Подобное / D//удаляет <space>D:

    EDCBA
   DCBA
  CBA
/ C//  CBA
/ B//  CBA
/ 

/ C//:

    EDCBA
   DCBA
  CBA
 BA
/ B// BA
/ 

/ B//:

    EDCBA
   DCBA
  CBA
 BA
A
/ 

И последняя команда является неполной, поэтому она ничего не делает:

    EDCBA
   DCBA
  CBA
 BA
A

Те же длины, что и в C # и brainfuck: D
Конор О'Брайен,

9

Haskell, 53 52 байта

f(a:b)=(b>>" ")++a:b++'\n':f b
f x=x
f['Z','Y'..'A']

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

Как это устроено

f['Z','Y'..'A']        -- call f with the full backwards alphabet

f(a:b)=                -- let `a` be the first char and `b` the rest. Return
   (b>>" ") ++         -- replace each char in b with a space, followed by
   a:b ++              -- the input string, followed by
   '\n' :              -- a newline, followed by
   f b                 -- a recursive call of `f` with `b`
f x=x                  -- stop on an empty input string

Почему не f['Z'..'A']работает?
Конор О'Брайен,

1
@ ConorO'Brien: [a..b]начинается с aи собирает все преемники ( +1для целых чисел, следующий ascii-char для символов и т. Д.) До b. Если a > bэто пустой список. Однако вы также можете указать второе значение (которое может быть меньше), из которого рассчитывается приращение / уменьшение. [1,3..8]-> [1,3,5,7], [15,10..0]-> [15,10,5,0], или ['Z','Y'..'A']который является обратным заглавным алфавитом.
Nimi

Ах, теперь я вижу. Спасибо!
Конор О'Брайен,

8

Python 2 , 66 64

i=26
while i:i-=1;print' '*i+'ZYXWVUTSRQPONMLKJIHGFEDCBA'[25-i:]

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


1
Добро пожаловать в Программирование Пазлов и Code Golf - хороший первый ответ!
MD XF

2
Спасибо! Думаю, я бы попробовал, а не просто скрывался.
Artemis_134

2
Вы можете удалить пространство между printи 'для 65 байтов.
г-н Xcoder

Я перенес ваш ответ в Pyth, посмотрите: codegolf.stackexchange.com/a/141939/63757
Стэн Струм

7

JavaScript (ES6), 83 77 76 байт

f=(n=0,p='')=>n<26?f(++n,p+' ')+p+`ZYXWVUTSRQPONMLKJIHGFEDCBA
`.slice(~n):''

o.innerText = f()
<pre id=o>


Я хотел предложить вам улучшение, но потом я понял, что наши подходы очень разные. Надеюсь, ты не возражаешь.

@ThePirateBay Нет проблем!
Арно

7

Желе , 12 байт

ØAµ⁶ṁḊ;ṚµƤṚY

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

ØAµ⁶ṁḊ;ṚµƤṚY  Main Link
ØA            "ABC...XYZ"
         Ƥ    For each prefix,
  µ⁶ṁḊ;Ṛµ     Monadic Link
   ⁶          ' '
    ṁ         (with automatic repetition) molded to the shape of
     Ḋ        All but the first letter of the input (repeat - 1)
      ;       With the input          appended to it
       Ṛ                     reversed
           Y  Join on newlines

-3 байта благодаря милям



@ LeakyNun О, круто, спасибо!
HyperNeutrino

Yay, другое использование для быстрого префикса. 12 байтов, так как форма будет изменяться здесь, используя длину неявно.
мили

@LeakyNun На самом деле, к сожалению, это сделает его недействительным, потому что не может быть лишних пробелов (для исправления потребуется 2 байта)
HyperNeutrino

7

брейкфук , 105 байт

++++++++[>+>+++++++++++>++++>+++<<<<-]>++>++>>++[[->+>+<<]>-[-<<.>>]>[-<<<<.->>>+>]<-[-<+<<+>>>]<<<<.>>>]

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

Минимизировано и отформатировано:

++++++++[>+>+++
++++++++>++++>+
++<<<<-]>++>++>
>++[[->+>+<<]>-
[-<<.>>]>[-<<<<
.->>>+>]<-[-<+<
<+>>>]<<<<.>>>]

Читаемая версия:

[
  pre-initialize the tape with the values 10 90 32 >26<
  C_NEWLINE: 10
  V_ALPHA: 90
  C_SPACE: 32
  V_COUNTER: 26

AS:

  10 = 8 *  1 + 2
  90 = 8 * 11 + 2
  32 = 8 *  4 + 0
  26 = 8 *  3 + 2
]

8 ++++++++ [
  *  1 >+
  * 11 >+++++++++++
  *  4 >++++
  *  3 >+++
<<<<-]
PLUS 2 >++
PLUS 2 >++
PLUS 0 >
PLUS 2 >++

UNTIL V_COUNTER == 0 [
  COPY V_COUNTER to RIGHT and RIGHT_RIGHT
  [->+>+<<]
  TAPE: 10 V_ALPHA 32 >0< V_COUNTER_R V_COUNTER_RR
  V_COUNTER_R SUB 1 TIMES: >-[-
     PRINT C_SPACE <<.
  >>]
  TAPE: 10 V_ALPHA 32 0 >0< V_COUNTER_RR
  V_COUNTER_RR TIMES: >[-
    PRINT V_ALPHA <<<<.
    DECREMENT V_ALPHA -
    INCREMENT V_COUNTER_R >>>+
  >]
  TAPE: 10 V_ALPHA 32 0 V_COUNTER_R(26) >0<
  V_COUNTER_R SUB 1 TIMES: <-[-
    INCREMENT V_COUNTER <+
    INCREMENT V_ALPHA <<+
  >>>]
  PRINT C_NEWLINE <<<<.
>>>]


6

Поэтический , 601 байт

one night i camped a bit
throughout all the forest now
the sweet sights
i saw giant things
i saw little small things
here i am
seated around all my trees i saw
i sleep
i sle-e-p
sleep in a cabin
i am sleep-y
i sleep a bit
i awaken in bed
i stand
i walk
i am ready
i saw a vision of a dragon
i am fooled
i know i am
should i f-ight
i f-light
i did f-light
i did a flight
go away,i do imply
i*m afraid
i run
i leave
i flee
i am timid
i*m just a person,not toughie-tough-guy
no,never
i*m waste
i am stupid
a quitter i was
i am stupid
i*m turning around
i do not appreciate camping
i cry
i am crying
no
no

Poetic - это esolang, который я создал в 2018 году для проекта класса, и это производная от мозгового меха, в которой длины слов соответствуют командам мозгового меха (а команды +, -,> и <каждая имеют аргументы из 1 цифры).

Тот факт, что только длина слова диктует команды, означает, что я технически мог бы создать программу, целиком составленную из не-слов (то есть буквы X столько раз, сколько нужно, с пробелами между словами), но я хотел сделать интересный стихотворение свободного стиха из этого, не добавляя ненужные байты.

Если вы хотите попробовать его в Интернете (что, в первую очередь, составляет половину цели проекта), обратитесь к моему онлайн-переводчику !


Почему это не конкурирует?
pppery

Язык был создан после вызова.
JosiahRyanW


Хм, тогда я думаю, это дает мне больше мотивации для использования Poetic в качестве языка программирования! Хех.
JosiahRyanW

5

05AB1E , 10 байтов

žpDvÐg<ú,¦

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

Пояснения:

žpDvÐg<ú,¦
žp           Push the uppercased alphabet, reversed
  D          Duplicate
   v         For each letter (we just want to loop 26 times, so we use the 
                already pushed alphabet for that purpose)
    Ð        Triplicate
     g<      Length of the string - 1
       ú     Add that number of spaces at the beginning of the string
        ,    Print with newline
         ¦   Remove the 1st element of the remaining copy of the string

5

Perl 6 , 37 байт

Сохранено 9 байт благодаря @Massa.

say " "x$_,chrs $_+65...65 for 25...0

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

Пояснение: 25...0 это диапазон от 25 до 0 (как и ожидалось). Мы перебираем этот диапазон, говоря (= печать с новой строкой), что много пробелов и строка символов, которые имеют коды ASCII ( chrs) от 65 + это число ( $_+65...65).


1
25...0 это более короткий путь :-)
Масса

попробуйте say " "x$_,chrs $_+65...65 for 25...0:-)
Масса

Большое спасибо! Я никогда не знал об этом! И суб форма тоже лучше (жаль, что я сделал это из головы). (Вот почему мне нравится использовать Perl 6 для Codegolf, я всегда открываю что-то новое.)
Ramillies

4

Древесный уголь , 19 11 байт

-8 байт благодаря ASCII-только.

F²⁶«P⮌…α⊕ι↗

Попробуйте онлайн! Ссылка на подробную версию.



Подождите, ооооо, там впереди
только ASCII

Сын ... Мне нужно просмотреть все команды и операторы, которые есть в Charcoal. > _> Спасибо!
полностью человек

Исправлено tio.run/…
только для ASCII

1
@ Только для ASCII CycleChop... но вы забыли Increment(или как там это называется)
Эрик Outgolfer

4

Perl 5 , 36 байт

35 байт код + 1 для -p.

$\=$"x$-++.($a=$_.$a).$/.$\for A..Z

Примечание : TIO не поддерживает пустой ввод , поэтому предоставляется новая строка, это приводит к лишнему переводу строки, но при запуске в командной строке с пустым вводом это не отображается.

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



4

Cubix , 43 46 байт

$/\;u:\s/':(!$u;:'@^!@Wu;oSU;o+<u(;;oN;(!|

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

Cubified

      $ / \
      ; u :
      \ s /
'  : ( ! $ u ; : ' @ ^
! @ W u ; o S U ; o + <
u ( ; ; o N ; ( ! | . .
      . . .
      . . .
      . . .

Смотреть это беги

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

  • '<sub> нажмите 26 на стек в качестве базового числа
  • :(! дубликат базы как счетчик, декремент, проверка на правдивость
  • uна истину пропустить $команду и разворот направо
    • So;u нажмите 32, выведите как символ, нажмите 32 и поверните направо на декремент
  • $при ложном прыжке следующая uкоманда
  • ;:'@^ выдвиньте, продублируйте базовый номер, вставьте 64 в стек и перенаправьте на извилистый маршрут
  • $\s/:\/u;$это порядок шагов на верхней грани. Это сводится к тому, чтобы поменять счетчик с 64. Заканчивается пропуском через редирект, который поместил его здесь.
  • <+o;U перенаправить, чтобы добавить, вывод символа, поп, разворот налево
  • (!декремент, проверка на правдивость. Если true начинается на пути, который попадает в разворот и возвращается к перенаправлению.
  • |(;No ложь, отражение, избыточный тест, избыточный декремент, pop, push 10 и выходной символ
  • ;;(u!@Wнажмите на базовое число, уменьшите, поверните направо на правдивый тест, остановите, если false, в противном случае измените полосу на дубликат в начале. Промыть и повторить.




3

JavaScript, 75 74 байта

1 байт сохранен благодаря Рику Хичкоку

f=(a=65,b='',c)=>a>90?'':f(a+1,b+' ',c=String.fromCharCode(a)+[c])+`
`+b+c

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


Сохраните байт, инициализируя b( b=''), а затем убирая bквадратные скобки.
Рик Хичкок,

@RickHitchcock. Благодарю.


3

Пайк , 8 байт

G_.<XFo}h-

Попробуй это здесь!

           -  o = 0
G_         -    reversed(alphabet)
  .<       -   suffixes(^)
    XF     -  for i in ^:
      o    -      o++
       }   -     ^ * 2
        h  -    ^ + 1
         - -   i.lpad(" ", ^)
           - for i in reversed(^):
           -  print i

Я вижу правильный язык, делающий это в 6 байтах, если у них есть встроенная функция, prepend n spaces to stringа также то, что делает Pyke


3

PHP ( 63 58 55 байт)

Возможно, это мой любимый странный угол PHP, угол, который он наследует от Perl:

for($c=A;$c!=AA;$q="$s$z 
$q",$s.=" ")$z=$c++.$z;echo$q;

Это выводит завершающий символ новой строки, как явно разрешено. Это можно запустить, php -rчтобы сохранить отверстие, <?phpнеобходимое для помещения в файл.

Объяснение: когда переменная, содержащая строку 'A', увеличивается в PHP, она становится, 'B'а затем 'C'и так далее до тех пор, пока не 'Z'станет 'AA'. В 'A'этой алгебре madcap нет ни одной цифры, с которой нужно начинать, и оператор декремента не отменяет ее, поэтому мы сохраняем пошагово обращенный алфавит в $z(по умолчанию, NULLкогда он объединяется со строкой, он ведет себя как пустая строка - то же самое происходит с $sи $q). Пробелы накапливаются, $sа вся строка накапливается в переменной в обратном направлении, $qчто означает, что мы должны повторить его в конце.

Спасибо Титу за то, что он играл в гольф с моих фигурных скобок и сказал мне, что мне не нужно брать штраф за такие флаги, как встроенные оценки -r.


1
Это 57 байт, если вы используете перевод строки linux. -rэто бесплатно. На два байта короче:for($c=A;$c!=AA;$q="$s$z\n$q",$s.=" ")$z=$c++.$z;echo$q;
Титус

@ Титус спасибо, дал вам благодарность в ответ.
CR Drost

нм. Сразу отметим , что -Rи -Fэто не бесплатно. См. Codegolf.meta.stackexchange.com/questions/2424/…
Титус

Я считаю, что вы можете сохранить байт, если вы используете $c<AA.
Исмаэль Мигель

1
@IsmaelMiguel извините, я был слишком кратким. Когда я писал это, я думал: «Может быть, есть способ перемешать вещи без получения байтов, чтобы сначала произошел случай А, а затем мы могли обнаружить АА против В, но я не думаю, что я достаточно умен, чтобы это увидеть. «. Я не хотел быть легкомысленным, и я постараюсь следить за этим в будущем.
CR Drost

3

Просто любопытно, как долго длится сжатая версия?
Кэрд coinheringaahing

@cairdcoinheringaahing TL; DR слишком длинный. Сжатие SOGL отстой (и специально сделано не для) повторяющихся вещей. Это было бы очень трудно сказать, так как сжатие не автоматизировано (автоматизация потребовала бы 701 choose xпопыток для любого целого числа x), но грубая попытка была 450 байтов: P
dzaima


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