Зробіть прожектор з алфавіту!


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), потім нового рядка.

Додаткові правила:

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

Як і у випадку з , виграє найкоротше подання. Удачі!

Табло:


3
Для мене це схоже на світло, яке кидає сигнал-бит
scottinet


Чи може кожен рядок мати додатковий простір перед ним?
HyperNeutrino

3
Чи може кожен рядок мати пробіли після останньої літери?
милі

1
@miles так, це добре.
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, це дійсно німе правило
DJMcMayhem

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

2
Я можу запропонувати PR-документ, який документує цю функцію, коли знайду час. Це здається гарним способом навчитися трохи пітона з добре написаного коду, який легко читається
scottinet

6
Чому žpіснує, коли Auзолотий? BADUM tissss
Magic Octopus Urn

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 ... принаймні Перл випередив усіх, як ви могли очікувати.
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 #, і мозкові ебани: D
Conor O'Brien

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']що є алфавітом зворотнього верхнього регістру.
німі

Ах, я бачу зараз. Дякую!
Конор О'Браєн

8

Пітон 2 , 66 64

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

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


1
Ласкаво просимо до головоломки програмування та коду для гольфу - приємна перша відповідь!
MD XF

2
Дякую! Подумав я спробую це замість того, щоб просто ховатися.
Artemis_134

2
Ви можете видалити простір між printі 'на 65 байт.
Містер Xcoder

Я переніс вашу відповідь у Pyth, подивіться: codegolf.stackexchange.com/a/141939/63757
Stan Strum

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 байти завдяки милям



@LaakyNun О, добре, дякую!
HyperNeutrino

Так, інше використання для префікса швидко. 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 - це езоланг, який я створив у 2018 році для класового проекту, і це похідна мозкових записів, у якій довжини слів відповідають командам brainfuck (а команди +, -,> та <мають однозначні аргументи).

Той факт, що команди визначають лише довжину слів, означає, що я технічно міг створити програму, повністю складену з не-слів (тобто літеру 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⮌…α⊕ι↗

Спробуйте в Інтернеті! Посилання на багатослівну версію.



Зачекайте, noooooo є провідний простір
лише ASCII

Сину ... Мені потрібно переглядати кожну команду і оператора Вугілля. > _> Дякую!
повністюлюдський

Виправлено tio.run/…
лише для ASCII,

1
@ ASCII-тільки CycleChop... але ти забув Increment(або як його ще називають)
Ерік Атгольфер

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;(!|

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

Кубіфікований

      $ / \
      ; 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 перенаправлення на додавання, виведення символу, поп, поворот ліворуч
  • (!декремент, тест на truthy. Якщо true починається з шляху, який влучить у поворот, повертається до переадресації.
  • |(;No на помилковому, відбиваючому, надмірному тесті, надмірному скороченні, поп, натисканні 10 та вихідному символі
  • ;;(u!@Wспливати до базового номера, декременту, повернути праворуч на тест на правду, зупинити, якщо помилково інакше змінити смугу на дублікат на початку. Промийте і повторіть.

4

Пітон, 83 байти

[print(' '*i+''.join([chr(64+i)for i in range(i+1,0,-1)]))for i in range(25,-1,-1)]

Моя перша відповідь на codegolf :)


1
Запізнілий прийом до PPCG! приємна відповідь!
Conor O'Brien


4

Vim, 43 натискання клавіш

:h<_<CR>jjYZZPVgUxjpqqy$-i <Esc>lpl"aDYPD"ap+q25@q

Ви можете бачити це в дії в цьому GIF, зробленому за допомогою сценарію python Lynn

введіть тут опис зображення




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 linebreak. -rє безкоштовним. На два байти коротше:for($c=A;$c!=AA;$q="$s$z\n$q",$s.=" ")$z=$c++.$z;echo$q;
Тіт

@Titus спасибі, подарував тобі кудо у відповідь.
CR Drost

нм. Відразу відзначимо , що -Rі -Fце НЕ безкоштовно. Дивіться codegolf.meta.stackexchange.com/questions/2424/…
Тіт

Я вважаю, що ви можете зберегти байт, якщо використовуєте $c<AA.
Ісмаель Мігель

1
@IsmaelMiguel вибачте, я був занадто стислий. Я думав, коли писав, що "можливо, є спосіб перемістити речі навколо, не набираючи байтів, щоб спочатку трапився випадок" А ", і тоді ми зможемо виявити АА проти В, але я не думаю, що я достатньо розумний, щоб це побачити . " Я не хотів бути легковажним, і буду намагатися стежити за цим у майбутньому.
CR Drost

3

Просто цікаво, як довго триває стислий варіант?
caird coinheringaahing

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


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