Dòng chữ và số đếm đường cong


10

Đưa ra một chuỗi đầu vào, viết chương trình xuất ra tổng số dòng và đường cong mà nó có.

Các thách thức

  • Lấy đầu vào từ STDIN, hoặc bất kỳ phương thức nhập nào khác.
  • Đầu ra STDOUT, hoặc bất kỳ phương thức đầu ra nào khác, tổng số dòng và đường cong có trong chuỗi, theo thứ tự đó , dựa trên bảng dưới đây trong đoạn mã.
  • Bất kỳ ký tự không chữ và số nên được bỏ qua.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là , vì vậy mã ngắn nhất sẽ thắng.

Làm rõ

  • Các đường và đường cong được xác định bởi phông chữ được sử dụng trên Stackexchange cho code blocks.
  • Vòng tròn (như O, o, 0) và dấu chấm (i, j ), được coi là 1 đường cong mỗi đường cong.
  • Đầu vào có thể là một chuỗi, danh sách các ký tự, luồng ký tự, mã byte, v.v.
  • Đầu ra có thể là một mảng các số nguyên, tuple của số nguyên, chuỗi bằng dấu phẩy, vv Hai số phải được tách biệt, vì thế 104là không hợp lệ, nhưng 10,4, 10 4, 10\n4, [10,4], (10, 4), và vân vân là.
  • Heading và trailing khoảng trắng là hoàn toàn chấp nhận được.

Đầu vào và đầu ra mẫu

# Format: str -> line, curve
hi -> 4, 2
HELLO WORLD -> 20, 4
l33+ 5pEak -> 13, 8
+=-_!...?~`g@#$%^ -> 1, 2
9001 -> 5, 3
O o O o O o -> 0, 6

Bảng nhân vật

Char | Lines | Curves
0    | 1     | 1
1    | 3     | 0
2    | 1     | 1
3    | 0     | 2
4    | 3     | 0
5    | 2     | 1
6    | 0     | 1
7    | 2     | 0
8    | 0     | 2
9    | 0     | 1
A    | 3     | 0
B    | 1     | 2
C    | 0     | 1
D    | 1     | 1
E    | 4     | 0
F    | 3     | 0
G    | 2     | 1
H    | 3     | 0
I    | 3     | 0
J    | 1     | 1
K    | 3     | 0
L    | 2     | 0
M    | 4     | 0
N    | 3     | 0
O    | 0     | 1
P    | 1     | 1
Q    | 0     | 2
R    | 2     | 1
S    | 0     | 1
T    | 2     | 0
U    | 0     | 1
V    | 2     | 0
W    | 4     | 0
X    | 4     | 0
Y    | 3     | 0
Z    | 3     | 0
a    | 0     | 2
b    | 1     | 1
c    | 0     | 1
d    | 1     | 1
e    | 1     | 1
f    | 1     | 1
g    | 1     | 2
h    | 1     | 1
i    | 3     | 1
j    | 1     | 2
k    | 3     | 0
l    | 3     | 0
m    | 3     | 2
n    | 2     | 1
o    | 0     | 1
p    | 1     | 1
q    | 1     | 1
r    | 1     | 1
s    | 0     | 1
t    | 1     | 1
u    | 1     | 1
v    | 2     | 0
w    | 4     | 0
x    | 4     | 0
y    | 1     | 1
z    | 3     | 0

2
Những gì được tính là một đường và đường cong? Là s2 đường cong hay 1? Là thân trong jcả một đường và đường cong? Sẽ là tốt nhất nếu bạn chỉ có thể liệt kê các giá trị cần thiết cho tất cả các chữ cái.
Ad Hoc Garf Hunter 16/07/19

4
Tôi thực sự không hiểu các downvote về cái này. Đối với tôi đây là một thách thức được chỉ định rõ ràng với các trường hợp thử nghiệm tốt, triển khai tham chiếu và bảng các giá trị được mong đợi (cho dù đó là quyền kỹ thuật hay lo lắng là vấn đề quan điểm cá nhân nhưng không liên quan gì đến thử thách) .. Nhập liệu và đầu ra là linh hoạt. Nếu ai đó có thể giải thích những gì sai với điều này, tôi sẽ rất biết ơn.
ElPedro

3
Bạn có thể vui lòng cung cấp các giá trị cho mỗi ký tự theo định dạng mà chúng tôi có thể dễ dàng sao chép hơn; Snippet là hoàn toàn không cần thiết.
Shaggy

4
onên là 0 dòng, 1 đường cong
Giuseppe

2
Tiếp tục từ phía trên ... Downvote không có phản hồi cho OP ít cơ hội để cải thiện những thách thức của họ trong tương lai.
ElPedro 17/07/19

Câu trả lời:


8

Haskell, 214 199 188 175 byte

 g 0=[]
 g n=mod n 5:g(div n 5)
 d#s=sum[n|c<-d,(i,n)<-zip['0'..]$g s,c==i]
 f s=(s#0x300BBD37F30B5C234DE4A308D077AC8EF7FB328355A6,s#0x2D5E73A8E3D345386593A829D63104FED5552D080CA)

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

Số lượng đường và đường cong là chữ số của số cơ sở 5 và được lưu dưới dạng số cơ sở 16. Chức năng gdịch trở lại cơ sở-5.

Chỉnh sửa: -13 byte nhờ @cole.


1
169 byte nếu bạn có thể lấy một danh sách các mã. Đi để khám phá việc chuyển cái này sang biến thể chuỗi
cole

1
175 byte nếu bạn phải sử dụng chuỗi (đã xóa nhận xét trước đó của tôi kể từ khi tôi bỏ đi 3 byte tầm thường).
cole

@cole: cảm ơn vì những cải tiến. Đi cùng với một danh sách các số nguyên cảm thấy như gian lận, bởi vì thách thức được gắn thẻ là "chuỗi". Mặt khác, các quy tắc cho phép "mã byte" là định dạng đầu vào hợp lệ. Tuy nhiên, nhiều câu trả lời khác cũng sử dụng một số loại chuyển đổi char -> số nguyên. Không biết phải làm gì.
nimi

6

05AB1E , 78 69 65 byte

-4 byte nhờ Kevin Cruijssen, Đi và kiểm tra câu trả lời 05AB1E thậm chí còn tốt hơn của anh ấy

žKÃÇ48-©•7ć_qýÊΣŸßαŽ_ì¡vFÛ–ÄÔ™”súyån!₁ζB?òrβÂ@µk₆¼×¬°•5в2ä`®èrè‚O

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

Đầu ra dưới dạng [Đường cong, Đường]

Tôi thực sự rất tệ ở 05AB1E tôi mới phát hiện ra. Chắc chắn có thể lưu nhiều byte hơn nếu tôi có thể nhận được 05AB1E ètrong danh sách danh sách của mình


Giải trình

žKÃ                                    #Filter out non alpha-nums
    Ç48-                               #Convert to ascii and subtract 48 so "0" is 0 etc.
        ©                              #Store that for later
          •...•5в                      #De-compress compressed list 
                 2ä                    #Split into 2 chunks (lines + curves)
                   `                   #Separate them onto the stack 
                    ®                  #Get the value that we stored 
                     èrè               #Apply indexing to both lists
                        ‚              #Put our indexed values back into a list
                         O             #Sum our lists

1
Đầu ra của bạn bị đảo ngược. Nó nên line curve, không phải curve line.
bigyihsuan

1
Đầu ra có thể là một mảng các số nguyên, bộ số nguyên, chuỗi được phân tách bằng dấu phẩy, v.v ... Hai số phải tách biệt @bigyihsuan chúng riêng biệt, tôi không thấy vấn đề là gì
Dữ liệu hết hạn

1
Quy tắc nào nói Output to STDOUT, or any other output method, the total number of lines and curves contained in the string, in that order. Lưu ý in that order, vì vậy line curve.
bigyihsuan

2
Tôi đồng ý với @ExpiredData về điều này. Có thể chỉ định trong thử thách rằng thứ tự sẽ được nêu trong câu trả lời. Thế là đủ để có được.
ElPedro

1
53 byte (và với [Line, Curve]thứ tự đầu ra, mặc dù đó là sự trùng hợp ngẫu nhiên và không cố ý).
Kevin Cruijssen

5

Thạch , 45 byte

ØBċþSḋ“yƘ.ṪñF[)µṡṭɗḌyė$Ṫk“¢⁶KɱzV$QḂḥỵṙu’b5,3¤

Liên kết đơn âm chấp nhận danh sách các ký tự mang lại danh sách (hai) số nguyên.

Hãy thử trực tuyến! Hoặc xem bộ thử nghiệm .

Làm sao?

ØBċþSḋ“...“...’b5,3¤ - Link: list of characters, T
ØB                   - base-chars = "01...9A...Za...z'
   þ                 - outer product with T using:
  ċ                  -   count occurrences
    S                - sum -> [n(0), n(1), ..., n(9), n(A), ..., n(Z), n(a), ..., n(z)]'
                   ¤ - nilad followed by link(s) as a nilad:
      “...“...’      -   list of two large integers (encoded in base 250)
                5,3  -   five paired with three = [5,3]
               b     -   to base  -> [[Lines(0), Lines(1), ...], Curves(0), Curves(1), ...]
     ḋ               - dot-product

5

Scala , 235 byte

val a=('0'to'9')++('A'to'Z')++('a'to'z')
def f(s:String)=s.filter(a.contains(_)).map(c=>"gdgkdhfckfdlfgedhddgdcedfgkhfcfceeddkgfggglgilddnhfgggfggceegd"(a.indexOf(c))-'a').map(x=>(x%5,x/5)).foldLeft((0,0))((x,y)=>(x._1+y._1,x._2+y._2))

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

Không quá nhỏ, có lẽ có thể được chơi golf hơn nữa.
Lưu ý: Chuỗi ký tự gồm 52 ký tự giống như một từ điển ánh xạ một ký tự sang một ký tự khác biểu thị số lượng đường và đường cong theo bảng sau:

Curves|Lines
      |0 1 2 3 4
----------------
     0|a b c d e
     1|f g h i j
     2|k l m n o

5

Python 2 , 159 154 byte

Cho bất kỳ nhân vật lines*4 + curves cho giá trị từ 0 đến 16. Base-36 được sử dụng để mã hóa các giá trị này (1 ký tự = 1 giá trị).

-5 byte nhờ @Chas Brown

lambda s:map(sum,zip(*(divmod(int("5c52c918210000000c615gc9cc5c8gc15291818ggcc00000025155565d6cce915551558gg5c"[ord(x)-48],36),4)for x in s if'/'<x<'{')))

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

Python 2 , 141 byte

Đây là một cổng của giải pháp Python3 của tôi. Phiên bản này xuất ra một danh sách các int dài, vì vậy nó trông giống như [4L, 2L]thay vì [4, 2].

lambda s:map(sum,zip(*(divmod(int("8BK5NLC8RS10XWUX12BG408C2UELUAFEOVARZKCHEEDDMXG09L48ZG",36)/13**(ord(x)-48)%13,3)for x in s if'/'<x<'{')))

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


2
154 byte sử dụng base36 và '/'<x<'{'thay vì x.isalnum().
Chas Brown

1
@Chas Brown cảm ơn! Tôi cũng đã suy nghĩ '/'<x<'{', nhưng tôi đã cố gắng đưa nó vào biểu hiện để loại bỏ iflà tốt.
Daniil Tutubalin

4

Thạch , 51 byte

ØBiⱮị“Æƭ&¶*ṪḳAøƬsøD<~²ṂvṠỤṣT3rdʠ¬⁻ÇṆṇ.ÑƑaȮż’b5¤s2¤S

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

Một liên kết đơn âm lấy một chuỗi làm đầu vào và trả về một danh sách các số nguyên là [lines, curves]



4

Võng mạc 0.8.2 , 160 byte

$
¶$`
T`dLl`13103202003101432331324301020202443301011111313332011101124413`^.*
T`dLl`10120110210211001001000011211010000021111121120021111111100010`.*$
.
$*
%`1

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

$
¶$`

Nhân đôi chuỗi đầu vào.

T`dLl`13103202003101432331324301020202443301011111313332011101124413`^.*

Đếm từng dòng của nhân vật trên dòng đầu tiên.

T`dLl`10120110210211001001000011211010000021111121120021111111100010`.*$

Đếm các đường cong của mỗi nhân vật trên dòng thứ hai.

.
$*
%`1

Tính tổng các chữ số riêng biệt trên mỗi dòng.


4

R , 164 153 byte

function(s,`!`=utf8ToInt,x=(!"




")[match(!s,c(48:57,65:90,97:122),0)])c(sum(x%%5),sum(x%/%5))

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

Tôi có cùng ý tưởng với câu trả lời của nimi bằng cách sử dụng mã hóa cơ sở 5 nhưng mã hóa thành các ký tự ASCII thay vì cơ sở 16. Sử dụng nomatch = 0trongmatch để loại bỏ các ký tự không tự chữ và số.

Trả về curves lines.


4

Than , 60 byte

IE⟦”)⊞∧cⅉ→ÞYγμ◧⊞¶u№¶⊘¶∕«⁸””)∨⧴|υ;↷dLτIüO¦:”⟧Σ⭆Φθ№⭆ι⍘ξφλ§ι⍘λφ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

E⟦”)⊞∧cⅉ→ÞYγμ◧⊞¶u№¶⊘¶∕«⁸””)∨⧴|υ;↷dLτIüO¦:”⟧

Đây là một mảng gồm hai chuỗi 1310320200010111113133320111011244133101432331324301020202443310120110212111112112002111111110001002110010010000112110100000. Các chuỗi sau đó được ánh xạ.

Φθ№⭆ι⍘ξφλ

Các yếu tố của đầu vào được lọc qua việc chúng có được chứa trong (62) ký tự của bảng chữ cái chuyển đổi cơ sở mặc định hay không.

⭆...§ι⍘λφ

Các phần tử còn lại sau đó được chuyển đổi từ cơ sở (62) và sau đó được lập chỉ mục vào chuỗi ánh xạ.

I...Σ...

Các chữ số được tính tổng và chuyển trở lại chuỗi để in ngầm.


4

Trăn 3 , 165 159 148 146 byte

Đối với bất kỳ ký tự nào (bao gồm cả chữ và số) lines*3 + curves cho giá trị từ 0 đến 12, vì vậy chúng tôi có thể sử dụng số cơ sở dài 13 để mã hóa dữ liệu. Để làm cho nó ngắn hơn, nó được chuyển đổi thành cơ sở-36.

Cảm ơn @Chas Brown vì những lời khuyên tuyệt vời.

-2 byte bằng cách chuyển đổi lambda sang chương trình.

print(*map(sum,zip(*(divmod(int("8BK5NLC8RS10XWUX12BG408C2UELUAFEOVARZKCHEEDDMXG09L48ZG",36)//13**(ord(x)-48)%13,3)for x in input()if'/'<x<'{'))))

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


4

Python 2 , 179 166 165 163 byte

lambda s:[sum(p[:max(0,p.find(c))].count(',')for c in s)for p in',02BDJPbdefghjpqrtuy,57GLRTVnv,14AFHIKNYZiklmz,EMWXwx',',02569CDGJOPRSUbcdefhinopqrstuy,38BQagjm']

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

Trả về một danh sách [curves, lines].


3

Python 2 , 525 byte

l=c=0;e=[(1,1),(3,0),(1,2),(0,2),(3,0),(2,1),(0,1),(2,0),(0,2),(0,1),(3,0),(1,2),(0,1),(1,1),(4,0),(3,0),(2,1),(3,0),(3,0),(1,1),(3,0),(2,0),(4,0),(3,0),(0,1),(1,1),(0,2),(2,1),(0,1),(2,0),(0,1),(2,0),(4,0),(4,0),(3,0),(3,0),(0,2),(1,1),(0,1),(1,1),(1,1),(1,1),(1,2),(1,1),(3,1),(1,2),(3,0),(3,0),(3,2),(2,1),(0,1),(1,1),(1,1),(1,1),(0,1),(1,1),(1,1),(2,0),(4,0),(4,0),(1,1),(3,0)]
d='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
for i in input():
 if i in d:
  p=d.find(i);l+=e[p][0];c+=e[p][1];
print l,c

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

Cách tiếp cận tương tự để thực hiện tham chiếu nhưng có phần ngắn hơn.



2
Nghĩ về điều đó trong khi tôi đang có một cốc bia rất cần thiết ở Biergarten sau giờ làm việc nhưng nó quá nhiều công việc để định dạng lại tiện dụng của tôi :)
ElPedro 16/07/19

1
@HermanL Hãy đăng bài như câu trả lời của riêng bạn. Tôi không có thời gian để cập nhật đêm trước.
ElPedro

2
265 byte với việc chơi gôn nhiều hơn một chút ...
Chas Brown


2

Perl 5 -MList::Util=sum -p , 180 byte

say sum y/0-9A-Za-z/13103202003101432331324301020202443301011111313332011101124413/r=~/./g;$_=sum y/0-9A-Za-z/10120110210211001001000011211010000021111121120021111111100010/r=~/./g

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


2

05AB1E , 53 byte

•xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ5вR2ôžKISk®KèøO

Dùng 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:

xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ
                 '# Compressed integer 101629259357674935528492544214548347273909568347978482331029666966024823518105773925160
 5в               # Converted to base-5 as list: [1,0,2,0,0,2,1,0,1,2,0,3,2,0,1,1,0,3,1,1,0,3,0,3,0,4,0,4,0,2,1,0,0,2,1,0,1,2,2,0,1,1,1,0,0,3,0,4,0,2,0,3,1,1,0,3,0,3,1,2,0,3,0,4,1,1,1,0,2,1,0,3,0,3,1,1,0,4,0,4,0,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,2,2,3,0,3,0,3,2,1,1,3,1,1,2,1,1,1,1,1,1,1,1,0,1,1,2,0]
   R              # Reverse this list (due to the leading 0)
    2ô            # Split it into pairs: [[0,2],[1,1],[0,1],[1,1],[1,1],[1,1],[1,2],[1,1],[3,1],[1,2],[3,0],[3,0],[3,2],[2,1],[0,1],[1,1],[1,1],[1,1],[0,1],[1,1],[1,1],[2,0],[4,0],[4,0],[1,1],[3,0],[3,0],[1,2],[0,1],[1,1],[4,0],[3,0],[2,1],[3,0],[3,0],[1,1],[3,0],[2,0],[4,0],[3,0],[0,1],[1,1],[0,2],[2,1],[0,1],[2,0],[0,1],[2,0],[4,0],[4,0],[3,0],[3,0],[1,1],[3,0],[1,1],[0,2],[3,0],[2,1],[0,1],[2,0],[0,2],[0,1]]
      žK          # Push builtin string "abc...xyzABC...XYZ012...789"
        IS        # Push the input, split into characters
          k       # Get the index of each of these characters in the builtin-string
           ®K     # Remove all -1 for non-alphanumeric characters that were present
             è    # Use these indices to index into the earlier created pair-list
              ø   # Zip/transpose; swapping rows/columns
               O  # Sum both inner lists
                  # (after which the result is output implicitly)

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 •xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ101629259357674935528492544214548347273909568347978482331029666966024823518105773925160•xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ5в[1,0,2,0,0,2,1,0,1,2,0,3,2,0,1,1,0,3,1,1,0,3,0,3,0,4,0,4,0,2,1,0,0,2,1,0,1,2,2,0,1,1,1,0,0,3,0,4,0,2,0,3,1,1,0,3,0,3,1,2,0,3,0,4,1,1,1,0,2,1,0,3,0,3,1,1,0,4,0,4,0,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,2,2,3,0,3,0,3,2,1,1,3,1,1,2,1,1,1,1,1,1,1,1,0,1,1,2,0].


1

Python 3 , 697 byte

def f(s):
    l=0;c=0;d={'0':(1,1),'1':(3,0),'2':(1,2),'3':(0,2),'4':(3,0),'5':(2,1),'6':(0,1),'7':(2,0),'8':(0,2),'9':(0,1),'A':(3,0),'B':(1,2),'C':(0,1),'D':(1,1),'E':(4,0),'F':(3,0),'G':(2,1),'H':(3,0),'J':(1,1),'K':(3,0),'L':(2,0),'M':(4,0),'N':(3,0),'O':(0,1),'P':(1,1),'Q':(0,2),'R':(2,1),'S':(0,1),'T':(2,0),'U':(0,1),'V':(2,0),'W':(4,0),'X':(4,0),'Y':(3,0),'Z':(3,0),'a':(0,2),'b':(1,1),'c':(0,1),'d':(1,1),'e':(1,1),'f':(1,1),'g':(1,2),'h':(1,1),'i':(3,1),'j':(1,2),'k':(3,0),'l':(3,0),'m':(3,2),'n':(2,1),'o':(0,1),'p':(1,1),'q':(1,1),'r':(1,1),'s':(0,1),'t':(1,1),'u':(1,1),'v':(2,0),'w':(4,0),'x':(4,0),'y':(1,1),'z':(3,0)};
    for i in s:
        if i in d:
            l+=d[i][0];c+=d[i][1];
    return l,c

Một nỗ lực đầu tiên đơn giản. Tôi đặt bảng vào một từ điển, lặp qua chuỗi, tăng một số bộ đếm và trả lại một tuple. Đầu vào là một chuỗi.

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


1
Tại sao không thi đấu? Trông ổn với tôi.
ElPedro

1
Tại sao downvote mà không có bình luận?
ElPedro

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.