Làm thế nào nhanh chóng tôi có thể nói chương trình của bạn?


26

Gần đây tôi đã quyết định tải xuống một số phần mềm đọc chính tả, để giúp viết bài của tôi. Tuy nhiên, nó không hoạt động tốt khi tôi viết mã, vì tôi phải thay đổi từ nói từ thành biểu tượng và quay lại. Thậm chí còn tệ hơn khi tôi viết mã bằng ngôn ngữ bí truyền, tất cả đều là biểu tượng.

Để làm cho việc sử dụng chương trình chính tả của tôi phù hợp hơn, tôi quyết định chuyển nó sang chế độ nhân vật, nơi tôi chỉ nói tên của từng nhân vật thay thế. Vấn đề được giải quyết! Mặc dù điều này làm trì hoãn ngày phát hành tiểu thuyết của tôi một chút ...

Vì vậy, giả sử rằng tên của một nhân vật càng dài thì càng mất nhiều thời gian để nói, tôi sẽ mất bao lâu để đánh vần một số chương trình / câu của mình?

Thông số kỹ thuật

Đưa ra một chuỗi chỉ bao gồm ASCII có thể in, trả về tổng của tên unicode của mỗi ký tự. Ví dụ, /được gọi SOLIDUSvới 7 ký tự, và ALATIN CAPITAL LETTER Avới 22 ký tự.

Nhưng hãy nhớ rằng, tôi phải nói to các chương trình của bạn để thực hiện chúng, vì vậy điểm của chúng sẽ dựa trên thời gian tôi nói chúng mất bao lâu, tức là tổng độ dài của tên unicode của mỗi ký tự.

Các trường hợp thử nghiệm:

Trong định dạng input => outputkhông có dấu vết / dấu cách hàng đầu trong đầu vào.

A      => 22
/      => 7
Once upon a time...           => 304
slurp.uninames>>.comb.sum.say => 530
JoKing => 124
!" #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        =>  1591
Double-check your \s on the last test case ;)   => 755
<say "<$_>~~.EVAL">~~.EVAL     => 388
,[.,]  => 58
19     => 19

Quy tắc:

  • Đầu vào cho chương trình của bạn sẽ chỉ bao gồm các ký tự ASCII có thể in được, nghĩa là các điểm mã từ 32 (dấu cách) đến 126 (dấu ngã).
    • Để thuận tiện, đây là danh sách độ dài của các ký tự bạn phải xử lý: [5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,15,20,17,8,12,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,18,13,19,5]
  • Đây là một chương trình tham khảo bạn có thể sử dụng để chấm điểm chương trình của bạn.
    • Peter Taylor đã chỉ ra rằng chương trình tham chiếu bình thường hóa một số ký tự unicode . Nó vẫn hoạt động với hầu hết các giải pháp, nhưng hãy thoải mái sửa nó nếu bạn cần
  • Vì bạn đang nói các ký tự thực sự trông như thế nào, giải pháp của bạn sẽ được ghi bởi các ký tự được hiển thị, không phải các byte liên quan. Điều này được hướng vào các ngôn ngữ với mã hóa tùy chỉnh.
    • Bạn có thể cho rằng tôi đã ghi nhớ toàn bộ thư viện Unicode và có thể nói bất kỳ ký tự lạ nào bạn sử dụng.
  • Xin lỗi Rogem, nhưng câu trả lời phải bao gồm các nhân vật có thể hiển thị. Không thể in được là tốt, tôi chỉ cần có thể đọc to các ký tự.
  • Dù bạn làm gì, đừng sử dụng trong chương trình của bạn.

9
ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMđây sẽ là tên đầy đủ của con tôi
Quintec

1
Chương trình này đạt 6 điểm trong chế độ từ: Hãy thử trực tuyến!
Neil

2
Chương trình tham khảo là lỗi. Hãy xem xét [thử nghiệm này] ( tio.run/##dY5PC4JAEMXvfYphYcNsWcrSi@Ahrx3rlB223FTSXdk/ canh ) trong đó \x[2126]được tính là \x[3a9].
Peter Taylor

Câu trả lời:


13

Java 8, điểm 846 838 822 816

ௐ->ௐ.map(ˇ->Character.getName(ˇ).length()).sum()

-8 điểm nhờ @tsh thay thế _1bằng .
-22 điểm nhờ @ ASCII - chỉ thay thế bằng ˇ$bằng .

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

Giải trình:

Các ˇđược sử dụng thay vì sctôi thường sử dụng, bởi vì các chữ cái viết thường là tất cả 20 (tức là LATIN SMALL LETTER S), nhưng ( TAMIL OM) là 8 và ˇ( CARON) là 5.

ௐ->                         // Method with IntStream parameter and integer return-type
  ௐ.map(ˇ->                 //  Map each character to:
      Character.getName(ˇ)  //   Get the name of the character
               .length())   //   Get the length of that name
   .sum()                   //  And after the map: sum all lengths together,
                            //  and return it as result

1
Tôi thích cách công cụ Java này đánh bại câu trả lời 05AB1E cả về byte và về mặt điểm số ...
Erik the Outgolfer

@EriktheOutgolfer Ikr. Tôi đoán là đã xây dựng. ;)
Kevin Cruijssen

@KevinCruijssen Nó tiết kiệm một vài byte mà bạn không phải push compressed integer 87235805968599116032550323044578484972930006625267106917841: P
Quintec

1
Sử dụng thay vì _1sẽ tiết kiệm một số điểm.
tsh

1
@KevinCruijssen Peter Taylor's ( OHM SIGN) dài 8 ký tự. Ngoài ra haha ​​Tôi không biết nó không hợp lệ, chỉ là giả sử vì nó hợp lệ trong C # và Peter _1cũng đã sử dụng ( chương trình để tìm tên biến ngắn , ký tự hộp không thể được sử dụng)
ASCII


7

Japt v2.0a1 -x, Điểm 926 908 875 865 829 791 789

Đưa đầu vào như một mảng các ký tự.

®cg`061742//0.450./..//.2/5117385`c+51 r\A_p26}  n# 

Hãy thử hoặc chạy tất cả các trường hợp thử nghiệm trên TIO

( APOSTROPHEđược bỏ qua trong trường hợp thử nghiệm thứ 6 trên TIO vì Japt không thể xử lý cả dấu ngoặc kép và dấu ngoặc kép trong cùng một chuỗi đầu vào)


Giải trình

®cg`...`c+51 r\A_p26}  n#      :Implicit input of character array
®                              :Map
 c                             :  Character code
  g                            :  Index into (0-based, with wrapping)
   `...`                       :    The string described below
        c+51                   :    Increment the codepoint of each by 51 (="8cKidj55gebbc9agh895c97a99baa9bba59ebhddMjfkh")
                               :    (Space closes the above method)
             r                 :    Replace
              \A               :      RegEx /[A-Z]/g
                _              :      Pass each match through a function
                 p26           :        Repeat 26 times
                    }          :      End function
                               :    (Space closes the replace method)
                               :  (Space closes the indexing method)
                       n       :  Convert to integer
                        #      :    From base 32 (note the trailing space)
                               :Implicitly reduce by addition and output

Xây dựng chuỗi

(Điểm bao gồm các bước và các ký tự phụ cần thiết để đảo ngược mỗi sửa đổi)

  1. Mảng đã cho điểm cơ bản là 2161 .
  2. Chuyển đổi từng thành một ký tự trong một cơ sở >=23và nối với một chuỗi ghi được 1832 .
  3. Thay thế cả hai lần chạy mkbằng một ký tự viết hoa, ghi được 963 .
  4. Vẫn còn quá nhiều chữ cái đắt tiền nên tiếp theo tôi đã cố gắng loại bỏ chúng bằng cách giảm các mật mã của tất cả các ký tự. 5là nhân vật có điểm mã thấp nhất ( 53) nên tôi bắt đầu với 52, điểm 756
  5. Sau khi thử tất cả các số không để lại chữ cái nào trong chuỗi, 51cho điểm cao nhất là 738
  6. Cuối cùng, thay thế dấu ngoặc kép bằng backticks rẻ hơn một chút đã cho điểm 734 . Backticks trong Japt thường được sử dụng để bao quanh và giải nén chuỗi nén, nhưng may mắn thay, không có ký tự nào trong chuỗi này được chứa trong thư viện của Shoco

Chuỗi cuối cùng, do đó, chứa các ký tự tại các điểm mã sau:

[5,48,24,54,49,55,2,2,52,50,47,47,48,6,46,52,53,5,6,2,48,6,4,46,6,6,47,46,46,6,47,47,46,2,6,50,47,53,49,49,26,55,51,56,53]

4

05AB1E , điểm 963

Îv•Fδà‚<0?9½mΣ@×ƶC₁vc-™uΔ_ε'•21вεD3‹i22α₂и}}˜yÇ32-è+

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

Î               # Push 0 and the input-string
 v              # Loop `y` over the characters of this input-string:
  Fδà‚<0?9½mΣ@×ƶCvc-™uΔ_ε'•
               '#  Push compressed integer 87235805968599116032550323044578484972930006625267106917841
   21в          #  Converted to Base-21 as list: [5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,0,19,15,20,17,8,12,2,18,13,19,5]
    ε           #  Map over this list:
     D3i       #   If the value is smaller than 3:
         22α    #    Take the absolute difference of this value with 22
            ₂и  #    Repeat it 26 times as list
    }}          #  Close the if-statement and map
      ˜         #  Flatten the list
       yÇ       #  Get the unicode value of the current character
         32-    #  Subtract 32
            è   #  Index it into the list of integers
             +  #  And add it to the sum
                # (and output the sum implicitly as result after the loop)

Xem 05AB1E mẹo này của tôi (phần Làm thế nào để nén các số nguyên lớn?Làm thế nào để liệt kê số nguyên nén? ) Để hiểu tại sao •Fδà‚<0?9½mΣ@×ƶC₁vc-™uΔ_ε'•21в[5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,0,19,15,20,17,8,12,2,18,13,19,5].


4

C # (Trình biên dịch tương tác Visual C #) (điểm 1627 1116 1096 1037 1019 902)

Ω=>Ω.Sum(ˇ=>(31&-ˇ)>5&ˇ>62?22-ˇ/91*2:"♁♌♊♇♇♈♅♆♌♍♄♅♁♈♅♃♆♅♅♇♆♆♅♇♇♆♁♅♊♇♍♉♉♏♋♐♍♄♈♎♉♏♁"[ˇ-6-ˇ/33*26]-9788)

Điều này sử dụng không có cơ sở dữ liệu tích hợp: chỉ một số vỏ đặc biệt cho các chữ cái và bảng tra cứu.

Bộ kiểm tra trực tuyến .

Nó không thể tự chấm điểm, vì hầu hết các ký tự không nằm trong phạm vi, bao gồm các biến CARONOHM SIGNký hiệu hoàng đạo được sử dụng để mã hóa bảng tra cứu.

Cảm ơn ASCII - chỉ cho nhiều đề xuất.


Bạn đã sử dụng chương trình chấm điểm nào
chỉ có ASCII vào

tio.run/##NZDrdpNAFIX/z1OMY0wgwhCg0NAEanpT22jVaquGiAQnYbgMhIHWGJO36gv0xSJrBf@cdS57r72@E3A54HR3UbFgyMuCsoVEWenM7d3To@08PeKbKhU82xG2suDJdgd2xLauikPNbLc9R9eONU32FFPtakeI5CyOExrly5CShC4iSuMoonEcEcriZZryrFyGSZFygiZebdP1rmZOZcsUdwMwzwriB6Fw7xfQh5RBRh4m0zVAIyRBRYGaBpCybw8BumYBgVWesVpb0pRgjPc3vXcAEE@qIscVo8xPCXccHGTpDPMqxdxf7XWG3gPoMruqifcLVauNz1wEn7detDuC2H0pyVjpqZp@YJiHfetoMLSd41ejk9Oz84vXb95eXo3fvb/@8PHTzecvt3dfv32fuO70h/fTnwW/yHwR0ihOUpbly4KX1f3D79Wf9d/NtskyLBWgs6yaJUQOQhLEcJVVBXRdDmukMiQw8XkJS1KXwOcEDsQG3TAAGtYU0EXDludst/j8djR20f@u@UK/D5A0wdK0oa1H1WrCLbARwV1BSzKmjAgttPYly9hAaDsQrueCL26QONj9Aw
ASCII chỉ

2
Chỉ @ ASCII, tôi đã sử dụng câu trả lời Python bên dưới; câu trả lời Java cũng đưa ra 1627. Vấn đề dường như là giải pháp tham chiếu có lỗi: là U + 2126, OHM ĐĂNG KÝ , chứ không phải GỌI VỐN VỐN OMEGA.
Peter Taylor

1
Tên điểm 5:, không có tên nào khác ngắn hơn 8 mà C # chấp nhận, cũng không được xác minh với chương trình Java
ASCII - chỉ

1
@Kevin, theo nhận xét trước đây của tôi, việc triển khai tham chiếu là lỗi. Tôi nghĩ rằng nó đang áp dụng chuẩn hóa để biến ký tự nguồn OHM ĐĂNG KÝ thành GREEK VỐN THƯỞNG OMEGA.
Peter Taylor

4

R; Điểm: 3330 1586 1443

Cũng thách thức trong R do thiếu tích hợp.

Chà, mã bây giờ chủ yếu là @ Giuseppe nhưng không sao. Tôi đã có thể thực hiện một chỉnh sửa nhỏ để chơi gôn hơn nữa bằng cách thay thế * bằng ~ và s bằng dấu chấm.

Cảm ơn @Nick Kennedy đã giảm xuống còn 1443 bằng cách sử dụng phép thuật phức tạp "một phiên bản được mã hóa UTF8 của dãy số"

function(.)sum((c(+",752230178/0,30.1002110221,052844",61~26,+":6;8/3",59~26,+"94:,")-39)[+.-31]);`+`=utf8ToInt;`~`=rep

Dùng thử trực tuyến


1769 điểm - thực hiện một nỗ lực tối thiểu để nén các giá trị ...
Giuseppe

2
Ngoài ra, utf8ToIntlà một lệnh siêu hữu ích cho việc chơi gôn :-) Tôi đã không tham gia PPCG được một tháng hoặc lâu hơn, vì vậy thật tuyệt khi thấy những người mới chơi golf trong R!
Giuseppe

Ah, tôi đã có cách để nén nó, nhưng không biết về utf8ToInt. Tôi sẽ phải làm việc này vào tối nay / ngày mai.
Hội trường CT

1
Đó chỉ là nhiều dòng mã trong chương trình / đoạn mã không ảnh hưởng đến bytecount - hữu ích để thực hiện một số thử nghiệm trong
ASCII - chỉ

1
Xuống tới 1443: tio.run/##xc09DoIwFADgu3ShTR/NH Sử dụng phiên bản được mã hóa UTF8 của dãy số.
Nick Kennedy


2

Perl 5 -pl , điểm 723

s,\N{OX}*.,_charnames'viacode ord$&,ge,$_=y,,,c

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

Giải trình

s,        ,                        ,ge  # Replace globally
  \N{OX}*   # zero or more OX characters 🐂, loads the
            # _charnames module as side effect,
         .  # any character
           _charnames'viacode ord$&  # with its Unicode character name
                                     # (using old package delimiter).
                                      ,$_=y,,,c  # Set $_ to its length

2

Tùy viên , 1934

Sum@{ToBase[FromBase[Ords@"!ZByru=#9fBYb$a3Si0^pU,ZP#3$cd'(c-_lhu]h(]5;!W|?M4:<_^sU;N&XFN`t:u"-32,95],23][Ords@_-32]}

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

Nén và lập chỉ mục đơn giản.


: P có vẻ như sử dụng tra cứu thông minh hơn (xem câu trả lời C #) sẽ giúp ghi điểm. Hoặc thậm chí chỉ sử dụng bộ ký tự không chứa các chữ cái để nén
ASCII - chỉ

1

C # (Trình biên dịch tương tác Visual C #) , Điểm: 4007 3988 3759 3551 2551

ˇ=>ˇ.Sum(_=>new[]{5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,15,20,17,8,12,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,18,13,19,5}[_-32])

Tôi cảm thấy bị nghiền nát bởi giải pháp của Peter Taylor ở trên. Cảm ơn Peter Taylor đã chỉ ra một bảng tra cứu đơn giản tốt hơn giải pháp từ điển trước đây của tôi.

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


Điều này tệ hơn đáng kể so với bảng tra cứu trực tiếp: _1=>_1.Select(_2=>new int[]{5,16,14,11,11,12,9,10,16,17,8,9,5,12,9,7,10,9,9,11,10,10,9,11,11,10,5,9,14,11,17,13,13,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,15,20,17,8,12,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,18,13,19,5}[_2-32]).Sum()điểm 2786.
Peter Taylor
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.