Піни для ванни листи


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 і M, повернувшись на 180 градусів
  • Спершу слід скористатись правильними літерами, потім замінити: MI7LOWнеправильно для ["willow", 1, 1]
  • Ви можете використовувати будь-яку заміну для заданого символу: SO5і SO2при перевернутому 2 обидва дійсні для "SOS"
  • Кілька викликів вашого коду на один і той же вхід не повинні давати однаковий вихід
  • Вихід повинен бути великим, але введення може бути в будь-якій суміші верхнього та нижнього регістру
  • Це повинно бути очевидним, але простір не має кольору

Правила

  • Це кодовий гольф, але з напів графічним виведенням (я не впевнений, чи можна робити перевернутий текст у терміналі, але мені цікаво подивитися, чи в Pyth є вбудований для нього)
  • Застосовуються стандартні лазівки
  • Бонусів за функції немає, але прошу проголосувати цікаві відповіді
  • Додайте до своїх відповідей скріншоти свого результату

Супутні виклики


1
Що робити, якщо неможливо вивести "NOPE" з урахуванням наборів?
Rɪᴋᴇʀ

@Riker Набір містить 36 заданих символів. Коли неможливо було вивести NOPE?
mypetlion

@mypetlion, коли немає наборів ...
Rɪᴋᴇʀ

@Riker Прочитайте: "Кількість наборів завжди буде додатним ненульовим цілим числом".
mypetlion

1
Листи з піни для ванни - це гарний вступ до того, щоб говорити ...
Арнольд

Відповіді:


1

HTML / JavaScript (з jQuery) / CSS - неконкуренто / не для гольфу

Просто для того, щоб м'яч прокотився і показав, що це не неможливо, ось неіграюча неконкурентна реалізація, яка наївно підходить до завдання.

Спочатку створюється рядок з усіх можливих символів ( tempalph), приєднуючи стільки копій алфавіту, скільки є наборів. Потім воно повторюється через словосполучення, вводячи кожну букву фрази у вихідну змінну і проробляючи перший екземпляр цієї літери від tempalph. Якщо він не може (лист не існує), він перевіряє, чи букву можна замінити чимось, що залишилося в рядку. Якщо це також не вдається, він виводить заздалегідь визначений вихід "NOPE". Якщо припустити, що він не потрапляє до випадку "NOPE", він повертає вихідний рядок і ставить його у DIV на сторінці.

Потім він проходить через базовий рядок алфавіту, і якщо літера була використана, присвоює їй відповідний клас CSS, кожен з яких має заздалегідь визначений набір кольорів.

Він використовує HTML-введення для введення та оновлення клавіатури в них.

Спробуйте це у JSFiddle

Приклад для ["BATH", 3, 1]:

Ванна

JS:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

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

    var tempalph = "";
    для (var i = 0; i '+ char +' ';
        якщо (tempalph.indexOf (char)! = -1) {
        tempalph = tempalph.replace (char, "#");
      } else {
        перемикач (char) {
            випадок "E":
            якщо (tempalph.indexOf ("3")! = -1) {
                    tempalph = tempalph.replace ("3", "#");
              modchar = '3';
                } else {
                повернути ніпе;
            }
            перерву;
          випадок "Я":
            якщо (tempalph.indexOf ("1")! = -1) {
                    tempalph = tempalph.replace ("1", "#");
              modchar = '1';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "L":
            якщо (tempalph.indexOf ("7")! = -1) {
                    tempalph = tempalph.replace ("7", "#");
              modchar = '7';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "М":
            якщо (tempalph.indexOf ("W")! = -1) {
                    tempalph = tempalph.replace ("W", "#");
              modchar = 'W';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "O":
            якщо (tempalph.indexOf ("0")! = -1) {
                    tempalph = tempalph.replace ("0", "#");
              modchar = '0';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "W":
            якщо (tempalph.indexOf ("M")! = -1) {
                    tempalph = tempalph.replace ("М", "#");
              modchar = 'M';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "0":
            якщо (tempalph.indexOf ("O")! = -1) {
                    tempalph = tempalph.replace ("О", "#");
              modchar = 'O';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "6":
            якщо (tempalph.indexOf ("9")! = -1) {
                    tempalph = tempalph.replace ("9", "#");
              modchar = '9';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "7":
            якщо (tempalph.indexOf ("L")! = -1) {
                    tempalph = tempalph.replace ("L", "#");
              modchar = 'L';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "9":
            якщо (tempalph.indexOf ("6")! = -1) {
                    tempalph = tempalph.replace ("6", "#");
              modchar = '6';
                } else {
              повернути ніпе;
            }
            перерву;

          випадок "S":
            якщо (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } else if (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } else {
              повернути ніпе;
            }
            перерву;
                    випадок "Z":
            якщо (tempalph.indexOf ("2")! = -1) {
                    tempalph = tempalph.replace ("2", "#");
              modchar = '2';
                } else if (tempalph.indexOf ("5")! = -1) {
                    tempalph = tempalph.replace ("5", "#");
              modchar = '5';
                } else {
              повернути ніпе;
            }
            перерву;
          випадок "":
            перерву;
          за замовчуванням:
            повернути ніпе;
          }

      }
        modfrarase + = modchar;
    }

    повернути модуфраз;
  } else {
    // містить деякі інші символи, тому напевно недійсний
    повернути ніпе;
  }
}

функція addColors (кількість) {
  var i = 0;
  для (нехай чару алфавіту) {
    exclass = "." + char;
    newclass = "col" + i;
    if ($ (exclass) .length> 0) {
      $ (виклик) .addClass (новий клас);
    }
    i ++;
    якщо (i == кількість) {
        i = 0;
    } 
  }
}


$ ("# фраза, # набори, # кольори"). on ("клавіша", function () {
    var фраза = $ ("# фраза"). val (). toUpperCase ();
  фраза = getPhrase (фраза, $ ("# набори"). val ());
    $ ("# вихід"). html (фраза);
  addColors ($ ("# кольори"). val ());
})

HTML:

<label> Фраза <input type = "text" id = "фраза" /> </label>
<label> Кольори <input type = "text" id = "color" value = "3" /> </label>
<label> Встановлює <input type = "text" id = "встановлює" value = "1" /> </label>

<div id = "вихід">

</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 {колір: # 8B4513}
.col11 {колір: # 800000}
.col12 {колір: # 00FFFF}
.col13 {колір: # 32CD32}
.col14 {колір: # 191970}
.col15 {color: # 1E90FF}
.col16 {колір: # A0522D}
.col17 {колір: # 808000}
.col18 {колір: # DC143C}
.col19 {колір: # 90EE90}
.col20 {колір: # D2691E}
.col21 {колір: # 48D1CC}
.col22 {колір: # 008000}
.col23 {колір: # 8B008B}
.col24 {колір: # 6495ED}
.col25 {колір: # 800080}
.col26 {колір: # 000080}
.col27 {колір: # DB7093}
.col28 {колір: # 7FFF00}
.col29 {колір: # 00FA9A}
.col30 {колір: # 0000FF}
.col31 {колір: # BC8F8F}
.col32 {color: # A52A2A}
.col33 {color: # 4169E1}
.col34 {color: # FFFF00}
.col35 {колір: # FFA07A}

.rot {display: вбудований блок; перетворення: обертання (0,5 обертання);}
.flip {display: вбудований блок; перетворення: обертанняY (0,5 обертання);}

div {
  сімейство шрифтів: sans-serif;
  розмір шрифту: 3em;
  фоновий колір: # 000;
  підкладка: 10px;
}

Я думаю, що несерйозний претендент повинен бути включений під сумнів відповідно до цього (міні) мета консенсусу.
user202729
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.