フォームバスレター


19

あなたの家に小さな子供がいる場合、泡風呂の手紙に出くわしたかもしれません。これらを湿らせて、タイルやお風呂の側面などの平らな面に貼り付けて、言葉やメッセージを作成できます。

ただし、大文字と小文字のA〜Z、および数字0〜9の36文字しか取得できないため、単語とメッセージの範囲は1セットのみの場合、ある程度制限されますABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789。ただし、いくつかの文字や数字をcして悪用して、他の文字の余分なコピーを作成することができます。

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

したがって、あなたのタスクは、単語またはフレーズ、使用する色の数、およびあなたが持っているセットの数を示す3つのパラメーターを(適切な方法で)取得し、次に単語またはフレーズの表現を出力することです。適切な色のセット。必要に応じて置換を使用します。セットの数を指定して単語またはフレーズを作成できない場合は、代わりに適切な色で「Nope」を出力します。

これらすべてにおいて、最初のパラメーターは単語またはフレーズ、2番目は色の数、3番目は使用可能なセットの数です。

["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]

NOPE -セットには1つのPのみがあり、有効な置換はありません

ノート

  • これが役立つ場合は、デフォルトで1セットに設定できます(デフォルトのパラメーター値1など)が、要求された場合は複数のセットをサポートする必要があります。持っているセットの数は常に正の非ゼロ整数になります。
  • 複数のセットがある場合、それらはすべて同じ方法で色付けされます。Aが最初のセットで赤の場合、2番目のセットでも赤になります。色は特定の呼び出しのすべてのセットにではなく、セットごとに適用されます
  • 1〜36色をサポートする必要があります-1はすべての文字が同じ色であることを意味し、36はそれらがすべて異なることを意味します。色の整数のみがあります。
  • 視覚的に区別できる限り、任意の色を使用できます-ターミナルに出力する場合、前景色と背景の組み合わせを「色」として使用できますが、前景色と背景に同じ色を使用してはいけません
  • 出力では、入力からの文字ではなく、実際に使用する文字を使用する必要があります。たとえば、入力として["willow"、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 Read「持っているセットの数は常に正の非ゼロ整数です。」
mypetlion

1
泡風呂の手紙...すご腕の話をする良い導入されている
アルノー

回答:


1

HTML / JavaScript(jQueryを使用)/ CSS-非競合/非ゴルフ

ボールを転がし、それが不可能ではないことを示すために、ここでは、タスクに素朴なアプローチをとる、ゴルフも競合もしない実装を示します。

最初にtempalph、設定されている数のアルファベットのコピーを結合することにより、可能なすべての文字のストリング()を作成します。次に、フレーズを反復処理して、フレーズの各文字を出力変数に入れ、その文字の最初のインスタンスを空白にしますtempalph。できない場合(文字が存在しない場合)、文字が文字列に残っているもので置き換え可能かどうかを確認します。これも失敗した場合、事前定義の「NOPE」出力を出力します。「NOPE」ケースにヒットしないと仮定すると、出力文字列を返し、ページ上のDIVに入れます。

次に、基本アルファベット文字列をループ処理し、文字が使用されている場合は、適切なCSSクラスを割り当てます。各CSSクラスには、定義済みの色セットがあります。

入力にHTML入力を使用し、それらのキーアップを更新します。

JSFiddle試しください

["BATH", 3, 1]

浴

JS:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

関数getPhrase(phrase、sets){
    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 {
        switch(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';
                } else if(tempalph.indexOf( "2")!= -1){
                    tempalph = tempalph.replace( "2"、 "#");
              modchar = '2';
                } else {
              返さない
            }
            ブレーク;
                    ケース「Z」:
            if(tempalph.indexOf( "2")!= -1){
                    tempalph = tempalph.replace( "2"、 "#");
              modchar = '2';
                } else if(tempalph.indexOf( "5")!= -1){
                    tempalph = tempalph.replace( "5"、 "#");
              modchar = '5';
                } else {
              返さない
            }
            ブレーク;
          ケース "":
            ブレーク;
          デフォルト:
            返さない
          }

      }
        modphrase + = modchar;
    }

    modphraseを返します。
  } else {
    //他の文字が含まれているため、間違いなく無効です
    返さない
  }
}

関数addColors(colcount){
  var i = 0;
  for(let of alphabet of alphabet){
    exclass = "。" + char;
    newclass = "col" + 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();
  phrase = getPhrase(phrase、$( "#sets")。val());
    $( "#output")。html(phrase);
  addColors($( "#colours")。val());
})

HTML:

<label>フレーズ<input type = "text" id = "phrase" /> </ label>
<label>カラー<input type = "text" id = "colours" value = "3" /> </ label>
<label> Sets <input type = "text" id = "sets" value = "1" /> </ label>

<div id = "output">

</ div>

CSS:

.col0 {color:#f00}
.col1 {color:#0f0}
.col2 {color:#00f}
.col3 {色:#66CDAA}
.col4 {color:#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 {color:#0000FF}
.col31 {色:#BC8F8F}
.col32 {色:#A52A2A}
.col33 {色:#4169E1}
.col34 {色:#FFFF00}
.col35 {色:#FFA07A}

.rot {display:inline-block; 変換:rotate(0.5turn);}
.flip {display:inline-block; 変換:rotateY(0.5turn);}

div {
  フォントファミリー:サンセリフ;
  フォントサイズ:3em;
  背景色:#000;
  パディング:10px;
}

この(ミニ)メタコンセンサスごとに、重大ではない候補が問題に含まれるべきだと思います。
user202729
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.