Piankowe litery do kąpieli

19

Jeśli masz w domu małe dziecko, być może natrafiłeś na litery z pianki do kąpieli. Można je zwilżyć i przykleić do płaskich powierzchni, takich jak płytki i bok wanny, aby tworzyć słowa i wiadomości.

Zakres słów i wiadomości jest nieco ograniczona, jeśli masz tylko jeden zestaw chociaż, ponieważ można dostać tylko 36 znaków: wielkie litery AZ i cyfry 0-9: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. Jednak możesz być przebiegły i nadużywać niektórych liter i cyfr, aby tworzyć dodatkowe kopie innych liter:

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)

Zauważ, że nie wszystkie są dwukierunkowe, ponieważ łatwiej jest odczytać cyfrę jako część słowa niż literę jako część liczby.

Każdy zestaw występuje również w różnych kolorach, w których każda litera jest pokolorowana po kolei. Na przykład, jeśli twój zestaw ma 3 kolory, czerwony, żółty i niebieski, twój zestaw będzie wyglądał następująco:

  • Czerwony: ADGJMPSVY147
  • Żółty: BEHKNQTWZ258
  • Niebieski: CFILORUX0369

Twoim zadaniem jest zatem przyjęcie trzech parametrów (w dowolny odpowiedni sposób) wskazujących słowo lub frazę, liczby używanych kolorów i liczby posiadanych zestawów, a następnie wygenerowanie reprezentacji słowa lub frazy w zestaw odpowiednich kolorów, w razie potrzeby wykorzystując zamienniki. Jeśli nie jest możliwe utworzenie słowa lub frazy z podaną liczbą zestawów, zamiast tego wpisz „Nie” w odpowiednich kolorach.

Przykłady

We wszystkich z nich pierwszy parametr to słowo lub fraza, drugi to liczba kolorów, a trzeci to liczba dostępnych zestawów.

["bath", 3, 1]

KĄPIEL

["programming", 3, 2]

PROGRAMOWANIE

["puzzles", 3, 1]

PUZ2LES

["code golf", 5, 1]

KOD G0LF

["willow tree", 1, 1]

WIL7OM TRE3

["impossible phrase", 8, 1]

NIE - w zestawie jest tylko 1 P i nie ma ważnych podstawień

Notatki

  • Możesz ustawić domyślnie na 1 zestaw, jeśli to pomaga (np. Domyślna wartość parametru 1), ale na żądanie musisz obsługiwać wiele zestawów. Liczba zestawów zawsze będzie dodatnią liczbą całkowitą niezerową.
  • Jeśli masz wiele zestawów, wszystkie są kolorowe w ten sam sposób: jeśli A jest czerwony w pierwszym zestawie, będzie również czerwony w drugim zestawie. Kolory są stosowane dla zestawu, a nie dla wszystkich zestawów w danym wywołaniu
  • Musisz obsługiwać od 1 do 36 kolorów - 1 oznacza, że ​​wszystkie znaki są tego samego koloru, 36 oznacza, że ​​wszystkie są różne. Będzie tylko całkowita liczba kolorów.
  • Możesz używać dowolnych kolorów, o ile są one wizualnie różne - jeśli wysyłasz dane do terminala, możesz użyć kombinacji pierwszego planu i tła jako „koloru”, chociaż nie możesz używać tego samego koloru dla pierwszego planu i tła
  • Dane wyjściowe muszą zawierać znaki, których faktycznie używasz, a nie znaki z danych wejściowych. Na przykład, jeśli jako dane wejściowe użyto [„wierzby”, 1, 1], można wyprowadzać obraz WIL7OMz obróceniem o 7 i M o 180 stopni
  • Powinieneś najpierw użyć poprawnych liter, a następnie podstawić: MI7LOWjest niepoprawny dla [„wierzba”, 1, 1]
  • Możesz użyć dowolnego podstawienia dla danej postaci: SO5a SO2przy odwróconej 2 oba są ważne dla „SOS”
  • Wiele wywołań kodu dla tego samego wejścia nie musi dawać identycznych danych wyjściowych
  • Dane wyjściowe powinny być pisane wielkimi literami, ale dane wejściowe mogą występować w dowolnej kombinacji wielkich i małych liter
  • Powinno to być oczywiste, ale przestrzeń nie ma koloru

Zasady

  • To jest kod golfowy, ale z pół-graficznym wyjściem (nie jestem pewien, czy możesz zrobić odwrócony tekst w terminalu, ale jestem zainteresowany, aby sprawdzić, czy Pyth ma dla niego wbudowane)
  • Obowiązują standardowe luki
  • Nie ma bonusów za funkcje, ale proszę głosować na ciekawe odpowiedzi
  • Dołącz do swoich zrzutów ekranu niektóre zrzuty ekranu

Powiązane wyzwania

Mateusz
źródło
1
Co jeśli nie jest możliwe wyprowadzenie „NOPE” z uwagi na zestawy?
Rɪᴋᴇʀ
@Riker Zestaw zawiera 36 podanych znaków. Kiedy byłoby to niemożliwe NOPE?
mypetlion,
@mypetlion, gdy nie ma żadnych zestawów ...
Rɪᴋᴇʀ
@Riker Przeczytaj „Liczba zestawów, które zawsze będziesz dodatnią liczbą całkowitą niezerową”.
mypetlion,
1
Listy do kąpieli w pianie są dobrym wstępem do mówienia ...
Arnauld,

Odpowiedzi:

1

HTML / JavaScript (z jQuery) / CSS - nie konkuruje / nie gra w golfa

Aby rzucić piłkę i pokazać, że nie jest to niemożliwe, oto niekonkurencyjna, niekonkurująca implementacja, która naiwnie podchodzi do zadania.

Najpierw tworzy ciąg wszystkich możliwych znaków ( tempalph), łącząc tyle kopii alfabetu, ile jest zestawów. Następnie iteruje frazę, umieszczając każdą literę frazy w zmiennej wyjściowej i usuwając z niej pierwsze wystąpienie tej litery tempalph. Jeśli nie może (litera nie istnieje), sprawdza, czy można ją zastąpić czymś pozostałym w ciągu. Jeśli to również się nie powiedzie, generuje wstępnie zdefiniowane wyjście „NOPE”. Zakładając, że nie trafi w przypadek „NOPE”, zwraca ciąg wyjściowy i umieszcza go w DIV na stronie.

Następnie przechodzi przez podstawowy ciąg alfabetu, a jeśli użyto litery, przypisuje jej odpowiednią klasę CSS, z których każda ma wstępnie zdefiniowany zestaw kolorów.

Używa danych wejściowych HTML do wprowadzania danych i aktualizacji w nich zawartych.

Wypróbuj w JSFiddle

Przykład dla ["BATH", 3, 1]:

Kąpiel

JS:

var alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

funkcja getPhrase (fraza, zestawy) {
    var modphrase = "";
  var nope = „NOPE”;
  var re = / ^ [A-Z0-9] + $ /;
  if (re.test (zdanie)) {
    // może być poprawny - należy sprawdzić, czy dostępnych jest wystarczająca liczba znaków
    // W tym momencie musisz dokładnie sprawdzić, jakie postacie są potrzebne

    var tempalph = "";
    dla (var i = 0; i '+ char +' ';
        if (tempalph.indexOf (char)! = -1) {
        tempalph = tempalph.replace (char, „#”);
      } else {
        przełącznik (char) {
            przypadek „E”:
            if (tempalph.indexOf ("3")! = -1) {
                    tempalph = tempalph.replace („3”, „#”);
              modchar = „3”;
                } else {
                powrót nie;
            }
            przerwa;
          przypadek „I”:
            if (tempalph.indexOf („1”)! = -1) {
                    tempalph = tempalph.replace („1”, „#”);
              modchar = „1”;
                } else {
              powrót nie;
            }
            przerwa;
          przypadek „L”:
            if (tempalph.indexOf („7”)! = -1) {
                    tempalph = tempalph.replace („7”, „#”);
              modchar = „7”;
                } else {
              powrót nie;
            }
            przerwa;
          przypadek „M”:
            if (tempalph.indexOf („W”)! = -1) {
                    tempalph = tempalph.replace („W”, „#”);
              modchar = „W”;
                } else {
              powrót nie;
            }
            przerwa;
          przypadek „O”:
            if (tempalph.indexOf („0”)! = -1) {
                    tempalph = tempalph.replace („0”, „#”);
              modchar = „0”;
                } else {
              powrót nie;
            }
            przerwa;
          przypadek „W”:
            if (tempalph.indexOf („M”)! = -1) {
                    tempalph = tempalph.replace („M”, „#”);
              modchar = „M”;
                } else {
              powrót nie;
            }
            przerwa;
          przypadek „0”:
            if (tempalph.indexOf („O”)! = -1) {
                    tempalph = tempalph.replace („O”, „#”);
              modchar = „O”;
                } else {
              powrót nie;
            }
            przerwa;
          przypadek „6”:
            if (tempalph.indexOf ("9")! = -1) {
                    tempalph = tempalph.replace („9”, „#”);
              modchar = „9”;
                } else {
              powrót nie;
            }
            przerwa;
          przypadek „7”:
            if (tempalph.indexOf („L”)! = -1) {
                    tempalph = tempalph.replace („L”, „#”);
              modchar = „L”;
                } else {
              powrót nie;
            }
            przerwa;
          przypadek „9”:
            if (tempalph.indexOf ("6")! = -1) {
                    tempalph = tempalph.replace („6”, „#”);
              modchar = „6”;
                } else {
              powrót nie;
            }
            przerwa;

          przypadek „S”:
            if (tempalph.indexOf („5”)! = -1) {
                    tempalph = tempalph.replace („5”, „#”);
              modchar = „5”;
                } else if (tempalph.indexOf („2”)! = -1) {
                    tempalph = tempalph.replace („2”, „#”);
              modchar = „2”;
                } else {
              powrót nie;
            }
            przerwa;
                    przypadek „Z”:
            if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace („2”, „#”);
              modchar = „2”;
                } else if (tempalph.indexOf („5”)! = -1) {
                    tempalph = tempalph.replace („5”, „#”);
              modchar = „5”;
                } else {
              powrót nie;
            }
            przerwa;
          walizka " ":
            przerwa;
          domyślna:
            powrót nie;
          }

      }
        modphrase + = modchar;
    }

    zwrot modafrazy;
  } else {
    // zawiera inne znaki, więc zdecydowanie nie jest poprawny
    powrót nie;
  }
}

funkcja addColors (colcount) {
  var i = 0;
  dla (niech char alfabetu) {
    exclass = "." + char;
    newclass = "col" + i;
    if ($ (exclass) .length> 0) {
      $ (exclass) .addClass (nowa klasa);
    }
    i ++;
    if (i == colcount) {
        i = 0;
    } 
  }
}


$ („# fraza, # zestawów, # kolorów”). on („keyup”, function () {
    var fraza = $ („# fraza”). val (). toUpperCase ();
  fraza = getPhrase (fraza, $ („# sets”). val ());
    $ („# output”). html (fraza);
  addColors ($ („# kolory”). val ());
})

HTML:

<label> Phrase <input type = "text" id = "frazy" /> </label>
<label> Kolory <input type = "text" id = "colors" value = "3" /> </label>
<label> Ustawia <input type = "text" id = "sets" value = "1" /> </label>

<div id = "output">

</div>

CSS:

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

.rot {display: blok wbudowany; transform: rotate (0.5turn);}
.flip {display: inline-block; transform: rotateY (0.5turn);}

div {
  font-family: sans-serif;
  rozmiar czcionki: 3em;
  kolor tła: # 000;
  wypełnienie: 10 pikseli;
}
Mateusz
źródło
Uważam, że należy podważyć kwestię osoby, która nie jest poważna, zgodnie z tym (mini) meta konsensusem.
user202729,