Isi Lembar Gelembung saya

18

Hari ini adalah hari pendaftaran ujian AP di sekolah saya, dan sementara saya dengan teliti menggelegak di halaman dan halaman informasi yang diperlukan, ide untuk tantangan ini memukul saya. Jadi, mengingat serangkaian huruf dan angka, menampilkan bagan gelembung yang diisi dengan tepat.

Aturan:

  • Untuk setiap karakter dalam string input, ganti karakter itu di kolom yang sesuai dengan #atau @atau simbol masuk akal lainnya (jika bahasa Anda dapat mengatasinya, karakter Unicode 'full_block': █ terlihat sangat bagus)
  • Ruang diwakili oleh kolom kosong (lihat contoh)
  • Input yang valid akan berupa string yang hanya terdiri dari huruf besar, angka numerik, dan spasi.
  • Input akan panjang dengan minimal 1, dan maksimal 32 karakter.
  • Keluaran harus UPPERCASE
  • Jika panjang input kurang dari panjang maksimum 32, program Anda masih harus menampilkan kolom kosong yang tersisa
  • Program Anda tidak harus menangani input huruf kecil sama seperti jika huruf besar, tetapi poin bonus jika bisa.

Format Papan:

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

Contoh:

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 ->^^^

Dan tentu saja, ini , jadi jawaban tersingkat menang

X1M4L
sumber
7
Validasi input umumnya tidak disarankan, sehingga Anda bisa saja memiliki kecocokan input [A-Z0-9]{1,32}dan memungkinkan perilaku apa pun untuk input yang tidak cocok dengan itu.
Giuseppe
1
Betapa menjengkelkannya fakta bahwa '0' muncul sebelum 'A' dalam kode ASCII> :( lol
NL628
"Input yang valid akan berupa string yang terdiri dari karakter yang muncul pada lembar gelembung serta spasi" tetapi Anda juga menyatakan "Karakter apa pun selain huruf kapital, spasi, dan angka numerik, atau di atas batas 32 karakter harus diabaikan " , jadi yang mana itu?
Kritixi Lithos
1
Tetapi menurut pernyataan pertama, Anda mengatakan bahwa $tidak akan muncul dalam input
Kritixi Lithos
1
Sekarang setelah Anda menghapus angka dan karakter yang tidak valid dari spesifikasi, Anda mungkin ingin juga menghapusnya dari contoh.
Titus

Jawaban:

4

Sekam , 23 byte

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

Cobalah online atau coba dengan karakter fancy mewah (tetapi bytecount tidak valid)!

Sayangnya saya tidak dapat menggabungkan keduanya mapmenjadi satu (kecuali dengan menggunakan tanda kurung, seharga 24 byte) ..

Penjelasan

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"]
ბიმო
sumber
4

Ruby , 62 byte

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

Cobalah online!

Mengembalikan berbagai string. Bisa bermain golf lebih lanjut dengan membuang string yang bergabung dan mengembalikan array karakter 2D seperti biasanya, tapi saya tidak yakin apakah itu diperbolehkan di sini.

Kirill L.
sumber
3

C (gcc) , 132 126 byte

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

Cobalah online!

Terima kasih kepada Jonathan Frech karena telah menghemat 6 byte.

LambdaBeta
sumber
puts("")setara dengan putchar(10).
Jonathan Frech
++a)putchar((x[a-s]-*_)?*_:64);-> )putchar(x[a++-s]-*_?*_:64);.
Jonathan Frech
Jika Anda bersedia untuk melanggar aturan sedikit, Anda juga bisa golf 64untuk 1.
Jonathan Frech
Jika Anda melakukannya, putcharpanggilan itu dapat digunakan untuk golf putchar(*_*(*_!=a[x-s]));.
Jonathan Frech
Biasanya saya akan baik-baik saja dengan membengkokkan aturan untuk itu ... tapi 1 adalah binatang yang sangat berbeda dari persegi panjang yang diisi atau tanda @. Perubahan lainnya bermanfaat - akan diperbarui.
LambdaBeta
3

Merah , 177 byte

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]

Cobalah online!

Lebih mudah dibaca:

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
]
Galen Ivanov
sumber
3

Arang , 21 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

  α  α                  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

Versi sebelumnya dengan validasi input, 34 32 byte. Sunting: disimpan 2 byte berkat hanya @ ASCII.

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode.

Neil
sumber
: / Anda tampaknya melewatkan paren dekat di akhir
ASCII
Ini sepertinya berfungsi. (Wolfram StringReplace) Sebagai catatan, pengganti bawaan akan sangat praktis
hanya ASCII
Sudahlah, saya tidak tahu apa yang saya lakukan. 27 byte - Anda tidak perluCast
ASCII-saja
Juga, ulang: buku catatan dengan karakter sewenang-wenang yang Anda tanyakan sebelumnya: apakah Anda pikir itu akan cukup berguna untuk ditambahkan sebagai builtin? atau mungkin sebagai builtin dua karakter?
ASCII
23
ASCII
3

R , 104 byte

function(S,o=""){for(i in 1:32)o=paste0(o,`[<-`(x<-c(LETTERS,1:9),x==substr(S,i,i),"@"))
cat(o,sep="
")}

Cobalah online!

Giuseppe
sumber
3

Jelly ,  18  17 byte

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

Menggunakan karakter spasi. Untuk menggunakan #ganti dengan ”#biaya satu byte.

Cobalah online!

Bagaimana?

Ø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
Jonathan Allan
sumber
Saya dapat menyimpan satu byte.
Erik the Outgolfer
Nah, saya juga mendapat ³Ḣ,⁶yØA;ØD¤µ32СZY18 yang saya rasa mungkin juga bisa diperbaiki! Akan keluar ...
Jonathan Allan
Jadi, jelas, itu bukan byte yang saya maksud. :) Berusaha lebih keras ...
Erik the Outgolfer
Luar biasa saya berhasil bermain golf di ponsel 17 byte
Jonathan Allan
Punyaku sebenarnya ini , tapi selamat!
Erik the Outgolfer
2

C ++ 14, 319 byte 237

Ini adalah pertama kalinya saya melakukan ini, dalam bahasa CodeGolf yang paling buruk: 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';}}

Cobalah secara Online!

NL628
sumber
Pertanyaan: Apakah saya perlu memasukkan tajuk?
NL628
Jika diperlukan untuk menjalankan kode, itu harus ada dalam jawaban Anda. Yang mengatakan, Anda dapat menghapus hampir semua spasi putih dan memiliki jawaban ini masih berfungsi.
Bisakah saya menulis ulang ini sebagai fungsi dengan parameter, bukan main ()?
NL628
@ NL628 ya Anda bisa. Lihat kiat untuk bermain golf di C ++ untuk bantuan lebih lanjut. EDIT: beralih tautan ke C ++
Giuseppe
1
COBOL siapa saja? Saya tidak pernah menulis sederet kode di dalamnya, tetapi menggunakan COBOL untuk kode golf mungkin menjadi tantangan yang menarik.
Hans-Martin Mosner
2

Node.js, 85 byte

Port to Node.js disarankan oleh @DanielIndie

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

Cobalah online!


JavaScript (ES6), 103 98 byte

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):''

Cobalah online!

Arnauld
sumber
90 byte bagaimana dengan ini?
DanielIndie
@DanielIndie Terima kasih! Ditambahkan. (Kita tidak benar-benar membutuhkan ini +"", kan?)
Arnauld
Saya tidak pernah tahu apakah kita perlu mengonversi atau tidak jadi saya tidak memikirkannya: P tapi ya, Anda sebenarnya tidak membutuhkannya :)
DanielIndie
@DanielIndie Ah, sekarang kita bisa menggunakan x/32untuk menyimpan 2 byte lagi, karena Bufferdipaksa untuk integer.
Arnauld
f=(s,x=561,c=Buffer([48+x/33%43]))=>x<1749?(s[x++%33]==c?'@':x%33?c:`\n`)+f(s,x):''
14m2
2

Perl 5 -F , 47 byte

//,say map{$F[$_]eq$'?'*':$'}0..31for A..Z,0..9

Cobalah online!

Xcali
sumber
2

Haskell , 86 byte

Untuk pendekatan yang jauh lebih bagus (dan lebih sedikit byte), lihat solusi Laikoni !

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

Cobalah online!

Atau untuk jumlah byte yang sama kita bisa menggunakan:

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

Cobalah online!

Penjelasan / Tidak Diundang

Operator (#)sangat mirip dengan zipWithnamun fungsi hardcoded, st. ini digunakan #jika dua karakter sama dan jika tidak maka yang kedua, tidak ditandai:

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

Jika daftar pertama habis, itu hanya menambahkan elemen yang tersisa dari yang kedua:

_ # w = w

Dengan penolong itu, kita hanya perlu membuat string "A..Z0..9", mereplikasi setiap elemen 32 kali dan zip input dengan masing-masing string, ungolfed:

f x = map ((x#) . replicate 32) (['A'..'Z'] ++ ['0'..'9'])
ბიმო
sumber
1
85 byte: Cobalah secara online!
Laikoni
@Laikoni: Sayang sekali hanya 1 byte lebih sedikit, ini adalah penggunaan yang sangat pintar max. Saya pikir Anda harus memposting itu sebagai solusi Anda sendiri karena sangat berbeda dari solusi saya.
ბიმო
Saya memposting versi 74 byte .
Laikoni
2

Haskell , 74 byte

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

Cobalah online! String input xdiisi dengan spasi hingga 32 dengan take 32$x++cycle" ". Untuk masing-masing karakter cdari Ake Zdan 0ke 9, kita melihat karakter adari string input empuk dan menggantinya dengan ~saat adan cadalah sama dan oleh csebaliknya. Ini dicapai dengan max[c]['~'|a==c], yaitu misalnya max "A" "~" = "~"kapan a = c = 'A', dan max "A" "" = "A"kapan c = 'A'dan a = 'B'. Karena ini menghasilkan string singleton dan bukannya char, do-notation digunakan yang menggabungkan string singleton menjadi satu string.

Berdasarkan solusi Haskell dari BMO .

Laikoni
sumber
2

Python 2, 138 byte

Mendukung karakter huruf besar dan kecil dan meninggalkan kolom kosong untuk spasi.

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))

Jika bonus tidak sepadan, maka saya akan mendapatkan 125 byte dan hanya mendukung input huruf besar:

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

Stax , 15 byte

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

Jalankan dan debug itu

Ini digunakan '#'untuk menunjukkan gelembung diisi.

Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.

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

Jalankan yang ini

rekursif
sumber
1

Pyth, 23 20 byte

j.Tm:s+r1GUTdN.[Qd32

Coba di sini

Penjelasan

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.

sumber
1

APL + WIN, 56 byte

Anjuran untuk string input dan menggunakan karakter # sebagai pengenal:

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

Penjelasan:

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
Graham
sumber
1

C (gcc) , 124 byte

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));}

Cobalah online!

Alih-alih array hard-coded, saya menggantinya dengan fungsi pencarian saja. Untungnya set karakter ASCII memiliki rentang alfabet dan numerik yang berdekatan (saya sedang melihat Anda, EBCDIC!) Selain itu, saya memastikan untuk menjaga output agar tepat 32 karakter menggunakan sprintf(): jika ini bukan persyaratan tugas, maka fungsi akan menjadi 97 byte:

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));}

Cobalah online!

ErikF
sumber
106 byte
ceilingcat
1

CJam , 31 byte

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

Cobalah online! Menggunakan spasi sebagai karakter "lubang".


Jika membuntuti spasi putih diizinkan, maka ini berfungsi selama 29 byte :

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

Cobalah online!


Berikut adalah variasi 34 byte yang menggunakan blok penuh Unicode ( ) sebagai gantinya:

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

Cobalah online!


Penjelasan

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.
Buah Esolanging
sumber
1

05AB1E , 19 byte

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

Cobalah online!

Penjelasan

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
Emigna
sumber
a[b]tidak berfungsi seperti yang Anda inginkan di sini, kan: P?
Guci Gurita Ajaib
@MagicOctopusUrn: Sayangnya tidak. Itu adalah pemikiran pertama saya juga, tetapi pengindeksan modular bukan teman kami dalam hal ini: P
Emigna
1

MATL , 21 byte

1Y24Y2vjO33(32:)y=~*c

Menggunakan spasi sebagai karakter penanda.

Cobalah online!

Penjelasan

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
Luis Mendo
sumber
1

Gangguan Umum , 150 byte

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

Cobalah online!

Penjelasan

;; 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")
Khusus ASCII
sumber
1

Java 10, 120 118 117 byte

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;}

Cobalah online (untuk TIO saya telah menggunakan '█' ( 9608bukan35 ) untuk visibilitas yang lebih baik).

Penjelasan:

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
Kevin Cruijssen
sumber
1

Retina , 64 byte

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

Cobalah online!


$
36* 
L`.{36}

Pads string input di sebelah kanan dengan spasi hingga 36 karakter

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

Lalu, letakkan setiap karakter di barisnya masing-masing dan tambahkan ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789sebelum itu.

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

Cocokkan pasangan karakter yang sama pada baris yang sama, yang ada satu jika dan hanya jika karakter untuk baris tersebut cocok dengan salah satu ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. Ganti yang pertama dengan @dan hapus yang kedua.

N$`\S
$.%`

Satu-satunya garis yang tidak cocok adalah garis dengan spasi, sehingga karakter non-spasi adalah blok 36 × 36. Ubah posisi itu.

L`.{32}

Hanya simpan 32 karakter pertama di setiap baris

TwiNight
sumber
1

Tcl , 153 145 byte

Terima kasih @sergiol untuk -8 byte

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

Cobalah online!

Penjelasan

# 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}}
        ]
        ""
    ]
}
Khusus ASCII
sumber
152
sergiol
@sergiol: | ya itu. 146 ?
ASCII
1
145
ASCII-satunya
1

SNOBOL4 (CSNOBOL4) , 155 150 byte

	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

Cobalah online!

Penjelasan:

	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
Giuseppe
sumber
1

Prolog (SWI) , 235 229 228 222 214 198 173 167 165 byte

-6 byte terima kasih kepada @Cows quack , -6 byte terima kasih @ 0 '

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`.

Cobalah online!

Penjelasan

% 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`.
Khusus ASCII
sumber
0

Oktaf , 61 byte

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

Cobalah online!

Fungsi kerjanya sebagai berikut:

@(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  
Tom Carpenter
sumber