Kelimeler içindeki kelimeler kelimeler içindeki kelimeler. . .


17

Alfabedeki büyük harflerin bu pikselli yazı tipinde, tüm karakterler 5 birim genişliğinde ve 5 boyundadır.

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

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

Görüldüğü gibi, harfler arasında ve çizgiler arasında 1 birim boşluk vardır. Böylece her harf 6 × 6 birim yer kaplayabilir.

Harflerin şekillerini doğrudan oluşturmak için tam blok karakterini ( ) kullanmak yerine , aynı yazı tipinde başka harfler kullanmak istediğimizi varsayalım . Bu, tam bloktan yapılmış harflerin daha büyük metinde tam blok yerine kullanılabilmesi için metnin boyutlarını 6 kat artırmayı içerir.

Bu umarım mantıklı gelmediyse bu örnek olacaktır. Pikselli yazı tipini kullanarak B'den yapılmış bir A:

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

B'ler tam bloklardan ve A'lar B'lerden yapılmıştır. B'lerin aralarında yatay ve dikey olarak hala bir birim bulunduğuna dikkat edin.

Bu fikri sadece harfler yerine kelimeler kullanarak genişletebiliriz. İşte "YANGIN" ile yapılan "SU":

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

Harfler arasında ne kadar boşluk olursa olsun, her satırda "YANGIN" ın tekrar tekrar nasıl göründüğüne dikkat edin. "YANGIN" ın en sağdaki örneklerinden üçü, "SU" harflerinin şekli nedeniyle erken kesildi.

Bu fikir, kelimelerden yapılan kelimelerden , hatta kelimelerden yapılan kelimelerden yapılan kelimeler yapmak için kelimelerden yapılan bu kelimeleri kullanarak daha da genişletilebilir . Teorik olarak bir sınır yoktur.

Başka bir örnek, bu yayını 30k karakter sınırının üzerine koyacaktır, ancak bu şık Stack Snippet'ini çalıştırarak "kelimelerden yapılan kelimelerden oluşan kelimeler" ile ne kastedildiğini görebilirsiniz. Parametreleri varsayılan değerlerinde bırakın ve "Git!" E basın. "KÖPEK" kelimesinden yapılan "KEDİ" sözcüğünden yapılmış "KÖPEK" kelimesini görmelisiniz.

Metin kutusuna yalnızca büyük harfler içeren herhangi bir boşlukla ayrılmış sözcük listesi yazmak , üçüncü kelimeden yapılan, dördüncekten yapılmış, ... 'den yapılmış ikinci kelimeden oluşan ilk kelimeyi üretecektir.

UYARI: 4 ve hatta 3 kelimeden daha uzun bir süre girildiğinde, çok fazla metin üretilir ve UZUN zaman alır. Tarayıcınızı / bilgisayarınızı / arabanızı kilitleyebilir.

Meydan okuma

Bu zorluğun amacı, Stack Snippet'inin yaptıklarını en az sayıda karakterle yansıtmaktır.

Yalnızca büyük harf içeren sözcüklerden oluşan boşlukla ayrılmış bir kelime dizesi alan ve yukarıda verilen pikselli yazı tipini kullanarak "üçüncü" den yapılmış "ikinciden" yapılmış ilk kelimeyi çıktılayan bir program yazmalısınız.

Snippet'in "Düz ASCII" onay kutusunun ve yazı tipi boyutu özelliklerinin programınızda desteklenmesi gerekmez. Sözcük listelerinden sözcüklerden yapılan kelimelere dönüşümü yansıtmak ana ve tek şarttır.

ayrıntılar

  • Giriş stdin'den, komut satırından gelmelidir, ya da sadece dize alan bir işlev yazabilirsiniz.

  • Girdinin her zaman geçerli olduğunu varsayabilirsiniz, yani büyük harflerden oluşan, tam olarak bir boşlukla ayrılmış, öndeki veya sondaki boşluklar olmayan bir kelime dizisi.

  • Çıktı, stdout'a (veya benzer bir alternatife) veya seçtiğiniz adda bir dosyaya gitmelidir.

  • Çıktı tamamen boş alan karakterleri , tam alan karakterleri ve yeni satırlardan oluşmalıdır .

    • Boş / tam boşluk karakterleri ya da alan ve tam blok (olmalıdır , ), sırasıyla, veya nokta ve X ( ., Xsırasıyla).
  • Çıktıda yalnızca boş boşluk karakterleri içeren önde gelen sütunlar olmamalıdır , ancak herhangi bir satırda boşluk karakterleri izleyen herhangi bir kombinasyona izin verilir.

    • Bu yüzden buna izin verilir:

      X...X.XXXXX..
      X...X.X
      X.X.X.XXXX....
      X.X.X.X..
      .X.X..XXXXX..
      
    • Ama bu değil:

      .X...X.XXXXX..
      .X...X.X
      .X.X.X.XXXX....
      .X.X.X.X..
      ..X.X..XXXXX..
      
  • Yalnızca boş boşluk karakterleri içeren satır aralığı veya arka satır olmamalıdır . İsteğe bağlı olarak tek bir satırsonuna izin verilir.

İşte yazı tipinin daha dize dostu bir sürümü:

.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

puanlama

Bu yani bayt kısa teslim kazanır. Herhangi bir tam blok ( ) örneği 3 yerine 1 bayt olarak sayılabilir; bu nedenle, kullanılan gönderimlerin Xbir avantajı yoktur.


5
javascript:ASCII resmini burada okumayı çok daha kolay hale getirmek için aşağıdaki JavaScript snippet'ini çalıştırabilirsiniz (ör. URL çubuğuna yazıp yapıştırarak) $('#question pre').css('line-height',1). Sonuç: i.stack.imgur.com/XmB8C.png
Kapı Tokmağı

1
Veya cevapları dahil etmek için$('#question pre, .answer pre').css('line-height',1)
Martin Ender

Bu şakayı yapmak için biraz geç olduğunu biliyorum, ama dayanamadım: i.imgur.com/vAZi1Zt.png .
algorithmmshark

Bu zorluğu nasıl özledim ?!
Sihirli Ahtapot Urn

Yanıtlar:


8

CJam, 171 165 162 161 bayt

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=

Tedavi ediyorum 1 byte olarak. Geri kalan tüm karakterler ASCII aralığındadır, bu yüzden onlara 1 bayt olarak davranılır.

Bu hamuru kullanabilirsiniz tam kod için

Giriş için örnek çıktı:

FIRST HELLO WORLD

resim açıklamasını buraya girin

Nasıl çalışır

Her şeyden önce

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

( konumlarda) ve ( konumlarda) oluşan 27 karakterin ( A-Zve boşluğun) her birinin deseni . Kod çözme işleminden sonra, bu , 27 karakterin her birini temsil eden ve her biri için 5 satır ve 5 sütundan oluşan 2B diziden oluşan 27 elemanlık bir dizi verir . Bu diziyi şöyle diyelim .0X1.X.L

Şimdi kalan kod:

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

Buradan çevrimiçi deneyin


9

Python 3, 437 bayt

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

Karakter şekilleri ASCII'de kodlanmıştır. Her ASCII baytı, bitlerin birim bloklarını temsil ettiği bir karakterin bir satırına karşılık gelir. Çok verimli bir şema değil, ancak her karakter için NumPy bitmasks içine açmak kolaydır.

1s 2d dizisi ile başlıyoruz. İlk kelimedeki her karakter için bir sütun ve tek bir satır vardır. Ardından, her kelime için, bir önceki diziden altı kat daha yüksek ve altı kat daha geniş yeni bir dizi oluşturuyoruz. Önceki dizinin 1 olması durumunda, yeni dizinin karşılık gelen 6x6 bölümü uygun karakterin bitmaskıyla doldurulur.

İşte bir örnek (son derece küçük bir yazı tipiyle):

resim açıklamasını buraya girin


5

CJam, 181 174 170 bayt

Tüm bu ASCII olmayan karakterler hala genişletilmiş ASCII aralığındadır, böylece hepsi tek bir baytta kodlanabilir. (Hariç , ancak biri meydan okuma özelliğine göre özel olarak ele alınır.) Bu nedenle, her karakteri bir bayt olarak sayıyorum.

"Á  :½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 muhtemelen yazdırılamayan karakterlerden bazılarını karıştırdı, bu nedenle kodu kopyalamanız gerekebilir bu hamurdan .

Burada test edin.

STDIN üzerinden girişi, boşlukla ayrılmış bir kelime listesi olarak alır. İlk kelime en büyük ölçektir. Örneğin:

HOLISM REDUCTIONISM

verim

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

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

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

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

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

açıklama

İlk olarak, harf şekilleri için bir arama tablosu saklıyoruz L:

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

İlk dize sadece sıkıştırılmış bir sayıdır. Kod noktalarını base-257 basamakları olarak ele alıyoruz, sonra elde edilen sayıyı ikile dönüştürüyoruz.YYb2 taban 2'de, yani verir [1 0]. " █"Rakamları boşluklara dönüştürmek ve karakterleri engellemek için ile öğenin yerine kullanılır . Son olarak, dizeyi 5 karakterlik satırlara ve yine 5 satırlık bloklara böldük. Sonuç Lyığının içinde saklanır ve atılır.

Şimdi genel fikir, tek bir satırla başlamaktır. en büyük ölçekli kelimenin uzunluğunun . Ve sonra her kelime için mevcut ızgaradan geçiyoruz ve tüm blokları bir sonraki küçük ölçekte karşılık gelen karaktere genişletiyoruz (ayırmak için boş satırlar ve sütunlar eklerken). İşte giriş hazırlığı:

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

Önce kalan programın en dıştaki yapısına bakalım. Bir sonraki blok{...}/ her sözcük için çalıştırılır ve blok karakterlerinin her birini genişletir.

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

Son olarak, tek bir satırın nasıl genişletildiğine bakalım:

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

Sonuç, programın sonunda otomatik olarak yazdırılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.