Lettere del bagno di schiuma


19

Se hai un bambino piccolo in casa, potresti aver trovato lettere di schiuma da bagno. Questi possono essere inumiditi e attaccati a superfici piane come piastrelle e il lato del bagno per creare parole e messaggi.

La gamma di parole e messaggi è piuttosto limitata se si dispone di un solo set, però, dal momento che si ottiene solo 36 caratteri: lettere maiuscole AZ, e cifre 0-9: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. Tuttavia, puoi essere astuto e abusare di alcune lettere e cifre per formare copie extra di altre lettere:

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)

Si noti che questi non sono tutti bidirezionali, poiché tende a essere più facile leggere una cifra come parte di una parola rispetto a una lettera come parte di un numero.

Ogni set è disponibile anche in una gamma di colori, in cui ogni lettera è colorata in sequenza. Ad esempio, se il tuo set ha 3 colori, rosso, giallo e blu, il tuo set sarebbe come:

  • Rosso: ADGJMPSVY147
  • Giallo: BEHKNQTWZ258
  • Blu: CFILORUX0369

Il tuo compito, quindi, è di prendere tre parametri (in qualsiasi modo adatto) che indicano una parola o frase, il numero di colori da usare e il numero di insiemi che hai, quindi di produrre una rappresentazione della parola o frase, in un set di colori adatti, facendo uso di sostituzioni se necessario. Se non è possibile creare la parola o la frase in base al numero di set, emettere invece "No", con i colori appropriati.

Esempi

In tutti questi, il primo parametro è la parola o frase, il secondo è il numero di colori e il terzo è il numero di set disponibili.

["bath", 3, 1]

BAGNO

["programming", 3, 2]

PROGRAMMAZIONE

["puzzles", 3, 1]

PUZ2LES

["code golf", 5, 1]

CODICE G0LF

["willow tree", 1, 1]

WIL7OM TRE3

["impossible phrase", 8, 1]

NO - c'è solo 1 P in un set e nessuna sostituzione valida

Appunti

  • È possibile impostare 1 su un valore predefinito se questo aiuta (ad esempio un valore di parametro predefinito su 1), ma è necessario supportare più set su richiesta. Il numero di set che hai sarà sempre un numero intero diverso da zero positivo.
  • Se hai più set, sono tutti colorati nello stesso modo: se A è rosso nel primo set, sarà rosso anche nel secondo set. I colori vengono applicati per serie, non per tutte le serie in una determinata chiamata
  • Devi supportare da 1 a 36 colori: 1 indica che tutti i caratteri sono dello stesso colore, 36 indica che sono tutti distinti. Ci saranno solo numeri interi di colori.
  • È possibile utilizzare qualsiasi colore, purché siano visivamente distinti: se si esegue l'output al terminale, è possibile utilizzare una combinazione di primo piano e sfondo come "colore", anche se non è necessario utilizzare lo stesso colore per primo piano e sfondo
  • L'output deve utilizzare i caratteri effettivamente utilizzati, non i caratteri dell'input. Ad esempio, se si avesse ["salice", 1, 1] come input, si potrebbe produrre WIL7OMcon 7 e M ruotati di 180 gradi
  • Dovresti prima usare le lettere giuste, quindi sostituire: MI7LOWnon è corretto per ["salice", 1, 1]
  • Puoi usare qualsiasi sostituzione per un dato personaggio: SO5e SO2con un 2 capovolto sono entrambi validi per "SOS"
  • Più invocazioni del codice per lo stesso input non devono produrre output identici
  • L'output deve essere in maiuscolo, ma l'input può essere in qualsiasi combinazione di maiuscole e minuscole
  • Dovrebbe essere ovvio, ma uno spazio non ha un colore

Regole

  • Questo è il golf del codice, ma con un output semi-grafico (non sono sicuro che tu possa fare il testo capovolto in un terminale, ma sono interessato a vedere se Pyth ha un built-in per esso)
  • Si applicano scappatoie standard
  • Non ci sono bonus per le funzioni, ma per favore vota risposte interessanti
  • Includi alcune schermate del tuo output nelle tue risposte

Sfide correlate


1
E se non fosse possibile produrre "NOPE" dato i set?
Rɪᴋᴇʀ

@Riker Un set contiene i 36 caratteri indicati. Quando sarebbe impossibile produrre NOPE?
mypetlion il

@mypetlion quando non ci sono set ...
Rɪᴋᴇʀ

@Riker Leggi "Il numero di set che hai sarà sempre un numero intero diverso da zero positivo."
mypetlion il

1
Le lettere del bagnoschiuma sono una buona introduzione al linguaggio parlato ...
Arnauld,

Risposte:


1

HTML / JavaScript (con jQuery) / CSS - non competitivi / non golfati

Solo per far rotolare la palla e dimostrare che non è impossibile, ecco un'implementazione non golfizzata e non competitiva che adotta un approccio ingenuo al compito.

Crea prima una stringa di tutti i possibili caratteri ( tempalph), unendo il maggior numero di copie dell'alfabeto quanti sono i set. Quindi scorre la frase, inserendo ciascuna lettera della frase in una variabile di output e cancellando la prima istanza di quella lettera tempalph. Se non può (la lettera non esiste), controlla se la lettera è sostituibile con qualcosa lasciato nella stringa. Se anche ciò fallisce, genera un output "NOPE" predefinito. Supponendo che non colpisca il caso "NOPE", restituisce la stringa di output e la inserisce in un DIV nella pagina.

Quindi scorre la stringa alfabetica di base e, se è stata utilizzata una lettera, le assegna una classe CSS appropriata, ognuna delle quali ha un set di colori predefinito.

Utilizza input HTML per l'input e aggiornamenti al keyup in essi.

Provalo su JSFiddle

Esempio per ["BATH", 3, 1]:

Bagno

JS:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

funzione getPhrase (frase, insiemi) {
    var modphrase = "";
  var nope = 'NOPE';
  var re = / ^ [A-Z0-9] + $ /;
  if (re.test (frase)) {
    // potrebbe essere valido - è necessario verificare che siano disponibili caratteri sufficienti
    // A questo punto, è necessario esaminare in modo specifico quali personaggi sono necessari

    var tempalph = "";
    per (var i = 0; i '+ char +' ';
        if (tempalph.indexOf (char)! = -1) {
        tempalph = tempalph.replace (char, "#");
      } altro {
        interruttore (char) {
            caso "E":
            if (tempalph.indexOf ("3")! = -1) {
                    tempalph = tempalph.replace ("3", "#");
              modchar = '3';
                } altro {
                ritorno no;
            }
            rompere;
          caso "I":
            if (tempalph.indexOf ("1")! = -1) {
                    tempalph = tempalph.replace ("1", "#");
              modchar = '1';
                } altro {
              ritorno no;
            }
            rompere;
          caso "L":
            if (tempalph.indexOf ("7")! = -1) {
                    tempalph = tempalph.replace ("7", "#");
              modchar = '7';
                } altro {
              ritorno no;
            }
            rompere;
          caso "M":
            if (tempalph.indexOf ("W")! = -1) {
                    tempalph = tempalph.replace ("W", "#");
              modchar = 'W';
                } altro {
              ritorno no;
            }
            rompere;
          caso "O":
            if (tempalph.indexOf ("0")! = -1) {
                    tempalph = tempalph.replace ("0", "#");
              modchar = '0';
                } altro {
              ritorno no;
            }
            rompere;
          caso "W":
            if (tempalph.indexOf ("M")! = -1) {
                    tempalph = tempalph.replace ("M", "#");
              modchar = 'M';
                } altro {
              ritorno no;
            }
            rompere;
          caso "0":
            if (tempalph.indexOf ("O")! = -1) {
                    tempalph = tempalph.replace ("O", "#");
              modchar = 'O';
                } altro {
              ritorno no;
            }
            rompere;
          caso "6":
            if (tempalph.indexOf ("9")! = -1) {
                    tempalph = tempalph.replace ("9", "#");
              modchar = '9';
                } altro {
              ritorno no;
            }
            rompere;
          caso "7":
            if (tempalph.indexOf ("L")! = -1) {
                    tempalph = tempalph.replace ("L", "#");
              modchar = 'L';
                } altro {
              ritorno no;
            }
            rompere;
          caso "9":
            if (tempalph.indexOf ("6")! = -1) {
                    tempalph = tempalph.replace ("6", "#");
              modchar = '6';
                } altro {
              ritorno no;
            }
            rompere;

          caso "S":
            if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } else if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } altro {
              ritorno no;
            }
            rompere;
                    caso "Z":
            if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } else if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } altro {
              ritorno no;
            }
            rompere;
          Astuccio " ":
            rompere;
          predefinito:
            ritorno no;
          }

      }
        modphrase + = modchar;
    }

    return modphrase;
  } altro {
    // contiene alcuni altri personaggi, quindi sicuramente non è valido
    ritorno no;
  }
}

funzione addColors (colcount) {
  var i = 0;
  for (let char of alphabet) {
    exclass = "." + char;
    newclass = "col" + i;
    if ($ (exclass) .length> 0) {
      $ (Exclass) .addClass (NewClass);
    }
    i ++;
    if (i == colcount) {
        i = 0;
    } 
  }
}


$ ("# frase, # insiemi, # colori"). on ("keyup", function () {
    var frase = $ ("# frase"). val (). toUpperCase ();
  frase = getPhrase (frase, $ ("# sets"). val ());
    $ ( "# Uscita") html (frase).;
  addColors ($ ( "#") colori val ().);
})

HTML:

<label> Frase <input type = "text" id = "frase" /> </label>
<label> Colori <input type = "text" id = "colors" value = "3" /> </label>
<label> Imposta <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; trasforma: ruota (0,5 giro);}
.flip {display: inline-block; trasforma: ruota Y (0,5 giro);}

div {
  famiglia di caratteri: sans-serif;
  dimensione carattere: 3em;
  colore di sfondo: # 000;
  imbottitura: 10px;
}

Penso che il contendente non serio dovrebbe essere incluso nella questione, per questo (mini) meta consenso.
user202729
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.