Lettres de bain en mousse


19

Si vous avez un petit enfant dans votre maison, vous avez peut-être rencontré des lettres de bain en mousse. Ceux-ci peuvent être humidifiés et collés sur des surfaces planes telles que les carreaux et le côté du bain pour faire des mots et des messages.

La gamme si vous avez seulement des mots et des messages est quelque peu limité un jeu bien, puisque vous obtenez seulement 36 caractères: lettres majuscules AZ, et les chiffres 0-9: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. Cependant, vous pouvez être rusé et abuser de certaines lettres et chiffres pour former des copies supplémentaires d'autres lettres:

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)

Notez que ceux-ci ne sont pas tous bidirectionnels, car il a tendance à être plus facile de lire un chiffre comme partie d'un mot qu'une lettre comme partie d'un nombre.

Chaque ensemble est également disponible dans une gamme de couleurs, où chaque lettre est colorée en séquence. Par exemple, si votre ensemble a 3 couleurs, rouge, jaune et bleu, votre ensemble serait comme:

  • Rouge: ADGJMPSVY147
  • Jaune: BEHKNQTWZ258
  • Bleu: CFILORUX0369

Votre tâche consiste donc à prendre trois paramètres (de toute manière appropriée) indiquant un mot ou une phrase, le nombre de couleurs à utiliser et le nombre de jeux dont vous disposez, puis de produire une représentation du mot ou de la phrase, en un ensemble de couleurs appropriées, en utilisant des substitutions si nécessaire. S'il n'est pas possible de faire le mot ou la phrase étant donné le nombre de jeux, à la place, affichez "Non", dans les couleurs appropriées.

Exemples

Dans tous ces cas, le premier paramètre est le mot ou la phrase, le second est le nombre de couleurs et le troisième est le nombre de jeux disponibles.

["bath", 3, 1]

UNE BAIGNOIRE

["programming", 3, 2]

PROGRAMMATION

["puzzles", 3, 1]

PUZ2LES

["code golf", 5, 1]

CODE G0LF

["willow tree", 1, 1]

WIL7OM TRE3

["impossible phrase", 8, 1]

NAN - il n'y a que 1 P dans un ensemble, et aucune substitution valide

Remarques

  • Vous pouvez définir par défaut 1 jeu si cela vous aide (par exemple, une valeur de paramètre par défaut de 1), mais vous devez prendre en charge plusieurs jeux sur demande. Le nombre d'ensembles que vous avez sera toujours un entier positif non nul.
  • Si vous avez plusieurs ensembles, ils sont tous colorés de la même manière: si A est rouge dans le premier ensemble, il sera également rouge dans le deuxième ensemble. Les couleurs sont appliquées par ensemble, pas à tous les ensembles dans une invocation donnée
  • Vous devez prendre en charge 1 à 36 couleurs - 1 signifie que tous les personnages sont de la même couleur, 36 signifie qu'ils sont tous distincts. Il n'y aura que des nombres entiers de couleurs.
  • Vous pouvez utiliser toutes les couleurs, tant qu'elles sont visuellement distinctes - si vous effectuez une sortie vers le terminal, vous pouvez utiliser une combinaison de premier plan et d'arrière-plan comme "couleur", bien que vous ne devez pas utiliser la même couleur pour le premier plan et l'arrière-plan.
  • Votre sortie doit utiliser les caractères que vous utilisez réellement, pas les caractères de l'entrée. Par exemple, si vous aviez ["saule", 1, 1] en entrée, vous pourriez sortir WIL7OMavec 7 et M tournés de 180 degrés
  • Vous devez d'abord utiliser les bonnes lettres, puis les remplacer: MI7LOWest incorrect pour ["saule", 1, 1]
  • Vous pouvez utiliser n'importe quelle substitution pour un caractère donné: SO5et SO2avec un 2 inversé sont tous deux valables pour "SOS"
  • Les appels multiples de votre code pour la même entrée n'ont pas à produire une sortie identique
  • La sortie doit être en majuscules, mais l'entrée peut être dans n'importe quel mélange de majuscules et de minuscules
  • Cela devrait être évident, mais un espace n'a pas de couleur

Règles

  • Il s'agit de code golf, mais avec une sortie semi-graphique (je ne sais pas si vous pouvez faire du texte inversé dans un terminal, mais je suis intéressé de voir si Pyth a une fonction intégrée pour cela)
  • Des échappatoires standard s'appliquent
  • Il n'y a pas de bonus pour les fonctions, mais votez pour des réponses intéressantes
  • Inclure des captures d'écran de votre sortie dans vos réponses

Défis liés


1
Que faire s'il n'est pas possible de sortir "NOPE" compte tenu des ensembles?
Rɪᴋᴇʀ

@Riker Un ensemble contient les 36 caractères donnés. Quand serait-il impossible de sortir NOPE?
mypetlion

@mypetlion quand il n'y a pas de sets ...
Rɪᴋᴇʀ

@Riker Lire "Le nombre d'ensembles que vous avez sera toujours un entier positif non nul."
mypetlion

1
Les lettres de bain de mousse sont une bonne introduction à parler leet ...
Arnauld

Réponses:


1

HTML / JavaScript (avec jQuery) / CSS - non compétitif / non golfé

Juste pour lancer la balle et montrer que ce n'est pas impossible, voici une implémentation non golfée et non compétitive qui adopte une approche naïve de la tâche.

Il crée d'abord une chaîne de tous les caractères possibles ( tempalph), en joignant autant de copies de l'alphabet qu'il y a de jeux. Ensuite, il parcourt la phrase, en plaçant chaque lettre de la phrase dans une variable de sortie et en supprimant la première instance de cette lettre tempalph. Si ce n'est pas le cas (la lettre n'existe pas), il vérifie si la lettre est remplaçable par quelque chose qui reste dans la chaîne. Si cela échoue également, il produit une sortie "NOPE" prédéfinie. En supposant qu'il ne frappe pas le cas "NOPE", il retourne la chaîne de sortie et la place dans un DIV sur la page.

Il parcourt ensuite la chaîne de l'alphabet de base et, si une lettre a été utilisée, lui attribue une classe CSS appropriée, dont chacune a un jeu de couleurs prédéfini.

Il utilise des entrées HTML pour la saisie et des mises à jour sur la saisie.

Essayez-le sur JSFiddle

Exemple pour ["BATH", 3, 1]:

Une baignoire

JS:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

fonction getPhrase (phrase, ensembles) {
    var modphrase = "";
  var nope = 'NOPE';
  var re = / ^ [A-Z0-9] + $ /;
  if (re.test (phrase)) {
    // peut être valide - il faut vérifier qu'il y a suffisamment de caractères disponibles
    // À ce stade, il faut regarder spécifiquement quels caractères sont nécessaires

    var tempalph = "";
    pour (var i = 0; i '+ char +' ';
        if (tempalph.indexOf (char)! = -1) {
        tempalph = tempalph.replace (char, "#");
      } autre {
        commutateur (char) {
            cas "E":
            if (tempalph.indexOf ("3")! = -1) {
                    tempalph = tempalph.replace ("3", "#");
              modchar = '3';
                } autre {
                retour non;
            }
            Pause;
          cas "I":
            if (tempalph.indexOf ("1")! = -1) {
                    tempalph = tempalph.replace ("1", "#");
              modchar = '1';
                } autre {
              retour non;
            }
            Pause;
          cas "L":
            if (tempalph.indexOf ("7")! = -1) {
                    tempalph = tempalph.replace ("7", "#");
              modchar = '7';
                } autre {
              retour non;
            }
            Pause;
          cas "M":
            if (tempalph.indexOf ("W")! = -1) {
                    tempalph = tempalph.replace ("W", "#");
              modchar = 'W';
                } autre {
              retour non;
            }
            Pause;
          cas "O":
            if (tempalph.indexOf ("0")! = -1) {
                    tempalph = tempalph.replace ("0", "#");
              modchar = '0';
                } autre {
              retour non;
            }
            Pause;
          cas "W":
            if (tempalph.indexOf ("M")! = -1) {
                    tempalph = tempalph.replace ("M", "#");
              modchar = 'M';
                } autre {
              retour non;
            }
            Pause;
          cas "0":
            if (tempalph.indexOf ("O")! = -1) {
                    tempalph = tempalph.replace ("O", "#");
              modchar = 'O';
                } autre {
              retour non;
            }
            Pause;
          cas "6":
            if (tempalph.indexOf ("9")! = -1) {
                    tempalph = tempalph.replace ("9", "#");
              modchar = '9';
                } autre {
              retour non;
            }
            Pause;
          cas "7":
            if (tempalph.indexOf ("L")! = -1) {
                    tempalph = tempalph.replace ("L", "#");
              modchar = 'L';
                } autre {
              retour non;
            }
            Pause;
          cas "9":
            if (tempalph.indexOf ("6")! = -1) {
                    tempalph = tempalph.replace ("6", "#");
              modchar = '6';
                } autre {
              retour non;
            }
            Pause;

          cas "S":
            if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } else if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } autre {
              retour non;
            }
            Pause;
                    cas "Z":
            if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } else if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } autre {
              retour non;
            }
            Pause;
          Cas " ":
            Pause;
          défaut:
            retour non;
          }

      }
        modphrase + = modchar;
    }

    return modphrase;
  } autre {
    // contient d'autres caractères, donc n'est certainement pas valide
    retour non;
  }
}

function addColors (colcount) {
  var i = 0;
  pour (laissez le caractère de l'alphabet) {
    exclass = "." + char;
    newclass = "col" + i;
    if ($ (exclass) .length> 0) {
      $ (exclass) .addClass (newclass);
    }
    i ++;
    if (i == colcount) {
        i = 0;
    } 
  }
}


$ ("# phrase, # sets, # couleurs"). on ("keyup", fonction () {
    var expression = $ ("# phrase"). val (). toUpperCase ();
  phrase = getPhrase (phrase, $ ("# sets"). val ());
    $ ("# sortie"). html (phrase);
  addColors ($ ("# couleurs"). val ());
})

HTML:

<label> Phrase <input type = "text" id = "phrase" /> </label>
<label> Couleurs <input type = "text" id = "colours" value = "3" /> </label>
<label> Définit <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: inline-block; transformer: tourner (0,5 tour);}
.flip {display: inline-block; transform: rotationY (0,5 tour);}

div {
  famille de polices: sans-serif;
  taille de police: 3em;
  couleur de fond: # 000;
  rembourrage: 10px;
}

Je pense que le candidat non sérieux devrait être inclus dans la question, par ce (mini) méta consensus.
user202729
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.