Đếm que; đếm que của bạn


9

Một số nền tảng

Thanh đếm là những thanh nhỏ (dài 3-14 cm) được sử dụng bởi các nhà toán học từ nhiều nền văn hóa châu Á trong hơn 2000 năm để đại diện cho bất kỳ số lượng hoặc phân số nào. (Trong chqllenge này, chúng tôi tập trung vào các số nguyên không dấu) Ngoài ra còn có một phiên bản bằng văn bản, được gọi là số que.

Đây là cách nó hoạt động:

(Nếu tại bất kỳ thời điểm nào bạn cảm thấy bối rối, hãy kiểm tra biểu diễn ascii của từng chữ số và một số ví dụ tôi đã đưa vào ở dưới cùng)

Số thanh là một hệ thống số vị trí thực sự với các chữ số cho 1-9 và trống cho 0. Các chữ số bao gồm các đường ngang và dọc; Càng nhiều dòng, chữ số càng cao. Khi bạn vượt qua năm, bạn đặt một đường ngang trên đầu để thêm 5 vào số dòng bên dưới. Một đường thẳng đứng là 1, hai đường thẳng đứng 2, năm đường thẳng đứng là 5, một đường thẳng đứng với một đường ngang trên cùng là 6, bốn đường thẳng đứng với một đường ngang trên cùng là 9 (chữ số cao nhất).

3 chữ số dọc:

 ||| 
 ||| 
 ||| 
 ||| 
 ||| 

Để làm cho việc đọc số que dễ dàng hơn, họ đã sử dụng các ký hiệu khác nhau cho mỗi chữ số xen kẽ. Ký hiệu thứ hai hoán đổi vai trò của các đường ngang và dọc. sao cho 3 được biểu thị bằng ba đường ngang và 8 bởi ba đường ngang với đường thẳng đứng trên đầu.

Một chữ số 8 ngang:

  |  
  |  
__|__
_____
_____

Biết sử dụng ký hiệu nào là dễ dàng, như đã nói trước đây, tehy được sử dụng xen kẽ và Tôn Tử đã viết rằng "một là dọc, mười là ngang". Vì vậy, chữ số ngoài cùng bên phải là dọc và chúng tôi thay thế từ đó về sau.

Các thách thức

Các thanh này được sử dụng để biểu thị các số và phân số âm (như được giải thích trong bài viết trên wikipedia về chúng . Vì mục đích của thử thách này, chúng tôi sẽ chỉ tập trung vào các số nguyên dương.

Viết hàm hoặc chương trình đầy đủ lấy giá trị nguyên làm đầu vào theo bất kỳ cách nào và in biểu diễn số que của số nguyên này sang STDOUT (bạn cũng có thể ghi vào tệp nếu hoạt động tốt hơn). Mã ngắn nhất trong byte thắng.

Mỗi chữ số sẽ được biểu thị bằng các ký tự 5x5 ascii và được phân tách bằng hai ký tự gồm 5 dấu cách. Đại diện chính xác bạn sẽ sử dụng cho mỗi chữ số như sau:

space between two digits (two colums):





0 digit, both vertical and horizontal (five columns):






1 digit, vertical:
  |  
  |  
  |  
  |  
  |  

2 digit, vertical:  
 | | 
 | | 
 | | 
 | | 
 | | 

3 digit, vertical:
 ||| 
 ||| 
 ||| 
 ||| 
 ||| 

4 digit, vertical:
|| ||
|| ||
|| ||
|| ||
|| ||

5 digit, vertical:
|||||
|||||
|||||
|||||
|||||

6 digit, vertical:
_____
  |  
  |  
  |  
  |  

7 digit, vertical:
_____
 | | 
 | | 
 | | 
 | | 

8 digit, vertical:
_____
 ||| 
 ||| 
 ||| 
 ||| 

9 digit, vertical:
_____
|| ||
|| ||
|| ||
|| ||

1 digit, horizontal:




_____

2 digit, horizontal:



_____
_____

3 digit, horizontal:


_____
_____
_____

4 digit, horizontal:

_____
_____
_____
_____

5 digit, horizontal:
_____
_____
_____
_____
_____

6 digit, horizontal:
  |  
  |  
  |  
  |  
__|__

7 digit, horizontal:
  |  
  |  
  |  
__|__
_____

8 digit, horizontal:
  |  
  |  
__|__
_____
_____

9 digit, horizontal:
  |  
__|__
_____
_____
_____

Các chữ số sẽ được in cạnh nhau. Không được phép lưu các khoảng trống ngoài hộp giới hạn của chữ số cuối cùng. Không gian lưu trữ để hoàn thành hộp giới hạn của (các) chữ số cuối cùng được yêu cầu. Bạn nên kết thúc đầu ra với một dòng mới duy nhất. Không gian hàng đầu không thuộc hộp giới hạn của chữ số đầu tiên cũng bị cấm.

Tiêu chuẩn áp dụng.

Ví dụ đầu ra

Các dòng bắt đầu bằng >được hiểu là đầu vào.

>12
        | | 
        | | 
        | | 
        | | 
_____   | | 

>8037
  |                  _____
  |                   | | 
__|__         _____   | | 
_____         _____   | | 
_____         _____   | | 

>950
_____  _____       
|| ||  _____       
|| ||  _____       
|| ||  _____       
|| ||  _____       

bằng "dấu cách", bạn có nghĩa là chỉ những người vượt qua ô giới hạn của chữ số cuối cùng, hay cả những chữ ở cuối chữ số cuối?
John Dvorak

@JanDvorak chỉ những người qua hộp giới hạn của chữ số cuối cùng. Nếu không gian trailig là cần thiết để thể hiện toàn bộ hộp giới hạn của một chữ số, thì chúng là bắt buộc.
overactor

Nhìn vào các ví dụ, không gian hàng đầu cũng bị cấm. Có phải họ không?
edc65

@ edc65 có, cảm ơn vì đã chỉ ra điều đó.
overactor

Câu trả lời:


3

Con trăn 2 - 216

Phát súng đầu tiên của tôi, có thể là một số thứ cần lấy ra, nhưng não tôi đau, vì vậy bây giờ nó đủ tốt rồi

x=raw_input()
for l in range(5):print'  '.join((' '*7+'|   | |  ||| || '+'|'*7+'__|'+'_'*7)[[7*(4-l<n%6+n/6)+(n>5)*(l<10-n)-(l==10-n),n%6+n/6+(l<1)*(n>5)*(12-n)][(len(x)-i)%2]*5:][:5]for i,n in enumerate(map(int,x)))

2

JavaScript (ES6) 223

Chức năng với tham số số, đầu ra cho bàn điều khiển. NB Nếu tham số đầu vào có thể là một chuỗi, mã sẽ ngắn hơn 5 char và không có giới hạn 17 chữ số có nghĩa của các số JS.

F=n=>{
  for(r=s='',n+=s;r<5;r++,s+=q)
    for(f=q='\n',p=n.length;f=!f,p--;q=(p?'  ':'')+'     1  |  1 | | 1 ||| 1|| ||1|||||1_____1__|__'.split(1)[d]+q)
      if(d=~~n[p])e=d+r,d=d>5?f?e<10?1:e>10?6:7:r?d-5:6:f?e>4?6:0:d;
  console.log(s)
}

Kiểm tra

Kiểm tra trong bảng điều khiển Firefox.

F(12)

Đầu ra

        | | 
        | | 
        | | 
        | | 
_____   | | 

F(8037)

Đầu ra

  |                  _____
  |                   | | 
__|__         _____   | | 
_____         _____   | | 
_____         _____   | | 

F(950)

Đầu ra

_____  _____       
|| ||  _____       
|| ||  _____       
|| ||  _____       
|| ||  _____       

Ung dung

F=n=>{
  z='     1  |  1 | | 1 ||| 1|| ||1|||||1_____1__|__'.split(1);
  s='';
  n+=s;

  for (r = 0; r < 5; r++)
  {
    for(q='\n',f=1,p=n.length;f=!f,p--;)
    {
      d = ~~n[p];
      if (d)
      {
        e=d+r;
        if (d > 5)
        {
          if (f)
          {
            d = e < 10 ? 1 : e >10 ? 6 : 7;
          }
          else
          {
            d = r ? d-5 : 6;
          }
        }
        else
        {
          if (f)
            d = e > 4 ? 6 : 0;
        }
      }
      q = (p ? '  ' : '') + z[d] + q;
    }
    s+=q
  }

  console.log(s)
}

1

PowerShell , 229 byte

$n="$args"
0..4|%{$l=$_;$h=$n.Length%2
($n|% t*y|%{(' '*7+'|   | |  ||| || '+'|'*7+'_'*7+'|__')|% S*g(5*(('0123456666'+'0123451234'*4+'00000611110000661117000666117600666617660666667666')[50*($h=!$h)+10*$l+"$_"]-48))5})-join'  '}

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

Trường hợp chuỗi này hiện các chữ số:

# 0       1       2       3       4       5       6       7
# '     '.'  |  ',' | | ',' ||| ','|| ||','|||||','_____','__|__'

thanh dọc:

"       |   | |  ||| || |||||||____________________"+   # 0123456666
"       |   | |  ||| || |||||||  |   | |  ||| || ||"+   # 0123451234
"       |   | |  ||| || |||||||  |   | |  ||| || ||"+   # 0123451234
"       |   | |  ||| || |||||||  |   | |  ||| || ||"+   # 0123451234
"       |   | |  ||| || |||||||  |   | |  ||| || ||"    # 0123451234

thanh ngang:

"                         _____  |    |    |    |  "+   # 0000061111
"                    __________  |    |    |  __|__"+   # 0000661117
"               _______________  |    |  __|_______"+   # 0006661176
"          ____________________  |  __|____________"+   # 0066661766
"     ___________________________|_________________"    # 0666667666

Kịch bản chưa được kiểm soát:

$digits=' '*7+'|   | |  ||| || '+'|'*7+'_'*7+'|__'
$positions = '0123456666'+'0123451234'*4+'00000611110000661117000666117600666617660666667666'

$n="$args"
0..4|%{
    $line=$_
    $horizontal=$n.Length%2
    $chunks=$n|% toCharArray|%{
        $horizontal=!$horizontal
        $startFrom = 5*($positions[50*$horizontal+10*$line+"$_"]-48)
        $digits|% Substring $startFrom 5
    }
    $chunks-join'  '
}


'Bất kỳ cách nào' trong quy tắc Viết hàm hoặc chương trình đầy đủ lấy giá trị nguyên làm đầu vào theo bất kỳ cách nào ? Tôi không dám diễn giải 'một số nguyên' là 'một chuỗi'. :)
mê mẩn

Vâng, đó là một chút mơ hồ và có lẽ không phải là những gì OP dự định nhưng hình dung tôi chỉ ra môn đánh gôn dễ dàng.
Veskah
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.