Code Golf: Letter-Cece


15

Các thách thức:

Đối với đầu vào của một chữ X (chữ hoa hoặc chữ thường từ A đến Z) và một chữ số N (0-9) in chữ X tương ứng được làm bằng N * X.

Bức thư phải từ danh sách này:

 AAA      BBBB       CCCC     DDDD      EEEEE     FFFFF      GGG      H   H
A   A     B   B     C         D   D     E         F         G         H   H
AAAAA     BBBB      C         D   D     EEEE      FFFF      G  GG     HHHHH
A   A     B   B     C         D   D     E         F         G   G     H   H
A   A     BBBB       CCCC     DDDD      EEEEE     F          GGG      H   H


IIIII         J     K   K     L         M   M     N   N      OOO 
  I           J     K  K      L         MM MM     NN  N     O   O
  I           J     KKK       L         M M M     N N N     O   O
  I       J   J     K  K      L         M   M     N  NN     O   O
IIIII      JJJ      K   K     LLLLL     M   M     N   N      OOO 


PPPP       QQQ      RRRR       SSSS     TTTTT     U   U     V   V     W   W
P   P     Q   Q     R   R     S           T       U   U     V   V     W   W
PPPP      Q   Q     RRRR       SSS        T       U   U     V   V     W   W
P         Q  QQ     R  R          S       T       U   U      V V      W W W
P          QQQQ     R   R     SSSS        T        UUU        V        W W 


X   X     Y   Y     ZZZZZ
 X X       Y Y         Z 
  X         Y         Z  
 X X        Y        Z   
X   X       Y       ZZZZZ

Ví dụ:

đầu vào: 1

đầu ra:

 AAA
A   A
AAAAA
A   A
A   A

đầu vào: A 0

đầu ra: A


đầu vào: A 2

đầu ra:

      AAA  AAA  AAA
     A   AA   AA   A
     AAAAAAAAAAAAAAA
     A   AA   AA   A
     A   AA   AA   A
 AAA                 AAA
A   A               A   A
AAAAA               AAAAA
A   A               A   A
A   A               A   A
 AAA  AAA  AAA  AAA  AAA
A   AA   AA   AA   AA   A
AAAAAAAAAAAAAAAAAAAAAAAAA
A   AA   AA   AA   AA   A
A   AA   AA   AA   AA   A
 AAA                 AAA
A   A               A   A
AAAAA               AAAAA
A   A               A   A
A   A               A   A
 AAA                 AAA
A   A               A   A
AAAAA               AAAAA
A   A               A   A
A   A               A   A

đầu vào: A -1

đầu ra: những gì đã từng: nó không quan trọng


Quy tắc bổ sung:

  • Các tham số đầu vào có thể được phân tách bằng ký tự bạn muốn.
  • Mỗi chữ cái phải sử dụng vốn của chính nó làm ký tự ascii để vẽ nó.
  • Không gian lưu trữ, dòng mới, vv được cho phép
  • Thay vì một chương trình, bạn có thể viết một hàm lấy chuỗi chữ số làm đối số. Đầu ra nên được in bình thường.
  • Stdout / Stderr không quan trọng, chỉ cần chọn một. Nếu các công cụ in trên mặt khác cũng không thành vấn đề.
  • Các định dạng đầu ra có thể có thể được in thành STDOUT, được trả về dưới dạng danh sách các chuỗi, được trả về dưới dạng ma trận ký tự, v.v ... miễn là kết quả có thể được in đơn giản bằng phương pháp in mặc định của ngôn ngữ. *

*: giống như hàm f (a, 1) trả về chuỗi và người ta có thể nói đơn giản là print (f (a, 1)) không tạo ra phần gọi print () của câu trả lời. (Điều này đã được Kevin Cruijssen và Arnauld chỉ ra).

Chiến thắng:

Đây là môn đánh gôn, đánh số byte thấp nhất. Chúc vui vẻ!


Chỉnh sửa : câu hỏi này có vẻ rất giống với câu hỏi này tuy nhiên tôi sẽ nói là không, vì nó không chỉ có tác dụng với H mà còn cho mỗi chữ cái trong bảng chữ cái .. Đoán xem bạn quyết định hay không nó là một bản sao.



3
@ElPedro Cảm ơn bạn! Tôi chưa biết về hộp cát, cảm ơn bạn rất nhiều, tôi sẽ xem xét kỹ hơn về nó!
Nicolas Brauer

2
Thử thách đầu tiên tốt đẹp! Tuy nhiên, câu hỏi của bạn hiện cho thấy rằng chúng tôi chỉ có thể in kết quả. Quy tắc mặc định là các chức năng được phép trả lại nó. Nói chung, các định dạng I / O rất linh hoạt. Bạn có thể muốn xem bài đăng này trong meta giải thích lý do tại sao.
Arnauld

2
@Arnauld vì đó là về nghệ thuật ASCII Tôi sẽ nói rằng việc in kết quả có phần quan trọng đối với tác vụ, nhưng tôi đoán nếu mã của bạn trả về kết quả và chuỗi được trả về có thể được in bằng cách sử dụng phương thức in mặc định của ngôn ngữ (như hàm f của bạn (a, 1) trả về chuỗi và tôi chỉ có thể nói print (f (a, 1)) cuộc gọi print () không phải là một phần của mã câu trả lời. Nếu điều này có thể hiểu được và bạn đồng ý tôi có thể thêm nó vào mô tả thử thách.
Nicolas Brauer

2
@KevinCruijssen Tôi hơi cập nhật câu hỏi, xin vui lòng cho tôi biết nếu nó dễ hiểu theo cách tôi đã viết :)
Nicolas Brauer

Câu trả lời:


6

JavaScript (ES8), 281 byte

Đưa đầu vào là (letter)(N). Trả về một chuỗi.

c=>n=>(g=y=>y--?''.padEnd(w).replace(/./g,(_,x)=>(h=d=>~~(d/=5)?(P=parseInt)('hhvhefhfhfu111ufhhhfv1f1v11f1vehp1ehhvhhv444vehgggh979hv1111hhlrhhpljhehhhe11fhfuphheh9fhffge1u4444vehhhh4ahhhalhhhha4ah444ahv248v'[y/d%5+5*P(c,36)-50|0],36)>>x/d%5&1?h(d):' ':c)(w))+`
`+g(y):'')(w=5**n)

Hãy thử trực tuyến!

Làm sao?

Mã hóa phông chữ

5×5031 ở dạng thập phân. Các giá trị này có thể được lưu trữ một cách thuận tiện dưới dạng một chữ số trong Base36.

Mẫu được lưu trữ được nhân đôi theo cả chiều ngang và chiều dọc.

Ví dụ cho 'F':

#####     ....#     00001      1     '1'
#....     ....#     00001      1     '1'
####. --> .#### --> 01111 --> 15 --> 'f' --> '11f1v'
#....     ....#     00001      1     '1'
#....     #####     11111     31     'v'

26×5=130 ký tự.

(x,y)nth

parseInt('hhvhefhfh...'[y + 5 * n], 36) >> x & 1

Thuật toán chính

nw= =5n

0x<w0y<w(x,y)h

(x5kmod5,y5kmod5)

k[0Giáo dụcn-1] .

Hàm trả về một khoảng trắng ngay khi một pixel trống được phát hiện ở một độ sâu nào đó hoặc ký tự tương ứng với chữ cái đầu vào nếu tất cả các lần lặp lại thành công.


Nó hoạt động thực sự tốt, xin chúc mừng! Bạn có thể cố gắng để giải thích mã một chút xin vui lòng?
Nicolas Brauer

Tại sao mẫu được lưu trữ được nhân đôi theo cả chiều ngang và chiều dọc? nó sẽ mất nhiều byte hơn để không phản chiếu tất cả để lưu trữ? Và tyvm cho lời giải thích *. *
Nicolas Brauer

1
yw10

1
(Mặc dù tôi nghĩ rằng chúng ta có thể thả chiếc gương thẳng đứng mà không mất phí.)
Arnauld

6

R , 348 byte

function(K,N){if(N)for(i in 1:N)T=T%x%matrix(c(15269425,32045630,16269839,32032318,33061407,33061392,15224366,18415153,32641183,1082926,18444881,17318431,18732593,18667121,15255086,32045584,15255151,32045649,16267326,32641156,18400814,18400580,18400938,18157905,18157700,32575775)[utf8ToInt(K)-64]%/%2^(24:0)%%2,5,5)
write(c(" ",K)[T+1],1,5^N,,"")}

Hãy thử trực tuyến!

Sử dụng một mã hóa gần giống với Ouros ' ; tuy nhiên, nó không đảo ngược các bit, thay vào đó chọn sử dụng chúng trực tiếp.

Sau đó, nó tạo ra một ma trận 5x5 của các bit và xây dựng ma trận Kronecker Power để tạo ra mẫu cần thiết, ghi kết quả vào thiết bị xuất chuẩn.


Đây là một công dụng tuyệt vời của Kronecker!
digEmAll


@digEmAll trung tâm của thách thức này là phương pháp nén (dù sao từ góc độ mã-golf). Tại sao bạn không đăng nó như một câu trả lời để bạn cũng có thể giải thích nó?
Giuseppe

Được rồi, cảm ơn!
digEmAll

5

Sạch , 436 372 byte

Ngắn hơn đáng kể với định dạng IO mới.

import StdEnv,StdLib
t=transpose
f=flatten
$0c=[[c]]
$n c=f[t(f[t($(n-1)if(isOdd({#18415150,16301615,31491134,16303663,32554047,1096767,15262766,18415153,32641183,15254032,18128177,32539681,18405233,18667121,15255086,1097263,32294446,18136623,16267326,4329631,15255089,4539953,11191857,18157905,4329809,32575775}.[toInt(max'A'c)-65]>>p))c' ')\\p<-[i..i+4]])\\i<-[0,5..20]]

Hãy thử trực tuyến!

Nén các mẫu chữ cái vào các bit của số nguyên để tiết kiệm ~ 700 byte. Ví dụ A:

  1. Làm phẳng [[' AAA '],['A A'],['AAAAA'],['A A'],['A A']]
  2. Đảo ngược [' AAA A AAAAAAA AA A']
  3. Biến ['A AA AAAAAAA A AAA ']thành nhị phân ( 'A' = 1, ' ' = 0)
  4. Biến 0b1000110001111111000101110thành số thập phân
  5. Được 18415150

4

R , 259 byte

function(K,N,`!`=utf8ToInt){if(N)for(i in 1:N)T=T%x%(sapply(!"			




",intToBits)[1:5,5*(-64+!K)-4:0]>0)
write(c(" ",K)[T+1],1,5^N,,"")}

Hãy thử trực tuyến!

Tuyên bố miễn trừ trách nhiệm:
giải pháp này đã đạt được bằng cách lấy câu trả lời của @ Giuseppe và thay thế nén ma trận bằng một cách tiếp cận khác rất giống với phương pháp được sử dụng trong câu trả lời của @ Arnauld , vì vậy, trước hết hãy nâng cấp chúng :)

Ý tưởng như sau :

Cho 5 x 26*5ma trận này của 0/1:

(1 replaced by '#', 0 replaced by '.' and '|' added for readability)

.####|#####|.###.|#####|#####|#####|.###.|#####|#...#|...#.|#####|#####|#####|
#.#..|#.#.#|#...#|#...#|#.#.#|#.#..|#...#|..#..|#...#|....#|..#..|....#|.#...|
#.#..|#.#.#|#...#|#...#|#.#.#|#.#..|#...#|..#..|#####|....#|..#..|....#|..#..|
#.#..|#.#.#|#...#|#...#|#.#.#|#.#..|#.#.#|..#..|#...#|....#|.#.#.|....#|.#...|
.####|.#.#.|#...#|.###.|#...#|#....|..##.|#####|#...#|####.|#...#|....#|#####| ...
  ^     ^     ^     ^     ^     ^     ^     ^     ^     ^     ^     ^     ^   
  |     |     |     |     |     |     |     |     |     |     |     |     |   
  A     B     C     D     E     F     G     H     I     J     K     L     M   

mỗi cột được coi là số nhị phân và được chuyển đổi thành một số nguyên. Các số nguyên này sau đó được chuyển đổi thành ASCII không thể in được trong phạm vi 1 ... 31:

ví dụ: các cột của "B"chuỗi cuối cùng sẽ là "\017\021\017\021\017"(ký tự không thể in được viết bằng biểu diễn bát phân):

#####                   ####.     11110          15            '\017'
#.#.#                   #...#     10001          17            '\021'
#.#.#      ------->     ####. --> 11110  ------> 15   ------>  '\017'
#.#.#                   #...#     10001          17            '\021'
.#.#.                   ####.     11110          15            '\017'

          (transposed                  bin to int   int to ASCII
         for reability)    

Do đó, với chuỗi ký tự cuối cùng 5*26 = 130, chúng tôi chuyển đổi chuỗi đó trở lại ma trận 0/1sử dụng:

sapply(utf8ToInt(STRING),intToBits)

sau đó chúng tôi chỉ đơn giản là phụ trợ ma trận chỉ chọn 5 hàng đầu tiên (intToBits trả về 32 bit) và chỉ các cột tương ứng với chữ cái được chuyển làm đầu vào và cuối cùng chúng tôi áp dụng kronecker như được giải thích trong câu trả lời của @ Giuseppe .


bạn cũng có thể sử dụng unprintables để cạo sạch -48mảnh và sử dụng !thay cho U: thử trực tuyến
Giuseppe

@Giuseppe: tuyệt vời! Tôi đã đưa ra câu trả lời wiki cộng đồng vì đó là kết quả của sự hợp tác :) Hãy thoải mái chỉnh sửa tiếng Anh kém của tôi: D
digEmAll
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.