거품 목욕 편지


19

집에 작은 아이가 있다면 거품 목욕 편지를 접했을 수도 있습니다. 이것들은 타일과 욕조와 같은 평평한 표면에 젖어 붙어서 단어와 메시지를 만들 수 있습니다.

단 하나의 세트 만 있으면 단어와 메시지의 범위가 다소 제한됩니다. 대문자 AZ와 숫자 0-9 : 만 36 자뿐입니다 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]

아니 -세트에 1P 만 있고 유효한 대체물이 없습니다.

노트

  • 도움이되는 경우 기본값을 1 세트로 설정할 수 있지만 (예 : 기본 매개 변수 값 1) 요청 된 경우 여러 세트를 지원해야합니다. 보유한 세트의 수는 항상 0이 아닌 양의 정수입니다.
  • 여러 세트가있는 경우 모두 같은 방식으로 색상이 지정됩니다. 첫 번째 세트에서 A가 빨간색이면 두 번째 세트에서도 빨간색이됩니다. 주어진 호출의 모든 세트가 아닌 세트당 색상이 적용됩니다.
  • 1-36 개의 색상을 지원해야합니다.-1은 모든 문자가 동일한 색상임을 의미하고 36은 모두 고유 한 색상을 의미합니다. 정수 색상 만 있습니다.
  • 시각적으로 구별되는 한 모든 색상을 사용할 수 있습니다. 터미널로 출력하는 경우 전경과 배경의 조합을 "컬러"로 사용할 수 있지만 전경과 배경에 동일한 색상을 사용해서는 안됩니다
  • 출력은 입력의 문자가 아니라 실제로 사용하는 문자를 사용해야합니다. 예를 들어, 입력으로 ""버들 ", 1, 1]이 있으면 WIL7OM7과 M을 180도 회전하여 출력 할 수 있습니다
  • 먼저 올바른 글자를 사용해야합니다. 대신 MI7LOW[ "버들", 1, 1]에 대해 올바르지 않습니다.
  • : 당신은 주어진 문자에 대한 대체를 사용할 수 있습니다 SO5SO2로모그래퍼 2 "SOS"모두 유효 이성을 상실
  • 동일한 입력에 대해 코드를 여러 번 호출해도 동일한 출력이 생성되지 않아도됩니다.
  • 출력은 대문자 여야하지만 입력은 대소 문자를 혼합하여 사용할 수 있습니다
  • 분명해야하지만 공간에는 색상이 없습니다.

규칙

  • 이것은 코드 골프이지만 세미 그래픽 출력이 있습니다 (터미널에서 텍스트를 뒤집을 수 있는지 확실하지 않지만 Pyth에 내장되어 있는지 확인하고 싶습니다)
  • 표준 허점 적용
  • 기능에 대한 보너스는 없지만 흥미로운 답변에 투표하십시오.
  • 답변에 출력의 스크린 샷을 포함하십시오

관련 도전


1
세트에 대해 "NOPE"를 출력 할 수 없으면 어떻게합니까?
Rɪᴋᴇʀ

@Riker 세트는 36 개의 주어진 문자를 포함합니다. 언제 출력이 불가능 NOPE합니까?
mypetlion

@ 세트가 없을 때 @mypetlion ...
Rɪᴋᴇʀ

@Riker Read "당신이 가진 세트의 수는 항상 0이 아닌 양의 정수입니다."
mypetlion

1
거품 목욕 편지는 leet 말에 좋은 소개입니다 ...
Arnauld

답변:


1

HTML / 자바 스크립트 (jQuery 포함) / CSS-비경쟁 / 골프가 아님

공을 굴려서 불가능하지 않다는 것을 보여주기 위해, 목표에 순진한 접근 방식을 취하는 골프가 아닌 경쟁이 아닌 구현이 있습니다.

먼저 tempalph세트가있는만큼의 알파벳 사본을 결합 하여 가능한 모든 문자 ( ) 의 문자열을 만듭니다 . 그런 다음 구를 반복하여 구의 각 문자를 출력 변수에 넣고에서 해당 문자의 첫 번째 인스턴스를 비 웁니다 tempalph. 문자가 존재하지 않으면 문자가 문자열에 남아있는 문자로 대체 가능한지 확인합니다. 또한 실패하면 미리 정의 된 "NOPE"출력을 출력합니다. "NOPE"케이스에 맞지 않는다고 가정하면 출력 문자열을 리턴하여 페이지의 DIV에 넣습니다.

그런 다음 기본 알파벳 문자열을 반복하고 문자가 사용 된 경우 사전 정의 된 색상 세트가있는 적절한 CSS 클래스를 지정합니다.

입력을 위해 HTML 입력을 사용하고 입력시 키업을 업데이트합니다.

JSFiddle 에서 사용해보십시오

["BATH", 3, 1]:

목욕

JS :

var 알파벳 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

getPhrase 함수 (구문, 세트) {
    var modphrase = "";
  var nope = 'NOPE';
  var re = / ^ [A-Z0-9] + $ /;
  if (re.test (phrase)) {
    // 유효 할 수 있음-사용 가능한 문자가 충분한 지 확인해야합니다.
    //이 시점에서 어떤 문자가 필요한지 구체적으로 살펴 봐야합니다.

    var tempalph = "";
    for (var i = 0; i '+ char +' ';
        if (tempalph.indexOf (char)! = -1) {
        tempalph = tempalph.replace (char, "#");
      } else {
        스위치 (char) {
            사례 "E":
            if (tempalph.indexOf ( "3")! = -1) {
                    tempalph = tempalph.replace ( "3", "#");
              modchar = '3';
                } else {
                돌아올 수 없다.
            }
            단절;
          사례 "I":
            if (tempalph.indexOf ( "1")! = -1) {
                    tempalph = tempalph.replace ( "1", "#");
              modchar = '1';
                } else {
              돌아올 수 없다.
            }
            단절;
          사례 "L":
            if (tempalph.indexOf ( "7")! = -1) {
                    tempalph = tempalph.replace ( "7", "#");
              modchar = '7';
                } else {
              돌아올 수 없다.
            }
            단절;
          "M"사례 :
            if (tempalph.indexOf ( "W")! = -1) {
                    tempalph = tempalph.replace ( "W", "#");
              modchar = 'W';
                } else {
              돌아올 수 없다.
            }
            단절;
          사례 "O":
            if (tempalph.indexOf ( "0")! = -1) {
                    tempalph = tempalph.replace ( "0", "#");
              modchar = '0';
                } else {
              돌아올 수 없다.
            }
            단절;
          사례 "W":
            if (tempalph.indexOf ( "M")! = -1) {
                    tempalph = tempalph.replace ( "M", "#");
              modchar = 'M';
                } else {
              돌아올 수 없다.
            }
            단절;
          사례 "0":
            if (tempalph.indexOf ( "O")! = -1) {
                    tempalph = tempalph.replace ( "O", "#");
              modchar = 'O';
                } else {
              돌아올 수 없다.
            }
            단절;
          사례 "6":
            if (tempalph.indexOf ( "9")! = -1) {
                    tempalph = tempalph.replace ( "9", "#");
              modchar = '9';
                } else {
              돌아올 수 없다.
            }
            단절;
          사례 "7":
            if (tempalph.indexOf ( "L")! = -1) {
                    tempalph = tempalph.replace ( "L", "#");
              modchar = 'L';
                } else {
              돌아올 수 없다.
            }
            단절;
          사례 "9":
            if (tempalph.indexOf ( "6")! = -1) {
                    tempalph = tempalph.replace ( "6", "#");
              modchar = '6';
                } else {
              돌아올 수 없다.
            }
            단절;

          사례 "S":
            if (tempalph.indexOf ( "5")! = -1) {
                    tempalph = tempalph.replace ( "5", "#");
              modchar = '5';
                } 그렇지 않으면 (tempalph.indexOf ( "2")! = -1) {
                    tempalph = tempalph.replace ( "2", "#");
              modchar = '2';
                } else {
              돌아올 수 없다.
            }
            단절;
                    사례 "Z":
            if (tempalph.indexOf ( "2")! = -1) {
                    tempalph = tempalph.replace ( "2", "#");
              modchar = '2';
                } 그렇지 않으면 (tempalph.indexOf ( "5")! = -1) {
                    tempalph = tempalph.replace ( "5", "#");
              modchar = '5';
                } else {
              돌아올 수 없다.
            }
            단절;
          사례 "":
            단절;
          기본:
            돌아올 수 없다.
          }

      }
        모드 프레이즈 + = modchar;
    }

    리턴 모드 프레이즈;
  } else {
    // 다른 문자가 포함되어 있으므로 유효하지 않습니다.
    돌아올 수 없다.
  }
}

addColors (colcount) 함수 {
  var i = 0;
  (알파벳 문자) {
    exclass = "."+ char;
    newclass = "콜"+ i;
    if ($ (exclass) .length> 0) {
      $ (exclass) .addClass (newclass);
    }
    i ++;
    if (i == colcount) {
        i = 0;
    } 
  }
}


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

HTML :

<label> 문구 <input type = "text"id = "phrase"/> </ label>
<label> 색상 <input type = "text"id = "colours"value = "3"/> </ label>
<label> 세트 <input type = "text"id = "sets"value = "1"/> </ label>

<div id = "output">

</ div>

CSS :

.col0 {색상 : # f00}
.col1 {색상 : # 0f0}
.col2 {색상 : # 00f}
.col3 {색상 : # 66CDAA}
.col4 {색상 : # EE82EE}
.col5 {색상 : # 7FFFD4}
.col6 {색상 : # 7FFFD4}
.col7 {색상 : #FFDEAD}
.col8 {색상 : # D8BFD8}
.col9 {색상 : # FF6347}
.col10 {색상 : # 8B4513}
.col11 {색상 : # 800000}
.col12 {색상 : # 00FFFF}
.col13 {색상 : # 32CD32}
.col14 {색상 : # 191970}
.col15 {색상 : # 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 {색상 : # A52A2A}
.col33 {색상 : # 4169E1}
.col34 {색상 : # FFFF00}
.col35 {색상 : # FFA07A}

.rot {표시 : 인라인 블록; 변환 : 회전 (0.5 회전);}
.flip {표시 : 인라인 블록; 변환 : rotateY (0.5turn);}

div {
  폰트 패밀리 : sans-serif;
  글꼴 크기 : 3em;
  배경색 : # 000;
  패딩 : 10px;
}

(미니) 메타 합의에 따라 심각하지 않은 경쟁자가 질문에 포함되어야한다고 생각합니다 .
user202729
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.