Слова всередині слів всередині слів. . .


17

У цьому пікселізованому шрифті великих літер алфавіту всі символи шириною 5 одиниць та 5 заввишки.

 ███  ████   ███  ████  █████ █████  ████ █   █ █████     █ █   █ █     █   █
█   █ █   █ █   █ █   █ █     █     █     █   █   █       █ █  █  █     ██ ██
█████ ████  █     █   █ ████  ████  █  ██ █████   █       █ ███   █     █ █ █
█   █ █   █ █   █ █   █ █     █     █   █ █   █   █   █   █ █  █  █     █   █
█   █ ████   ███  ████  █████ █      ████ █   █ █████  ███  █   █ █████ █   █

█   █  ███  ████   ███  ████   ████ █████ █   █ █   █ █   █ █   █ █   █ █████
██  █ █   █ █   █ █   █ █   █ █       █   █   █ █   █ █   █  █ █   █ █     █ 
█ █ █ █   █ ████  █   █ ████   ███    █   █   █  █ █  █ █ █   █     █     █  
█  ██ █   █ █     █  ██ █  █      █   █   █   █  █ █  █ █ █  █ █    █    █   
█   █  ███  █      ████ █   █ ████    █    ███    █    █ █  █   █   █   █████

Між літерами та між рядками також є 1 одиниця простору, як видно. Таким чином, кожна літера може займати до 6 × 6 одиниць місця.

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

Якщо це не має сенсу, сподіваємось, цей приклад буде. Ось A, виготовлений з B, використовуючи пікселізований шрифт:

      ████  ████  ████       
      █   █ █   █ █   █      
      ████  ████  ████       
      █   █ █   █ █   █      
      ████  ████  ████       
                             
████                    ████ 
█   █                   █   █
████                    ████ 
█   █                   █   █
████                    ████ 
                             
████  ████  ████  ████  ████ 
█   █ █   █ █   █ █   █ █   █
████  ████  ████  ████  ████ 
█   █ █   █ █   █ █   █ █   █
████  ████  ████  ████  ████ 
                             
████                    ████ 
█   █                   █   █
████                    ████ 
█   █                   █   █
████                    ████ 
                             
████                    ████ 
█   █                   █   █
████                    ████ 
█   █                   █   █
████                    ████ 

B виготовлені з повних блоків, а A - з B. Зауважте, що у B все ще є одна одиниця між ними по горизонталі та вертикалі.

Ми можемо поширити цю ідею, використовуючи слова, а не просто букви. Ось "ВОДА" виготовлена ​​з "ВАЖУ":

█████                   █████             ████  █████ █████             █████ ████  █████ █████ █████       ████  █████ █████ █████ ████        █████ █████ █████ ████       
█                         █               █   █ █     █                   █   █   █ █     █       █         █   █ █     █       █   █   █       █     █       █   █   █      
████                      █               ████  ████  ████                █   ████  ████  ████    █         ████  ████  ████    █   ████        ████  ████    █   ████       
█                         █               █  █  █     █                   █   █  █  █     █       █         █  █  █     █       █   █  █        █     █       █   █  █       
█                       █████             █   █ █████ █                 █████ █   █ █████ █     █████       █   █ █████ █     █████ █   █       █████ █     █████ █   █      
                                                                                                                                                                             
█████                   █████       ████                    █████                   █████                   █████                               ████                    █████
█                         █         █   █                   █                       █                         █                                 █   █                   █    
████                      █         ████                    ████                    ████                      █                                 ████                    ████ 
█                         █         █  █                    █                       █                         █                                 █  █                    █    
█                       █████       █   █                   █████                   █                       █████                               █   █                   █████
                                                                                                                                                                             
█████       █████       ████        █████ █████ █████ ████  █████                   █████                   █████ ████  █████ █████             █████ ████  █████ █████      
█             █         █   █       █     █       █   █   █ █                       █                         █   █   █ █     █                   █   █   █ █     █          
████          █         ████        ████  ████    █   ████  ████                    ████                      █   ████  ████  ████                █   ████  ████  ████       
█             █         █  █        █     █       █   █  █  █                       █                         █   █  █  █     █                   █   █  █  █     █          
█           █████       █   █       █████ █     █████ █   █ █████                   █                       █████ █   █ █████ █                 █████ █   █ █████ █          
                                                                                                                                                                             
█████       █████       ████        █████                   █████                   █████                   ████                                █████             █████      
█             █         █   █       █                       █                         █                     █   █                               █                 █          
████          █         ████        ████                    ████                      █                     ████                                ████              ████       
█             █         █  █        █                       █                         █                     █  █                                █                 █          
█           █████       █   █       █████                   █                       █████                   █   █                               █████             █          
                                                                                                                                                                             
      █████       █████             ████                    █████                   █████                   █████ ████  █████ █████ █████       ████                    █████
      █             █               █   █                   █                       █                         █   █   █ █     █       █         █   █                   █    
      ████          █               ████                    ████                    ████                      █   ████  ████  ████    █         ████                    ████ 
      █             █               █  █                    █                       █                         █   █  █  █     █       █         █  █                    █    
      █           █████             █   █                   █████                   █                       █████ █   █ █████ █     █████       █   █                   █████

Зауважте, як "FIRE" відображається неодноразово в кожному рядку та завжди в порядку, незалежно від того, скільки місця буде між літерами. Три найправіші екземпляри "ПОЖАР" були відрізані рано через те, як формуються літери "ВОДА".

Цю думку можна розширити ще більше, використовуючи ці слова, складені зі слів, щоб слова скласти зі слів , або навіть слова, складені зі слів, зроблені зі слів . Теоретично немає меж.

Інший приклад може поставити цю публікацію за межу символу 30k, але ви можете побачити, що означає "слова, складені зі слів", виконавши цей чудовий фрагмент стека. Просто залиште параметри за замовчуванням і натисніть «Перейти!». Ви повинні побачити слово "КУЧКА", виготовлене із слова "КОТ", виготовлене із слова "МОЗ".

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

ПОПЕРЕДЖЕННЯ: Введення більш ніж 4 або навіть 3 слів призведе до багато тексту та займе довгий час. Це може зламати ваш браузер / комп’ютер / автомобіль.

Виклик

Мета цього виклику - відобразити те, що робить фрагмент стека у найменшій кількості символів.

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

У вашій програмі не потрібно підтримувати прапорець "Звичайний ASCII" та функції розміру шрифту фрагмента. Дзеркальне перетворення від списків слів до слів, складених із слів, є головним моментом і єдиною вимогою.

Деталі

  • Введення має надходити з stdin, командного рядка, або ви можете просто написати функцію, яка займає рядок.

  • Ви можете припустити, що введення завжди дійсне, тобто рядок слів з великої літери, розділених рівно одним пробілом, без провідних чи кінцевих пробілів.

  • Вихід повинен перейти до stdout (або подібної альтернативи) або до файлу з назвою на вибір.

  • Висновок повинен складатися цілком з пустого простору символів , повні прогалин і перекладів рядків.

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

    • Отже, це дозволено:

      X...X.XXXXX..
      X...X.X
      X.X.X.XXXX....
      X.X.X.X..
      .X.X..XXXXX..
      
    • Але це не так:

      .X...X.XXXXX..
      .X...X.X
      .X.X.X.XXXX....
      .X.X.X.X..
      ..X.X..XXXXX..
      
  • Не повинно бути провідних чи кінцевих рядків, що містять лише символи порожнього простору . Необов’язково допускається одна окрема нова строка.

Ось більш зручна версія шрифту:

.XXX.
X...X
XXXXX
X...X
X...X

XXXX.
X...X
XXXX.
X...X
XXXX.

.XXX.
X...X
X....
X...X
.XXX.

XXXX.
X...X
X...X
X...X
XXXX.

XXXXX
X....
XXXX.
X....
XXXXX

XXXXX
X....
XXXX.
X....
X....

.XXXX
X....
X..XX
X...X
.XXXX

X...X
X...X
XXXXX
X...X
X...X

XXXXX
..X..
..X..
..X..
XXXXX

....X
....X
....X
X...X
.XXX.

X...X
X..X.
XXX..
X..X.
X...X

X....
X....
X....
X....
XXXXX

X...X
XX.XX
X.X.X
X...X
X...X

X...X
XX..X
X.X.X
X..XX
X...X

.XXX.
X...X
X...X
X...X
.XXX.

XXXX.
X...X
XXXX.
X....
X....

.XXX.
X...X
X...X
X..XX
.XXXX

XXXX.
X...X
XXXX.
X..X.
X...X

.XXXX
X....
.XXX.
....X
XXXX.

XXXXX
..X..
..X..
..X..
..X..

X...X
X...X
X...X
X...X
.XXX.

X...X
X...X
.X.X.
.X.X.
..X..

X...X
X...X
X.X.X
X.X.X
.X.X.

X...X
.X.X.
..X..
.X.X.
X...X

X...X
.X.X.
..X..
..X..
..X..

XXXXX
...X.
..X..
.X...
XXXXX

Оцінка балів

Це тому найкоротше подання в байтах виграє. Будь-який екземпляр повного блоку ( ) може бути зарахований як 1 байт замість 3, тому подання, яке використовує X, не має переваги.


5
Ви можете виконати наступну Фрагмент коду JavaScript (напр шляхом введення. javascript:У рядку URL і вставити його) , щоб зробити ASCII мистецтво тут багато, набагато легше читати: $('#question pre').css('line-height',1). Результат: i.stack.imgur.com/XmB8C.png
Дверна ручка

1
Або включити відповіді$('#question pre, .answer pre').css('line-height',1)
Мартін Ендер

Я знаю, що пожартувати цей жарт трохи пізно, але я не втримався: i.imgur.com/vAZi1Zt.png .
Алгоритм

Як я пропустив цей виклик ?!
Чарівна восьминога урна

Відповіді:


8

CJam, 171 165 162 161 байт

qS/_0=,0a*a\{{W:I;{'[{RI):I=}?i65-"c¿»ÐòO*4Õ]%ÐÎ<à IX]{-ïèq=ô}s×o)½2~û³'é¨1ÃlØeúN!Ö3~4ÜË|ÕÇäaepý®"255b2b5/5/=}%z1af*}%R,1a*a*}fR2a*"█ 
"f=

Я розглядаю як 1 байт. Усі інші символи знаходяться в діапазоні ASCII, тому розглядайте їх як 1 байт.

Ви можете використовувати цю пастину для точного коду

Приклад виведення для введення:

FIRST HELLO WORLD

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

Як це працює

Поперше

"c¿»ÐòO*4Õ]%ÐÎ<à IX]{-ïèq=ô}s×o)½2~û³'é¨1ÃlØeúN!Ö3~4ÜË|ÕÇäaepý®"255b2b5/5/

це просто шаблон для кожного з 27 символів ( A-Zі пробілів), який складається з 0(на Xпозиціях) і 1(на .позиціях). Після розшифровки це дає 27-елементний масив 2D-масивів з 5 рядків і 5 стовпців, що представляють Xі .для кожного з 27 символів. Назвемо цей масив як L.

Тепер залишився код:

qS/                      "Read the input and split it on space to get array Q";
   _0=                   "Get a copy of the first element of the above array";
      ,0a*               "Create an array filled with 0 with length of the first element";
          a\             "Wrap that array in another array and swap to get Q on top";
{  ...  }fR              "This is a for each loop on the array Q with R having the";
                         "current element value in each loop";
 {...}%                  "In the first iteration, the 0 array we created will be the";
                         "only thing on stack, in subsequent iterations, the result";
                         "of previous iteration will be on stack";
  W:I;                   "Initialize variable I with -1";
      {...}%             "Run this block on each element of the current array";
{'[{RI):I=}?i65-L=}%     "This is the above code block. In each iteration, we figure";
                         "out what character needs to be be put at the current index";
                         "Then we get the pattern of 0 and 1 for that character";
 '[{      }?             "Stack contains either 0 or 1. If it is 1, we want to leave";
                         "that index blank, so we put pattern of '[ which is 5X5 spaces";
    RI_:I=               "When we do not want a blank character, we get the next"
                         "character from R to fill the non empty space";
            i65-         "Convert A-Z  to 0-27 notation";
                L=       "Get the corresponding pattern from the pattern array L";
z1af*                    "After the above iterations, for each line of the previous";
                         "iteration's output, we get a vertical 2D array for next";
                         "iteration. We transpose it and join each character in";
                         "this line using a space";
      R,1a*a*            "After getting all lines from current iteration, we join them";
                         "with one full line of space characters";

 2a*                     "After all iterations, we have the 0 1 based 2D array for the";
                         "final output ASCII with each row representing a line. We join";
                         "these lines with 2, to get a 0 1 2 based array";
     "█                  "A brick, a space and a newline. Mapping 1 to 1 with 0 1 2";
"                        "based array";
 f=                      "For each of the 0 1 2 based array element, convert them to";
                         "one of the brick, space and new line character";

Спробуйте його онлайн тут


9

Python 3, 437 байт

from numpy import*
s=input().split()
d=fromstring('NONO__^Q_PQAQQNONO^_QQQQQ_QQQQAAAQDPIA[SQQQQADQQQJJH_OAQOOY_DPGAUUQOQONDQJUDDDQQQQAAQQDQIAQYQAYIPDQJUJDBQONO_A^Q_NQ_QQNA^QODNDJQD_',byte)[:,None]>>arange(5)&1
b=0
x=1
y=len(s[0])
n=[[1]*y]
for w in s:
 g=n;b+=x;x*=6;n=zeros((x,x*y),int);i=-6
 for q in g:
  o=j=0;i+=6
  for p in q:n[i:i+5,j:j+5]|=d[ord(w[o%len(w)])-65::26]*p;o+=p;j+=6
for r in n[:-b]:print(''.join(' █'[x] for x in r))

Фігури символів закодовані в ASCII. Кожен байт ASCII відповідає одному рядку одного символу, з бітами, що представляють блок-блоки. Це не дуже ефективна схема, але легко розпакувати в NumPy бітові маски для кожного символу.

Почнемо з 2d масиву 1s. У ньому є один стовпчик для кожного символу в першому слові та один рядок. Потім для кожного слова ми створюємо новий масив 0s, у шість разів більший і в шість разів ширший за попередній масив. Якщо попередній масив мав 1, відповідний розділ 6x6 нового масиву заповнюється відповідною бітовою маскою символів.

Ось приклад (з надзвичайно малим шрифтом):

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


5

CJam, 181 174 170 байт

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

"Á  :½A%õ­Íú£à˪ë8!Õ*j4¶fVËa¡ùÔ¯{+ÛyéâõKn#@?
9Ôia)(Ñç;~LÒª"257b2bYYb" █"er5/5/:L;lS/_0=,'█*a\{f{W:T;\{' ={S5*a5*}{T):T1$='A-L=}?\}%W<zSf*}Sa*}/N*

Stack Exchange, ймовірно, зіпсував деякі недруковані символи, тому вам, можливо, доведеться скопіювати код з цієї пасти .

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

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

HOLISM REDUCTIONISM

врожайність

████                    █████             ████  █   █  ███              █████                               █████  ███  █   █ █████  ████             █   █ ████  █████ ████        █   █                    ███ 
█   █                   █                 █   █ █   █ █   █               █                                   █   █   █ ██  █   █   █                 ██ ██ █   █ █     █   █       █   █                   █   █
████                    ████              █   █ █   █ █                   █                                   █   █   █ █ █ █   █    ███              █ █ █ ████  ████  █   █       █   █                   █    
█  █                    █                 █   █ █   █ █   █               █                                   █   █   █ █  ██   █       █             █   █ █  █  █     █   █       █   █                   █   █
█   █                   █████             ████   ███   ███                █                                 █████  ███  █   █ █████ ████              █   █ █   █ █████ ████         ███                     ███ 

████                    █████       ████                    █   █        ███                                            █████                   █████                                ███  █   █       █████  ████
█   █                   █           █   █                   █   █       █   █                                             █                       █                                 █   █ ██  █         █   █    
████                    ████        █   █                   █   █       █                                                 █                       █                                 █   █ █ █ █         █    ███ 
█  █                    █           █   █                   █   █       █   █                                             █                       █                                 █   █ █  ██         █       █
█   █                   █████       ████                     ███         ███                                              █                     █████                                ███  █   █       █████ ████ 

████  █████ ████  █   █  ███        █████                   █████        ███                                            █   █                         █████  ████ █   █             ████        █████       ████ 
█   █ █     █   █ █   █ █   █         █                       █         █   █                                           ██  █                           █   █     ██ ██             █   █       █           █   █
████  ████  █   █ █   █ █             █                       █         █   █                                           █ █ █                           █    ███  █ █ █             ████        ████        █   █
█  █  █     █   █ █   █ █   █         █                       █         █   █                                           █  ██                           █       █ █   █             █  █        █           █   █
█   █ █████ ████   ███   ███          █                     █████        ███                                            █   █                         █████ ████  █   █             █   █       █████       ████ 

████                    █████       ████                    █   █        ███                                            █████                                           █████        ███                    █   █
█   █                   █           █   █                   █   █       █   █                                             █                                               █         █   █                   ██  █
████                    ████        █   █                   █   █       █                                                 █                                               █         █   █                   █ █ █
█  █                    █           █   █                   █   █       █   █                                             █                                               █         █   █                   █  ██
█   █                   █████       ████                     ███         ███                                              █                                             █████        ███                    █   █

████                    █████             ████  █   █  ███              █████ █████  ███  █   █ █████        ████ █   █ ████  █████ ████        █   █  ███  █████ █████              ███                    █   █
█   █                   █                 █   █ █   █ █   █               █     █   █   █ ██  █   █         █     ██ ██ █   █ █     █   █       █   █ █   █   █     █               █   █                   ██  █
████                    ████              █   █ █   █ █                   █     █   █   █ █ █ █   █          ███  █ █ █ ████  ████  █   █       █   █ █       █     █               █   █                   █ █ █
█  █                    █                 █   █ █   █ █   █               █     █   █   █ █  ██   █             █ █   █ █  █  █     █   █       █   █ █   █   █     █               █   █                   █  ██
█   █                   █████             ████   ███   ███                █   █████  ███  █   █ █████       ████  █   █ █   █ █████ ████         ███   ███    █   █████              ███                    █   █

Пояснення

Спочатку ми зберігаємо таблицю пошуку літерних форм у L:

"Á  :½A%õ­Íú£à˪ë8!Õ*j4¶fVËa¡ùÔ¯{+ÛyéâõKn#@?
9Ôia)(Ñç;~LÒª"257b2bYYb" █"er5/5/:L;

Перший рядок просто стиснене число. Ми розглядаємо кодові точки як базові-257 цифр, потім перетворюємо отримане число у бінарне. YYbє 2 знаходиться в базі 2, тому він дає [1 0]. Ми використовуємо підстановку елементів, " █"щоб перетворити цифри в пробіли та блокувати символи. Нарешті, ми розділили рядок на рядки з 5 символів і знову на блоки по 5 рядків. Результат зберігається в Lі викидається зі стека.

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

lS/_0=,'█*a\
lS/          "Read input, split on spaces.";
   _0=       "Duplicate and get first word.";
      ,'█*   "Get length repeat █ that many times.";
          a  "Wrap in array, to make the grid two-dimensional.";
           \ "Swap with word list.";

Давайте спочатку розглянемо найбільш зовнішню структуру програми, що залишилася. Наступний блок {...}/виконується для кожного слова і розширює кожен із символів блоку.

{f{...}Sa*}/N*
{         }/   "Process each word in the input.";
 f{...}        "Map this block onto each line of the grid, passing in the current word as well.";
       Sa*     "Since each original line will be turned into 5 lines, the grid is still grouped
                into blocks of 5 lines. We join them together with empty lines as required.";
            N* "Join all lines together with newlines.";

Нарешті, давайте розглянемо, як розширюється окремий рядок:

W:T;\{' ={S5*a5*}{T):T1$='A-L=}?\}%
W:T;                                "Store -1 in T.";
    \                               "Swap word with line.";
     {                           }% "Map this block onto each character.";
      ' =                           "Check if the character is a space.";
         {      }{            }?    "If it is, run the first block, otherwise the second.";
          S5*                       "Create a string of five spaces.";
             a5*                    "Create an array of five such strings.";
                  T):T              "Push T, increment, store in T.";
                      1$=           "Copy the word and access the T'th character, cyclically.";
                         'A-        "Subtract A from the letter.";
                            L=      "Use the result to get the character shape from L.";
                                \   "Swap resulting block with word.";

"At this point each character is replaced with a 5x5 array of new characters.
 So we actually have a 3D array right now. Since we used a map operation, the
 current word will also be at the end of the array, which we need to get rid off.";

W<zSf*
W<     "Discard last array element - the current word.";
  z    "Zip or transpose the top two levels of the array.";
   Sf* "Join each line together with spaces.";

Результат друкується автоматично в кінці програми.

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