Köpük Banyo Harfleri


19

Evinizde küçük bir çocuk varsa, köpük banyosu mektuplarına rastlamış olabilirsiniz. Bunlar nemlendirilebilir ve kelimeler ve mesajlar yapmak için fayans ve banyo tarafı gibi düz yüzeylere yapışabilir.

Büyük harfler AZ ve 0-9: Yalnızca bir set olsa varsa sadece 36 karakter olsun beri kelime ve mesajların aralığı biraz, sınırlıdır: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. Ancak, diğer harflerin ekstra kopyalarını oluşturmak için kurnaz olabilir ve bazı harfleri ve rakamları kötüye kullanabilirsiniz:

3: E
1: I
7: L (when rotated)
M: W (when rotated)
0: O
2: S (when flipped)
5: S
W: M (when rotated)
2: Z
5: Z (when flipped)
O: 0
6: 9 (when rotated)
L: 7 (when rotated)
9: 6 (when rotated)

Bunların hepsinin iki yönlü olmadığını unutmayın, çünkü bir rakamı kelimenin bir parçası olarak okumak, bir sayının parçası olarak bir harften daha kolay olma eğilimindedir.

Her küme ayrıca, her harfin sırayla renklendirildiği bir dizi renkte gelir. Örneğin, setinizde Kırmızı, Sarı ve Mavi olmak üzere 3 renk varsa, setiniz şöyle olur:

  • Kırmızı: ADGJMPSVY147
  • Sarı: BEHKNQTWZ258
  • Mavi: CFILORUX0369

Bu nedenle göreviniz, bir kelime veya kelime öbeğini, kullanılacak renk sayısını ve sahip olduğunuz set sayısını belirten üç parametre (herhangi bir uygun şekilde) almak ve ardından kelime veya kelime öbeğinin bir temsilini çıkarmaktır. gerektiğinde ikame maddelerini kullanan bir dizi uygun renk. Kelime veya kelime öbeği set sayısı verildiğinde mümkün değilse, "Hayır" çıktısını uygun renklerle yapın.

Örnekler

Bunların hepsinde, ilk parametre kelime veya kelime öbeği, ikincisi renk sayısı ve üçüncüsü mevcut set sayısıdır.

["bath", 3, 1]

BANYO

["programming", 3, 2]

PROGRAMLAMA

["puzzles", 3, 1]

PUZ2LES

["code golf", 5, 1]

KOD G0LF

["willow tree", 1, 1]

WIL7OM AĞAÇ3

["impossible phrase", 8, 1]

HAYIR - sette sadece 1 P var ve geçerli bir oyuncu değişikliği yok

notlar

  • Bu yardımcı olursa varsayılan olarak 1 kümeye (örn. 1 varsayılan parametre değeri) ayarlayabilirsiniz, ancak istenirse birden fazla kümeyi desteklemeniz gerekir. Sahip olduğunuz kümelerin sayısı her zaman pozitif sıfırdan farklı bir tamsayı olacaktır.
  • Birden çok kümeniz varsa, hepsi aynı şekilde renklendirilir: ilk kümede A kırmızı ise, ikinci kümede de kırmızı olur. Renkler, belirli bir çağrıdaki tüm kümelere değil küme başına uygulanır
  • 1 ila 36 rengi desteklemelisiniz - 1, tüm karakterlerin aynı renkte olduğu anlamına gelir, 36, hepsi farklıdır. Yalnızca tamsayı sayıda renk olacaktır.
  • Görsel olarak farklı oldukları sürece herhangi bir rengi kullanabilirsiniz - terminale çıktı alıyorsanız, ön plan ve arka plan için aynı rengi kullanmamalısınız, ancak ön plan ve arka plan kombinasyonunu "renk" olarak kullanabilirsiniz.
  • Çıktınız, girişteki karakterleri değil, gerçekte kullandığınız karakterleri kullanmalıdır. Örneğin, giriş olarak ["söğüt", 1, 1] varsa WIL7OM, 7 ve M 180 derece döndürülmüş olarak çıktı alabilirsiniz
  • Önce doğru harfleri kullanmalı, yerine: MI7LOW["söğüt", 1, 1] için yanlış
  • Belirli bir karakter için herhangi bir ikame kullanabilirsiniz: SO5ve SO2çevirme 2 ile "SOS" için her ikisi de geçerlidir
  • Aynı giriş için birden fazla kod çağrınızın aynı çıktıyı üretmesi gerekmez
  • Çıktı büyük harf olmalıdır, ancak girdi büyük ve küçük harflerin herhangi bir karışımında olabilir
  • Açık olmalı, ancak bir alanın rengi yok

kurallar

  • Bu kod golf, ama yarı grafik çıkışı ile (bir terminalde saygısız metin yapabilir eğer emin değilim, ama Pyth bunun için yerleşik olup olmadığını görmek istiyorum)
  • Standart boşluklar geçerlidir
  • İşlevler için bonus yoktur, ancak lütfen ilginç cevapları oylayın
  • Çıktınızın bazı ekran görüntülerini yanıtlarınıza ekleyin

İlgili Zorluklar


1
Setler verildiğinde "NOPE" çıktısını almak mümkün değilse ne olur?
Rɪᴋᴇʀ

@Riker Bir dizi verilen 36 karakteri içerir. Ne zaman çıktı almak imkansız olurdu NOPE?
mypetlion

@ mypetlion set olmadığında ...
Aralık'ta Rɪᴋᴇʀ

@Riker Read "Sahip olduğunuz kümelerin sayısı her zaman pozitif sıfır dışında bir tamsayı olacaktır."
mypetlion

1
Köpük banyosu harfleri leet konuşmak için iyi bir giriş ...
Arnauld

Yanıtlar:


1

HTML / JavaScript (jQuery ile) / CSS - rakip olmayan / golf olmayan

Sadece topun yuvarlanmasını sağlamak ve imkansız olmadığını göstermek için, işte naif bir yaklaşım alan golf dışı, rakip olmayan bir uygulama var.

Öncelikle tempalphalfabenin setler kadar kopyasını birleştirerek olası tüm karakterlerin ( ) bir dizesini oluşturur . Ardından, tümcenin her harfini bir çıktı değişkenine koyarak ve bu harfin ilk örneğini boş bırakarak cümle boyunca yinelenir tempalph. Olamazsa (harf mevcut değil), harfin dizede kalan bir şeyle değiştirilebilir olup olmadığını kontrol eder. Bu da başarısız olursa, önceden tanımlanmış bir "NOPE" çıkışı verir. "NOPE" durumuna çarpmadığı varsayılarak çıktı dizesini döndürür ve sayfadaki bir DIV'ye yerleştirir.

Daha sonra temel alfabe dizesi boyunca döngüye girer ve bir harf kullanılmışsa, buna her biri önceden tanımlanmış renk kümesine sahip uygun bir CSS sınıfı atar.

Giriş için HTML girişleri ve bunların içindeki tuşlarda güncellemeler kullanır.

JSFiddle'da deneyin

Örnek ["BATH", 3, 1]:

Banyo

JS:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

işlev getPhrase (ifade, kümeler) {
    var modphrase = "";
  var nope = 'NOPE';
  var re = / ^ [A-Z0-9] + $ /;
  if (re.test (ifade)) {
    // geçerli olabilir - yeterli karakter olup olmadığını kontrol etmeniz gerekir
    // Bu noktada, özellikle hangi karakterlerin gerekli olduğuna bakmamız gerekiyor

    var tempalph = "";
    için (var i = 0; i '+ char +' ';
        eğer (tempalph.indexOf (char)! = -1) {
        tempalph = tempalph.replace (char, "#");
      } Başka {
        Anahtar (char) {
            vaka "E":
            eğer (tempalph.indexOf ("3")! = -1) {
                    tempalph = tempalph.replace ("3", "#");
              modchar = '3';
                } Başka {
                dönüş no;
            }
            break;
          vaka "I":
            eğer (tempalph.indexOf ("1")! = -1) {
                    tempalph = tempalph.replace ("1", "#");
              modchar = '1';
                } Başka {
              dönüş no;
            }
            break;
          vaka "L":
            eğer (tempalph.indexOf ("7")! = -1) {
                    tempalph = tempalph.replace ("7", "#");
              modchar = '7';
                } Başka {
              dönüş no;
            }
            break;
          vaka "M":
            eğer (tempalph.indexOf ("W")! = -1) {
                    tempalph = tempalph.replace ("W", "#");
              modchar = 'W';
                } Başka {
              dönüş no;
            }
            break;
          vaka "O":
            eğer (tempalph.indexOf ("0")! = -1) {
                    tempalph = tempalph.replace ("0", "#");
              modchar = '0';
                } Başka {
              dönüş no;
            }
            break;
          vaka "W":
            eğer (tempalph.indexOf ("M")! = -1) {
                    tempalph = tempalph.replace ("M", "#");
              modchar = 'M';
                } Başka {
              dönüş no;
            }
            break;
          vaka "0":
            eğer (tempalph.indexOf ("O")! = -1) {
                    tempalph = tempalph.replace ("O", "#");
              modchar = 'O';
                } Başka {
              dönüş no;
            }
            break;
          vaka "6":
            eğer (tempalph.indexOf ("9")! = -1) {
                    tempalph = tempalph.replace ("9", "#");
              modchar = '9';
                } Başka {
              dönüş no;
            }
            break;
          vaka "7":
            eğer (tempalph.indexOf ("L")! = -1) {
                    tempalph = tempalph.replace ("L", "#");
              modchar = 'L';
                } Başka {
              dönüş no;
            }
            break;
          vaka "9":
            eğer (tempalph.indexOf ("6")! = -1) {
                    tempalph = tempalph.replace ("6", "#");
              modchar = '6';
                } Başka {
              dönüş no;
            }
            break;

          vaka "S":
            eğer (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } else if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } Başka {
              dönüş no;
            }
            break;
                    vaka "Z":
            eğer (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } else if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } Başka {
              dönüş no;
            }
            break;
          durum " ":
            break;
          varsayılan:
            dönüş no;
          }

      }
        modphrase + = modchar;
    }

    dönüş modphrase;
  } Başka {
    // başka karakterler de içerdiğinden kesinlikle geçerli değil
    dönüş no;
  }
}

işlev addColors (colcount) {
  var i = 0;
  for (alfabe karakterini girin) {
    exclass = "." + karakter;
    yeni sınıf = "sütun" + i;
    if ($ (hariç) .length> 0) {
      $ (Exclass) .addClass (newclass);
    }
    i ++;
    if (i == colcount) {
        i = 0;
    } 
  }
}


$ ("# ifade, # set, # renk"). açık ("keyup", function () {
    var ifade = $ ("# ifade"). val (). toUpperCase ();
  expression = getPhrase (ifade, $ ("# set"). val ());
    $ ( "# Çıkışı") html (cümle).;
  addColors ($ ( "# renkler") val ().);
})

HTML:

<label> Kelime öbeği <input type = "text" id = "ifade" /> </label>
<label> Renkler <giriş türü = "metin" id = "renkler" değeri = "3" /> </label>
<label> Setleri <input type = "text" id = "setleri" value = "1" /> </label>

<div id = "çıktı">

</ Div>

CSS:

.col0 {renk: # f00}
.col1 {renk: # 0f0}
.col2 {renk: # 00f}
.col3 {renk: # 66CDAA}
.col4 {renk: # EE82EE}
.col5 {renk: # 7FFFD4}
.col6 {renk: # 7FFFD4}
.col7 {renk: #FFDEAD}
.col8 {renk: # D8BFD8}
.col9 {renk: # FF6347}
.col10 {renk: # 8B4513}
.col11 {renk: # 800000}
.col12 {renk: # 00FFFF}
.col13 {renk: # 32CD32}
.col14 {renk: # 191970}
.col15 {renk: # 1E90FF}
.col16 {renk: # A0522D}
.col17 {renk: # 808000}
.col18 {renk: # DC143C}
.col19 {renk: # 90EE90}
.col20 {renk: # D2691E}
.col21 {renk: # 48D1CC}
.col22 {renk: # 008000}
.col23 {renk: # 8B008B}
.col24 {renk: # 6495ED}
.col25 {renk: # 800080}
.col26 {renk: # 000080}
.col27 {renk: # DB7093}
.col28 {renk: # 7FFF00}
.col29 {renk: # 00FA9A}
.col30 {renk: # 0000FF}
.col31 {renk: # BC8F8F}
.col32 {renk: # A52A2A}
.col33 {renk: # 4169E1}
.col34 {renk: # FFFF00}
.col35 {renk: # FFA07A}

.rot {display: satır içi blok; dönüşümü: döndür (0.5 turn);}
.flip {display: satır içi blok; dönüşümü: rotateY (0.5turn);}

div {
  font-ailesi: sans-serif;
  yazı tipi boyutu: 3em;
  arka plan rengi: # 000;
  dolgu: 10 piksel;
}

Bu (mini) meta konsensüs başına ciddi olmayan yarışmacı söz konusu olmalıdır .
user202729
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.