Письма о пенной ванне

19

Если у вас есть маленький ребенок в вашем доме, вы, возможно, сталкивались с письмами о пенной ванне. Их можно смочить и приклеить к плоским поверхностям, таким как плитка и сторона ванны, чтобы составлять слова и сообщения.

Диапазон слов и сообщений несколько ограничено , если у вас есть только один набор , хотя, так как вы получите только 36 символов: заглавные буквы AZ, и цифры 0-9: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. Тем не менее, вы можете быть хитрыми и злоупотреблять некоторыми буквами и цифрами, создавая дополнительные копии других букв:

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)

Обратите внимание, что они не являются двунаправленными, так как обычно легче прочитать цифру как часть слова, чем букву как часть числа.

Каждый набор также поставляется в различных цветах, где каждая буква окрашена в последовательности. Например, если ваш набор имеет 3 цвета, красный, желтый и синий, ваш набор будет выглядеть так:

  • Красный: ADGJMPSVY147
  • Желтый: BEHKNQTWZ258
  • Синий: CFILORUX0369

Поэтому ваша задача состоит в том, чтобы взять три параметра (любым подходящим способом), указывающих слово или фразу, количество используемых цветов и количество наборов, которые у вас есть, а затем вывести представление слова или фразы в набор подходящих цветов, с использованием замен при необходимости. Если невозможно сделать слово или фразу с заданным количеством наборов, вместо этого выведите «Nope» в соответствующих цветах.

Примеры

Во всех них первый параметр - это слово или фраза, второй - количество цветов, а третий - количество доступных наборов.

["bath", 3, 1]

БАНЯ

["programming", 3, 2]

ПРОГРАММИРОВАНИЕ

["puzzles", 3, 1]

PUZ2LES

["code golf", 5, 1]

КОД G0LF

["willow tree", 1, 1]

WIL7OM TRE3

["impossible phrase", 8, 1]

НЕТ - в наборе только 1 P и нет действительных замен

Примечания

  • Вы можете по умолчанию установить 1, если это помогает (например, значение параметра по умолчанию 1), но при необходимости вы должны поддерживать несколько наборов. Количество наборов у вас всегда будет положительным ненулевым целым числом.
  • Если у вас есть несколько наборов, они все окрашены одинаково: если A в первом наборе красный, то во втором также будет красным. Цвета применяются для каждого набора, а не для всех наборов в данном вызове.
  • Вы должны поддерживать от 1 до 36 цветов - 1 означает, что все символы одного цвета, 36 означает, что все они различны. Там будут только целые числа цветов.
  • Вы можете использовать любые цвета, если они визуально различаются - если вы выводите на терминал, вы можете использовать комбинацию переднего плана и фона в качестве «цвета», хотя вы не должны использовать один и тот же цвет для переднего плана и фона.
  • Ваш вывод должен использовать символы, которые вы на самом деле используете, а не символы из ввода. Например, если у вас в качестве входных данных [«ива», 1, 1], вы можете вывести WIL7OMс 7 и М повернутым на 180 градусов
  • Сначала следует использовать правильные буквы, а затем заменить: MI7LOWневерно для ["ива", 1, 1]
  • Вы можете использовать любую замену для данного символа: SO5и SO2с перевернутой 2 оба действительны для "SOS"
  • Многократные вызовы вашего кода для одного и того же ввода не должны давать идентичный вывод
  • Вывод должен быть в верхнем регистре, но ввод может быть в любом сочетании верхнего и нижнего регистра
  • Это должно быть очевидно, но пространство не имеет цвета

правила

  • Это кодовый гольф, но с полуграфическим выводом (я не уверен, что вы можете сделать перевернутый текст в терминале, но мне интересно посмотреть, есть ли для него встроенный Pyth)
  • Применяются стандартные лазейки
  • Бонусов за функции нет, но, пожалуйста, оцените интересные ответы.
  • Включите несколько скриншотов вашего вывода в ваши ответы

Связанные проблемы

Мэтью
источник
1
Что если невозможно вывести «NOPE» с заданными наборами?
Rɪᴋᴇʀ
@Riker Набор содержит 36 заданных символов. Когда было бы невозможно вывести NOPE?
mypetlion
@ mypetlion, когда нет наборов ...
Rɪᴋᴇʀ
@Riker Read "Количество наборов, которое вы имеете, всегда будет положительным ненулевым целым числом."
mypetlion
1
Письма о
Арно

Ответы:

1

HTML / JavaScript (с jQuery) / CSS - не конкурирующий / не играющий в гольф

Просто для того, чтобы добиться успеха и показать, что это не невозможно, вот неигровая, неконкурентная реализация, которая использует наивный подход к решению задачи.

Сначала он создает строку из всех возможных символов ( tempalph), объединяя столько копий алфавита, сколько есть наборов. Затем он перебирает фразу, помещая каждую букву фразы в выходную переменную и закрывая первый экземпляр этой буквы из tempalph. Если это невозможно (буква не существует), она проверяет, заменяется ли буква чем-то, что осталось в строке. Если это также не удается, он выводит предопределенный вывод «NOPE». Предполагая, что это не относится к случаю «NOPE», он возвращает строку вывода и помещает ее в DIV на странице.

Затем он перебирает базовую строку алфавита и, если используется буква, назначает ей соответствующий класс CSS, каждый из которых имеет предопределенный набор цветов.

Он использует входные данные HTML для ввода и обновления в них.

Попробуйте это в JSFiddle

Пример для ["BATH", 3, 1]:

ванна

JS:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

function getPhrase (фраза, наборы) {
    var modphrase = "";
  var nope = 'NOPE';
  var re = / ^ [A-Z0-9] + $ /;
  if (re.test (фраза)) {
    // может быть действительным - нужно проверить, достаточно ли символов доступно
    // На данный момент нужно посмотреть, какие конкретно символы нужны

    var tempalph = "";
    for (var i = 0; i '+ char +' ';
        if (tempalph.indexOf (char)! = -1) {
        tempalph = tempalph.replace (char, "#");
      } еще {
        Переключатель (символ) {
            дело "Е":
            if (tempalph.indexOf ("3")! = -1) {
                    tempalph = tempalph.replace ("3", "#");
              modchar = '3';
                } еще {
                вернуть нету;
            }
            перемена;
          дело "я":
            if (tempalph.indexOf ("1")! = -1) {
                    tempalph = tempalph.replace ("1", "#");
              modchar = '1';
                } еще {
              вернуть нету;
            }
            перемена;
          кейс "L":
            if (tempalph.indexOf ("7")! = -1) {
                    tempalph = tempalph.replace ("7", "#");
              modchar = '7';
                } еще {
              вернуть нету;
            }
            перемена;
          дело "М":
            if (tempalph.indexOf ("W")! = -1) {
                    tempalph = tempalph.replace ("W", "#");
              modchar = 'W';
                } еще {
              вернуть нету;
            }
            перемена;
          дело "О":
            if (tempalph.indexOf ("0")! = -1) {
                    tempalph = tempalph.replace ("0", "#");
              modchar = '0';
                } еще {
              вернуть нету;
            }
            перемена;
          кейс "W":
            if (tempalph.indexOf ("M")! = -1) {
                    tempalph = tempalph.replace ("M", "#");
              modchar = 'M';
                } еще {
              вернуть нету;
            }
            перемена;
          регистр "0":
            if (tempalph.indexOf ("O")! = -1) {
                    tempalph = tempalph.replace ("O", "#");
              modchar = 'O';
                } еще {
              вернуть нету;
            }
            перемена;
          дело "6":
            if (tempalph.indexOf ("9")! = -1) {
                    tempalph = tempalph.replace ("9", "#");
              modchar = '9';
                } еще {
              вернуть нету;
            }
            перемена;
          дело "7":
            if (tempalph.indexOf ("L")! = -1) {
                    tempalph = tempalph.replace ("L", "#");
              modchar = 'L';
                } еще {
              вернуть нету;
            }
            перемена;
          дело "9":
            if (tempalph.indexOf ("6")! = -1) {
                    tempalph = tempalph.replace ("6", "#");
              modchar = '6';
                } еще {
              вернуть нету;
            }
            перемена;

          дело "S":
            if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } else if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } еще {
              вернуть нету;
            }
            перемена;
                    кейс "Z":
            if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } else if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } еще {
              вернуть нету;
            }
            перемена;
          кейс " ":
            перемена;
          дефолт:
            вернуть нету;
          }

      }
        модфраза + = модчар;
    }

    возврат модразы;
  } еще {
    // содержит некоторые другие символы, поэтому определенно не действителен
    вернуть нету;
  }
}

function addColors (colcount) {
  var i = 0;
  для (пусть символ алфавита) {
    exclass = "." + char;
    newclass = "col" + i;
    if ($ (exclass) .length> 0) {
      $ (Exclass) .addClass (NewClass);
    }
    я ++;
    if (i == colcount) {
        I = 0;
    } 
  }
}


$ ("# фраза, # наборы, # цвета"). on ("keyup", function () {
    var фразу = $ ("# фразу"). val (). toUpperCase ();
  фраза = getPhrase (фраза, $ ("# sets"). val ());
    $ ( "# Выход") HTML (фраза).
  addColors ($ ( "#" цвета) Val ().);
})

HTML:

<label> Фраза <input type = "text" id = "фраза" /> </ label>
<label> Colors <input type = "text" id = "colors" value = "3" /> </ label>
<label> Устанавливает <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; преобразовать: повернуть (0,5 оборота);}
.flip {display: inline-block; transform: rotateY (0.5turn);}

DIV {
  семейство шрифтов: без засечек;
  размер шрифта: 3em;
  цвет фона: # 000;
  отступы: 10 пикселей;
}
Мэтью
источник
Я думаю, что несерьезный соперник должен быть включен в вопрос, согласно этому (мини) мета-консенсусу.
user202729