Kata-kata dalam kata-kata dalam kata-kata dalam kata-kata. . .

17

Dalam font piksel huruf besar alfabet ini, semua karakter berukuran 5 unit dan 5 tinggi.

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

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

Ada juga 1 unit ruang antara huruf dan antara garis, seperti yang bisa dilihat. Jadi setiap huruf bisa memakan ruang hingga 6 × 6 unit.

Misalkan alih-alih menggunakan karakter blok penuh ( ) untuk langsung membentuk bentuk huruf, kami ingin menggunakan huruf lain dalam font yang sama . Ini melibatkan peningkatan dimensi teks 6 kali lipat sehingga huruf yang terbuat dari blok penuh dapat digunakan sebagai pengganti blok penuh dalam teks yang lebih besar.

Jika itu tidak masuk akal semoga contoh ini akan terjadi. Ini adalah A yang terbuat dari B menggunakan font pixelated:

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

B dibuat dari blok penuh dan A dibuat dari B. Perhatikan bahwa B masih memiliki satu unit di antara mereka secara horizontal dan vertikal.

Kita dapat memperluas ide ini dengan menggunakan kata-kata, bukan hanya huruf. Inilah "AIR" yang terbuat dari "KEBAKARAN":

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

Perhatikan bagaimana "KEBAKARAN" muncul berulang kali pada setiap baris, dan selalu berurutan, tidak peduli berapa banyak ruang di antara huruf-huruf. Tiga contoh paling kanan dari "KEBAKARAN" terputus lebih awal karena bagaimana huruf "WATER" terbentuk.

Gagasan ini dapat dikembangkan lebih jauh, dengan menggunakan kata - kata yang terbuat dari kata-kata ini untuk membuat kata - kata yang terbuat dari kata-kata , atau bahkan kata - kata yang terbuat dari kata-kata yang terbuat dari kata-kata yang terbuat dari kata-kata . Secara teori tidak ada batasan.

Contoh lain akan menempatkan posting ini melebihi batas karakter 30k, tetapi Anda dapat melihat apa yang dimaksud dengan "kata-kata yang terbuat dari kata-kata" dengan menjalankan Cuplikan Stack yang bagus ini. Biarkan saja parameternya di default dan tekan "Go!". Anda akan melihat kata "DOG" yang terbuat dari kata "CAT" yang terbuat dari kata "MOUSE".

Mengetik daftar kata - kata yang dipisahkan oleh spasi yang hanya berisi huruf kapital di kotak teks akan menghasilkan kata pertama yang terbuat dari kata kedua yang dibuat dari kata ketiga, terbuat dari huruf keempat, terbuat dari ... dll.

PERINGATAN: Memasukkan lebih dari 4 atau bahkan 3 kata akan menghasilkan BANYAK teks dan membutuhkan waktu PANJANG. Ini dapat merusak browser / komputer / mobil Anda.

Tantangan

Tujuan dari tantangan ini adalah untuk mencerminkan apa yang dilakukan Stack Snippet dalam jumlah karakter paling sedikit.

Anda harus menulis sebuah program yang mengambil string kata-kata yang dipisahkan oleh spasi yang hanya berisi huruf kapital, dan mengeluarkan kata pertama "terbuat dari" yang kedua "yang dibuat" dari yang ketiga dan seterusnya, menggunakan font pixelated yang diberikan di atas.

Kotak centang "Plain ASCII" dan fitur ukuran font snippet tidak perlu didukung dalam program Anda. Mencerminkan transformasi dari daftar kata menjadi kata-kata yang terbuat dari kata-kata adalah poin utama dan satu-satunya syarat.

Detail

  • Input harus berasal dari stdin, baris perintah, atau Anda dapat menulis fungsi yang mengambil string.

  • Anda dapat mengasumsikan input selalu valid, yaitu serangkaian kata yang terbuat dari huruf kapital, dipisahkan dengan tepat satu spasi, tanpa spasi awal atau spasi tambahan.

  • Keluaran harus menuju stdout (atau alternatif serupa) atau ke file dengan nama pilihan Anda.

  • Keluaran harus seluruhnya terdiri dari karakter ruang kosong , karakter ruang penuh , dan baris baru.

    • Karakter kosong / spasi penuh masing- masing harus berupa spasi dan blok penuh ( , ), atau titik dan X ( ., X).
  • Output tidak boleh mengandung kolom utama yang hanya berisi karakter ruang kosong , meskipun kombinasi karakter spasi kosong di garis mana pun diperbolehkan.

    • Jadi ini diperbolehkan:

      X...X.XXXXX..
      X...X.X
      X.X.X.XXXX....
      X.X.X.X..
      .X.X..XXXXX..
      
    • Tapi ini bukan:

      .X...X.XXXXX..
      .X...X.X
      .X.X.X.XXXX....
      .X.X.X.X..
      ..X.X..XXXXX..
      
  • Seharusnya tidak ada baris depan atau belakang yang hanya berisi karakter ruang kosong . Sebuah baris baru yang membuntuti secara opsional diizinkan.

Ini adalah versi font yang lebih ramah string:

.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

Mencetak gol

Ini adalah sehingga pengiriman terpendek dalam byte menang. Setiap instance dari blok penuh ( ) dapat dihitung sebagai 1 byte, bukan 3 sehingga pengiriman yang menggunakan Xtidak memiliki keuntungan.

Hobi Calvin
sumber
5
Anda dapat menjalankan JavaScript berikut potongan (ex dengan mengetik. javascript:Ke bar URL dan paste) untuk membuat seni ASCII di sini banyak, banyak lebih mudah dibaca: $('#question pre').css('line-height',1). Hasil: i.stack.imgur.com/XmB8C.png
Doorknob
1
Atau untuk memasukkan jawaban$('#question pre, .answer pre').css('line-height',1)
Martin Ender
Saya tahu sudah sedikit terlambat untuk membuat lelucon ini, tetapi saya tidak bisa menahan: i.imgur.com/vAZi1Zt.png .
algorithmshark
Bagaimana saya melewatkan tantangan ini ?!
Magic Gurita Guci

Jawaban:

8

CJam, 171 165 162 161 byte

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=

Saya memperlakukan sebagai 1 byte. Istirahatkan semua karakter dengan baik dalam jangkauan ASCII, jadi perlakukan mereka sebagai 1 byte juga.

Anda dapat menggunakan pastebin ini untuk kode yang tepat

Contoh output untuk input:

FIRST HELLO WORLD

masukkan deskripsi gambar di sini

Bagaimana itu bekerja

Pertama-tama

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

hanyalah pola untuk masing-masing 27 karakter ( A-Zdan spasi) yang terdiri dari 0(pada Xposisi) dan 1(pada .posisi). Setelah decoding, ini memberikan array elemen 27 array 2D dari 5 baris dan 5 kolom yang mewakili Xdan .untuk masing-masing 27 karakter. Biarkan kami memanggil array ini sebagai L.

Sekarang kode yang tersisa:

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";

Cobalah online di sini

Pengoptimal
sumber
9

Python 3, 437 byte

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))

Bentuk karakter dikodekan dalam ASCII. Setiap byte ASCII sesuai dengan satu baris dari satu karakter, dengan bit yang mewakili blok unit. Ini bukan skema yang sangat efisien, tetapi mudah untuk membuka paket bitmap NumPy untuk setiap karakter.

Kami memulai dengan array 2d 1s. Ini memiliki satu kolom untuk setiap karakter di kata pertama dan satu baris. Kemudian, untuk setiap kata, kami membuat array baru 0s, enam kali lebih tinggi dan enam kali lebih luas dari array sebelumnya. Di mana array sebelumnya memiliki 1, bagian 6x6 yang sesuai dari array baru diisi dengan bitmask karakter yang sesuai.

Ini sebuah contoh (dengan font yang sangat kecil):

masukkan deskripsi gambar di sini

grc
sumber
5

CJam, 181 174 170 byte

Semua karakter non-ASCII masih dalam jangkauan ASCII yang diperluas, sehingga semuanya dapat dikodekan dalam satu byte. (Kecuali untuk , tetapi yang diperlakukan secara khusus sesuai dengan tantangan spec.) Oleh karena itu, saya menghitung setiap karakter sebagai byte.

"Á  :½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 mungkin telah merusak beberapa karakter yang tidak patut dicetak, jadi Anda mungkin harus menyalin kode dari pastebin ini .

Uji di sini.

Mengambil input melalui STDIN sebagai daftar kata yang dipisahkan oleh ruang. Kata pertama adalah skala terbesar. Contohnya:

HOLISM REDUCTIONISM

hasil panen

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

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

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

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

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

Penjelasan

Pertama, kami menyimpan tabel pencarian untuk bentuk huruf di L:

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

String pertama hanya angka terkompresi. Kami memperlakukan poin kode sebagai basis-257 digit, lalu kami mengonversi angka yang dihasilkan menjadi biner. YYbadalah 2 ada di basis 2, jadi itu memberi [1 0]. Kami menggunakan substitusi elemen dengan " █"mengubah digit menjadi spasi dan memblokir karakter. Terakhir, kami membagi string menjadi baris 5 karakter, dan lagi menjadi blok dari 5 baris. Hasilnya disimpan Ldan dibuang dari tumpukan.

Sekarang ide umumnya adalah memulai dengan satu baris panjang dari kata berskala terbesar. Dan kemudian untuk setiap kata kita melewati kisi yang ada, dan memperluas semua blok ke karakter yang sesuai pada skala yang lebih kecil berikutnya (sambil menyisipkan baris dan kolom kosong untuk pemisahan). Berikut persiapan input:

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.";

Mari kita lihat struktur terluar dari program yang tersisa terlebih dahulu. Blok berikutnya {...}/dijalankan untuk setiap kata, dan memperluas setiap karakter blok.

{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.";

Terakhir, mari kita lihat bagaimana satu baris diperluas:

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.";

Hasilnya dicetak secara otomatis di akhir program.

Martin Ender
sumber