Schaumbad Buchstaben

19

Wenn Sie ein kleines Kind in Ihrem Haus haben, sind Sie möglicherweise auf Schaumbadbuchstaben gestoßen. Diese können angefeuchtet und auf flache Oberflächen wie Fliesen und die Seite der Badewanne geklebt werden, um Worte und Botschaften zu bilden.

Die Bandbreite der Worte und Botschaften ist etwas eingeschränkt , wenn Sie allerdings einen Satz haben, da Sie nur 36 Zeichen erhalten: Großbuchstaben AZ und Ziffern 0-9: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. Sie können jedoch schlau sein und einige der Buchstaben und Ziffern missbrauchen, um zusätzliche Kopien anderer Buchstaben zu erstellen:

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)

Beachten Sie, dass diese nicht alle bidirektional sind, da es in der Regel einfacher ist, eine Ziffer als Teil eines Wortes als Teil einer Zahl als Buchstaben zu lesen.

Jedes Set ist auch in einer Reihe von Farben erhältlich, wobei jeder Buchstabe der Reihe nach farbig ist. Wenn Ihr Set beispielsweise drei Farben hat, Rot, Gelb und Blau, sieht Ihr Set folgendermaßen aus:

  • Rot: ADGJMPSVY147
  • Gelb: BEHKNQTWZ258
  • Blau: CFILORUX0369

Ihre Aufgabe ist es daher, drei Parameter (auf jede geeignete Weise) zu verwenden, die ein Wort oder eine Phrase angeben, die Anzahl der zu verwendenden Farben und die Anzahl der Mengen, die Sie haben, und dann eine Darstellung des Wortes oder der Phrase in auszugeben eine Reihe geeigneter Farben, bei Bedarf durch Substitutionen. Wenn es nicht möglich ist, das Wort oder die Phrase mit der angegebenen Anzahl von Sätzen zu bilden, geben Sie stattdessen "Nope" in den entsprechenden Farben aus.

Beispiele

In all diesen Fällen ist der erste Parameter das Wort oder die Phrase, der zweite die Anzahl der Farben und der dritte die Anzahl der verfügbaren Sätze.

["bath", 3, 1]

BAD

["programming", 3, 2]

PROGRAMMIERUNG

["puzzles", 3, 1]

PUZ2LES

["code golf", 5, 1]

CODE G0LF

["willow tree", 1, 1]

WIL7OM TRE3

["impossible phrase", 8, 1]

NEE - Es gibt nur 1 P in einer Menge und keine gültigen Substitutionen

Anmerkungen

  • Sie können standardmäßig 1 Satz festlegen, wenn dies hilfreich ist (z. B. einen Standardparameterwert von 1), aber Sie müssen auf Anfrage mehrere Sätze unterstützen. Die Anzahl der Mengen, die Sie haben, ist immer eine positive Ganzzahl ungleich Null.
  • Wenn Sie mehrere Sätze haben, sind alle gleich gefärbt: Wenn A im ersten Satz rot ist, ist es auch im zweiten Satz rot. Die Farben werden pro Satz angewendet, nicht für alle Sätze in einem bestimmten Aufruf
  • Sie müssen 1 bis 36 Farben unterstützen - 1 bedeutet, dass alle Zeichen dieselbe Farbe haben, 36 bedeutet, dass sie alle verschieden sind. Es wird nur eine ganzzahlige Anzahl von Farben geben.
  • Sie können alle Farben verwenden, sofern sie sich optisch unterscheiden. Wenn Sie auf dem Terminal ausgeben, können Sie eine Kombination aus Vordergrund und Hintergrund als "Farbe" verwenden, obwohl Sie für Vordergrund und Hintergrund nicht dieselbe Farbe verwenden dürfen
  • Ihre Ausgabe muss die Zeichen verwenden, die Sie tatsächlich verwenden, nicht die Zeichen aus der Eingabe. Wenn Sie beispielsweise ["Weide", 1, 1] als Eingabe hatten, könnten Sie die Ausgabe WIL7OMmit 7 und M um 180 Grad drehen
  • Sie sollten zuerst die richtigen Buchstaben verwenden und dann ersetzen: MI7LOWist falsch für ["Weide", 1, 1]
  • Sie können für ein bestimmtes Zeichen eine beliebige Ersetzung verwenden: SO5und SO2mit einer umgedrehten 2 sind beide für "SOS" gültig.
  • Mehrere Aufrufe Ihres Codes für dieselbe Eingabe müssen nicht zu derselben Ausgabe führen
  • Die Ausgabe sollte in Großbuchstaben erfolgen, die Eingabe kann jedoch in einer beliebigen Mischung aus Groß- und Kleinbuchstaben erfolgen
  • Es sollte offensichtlich sein, aber ein Leerzeichen hat keine Farbe

Regeln

  • Dies ist Codegolf, aber mit semi-grafischer Ausgabe (Ich bin nicht sicher, ob Sie Text in einem Terminal spiegeln können, bin aber interessiert, ob Pyth einen eingebauten Code dafür hat)
  • Es gelten Standardlücken
  • Es gibt keine Boni für Funktionen, aber bitte stimmen Sie interessante Antworten ab
  • Schließen Sie einige Screenshots Ihrer Ausgabe in Ihre Antworten ein

Verwandte Herausforderungen

  • Das Alphabet meiner Tochter - eine teilweise Umkehrung dieser Herausforderung, da es darum geht, eine minimale Anzahl von Buchstaben zu finden, um eine Reihe von Sätzen zu schreiben
  • Passt ein Brief in den anderen? - über eine andere Art von Schaumstoffbuchstaben, aber mit einer ähnlichen Alternative zum Buchstabenthema
Matthew
quelle
1
Was ist, wenn es nicht möglich ist, "NOPE" mit den angegebenen Sätzen auszugeben?
18.
@Riker Ein Set enthält die 36 angegebenen Zeichen. Wann ist eine Ausgabe nicht möglich NOPE?
Mypetlion
@mypetlion, wenn es keine Sätze gibt ...
Rɪᴋᴇʀ
@Riker Read "Die Anzahl der Sets, die Sie haben, ist immer eine positive Ganzzahl ungleich Null."
Mypetlion
1
Schaumbad Buchstaben sind eine gute Einführung in Leet Speak ...
Arnauld

Antworten:

1

HTML / JavaScript (mit jQuery) / CSS - nicht konkurrierend / nicht golfen

Nur um den Ball ins Rollen zu bringen und zu zeigen, dass dies nicht unmöglich ist, gibt es hier eine nicht golfende, nicht konkurrierende Implementierung, die einen naiven Ansatz für die Aufgabe verfolgt.

Zunächst wird eine Zeichenfolge aller möglichen Zeichen ( tempalph) erstellt, indem so viele Kopien des Alphabets verbunden werden, wie Mengen vorhanden sind. Dann durchläuft es die Phrase, setzt jeden Buchstaben der Phrase in eine Ausgabevariable und löscht die erste Instanz dieses Buchstabens aus tempalph. Wenn dies nicht möglich ist (der Buchstabe existiert nicht), wird geprüft, ob der Buchstabe durch etwas in der Zeichenfolge Ersetzbares ersetzt werden kann. Wenn dies ebenfalls fehlschlägt, wird ein vordefinierter "NOPE" -Ausgang ausgegeben. Angenommen, es trifft nicht auf den "NOPE" -Fall zu, wird die Ausgabezeichenfolge zurückgegeben und in einen DIV auf der Seite eingefügt.

Anschließend durchläuft es die Basisalphabetzeichenfolge und weist ihr, falls ein Buchstabe verwendet wurde, eine entsprechende CSS-Klasse zu, die jeweils einen vordefinierten Farbsatz aufweist.

Es werden HTML-Eingaben für die Eingabe und Aktualisierungen bei der Eingabe verwendet.

Probieren Sie es bei JSFiddle

Beispiel für ["BATH", 3, 1]:

Bad

JS:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

Funktion getPhrase (Phrase, Sets) {
    var modphrase = "";
  var nope = 'NOPE';
  var re = / ^ [A-Z0-9] + $ /;
  if (re.test (phrase)) {
    // ist möglicherweise gültig - es muss überprüft werden, ob genügend Zeichen verfügbar sind
    // An dieser Stelle müssen Sie sich genau ansehen, welche Zeichen benötigt werden

    var tempalph = "";
    für (var i = 0; i '+ char +' ';
        if (tempalph.indexOf (char)! = -1) {
        tempalph = tempalph.replace (char, "#");
      } else {
        switch (char) {
            case "E":
            if (tempalph.indexOf ("3")! = -1) {
                    tempalph = tempalph.replace ("3", "#");
              modchar = '3';
                } else {
                return nope;
            }
            brechen;
          Fall "I":
            if (tempalph.indexOf ("1")! = -1) {
                    tempalph = tempalph.replace ("1", "#");
              modchar = '1';
                } else {
              return nope;
            }
            brechen;
          case "L":
            if (tempalph.indexOf ("7")! = -1) {
                    tempalph = tempalph.replace ("7", "#");
              modchar = '7';
                } else {
              return nope;
            }
            brechen;
          case "M":
            if (tempalph.indexOf ("W")! = -1) {
                    tempalph = tempalph.replace ("W", "#");
              modchar = 'W';
                } else {
              return nope;
            }
            brechen;
          case "O":
            if (tempalph.indexOf ("0")! = -1) {
                    tempalph = tempalph.replace ("0", "#");
              modchar = '0';
                } else {
              return nope;
            }
            brechen;
          case "W":
            if (tempalph.indexOf ("M")! = -1) {
                    tempalph = tempalph.replace ("M", "#");
              modchar = 'M';
                } else {
              return nope;
            }
            brechen;
          case "0":
            if (tempalph.indexOf ("O")! = -1) {
                    tempalph = tempalph.replace ("O", "#");
              modchar = 'O';
                } else {
              return nope;
            }
            brechen;
          case "6":
            if (tempalph.indexOf ("9")! = -1) {
                    tempalph = tempalph.replace ("9", "#");
              modchar = '9';
                } else {
              return nope;
            }
            brechen;
          Fall "7":
            if (tempalph.indexOf ("L")! = -1) {
                    tempalph = tempalph.replace ("L", "#");
              modchar = 'L';
                } else {
              return nope;
            }
            brechen;
          case "9":
            if (tempalph.indexOf ("6")! = -1) {
                    tempalph = tempalph.replace ("6", "#");
              modchar = '6';
                } else {
              return nope;
            }
            brechen;

          Fälle":
            if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } else if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } else {
              return nope;
            }
            brechen;
                    case "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 {
              return nope;
            }
            brechen;
          Fall " ":
            brechen;
          Standard:
            return nope;
          }

      }
        modphrase + = modchar;
    }

    return modphrase;
  } else {
    // enthält einige andere Zeichen, ist also definitiv nicht gültig
    return nope;
  }
}

Funktion addColors (colcount) {
  var i = 0;
  für (lassen Sie das Zeichen des Alphabets) {
    exclass = "." + char;
    newclass = "col" + i;
    if ($ (exclass) .length> 0) {
      $ (exclass) .addClass (newclass);
    }
    i ++;
    if (i == colcount) {
        i = 0;
    } 
  }
}


$ ("# phrase, # sets, # colors"). on ("keyup", function () {
    var phrase = $ ("# phrase"). val (). toUpperCase ();
  phrase = getPhrase (phrase, $ ("# sets"). val ());
    $ ("# output"). html (phrase);
  addColors ($ ("# colors"). val ());
})

HTML:

<label> Phrase <input type = "text" id = "phrase" /> </ label>
<label> Farben <input type = "text" id = "colors" value = "3" /> </ label>
<label> Setzt <input type = "text" id = "sets" value = "1" /> </ label>

<div id = "output">

</ div>

CSS:

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

.rot {display: inline-block; transformieren: drehen (0.5turn);}
.flip {display: inline-block; transform: rotateY (0.5turn);}

div {
  Schriftfamilie: serifenlos;
  Schriftgröße: 3em;
  Hintergrundfarbe: # 000;
  Polsterung: 10px;
}
Matthew
quelle
Ich denke, nicht seriöse Anwärter sollten in Frage kommen, nach diesem (Mini) Metakonsens.
user202729