Chơi gôn nhiều người Trung Quốc 9 * 9


18

Xuất bảng sau:

一一得一
一二得二 二二得四
一三得三 二三得六 三三得九
一四得四 二四得八 三四十二 四四十六
一五得五 二五一十 三五十五 四五二十 五五二十五
一六得六 二六十二 三六十八 四六二十四 五六三十 六六三十六
一七得七 二七十四 三七二十一 四七二十八 五七三十五 六七四十二 七七四十九
一八得八 二八十六 三八二十四 四八三十二 五八四十 六八四十八 七八五十六 八八六十四
一九得九 二九十八 三九二十七 四九三十六 五九四十五 六九五十四 七九六十三 八九七十二 九九八十一

Hoặc bạn có thể sử dụng ba chữ cái đầu tiên trong từ tiếng Anh của nó, trong trường hợp một số ngôn ngữ không hỗ trợ các ký tự Trung Quốc:

OneOneGetOne
OneTwoGetTwo TwoTwoGetFou
OneThrGetThr TwoThrGetSix ThrThrGetNin
OneFouGetFou TwoFouGetEig ThrFouTenTwo FouFouTenSix
OneFivGetFiv TwoFivOneTen ThrFivTenFiv FouFivTwoTen FivFivTwoTenFiv
OneSixGetSix TwoSixTenTwo ThrSixTenEig FouSixTwoTenFou FivSixThrTen SixSixThrTenSix
OneSevGetSev TwoSevTenFou ThrSevTwoTenOne FouSevTwoTenEig FivSevThrTenFiv SixSevFouTenTwo SevSevFouTenNin
OneEigGetEig TwoEigTenSix ThrEigTwoTenFou FouEigThrTenTwo FivEigFouTen SixEigFouTenEig SevEigFivTenSix EigEigSixTenFou
OneNinGetNin TwoNinTenEig ThrNinTwoTenSev FouNinThrTenSix FivNinFouTenFiv SixNinFivTenFou SevNinSixTenThr EigNinSevTenTwo NinNinEigTenOne

Bạn có thể xuất ra ở bất kỳ định dạng hợp lý nào, ví dụ văn bản đơn giản được phân tách bằng dấu cách / dấu phẩy / tab và dòng mới, mảng 2D trong đó các vị trí trống hoặc không tồn tại (Vị trí 2 * 1 trống nên không có gì trong mảng).

Mã golf, mã ngắn nhất trong byte thắng. Mã hóa GBK được cho phép, trong đó mỗi ký tự tiếng Trung sử dụng 2 byte.

Bảng chuyển đổi:

一   One
二   Two
三   Thr
四   Fou
五   Fiv
六   Six
七   Sev
八   Eig
九   Nin
十   Ten
得   Get

Phần còn lại có vẻ khá trực quan, nhưng ít nhất bạn có thể giải thích cách và hoạt động không?
Dennis

Chỉ được sử dụng khi sản phẩm nhỏ hơn 10
l4m2

ahhh, vậy nếu nó lớn hơn 10 thay vào đó, chúng ta phải sử dụng 十?
Luis felipe De jesus Munoz

@LuisfelipeDejesusMunoz và [11,19] là đặc biệt với trần.
FrownyFrog

能 确认 正确 的 Translation (Dịch: Tôi có thể xác nhận rằng điều này là chính xác)
Esolanging Fruit

Câu trả lời:


8

Stax , 66 ký tự

9mYF"得一二三四五六七八九"cacy*~@ny@\p;11AH:b!n;A/X@]z?px'十z?p,A%sn@]z?' +qD

Số lượng byte phụ thuộc vào mã hóa được sử dụng cho các ký tự Trung Quốc.

Chạy và gỡ lỗi trực tuyến!

Giải trình

9mYF...D    Loop `n` times and print a newline after each loop, `n`=1..9

"..."cay*~@ny@\p
"..."c              Push the string and duplicate it
      ay            Fetch the outer loop variable
        *           Multiply with the inner loop variable
         ~          Move the product to input stack for later use
          @         Take character at the index specified by inner loop variable
           ny@      Take character at the index specified by outer loop variable
              \p    Print the two characters

;11AH:b!n;A/X@]z?p
;11AH:b!        ?p    Is the product not in range [11,20)?
                      Output (*) if true, (**) if false.
        n;A/X@        Character at the index of the "ten" digit of product
              ]       Convert character to string (*)
               z      Empty string (**)

x'十z?p,A%sn@]z?' +q
x'十z?p                Print "十" if the "ten" digit is non-zero, nothing otherwise
       ,A%sn@]z?       Get the character specified by the last digit if that digit is non-zero, empty string otherwise
                ' +q   Append a space and print

Phiên bản thay thế (Stax 1.0.6), 59 byte (bởi @recursive)

Điều này sử dụng một tính năng được lấy cảm hứng từ thử thách này và chỉ được bao gồm trong Stax 1.0.6, nó hoãn lại thử thách.

éz░╖▐5à{│`9[mLùÜ•ëO╞îπl▼Γ─§╥|▒╛Δ◙Φµ'r╠eƒÿQ╫s♪Ω]£ï♪D3╚F◙δÿ%‼

Phiên bản ASCII là

9mX{x\_x*YA/]yA-y20<*!*+y9>A*+yA%]0-+"NT|,,t.%,p&()(!'^pq kzi !X6"!s@mJ

Phiên bản này xây dựng các mảng chỉ mục và sau đó sử dụng nó để chỉ số chuỗi ký tự Trung Quốc để tránh các hoạt động ngăn xếp dư thừa ( c, a, n) và nhiều @s.

Giải trình

9mX{...m    Loop `n` times and map `1..n` to a list of strings, `n`=1..9
        J   Join the strings with space and print with a newline

x\_x*YA/]yA-y20<*!*+y9>A*+yA%]0-+"..."!s@
x\                                           A pair: (inner loop variable, outer loop variable)
  _x*Y                                       Product of inner and outer loop variable
      A/                                     floor(product/10)
        ]                                    [floor(product/10)]
         yA-                                 Product does not equal 10
            y20<                             Product is less than 20
                *!                           `Nand` of them
                                             This is true (1) if the product is in the range {10}U[20,81]
                  *                          Repeat [floor(product/10)] this many times
                                             This results in itself if the predicate above is true, or empty array if it is false
                   +                         Add it to the list of [inner loop var, outer loop var]
                                             This list will be used to index the string "得一二三四五六七八九十"
                    y9>A*                    Evaluates to 10 if the product is larger than 9, 0 otherwise
                                             When indexed, they become "十" and "得", respectively
                         +                   Append to the list of indices
                          yA%                Product modulo 10
                             ]0-             [Product modulo 10] if that value is not zero, empty array otherwise
                                +            Append to the list of index
                                 "..."!      "得一二三四五六七八九十"
                                       s@    Index with constructed array

Stax 1.0.6 có thể thực hiện điều đó trong 59 , nhưng nó hoãn lại thử thách, vì vậy nó không đủ điều kiện IMO.
đệ quy

Dù sao cũng đáng nói. Nó rõ ràng cũng sử dụng một số tối ưu hóa cũng có sẵn trước 1.0.6.
Weijun Zhou

1
Tôi nghi ngờ vẫn còn một lượng phòng tối ưu hóa còn lại trong đó, nhưng bây giờ tôi sẽ để nó một mình.
đệ quy

@recursive Ngày nay, các ngôn ngữ lập trình mới hơn không được tạo ra một cách có chủ đích cho một câu hỏi không cần phải được đánh dấu là 'không cạnh tranh' (ai đó liên kết bài meta)
Stan Strum


5

Python 3 , 151 149 146 byte

-3 byte nhờ Rod .

l=" 一二三四五六七八九"
for i in range(1,10):print([l[j//i]+l[i]+('得',l[j//10][10<j<20:]+'十')[j>9]+l[j%10]for j in range(i,i*i+1,i)])

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


Chỉ cần một lưu ý nhỏ, bạn có thể sử dụng không gian có độ rộng bằng không '\u200b'(+2 byte) thay vào đó là không gian cho đầu ra chính xác
Rod

3

Javascript, 190 byte

(_="得一二三四五六七八九十")=>{for(i=1;i<10;i++){for(t="",v=0;v<i;t+=_[++v]+_[i]+[...(v*i+'')].map((a,b,c) => c.length>1&&b==0?(a>1?_[a]+'十':'十'):b==0?'得'+_[a]:_[a]).join``+' ');console.log(t)}}

a=(_=" 一二三四五六七八九")=>{for(i=1;i<10;i++){for(t="",v=0;v<i;t+=_[++v]+_[i]+[...(v*i+'')].map((a,b,c) => c.length>1&&b==0?(a>1||c[1]==0?_[a]+'十':'十'):b==0?'得'+_[a]:_[a]).join``+' ');console.log(t)}}
a()


@ l4m2 Có, tôi không nhận thấy sự khác biệt khi sử dụng 得
Luis felipe De jesus Munoz

1
@FrownyFrog khi nào là 10 一十nhưng khi nào là 15 hoặc 16 hoặc bất kỳ số nào khác chúng ta bỏ qua ?
Luis felipe De jesus Munoz

@FrownyFrog Bạn có thể xem bây giờ không?
Luis felipe De jesus Munoz

Tất cả đều tốt, được thực hiện tốt.
FrownyFrog

Hãy thử (_="得一二三四五六七八九十")=>eval("for(i=1;i<10;i++){for(t='',v=0;v<i;t+=_[++v]+_[i]+[...(v*i+'')].map((a,b,c)=>c.length>1&&b==0?(a>1?_[a]+'十':'十'):b==0?'得'+_[a]:_[a]).join``+' ');t"). Tôi đã không nhìn quá kỹ, nhưng chắc chắn có một số thứ khác mà bạn có thể chơi gôn.
Mama Fun Roll

2

Ruby , 166 byte

->{(1..9).map{|a|(1..a).map{|b|p=a*b;([b,a]+(p<10?[0,p]:p<11?[1,10]:p<20?[10,p%10]:[p/10,10]+(p%10<1?[]:[p%10]))).map{|d|"得一二三四五六七八九十"[d]}*""}}}

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

Một lambda trả về một chuỗi 2D của chuỗi.

->{
  (1..9).map{|b|                  # b is the multiplier
    (1..b).map{|a|                # a is the multiplicand
      p=a*b;                      # p is the product
      (                           # We will build an array of indexes into a ref string:
        [a,b] + (                 #   The first two indexes will be a and b
        p<10 ? [0,p] :            #   Case 1: abGp (single digit sums)
        p<11 ? [1,10] :           #   Case 2: 251X (only happens once)
        p<20 ? [10,p%10] :        #   Case 3: abXd (12-18, d is the ones digit)
        [p/10,10]+(               #   (Cases 4 and 5 share a prefix)
          p%10<1 ? [] :           #   Case 4: abcX (20, 30, 40, c is the tens digit)
          [p%10]))                #   Case 5: abcXd (two-digit product, p = 10*c+d)
      ).map{|d|
        "得一二三四五六七八九十"[d] # Fetch the character for each index
      }*""                        # Join the characters into words
    }
  }
}

2

Yabasic , 250 242 238 byte

Một câu trả lời với các ký tự unicode?! Gì?

Một hàm ẩn danh và hàm trợ giúp được khai báo, c(n)không có đầu vào và đầu ra cho STDOUT

For r=1To 9
For c=1To r
c(c)
c(r)
If!r*c>9Then?"得";Fi
c(r*c)
?" ";
Next
?
Next
Sub c(n)
s$="一二三四五六七八九"
If n>19Then?Mid$(s$,Int(n/10)*3-2,3);Fi
If n=10Then?"一";Fi
If n>9Then?"十";Fi
?Mid$(s$,Mod(n,10)*3-2,3);
End Sub

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


1

Python 3 , 196 byte

lambda c=' 一二三四五六七八九':[[c[j]+c[i]+[('得'+c[(i*j%10)]),((c[(int(i*j/10))]*((i*j>19)or(i*j==10)))+'十'+(c[i*j%10])*(i*j%10!=0))][i*j>9]for j in range(1,i+1)]for i in range(1,10)]

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


二五一十九 二六一十二hai loại sai
l4m2

@FrownyFrog đã sửa ...
Đạt

c[(i*j%10)]=> c[i*j%10]?
l4m2

1

Võng mạc , 100 ký tự, 122 byte


9*
_
$`_$n
_
$%`_$.%= 
(_+)(.)
$.1,$2,$.($.1*$2*)
\B.
:$&
:0
:
1:\b
:
,(. )
,0$1
T`,d:`_得一二三四五六七八九十

Hãy thử trực tuyến! Giải trình:


9*

Chèn chín _s.

_
$`_$n

Mở rộng thành 9 hàng từ 1 đến 9 _giây.

_
$%`_$.%= 

(lưu ý dấu cách không gian) Mở rộng thành 9 hàng từ 1 đến i _cộng với i dưới dạng chữ số.

(_+)(.)
$.1,$2,$.($.1*$2*)

Chuyển đổi _s thành số thập phân và nhân với i.

\B.
:$&

Chèn a :nếu câu trả lời có hai chữ số. Điều này sẽ trở thành tennhân vật.

:0
:

Xóa các đơn vị bằng không.

1:\b
:

Xóa 1từ 1:trừ khi nó 1:0bị xóa bằng không.

,(. )
,0$1

Chèn a 0cho câu trả lời một chữ số; điều này sẽ trở thành getnhân vật.

T`,d:`_得一二三四五六七八九十

Sửa chữa tất cả các nhân vật.


1

JavaScript (Node.js) , 141/130 byte

(s=[...'得一二三四五六七八九'])=>s.map((A,i)=>s.map((B,j)=>i<j|!j?'':B+A+[s[(q=i*j)/10|-(q>11&q<19)]]+(q>9?'十':'')+[s[q%10||s]]))

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


Bạn có thể vui lòng xóa "UTF8" khỏi tiêu đề không? Điều đó là không cần thiết, nhưng nó đánh lừa các kịch bản bảng xếp hạng, khiến họ nghĩ rằng câu trả lời này chỉ dài 8 byte.
RedClover

1

APL (Dyalog) , 75 100 ký tự, 97 122 byte

k t' 一二三四五六七八九得十'10
∘.{⍺<⍵:''⋄(s=10)∨19<s←⍺×⍵:k[1+⍵⍺(⌊s÷t)11,t|s]⋄9<s:k[1+⍵⍺,11,t|s]⋄k[⍵⍺t s+1]}⍨⍳9

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


Tôi muốn cải thiện nó nếu downvoter sẽ nói điều gì sai với nó.
Uriel

Ồ, đúng rồi, vì vậy, bao gồm từ 11 đến 19, đầu ra phải là 4 ký tự, không có 一
FrownyFrog 21/03/18

@FrownyFrog đã được sửa
Uriel

0

Python 3 , 142 byte

Cấu trúc tương tự như câu trả lời 146 byte của ovs , nhưng các thuật ngữ ở giữa hoạt động theo một cách khác.

n=" 一二三四五六七八九"
for x in range(1,10):print([n[y//x]+n[x]+n[y//10][20>y!=10:]+'得十'[y>9]+n[y%10]for y in range(x,x*x+1,x)])

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

Giải trình

Thuật ngữ thú vị nhất là thuật ngữ cho số lượng hàng chục:

n[y//10][20>y!=10:]

Lưu ý rằng 20>y!=10có nghĩa là 20 > y and y != 10, Falsekhi số lượng hàng chục nên được bao gồm và Truenếu không.

Falsecó giá trị nguyên 0Truecó giá trị nguyên 1, vì vậy trong khi n[y//10]luôn luôn có một ký tự, chỉ số phụ [20>y!=10:]tương đương với [0:1](tức là "ký tự") khi số lượng hàng chục phải được bao gồm và [1:1](nghĩa là "không có ký tự").

Thuật ngữ sau đây,

'得十'[y>9]

dễ hiểu hơn; lưu ý rằng:

  • Đầu ra cho mọi kết quả <= 9 phải chứa
  • Đầu ra cho mọi kết quả> 9 nên chứa
  • có thể được xử lý sau thuật ngữ 'hàng chục' vì thuật ngữ 'hàng chục' luôn ước tính thành một chuỗi trống khi có một chuỗi

Lưu ý về dấu cách

Các không gian kéo dài cho bội số của mười kéo dài đặc tả một chút - như được đề cập bởi thanh , điều này có thể được thực hiện hoàn hảo bằng cách sử dụng một không gian có độ rộng bằng 0, nhưng sau đó bạn cũng sẽ phải giải nén các mảng bằng cách sử dụng print(*[...])không gian có độ rộng bằng 0 như một nghĩa đen "\u200b"khi được in trong một mảng.


0

JavaScript, 190 byte

(s="得一二三四五六七八九十",o="")=>eval(`for(i=1;i<10;i++){for(j=1;j<=i;j++){o+=s[j]+s[i]+(i*j<10?s[0]:i*j<11?s[1]+s[10]:i*j<20?s[10]:s[i*j/10|0]+s[10])+(i*j%10?s[i*j%10]:"")+" "}o+="\\n"}`)

Tôi sẽ cố gắng để chơi golf này sau.


0

Hồng ngọc , 136 byte

Số byte trong UTF-8, phải là 128 byte với các ký tự Han được tính là 2 thay vì 3.

1.upto(9){|x|p (1..x).map{|y|[y,x,x*y/10,?X,x*y%10].join.sub(/(?<=0)X|1(?=X[1-9])|0$/,'').tr"0-9X","得一二三四五六七八九十"}}

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

  1. Xây dựng các chuỗi từ các chữ số của số nhân và sản phẩm với chuỗi sau được phân tách bằng cách Xgiữ chỗ cho .
  2. Làm một số điều thú vị để bỏ qua Xcác sản phẩm <10, những sản phẩm hàng đầu cho các sản phẩm "-teen" và các số 0 ở cuối.
  3. Dịch các chữ số và Xký tự Hán.

0

/// , 301 byte (GBK *)

/*/\/\///1/一*2/二*3/三*4/四*5/五*6/六*7/七*8/八*9/九*0/十*=/得*I/
1*t/ 2*T/ 3/11=1I2=2t2=4I3=3t3=6T3=9I4=4t4=8T402 4406I5=5t510T505 4520 55205I6=6t602T608 46204 5630 66306I7=7t704T7201 47208 57305 67402 77409I8=8t806T8204 48302 5840 68408 78506 88604I9=9t908T9207 49306 59405 69504 79603 89702 99801

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

* Spec rõ ràng cho phép chuyển đổi GBK → Unicode.


0

Pyth , 49 ký tự, 71 byte

J" 一二三四五六七八九"jmj;m+s@LJkr6>3+\得j\十@LJj*FkT,RdSdS9

Sử dụng mã hóa UTF-8. Dùng thử trực tuyến tại đây .

Trong phần giải thích sau đây, các ?ký tự là thay thế cho các ký tự tiếng Trung chính xác - Tôi quá lười biếng để sắp xếp mọi thứ đúng cách ...

J" ?????????"jmj;m+s@LJkr6>3+\?j\?@LJj*FkT,RdSdS9   
J" ?????????"                                       Assign space + glyphs for 1-9 to J
                                               S9   [1-9]
              m                                     Map each element, as d, using:
                                             Sd       [1-d]
                                          ,Rd         Pair each element of the above with d
                                                        e.g. for d=3, yields [[1,3],[2,3],[3,3]]
                 m                                    Map each element, as k, using:
                                      *Fk               Get the product of the pair
                                     j   T              Get decimal digits of the above (convert to base 10)
                                  @LJ                   Map each digit to its index in J
                               j\?                      Join the above on ? ("Ten")
                            +\?                         Prepend ? ("Get")
                          >3                            Take the last 3 characters of the above
                        r6                              Strip whitespace
                  +                                     Prepend to the above...
                   s@LJk                                Concatenated digits of k in lookup string
               j;                                     Join result on spaces
             j                                      Join result on newlines, implicit print
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.