バブルシートに記入する


18

今日は私の学校でのAP試験登録日で、必要な情報のページやページを細かくバブリングしている間に、このチャレンジのアイデアが思いつきました。そのため、文字と数字の文字列を指定して、適切に記入されたバブルチャートを出力します。

ルール:

  • 入力文字列内の各文字について、対応する列のその文字を#または@またはその他の適切な記号に置き換えます(言語で処理できる場合、Unicode文字「full_block」:█は本当に良さそうです)
  • スペースは空白の列で表されます(例を参照)
  • 有効な入力は、大文字、数字、スペースのみで構成される文字列です。
  • 入力の長さは、最小1文字、最大32文字です。
  • 出力は大文字でなければなりません
  • 入力長が最大長の32より短い場合でも、プログラムは残りの空白列を出力する必要があります
  • プログラムは、小文字の入力を大文字の場合と同じように処理する必要はありませんが、可能であればボーナスポイントを処理します。

ボードフォーマット:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
00000000000000000000000000000000
11111111111111111111111111111111
22222222222222222222222222222222
33333333333333333333333333333333
44444444444444444444444444444444
55555555555555555555555555555555
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999

例:

CODE GOLF ->

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
█CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DD█DDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEE█EEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFF█FFFFFFFFFFFFFFFFFFFFFFF
GGGGG█GGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLL█LLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
O█OOOO█OOOOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
00000000000000000000000000000000
11111111111111111111111111111111
22222222222222222222222222222222
33333333333333333333333333333333
44444444444444444444444444444444
55555555555555555555555555555555
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999


ABCDEFGHIJKLMNOPQRSTUVWXYZ012345 ->

@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
B@BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CC@CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEE@EEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFF@FFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGG@GGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHH@HHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIII@IIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJ@JJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKK@KKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLL@LLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMM@MMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNN@NNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOO@OOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPP@PPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQ@QQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRR@RRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSS@SSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTT@TTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUU@UUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVV@VVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWW@WWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXX@XXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYY@YYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZ@ZZZZZZ
00000000000000000000000000@00000
111111111111111111111111111@1111
2222222222222222222222222222@222
33333333333333333333333333333@33
444444444444444444444444444444@4
5555555555555555555555555555555@
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999

ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ->^^^

そしてもちろん、これはなので、最短の回答が勝ちます


7
通常、入力検証は推奨されないため、入力を一致させるだけで[A-Z0-9]{1,32}、それと一致しない入力の動作を許可できます。
ジュゼッペ

1
ASCIIコードで「A」の前に「0」が来るという事実は、とんでもないほど厄介です> :( lol
NL628

「有効な入力は、バブルシートに表示される文字とスペースで構成される文字列になります」が、「大文字、スペース、数字以外の文字、または32文字の制限を超える文字無視する必要があります」、だからどれですか?
KritixiのLithos

1
しかし、最初の文によると、あなたはそれが言う$の入力には表示されません
KritixiのLithos

1
仕様から数字とinnalid文字を削除したので、例からそれらを削除することもできます。
タイタス

回答:


4

、23バイト

mż§?'#|=⁰mR32¤+…"AZ""09

オンラインそれを試してみたり、それを試してみてください空想█文字(ただし、無効:バイト)で!

残念ながら、2つmapのを1 つにマージすることはできませんでした(括弧を使用する場合を除き、コストは24バイトです)。

説明

mż§?'#|=⁰mR32¤+…"AZ""09"  -- expects string as argument, eg. "FOO"
             ¤            -- with the two strings "AZ" "09" ..
               …          -- | fill ranges: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                          -- |              "0123456789"
              +           -- .. and concatenate: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
          m               -- map the following (eg. with 'X')
                          -- | replicate 32 times: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                          -- : ["A…A","B…B",…,"Z…Z","0…0",…"9…9"]
m                         -- map the following (eg. with "F…")
 ż      ⁰                 -- | zipWith (keeping elements of longer list) argument ("FOO")
  §?   =                  -- | | if elements are equal
    '#                    -- | | | then use '#'
      |                   -- | | | else use the first character
                          -- | : ["#FF…F"]
                          -- : ["A…A",…,"#FF…F",…,"O##O…O",…,"9…9"]

4

ルビー、62バイト

->s{[*?A..?Z,*?0..?9].map{|c|(0..31).map{|i|c==s[i]??@:c}*''}}

オンラインでお試しください!

文字列の配列を返します。文字列の結合を破棄し、通常のように文字の2D配列を返すことでさらにゴルフを楽しむことができますが、ここで許可されているかどうかはわかりません。


3

C(gcc)132 126バイト

char*s="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",*_,*a;f(char*x){for(_=s;*_;++_,puts(""))for(a=s;*a;)putchar(x[a++-s]-*_?*_:64);}

オンラインでお試しください!

6バイトを節約してくれたJonathan Frechに感謝します。


puts("")はと同等putchar(10)です。
ジョナサン

++a)putchar((x[a-s]-*_)?*_:64);-> )putchar(x[a++-s]-*_?*_:64);
ジョナサンフレッチ

あなたがルールを少し曲げて喜んでいる場合は、ゴルフもできた641
ジョナサンフレッチ

あなたがそうするなら、putchar電話はゴルフに行くことができますputchar(*_*(*_!=a[x-s]));
ジョナサンフレッチ

通常、私はそのためのルールを曲げても大丈夫だろう...しかし、1は塗りつぶされた長方形や@記号とは非常に異なる獣です。他の変更は便利ですが、更新されます。
ラムダベータ

3

、177バイト

func[s][m: copy[]foreach c a:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[insert/dup r: copy"^/"c 32 append m r]j: 0
foreach c s[j: j + 1 if c <>#" "[m/(index? find a c)/(j): #"@"]]m]

オンラインでお試しください!

より読みやすい:

f: func[s][
    m: copy[]
    a:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    foreach c a[
        insert/dup r: copy "^/" c 32
        append m r
    ]
    j: 0
    foreach c s[
        j: j + 1
        if c <>#" "[m/(index? find a c)/(j): #"@"]
    ]
    m
]

3

、21バイト

E⁺α⭆…αχκ⭆…◨θφ³²⎇⁼ιλ#ι

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

  α  α                  Uppercase alphabet predefined variable
      χ                 Predefined variable 10
    …                   Chop to length
   ⭆                    Map over characters and join
       κ                Current index
 ⁺                      Concatenate
E                       Map over characters into array
           θ            Input string
            φ           Predefined variable 1000
          ◨             Right pad to length
             ³²         Literal 32
         …              Chop to length
        ⭆               Map over characters and join
                 ι  ι   Current outer character
                  λ     Current inner character
                ⁼       Equals
                   #    Literal `#`
               ⎇        Ternary
                        Implicitly print each result on its own line

入力検証付きの以前のバージョン、34 32バイト。編集:@ASCIIのみのおかげで2バイトを節約しました。

≔⁺α⭆…αχκαEα⭆…◨Φθ∨⁼ι №αιφ³²⎇⁼ιλ#ι

オンラインでお試しください!リンクは、コードの詳細バージョンです。


:/あなたは終わりに近い括弧が欠けているように見える
ASCIIのみ

これは機能しているようです。(ヴォルフラムはStringReplace)サイドノートでは、交換する組み込みは本当に便利、右だろう
ASCIIのみ

気にしないで、私は何をしていたのかわかりません。27バイト -あなたが必要としないCast
ASCIIのみ

また、re:あなたが以前に尋ねていた任意の文字のパッド:それは組み込みとして追加するのに十分有用だと思いますか?または2文字のビルトインとして?
ASCIIのみ



3

ゼリー 18  17バイト

ØA;ØDWẋ32ɓ,€⁶y"ZY

スペース文字を使用します。1バイトのコストで#replace with を使用するには”#

オンラインでお試しください!

どうやって?

ØA;ØDWẋ32ɓ,€⁶y"ZY - Main Link: list of characters, S   e.g.  ['S','P','A','M']
ØA                - upper-case alphabet characters           ['A','B',...,'Z']
   ØD             - digit characters                         ['0','1',...,'9']
  ;               - concatenate                              ['A','B',...,'Z','0','1',...,'9']
     W            - wrap in a list                           [['A','B',...,'Z','0','1',...,'9']]
      ẋ32         - repeat 32 times                          [['A','B',...,'Z','0','1',...,'9'],...,['A','B',...,'Z','0','1',...,'9']]
         ɓ        - start a new dyadic chain with that on the right
            ⁶     - space character                          ' '
          ,€      - pair €ach of S with a space              [['S',' '],['P',' '],['A',' '],['M',' ']]
              "   - zip with:
             y    -   translate (replace 'S' with ' ' in 1st, 'P' with ' ' in 2nd, ...) -- Note: zip is a zip-longest, so trailing lists remain
                Z  - transpose
                 Y - join with line-feeds
                   - implicit print

1バイト節約できます。
エリックアウトゴルファー

ウェルプ、私も³Ḣ,⁶yØA;ØD¤µ32СZY18歳になりましたが、それも改善できると思います!けれども外出...
ジョナサン・アラン

したがって、明らかに、それは私が言及しているバイトではありません。:)もっと頑張ってください...
エリックアウトゴルファー

アメージング私は携帯電話でゴルフに管理さ17バイト
ジョナサン・アラン

私は実際にこれでしたが、おめでとうございます!
エリックアウトゴルファー

2

C ++ 14、319バイト 237

最悪のCodeGolf言語でこれを行うのはこれが初めてです:P

char c;string k="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",s;int main(){map<char,vc>g;g[' ']=vc(32,' ');for(char c:k)g[c]=vc(32,c);getline(cin,s);for(int i=0;i<s.length();i++)g[s[i]][i]='@';for(char d:k){for(char x:g[d])cout<<x;cout<<'\n';}}

オンラインでお試しください!


質問:ヘッダーを含める必要がありますか?
NL628

コードを実行する必要がある場合は、答えに含める必要があります。とは言っても、ほとんどすべての空白を削除しても、この回答は引き続き有効です。

これをmain()ではなく、パラメーターを使用した関数として書き換えることはできますか?
NL628

@ NL628はい、できます。詳細については、C ++でのゴルフのヒントを参照してください。編集:C ++へのリンクの切り替え
ジュゼッペ

1
COBOL誰か?コードを1行も書いたことはありませんが、コードゴルフにCOBOLを使用することは興味深い挑戦かもしれません。
ハンスマーティンモスナー

2

Node.js、85バイト

@DanielIndieによって提案されたNode.jsへの移植

f=(s,x=544,c=Buffer([48+x/32%43]))=>x<1696?(s[x&31]==c?'@':c)+[`
`[++x&31]]+f(s,x):''

オンラインでお試しください!


JavaScript(ES6)、103 98バイト

f=(s,x=544,n=x>>5,c=String.fromCharCode(48+n%43))=>n<53?(s[x&31]==c?'@':c)+[`
`[++x&31]]+f(s,x):''

オンラインでお試しください!



@DanielIndieありがとう!追加されました。(私たちは本当にこれを必要としません+""か?)
アーナルド

Pしかし、はい、あなたが実際にそれを必要とする:)いけない:私たちは、私はそれについて考えてはいけないので、変換したりしないように必要がある場合は、私が知っていることはありません
DanielIndie

@DanielIndie Ah、整数に強制されているためx/32、さらに2バイトを節約するために使用できるようにBufferなりました。
アーナルド

f=(s,x=561,c=Buffer([48+x/33%43]))=>x<1749?(s[x++%33]==c?'@':x%33?c:`\n`)+f(s,x):''
-l4m2


2

Haskell、86バイト

より優れたアプローチ(およびバイト数の削減)については、Laikoniのソリューションを参照してください!

f x=(x#).(<$[1..32])<$>['A'..'Z']++['0'..'9']
(a:b)#(u:v)=last(u:['#'|a==u]):b#v
_#w=w

オンラインでお試しください!

別の方法として、同じバイト数に対して次を使用できます。

(a:b)#(u:v)|a==u='#':b#v|0<3=u:b#v

オンラインでお試しください!

説明/ゴルフなし

演算子(#)は非常に似てzipWithいますが、関数はハードコードされています。#2つの文字が等しい場合に使用し、そうでない場合は2番目の文字を保持します。

(a:b) # (u:v)
   | a == u    = '#' : b # v
   | otherwise =  u  : b # v

最初のリストが使い果たされた場合、2番目のリストの残りの要素を追加するだけです。

_ # w = w

そのヘルパーを使用して、stringを生成し、"A..Z0..9"各要素を32回複製し、入力を各文字列ungolfedで圧縮するだけです。

f x = map ((x#) . replicate 32) (['A'..'Z'] ++ ['0'..'9'])


@Laikoni:ただ1バイト少ないのは残念ですが、これはの賢い使い方ですmax。私のソリューションとは非常に異なるので、あなたはそれをあなた自身のソリューションとして投稿すべきだと思います。
ბიმო

74バイトバージョンを投稿しました。
ライコニ

2

Haskell、74バイト

f x=[do a<-take 32$x++cycle" ";max[c]['~'|a==c]|c<-['A'..'Z']++['0'..'9']]

オンラインでお試しください!入力文字列にxは、32の長さまでスペースが埋め込まれますtake 32$x++cycle" "。各文字についてcからAZして0まで9、私たちは文字を見てaパディングされた入力文字列からとすることによって、それらを交換する~ときac同等とであるcそう。これはによって達成されるmax[c]['~'|a==c]などしている、とする場合と。これにより、charではなくシングルトン文字列が生成されるため、シングルトン文字列を1つの文字列に連結する-表記が使用されます。max "A" "~" = "~"a = c = 'A'max "A" "" = "A"c = 'A'a = 'B'do

BMOのHaskellソリューションに基づいています


2

Python 2、138バイト

大文字と小文字の両方の文字をサポートし、スペース用に空の列を残します。

def f(s):
 s=s.upper()
 for j in"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789":print"".join(j if(len(s)<=i)or(s[i]!=j)else'@'for i in range(32))

ボーナスがそれだけの価値がない場合は、125バイトで大文字入力のみをサポートします。

def f(s):
 for j in"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789":print"".join(j if(len(s)<=i)or(s[i]!=j)else'@'for i in range(32))

2

スタックス、15 バイト

╛dδÑ-═E↑\≈Fà±AG

実行してデバッグする

'#'塗りつぶされたバブルを示すために使用します。

開梱されていない、コメントされていない、これはこのように見えます。

32(     right-pad or truncate to 32
{       begin block for mapping
  VAVd+ "A..Z0..9"
  s'#+  move input character to top of stack and append "#". e.g. "C#"
  |t    translate; replace the first character with the second in string
m       perform map using block
Mm      transpose array of arrays and output each line

これを実行する


1

Pyth、23 20バイト

j.Tm:s+r1GUTdN.[Qd32

ここで試してみてください

説明

j.Tm:s+r1GUTdN.[Qd32
              .[Qd32      Pad the input to 32 characters.
   m                      For each character...
     s+r1GUT              ... get the string "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"...
    :       dN            ... with the character replaced by a '"'.
j.T                       Transpose the lines and print them all.

1

APL + WIN、56バイト

入力文字列を要求し、#文字を識別子として使用します。

m←⍉32 36⍴⎕av[(65+⍳26),48+⍳10]⋄((,m[;1]∘.=32↑⎕)/,m)←'#'⋄m

説明:

m←⍉32 36⍴⎕av[(65+⍳26),48+⍳10] create the table

32↑⎕ pad the input string to 32 characters with spaces

(,m[;1]∘.=32↑⎕) use outer product with = to identify characters in table

((,m[;1]∘.=32↑⎕)/,m)←'#' replace characters with #

m display table

⋄ statement separator

1

C(gcc)、124バイト

f(s,b,x,y)char*s,b[33];{sprintf(b,"%-32.32s",s);for(x=0;++x<36;puts(""))for(y=x+21+43*(x<27),s=b;*s;putchar(*s++==y?35:y));}

オンラインでお試しください!

ハードコードされた配列の代わりに、代わりに検索関数に置き換えました。幸いなことに、ASCII文字セットには連続したアルファベットと数値の範囲があります(EBCDICをご覧になっています!)同様に、出力を正確に32文字に保つようにしましたsprintf()。これがタスクの要件でない場合、関数は97バイトになります。

f(s,i,x,y)char*s,*i;{for(x=0;++x<36;puts(""))for(y=x+21+43*(x<27),i=s;*i;putchar(*i++==y?35:y));}

オンラインでお試しください!



1

CJam、31バイト

q32Se]{'[,65>A,s+S+_@#St);}%zN*

オンラインでお試しください!「穴」文字としてスペースを使用します。


末尾の空白が許可されている場合、これは29バイトで機能します

q32Se]{'[,65>A,s+S+_@#St}%zN*

オンラインでお試しください!


代わりにUnicodeフルブロック()を使用する34バイトのバリエーションがあります。

q32Se]{'[,65>A,s+S+_@#'█t);}%zN*

オンラインでお試しください!


説明

q                                Input.
    e]                           Pad to a length of
 32                                32
                                 with
   S                               spaces.
      {                   }%     For each character:
                                   Get the uppercase alphabet by
            >                        dropping the first
          65                           65
                                     elements of
         ,                             the range of characters below
       '[                                '['.
                +                  Append
               s                     the string version
              ,                        of the range of numbers below
             A                           10.
                  +                Append
                 S                   a space.
                     #             Find the index of
                    @                the character.
                       t           Set this index to
                      S              a space
                   _               in the original array.
                        );         Drop the space at the end.
                                   Yield this modified array.
                                 End for. The result is an array of arrays of characters.
                            z    Transpose this array, turning rows into columns.
                             N*  Join the result on newlines.


1

05AB1E、19バイト

RтúR32£vžKuÙyð:})ø»

オンラインでお試しください!

説明

R                     # reverse
 тú                   # prepend 100 zeroes
   R                  # reverse
    32£        }      # take the first 32 characters
       v              # for each character
        žK            # push a string of [a-zA-Z0-9]
          uÙ          # upper case and remove duplicates
            yð:       # replace current character with space
                )ø    # transpose
                  »   # join by newline

a[b]あなたがここでそれを望むように機能しません、それは:Pですか?
魔法のタコ

@MagicOctopusUrn:残念ながらそうではありません。それも私の最初の考えでしたが、この場合、モジュラーインデックスは私たちの友人ではありません:P
Emigna

1

MATL、21バイト

1Y24Y2vjO33(32:)y=~*c

マーカー文字としてスペースを使用します。

オンラインでお試しください!

説明

1Y2     % Push 'AB...YZ'
4Y2     % Push '01...89'
v       % Concatenate into a 36×1 column vector of chars
j       % Push unevaluated input: string of length n, or equivalently 1×n
        % row vector of chars
O33(    % Write 0 at position 33. This automatically writes a 0 at postions
        % n+1, n+2, ..., 32 too
32:)    % Keep only the first 32 entries: gives a 1×32 row vector
y       % Duplicate from below: pushes a copy of the 36 ×1 column vector
=~      % Test for non-equal entries, with broadcast. Gives a 33×32 matrix
        % containing 0 for matching entries, and 1 otherwise
*       % Multiply this matrix by the 1×32 row vector, with broadcast. This
        % changes each 1 into the corresponding character in the input
c       % Convert to char. Implicitly display. Char 0 is displayed as space

1

Common Lisp、150バイト

(setq s(format nil"~32a"(read-line)))(map nil(lambda(i)(map nil(lambda(j)(princ(if(eq i j)#\# i)))s)(princ"
"))"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

オンラインでお試しください!

説明

;; pad input to 32 spaces on the right
(setq s(format nil"~32a"(read-line)))
;; for each character in bubble sheet, for each character in input:
;; if characters are equal print "#"
;; else print bubble sheet character
(map nil(lambda(i)(map nil(lambda(j)(princ(if(eq i j)#\# i)))s)(princ"
"))"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

1

Java 10、120 118 117バイト

s->{var r="";for(char c=65,i;c<91&c!=58;r+="\n",c+=c<90?1:-42)for(i=0;i<32;i++)r+=i<s.length&&s[i]==c?35:c;return r;}

オンラインで試してみてください(TIO 9608では、35視認性を高めるために(ではなく)「█」を使用しました)。

説明:

s->{                   // Method with character-array parameter and String return-type
  var r="";            //  Result-String, starting empty
  for(char c=65,i;     //  Start character `c` at 'A'
      c<91&c!=58       //  Loop as long as `c` is 'Z' or smaller, and is not '9'
      ;                //    After every iteration:
       r+="\n",        //     Append a new-line to the result-String
       c+=c<90?        //     If `c` is not 'Z' yet
           1           //      Go to the next character ASCII-value-wise
          :            //     Else:
           -42)        //      Change the 'Z' to '0'
    for(i=0;i<32;i++)  //    Inner loop `i` in the range [0,32)
      r+=i<s.length    //     If we're not at the end of the input array yet,
         &&s[i]==c?    //     and the characters in the column and array are the same
          35           //      Append the filler-character '#'
         :             //     Else:
          c;           //      Append the current character instead
  return r;}           //  Return the result-String

1

網膜、64バイト

$
36* 
L`.{36}
.
36*@$&¶
Y`@`Ld
(.)(.*)\1
@$2
N$`\S
$.%`
L`.{32}

オンラインでお試しください!


$
36* 
L`.{36}

入力文字列の右側に36文字までスペースを埋めます

.
36*@$&¶
Y`@`Ld

次に、各文字をそれぞれの行に配置し、そのABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789前に追加します。

(.)(.*)\1
@$2

同じ行の同じ文字のペアに一致しABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ます。その行の文字がの1つに一致する場合にのみ1つ存在します。最初をで置き換え、@2番目を削除します。

N$`\S
$.%`

一致しない行はスペースのみの行なので、非スペース文字は36×36の正方形ブロックです。転置してください。

L`.{32}

各行の最初の32文字のみを保持する


1

Tcl153 145バイト

-8バイトをありがとう@sergiol

lmap i [split ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ""] {puts [join [lmap j [split [format %-32s [join $argv ""]] ""] {expr {$i==$j?"#":$i}}] ""]}

オンラインでお試しください!

説明

# for i in list of choices
lmap i [split ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ""] {
    # print string of
    puts [join
        # list of
        [lmap j
             # for each character in first argument padded to 32 characters
             [split [format %-32s [join $argv ""]] ""]
             # return "#" if current choice and current character are equal, else current choice
             {expr {$i==$j?"#":$i}}
        ]
        ""
    ]
}


@sergiol:| はい、そうです。146
ASCIIのみ


1

SNOBOL4(CSNOBOL4)155 150バイト

	I =INPUT
	U =&UCASE '0123456789'
N	U LEN(1) . K REM . U	:F(END)
	O =DUPL(K,32)
	X =
S	I LEN(X) @X K	:F(O)
	O POS(X) K =' '	:S(S)
O	OUTPUT =O	:(N)
END

オンラインでお試しください!

説明:

	I =INPUT			;* read input
	U =&UCASE '0123456789'		;* U = uppercase concat digits
N	U LEN(1) . K REM . U	:F(END)	;* while U not empty, pop first letter as K
	O =DUPL(K,32)			;* dup K 32 times
	X =				;* set position to 0
S	I LEN(X) @X K	:F(O)		;* find the next occurrence of K and save (index - 1) as X
	O POS(X) K =' '	:S(S)		;* replace the X'th occurrence of K with space. If that's before character 32, goto S, else proceed to next line
O	OUTPUT =O	:(N)		;* output the string and goto N
END

1

プロローグ(SWI) 235 229 228 222 214 198 173 167 165バイト

@Cows quackのおかげで-6バイト、@ 0のおかげで-6バイト'

X*[H|T]:-(H=X->write(#);writef("%n",[X])),X*T;nl.
_+[].
X+[H|T]:-H*X,X+T.
?-read(X),swritef(Y,"%32l",[X]),string_codes(Y,Z),Z+`ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`.

オンラインでお試しください!

説明

% if head = bubble char, write "#", else write bubble char, then while tail is non-empty, recurse.
% if tail is empty then print newline
X*[H|T]:-(H=X->write(#);writef("%n",[X])),X*T;nl.
% if list is empty, then do nothing. this prevents t from being called with invalid X
_+[].
% call t, then recurse for each char in list
X+[H|T]:-H*X,X+T.
% read, pad input to 32 chars, and convert input to list
?-read(X),swritef(Y,"%32l",[X]),string_codes(Y,Z),Z+`ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`.


0

オクターブ、61バイト

@(s)[((a=[30:55 13:22]'*~~(o=1:32)).*(a+35~=[s o](o)))+35 '']

オンラインでお試しください!

この関数は次のように機能します。

@(s)[                                                     ''] %Anonymous function, taking string, outputting character array   
         [30:55 13:22]'                                       %Creates the board alphabet ('A':'Z' '0':'9']) but minus 35 (value of '#')
                       *~~(o=1:32)                            %Matrix multiplication by an array of 32 1's to form the 2D board. Saves 1:32 for later.
      (a=                         )                           %Saves the board mimus 32 to a for use later.
                                            [s o](o)          %Ensures the input is 32 characters long. Missing chars replaced by 1:32 (not in board)
                                     (a+35~=        )         %Compares against board (a+35 as a=board-35). Makes 2D array where matches = 0, others = 1. 
     (                             .*                )+35     %Element=wise multiplication, forcing matches to 0. Then add 35 resulting in board with #'s  

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.