Họ gọi tôi là Thanh tra Morse


20

Nhiệm vụ của bạn, nếu bạn chọn chấp nhận nó, là quyết định xem một chuỗi đầu vào đã cho là Dot-heavy hay Dash-heavy.

Một chuỗi có dấu chấm nặng khi biểu diễn morse của nó chứa nhiều dấu chấm hơn dấu gạch ngang. Ví dụ, chữ E là một dấu chấm đơn, có nghĩa là nó nặng.

Đầu vào

  • Chuỗi đầu vào sẽ chỉ chứa các ký tự trong phạm vi [a-z]hoặc [A-Z]. Bạn có thể quyết định xem tất cả chúng nên là chữ hoa hay tất cả chữ thường. AAAlà tốt, aaalà tốt, aAalà không.
  • Chuỗi đầu vào sẽ luôn có độ dài ít nhất 1 ký tự.
  • Bạn có thể cho rằng các chuỗi đầu vào sẽ không bao giờ có số lượng dấu chấm và dấu gạch ngang bằng nhau.

Đầu ra

Bạn nên trả về Truthy cho các đầu vào có chứa nhiều ký tự dấu chấm.
Bạn nên trả về Falsy cho các đầu vào có chứa nhiều ký tự gạch ngang.
Chỉnh sửa: Tôi cũng sẽ cho phép một giá trị dương cho dấu chấm và giá trị âm cho dấu gạch ngang.

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

| input | morse representation | result          |
|------------------------------------------------|
| S     | ...                  | Truthy          |
| k     | -.-                  | Falsy           |
| HELLO | .... . .-.. .-.. --- | Truthy          |
| code  | -.-. --- -.. .       | Falsy           |

Tài liệu tham khảo

Mã Morse quốc tế

Đây là . Mã ngắn nhất trong byte thắng.



4
Chúng ta có thể trả về giá trị trên 0 cho dotheavy và giá trị âm cho dash-heavy không?
Hiện thân của sự thiếu hiểu biết

@EmbodimentofIgnorance Điều đó hiệu quả với tôi, miễn là bạn chỉ định nó trong bài viết của mình. Tôi không nghĩ rằng nó thường vượt qua bài kiểm tra sai sự thật nhưng cảm giác đó là một giải pháp tốt trong trường hợp này vì vậy tôi sẽ cho phép nó
Bassdrop Cumberwubwubwub

Câu trả lời:


5

APL (Dyalog Extended) , 24  15 byte SBCS

-9 cảm ơn Ven

Hàm tiền tố ẩn danh lấy chữ hoa làm đối số.

>/'.-'⍧∊∘⌂morse

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

⌂morse chuyển đổi vào danh sách các chuỗi Morse
 sau đó
ε nlist (flatten)
'.-'⍧ đếm số lượng các dấu chấm và dấu gạch ngang ở chỗ
>/ chấm hơn dấu gạch ngang? (sáng hơn lớn hơn giảm)


Tại sao không có dfns Extended preload theo mặc định?
ngn

@ngn Hiện đã được tích hợp sẵn
Adám

7

IBM PC DOS, lắp ráp 8088, 54 35 byte

-19 byte sử dụng phương thức sai

ac2c 41d0 d8d7 7206 51b1 04d2 e859 240f 2c03 02e0 e2ea 3534 4527 4125 1303 1462 4523 13

Chưa được lắp ráp:

; compare dashes and dots in a morse code string
; input:
;   I: pointer to input string (default SI)
;   IL: length of input string (default CX)
;   TBL: pointer to data table (default BX)
; output:
;   Sign/OF flags: Dot-heavy: SF == OF (JGE), Dash-heavy: SF != OF (JL)
MORSE_DD    MACRO   I, IL, TBL
            LOCAL   LOOP_LETTER, ODD
        IFDIFI <I>,<SI>     ; skip if S is already SI
    MOV  SI, I              ; load string into SI 
        ENDIF
        IFDIFI <IL>,<CX>    ; skip if IL is already CX
    MOV  CX, IL             ; set up loop counter
        ENDIF
        IFDIFI <TBL>,<BX>   ; skip if TBL is already BX
    MOV  BX, OFFSET TBL     ; load letter table into BX
        ENDIF
LOOP_LETTER:
    LODSB                   ; load next char from DS:SI into AL, advance SI
    ;AND  AL, 0DFH           ; uppercase the input letter (+2 bytes)
    SUB  AL, 'A'            ; convert letter to zero-based index
    RCR  AL, 1              ; divide index by 2, set CF if odd index
    XLAT                    ; lookup letter in table
    JC   ODD                ; if odd index use low nibble; if even use high nibble
    PUSH CX                 ; save loop counter (since SHR can only take CL on 8088)
    MOV  CL, 4              ; set up right shift for 4 bits
    SHR  AL, CL             ; shift right
    POP  CX                 ; restore loop counter
ODD:
    AND  AL, 0FH            ; mask low nibble
    SUB  AL, 3              ; unbias dash/dot difference +3 positive
    ADD  AH, AL             ; add letter difference to sum (set result flags)
    LOOP LOOP_LETTER
        ENDM

TBL DB 035H, 034H, 045H, 027H, 041H, 025H, 013H, 003H, 014H, 062H, 045H, 023H, 013H

Giải trình

Được triển khai theo cú pháp Intel / MASM dưới dạng MACRO (về cơ bản là một hàm), chỉ sử dụng 8088 hướng dẫn tương thích. Nhập dưới dạng chuỗi chữ hoa (hoặc +2 byte để cho phép trường hợp hỗn hợp), kết quả đầu ra Truthy / Falsy là SF == OF(sử dụng JGhoặc JLđể kiểm tra).

Các giá trị bảng khác biệt chữ cái được lưu trữ dưới dạng các nhị phân, do đó chỉ mất tổng cộng 13 byte.

Bản gốc (54 byte):

; compare dashes and dots in a Morse code string
; input:
;   I: pointer to input string (default SI)
;   IL: length of input string (default CX)
;   TBL: pointer to data table
; output:
;   Carry Flag: CF=1 (CY) if dot-heavy, CF=0 (NC) if dash-heavy
MORSE_DD    MACRO   I, IL, TBL
            LOCAL   LOOP_LETTER
        IFDIFI <I>,<SI>     ; skip if S is already SI
    MOV  SI, I              ; load string into SI 
        ENDIF
        IFDIFI <IL>,<CX>    ; skip if IL is already CX
    MOV  CX, IL             ; set up loop counter
        ENDIF
    MOV  BX, OFFSET TBL     ; load score table into BX
    XOR  DX, DX             ; clear DX to hold total score
LOOP_LETTER:
    LODSB                   ; load next char from DS:SI into AL, advance SI
    ;AND  AL, 0DFH           ; uppercase the input letter (+2 bytes)
    SUB  AL, 'A'            ; convert letter to zero-based index
    XLAT                    ; lookup letter in table
    MOV  AH, AL             ; examine dot nibble
    AND  AH, 0FH            ; mask off dash nibble
    ADD  DH, AH             ; add letter dot count to total
    PUSH CX                 ; save loop counter (since SHR can only take CL)
    MOV  CL, 4              ; set up right shift for 4 bits
    SHR  AL, CL             ; shift right
    POP  CX                 ; restore loop counter
    ADD  DL, AL             ; add letter dash count to total
    LOOP LOOP_LETTER
    CMP  DL, DH             ; if dot-heavy CF=1, if dash-heavy CF=0
        ENDM

; data table A-Z: MSN = count of dash, LSN = count of dot
TBL DB 011H, 013H, 022H, 012H, 001H, 013H, 021H, 004H, 002H 
    DB 031H, 021H, 013H, 020H, 011H, 030H, 022H, 031H, 012H
    DB 003H, 010H, 012H, 013H, 021H, 022H, 031H, 022H

Giải trình

Được triển khai theo cú pháp Intel / MASM dưới dạng MACRO (về cơ bản là một hàm), chỉ sử dụng 8088 hướng dẫn tương thích. Nhập dưới dạng chuỗi, xuất kết quả Truthy / Falsy trong Cờ mang. Bảng điểm chứa số dấu gạch ngang và dấu chấm trên mỗi chữ cái.

Đầu vào là chữ hoa Thêm 2 byte để lấy trường hợp thấp hơn hoặc hỗn hợp.

Chương trình thử nghiệm mẫu (dưới dạng thực thi COM độc lập IBM PC DOS)

    SHR  SI, 1              ; point SI to DOS PSP
    LODSW                   ; load arg length into AL, advance SI to 82H
    MOV  CL, AL             ; set up loop counter in CH
    DEC  CX                 ; remove leading space from letter count

    MORSE_DD SI, CX, TBL    ; execute above function, result is in CF

    MOV  DX, OFFSET F       ; default output to "Falsy" string
    JA   DISP_OUT           ; if CF=0, result is falsy, skip to output
    MOV  DX, OFFSET T       ; otherwise CF=1, set output to "Truthy" string
DISP_OUT:
    MOV  AH, 09H            ; DOS API display string function
    INT  21H
    RET

T   DB "Truthy$"
F   DB "Falsy$"

Kết quả ví dụ:

nhập mô tả hình ảnh ở đây

Tải chương trình kiểm tra DD.COM

Hoặc dùng thử trực tuyến! Tôi không biết về một TIO trực tuyến để liên kết trực tiếp đến một tệp thực thi của DOS, tuy nhiên bạn có thể sử dụng điều này chỉ với một vài bước:

  1. Tải xuống DD.COM dưới dạng tệp ZIP
  2. Tới https://virtualconsoles.com/online-emulators/DOS/
  3. Tải lên tệp ZIP bạn vừa tải xuống, nhấp Bắt đầu
  4. Nhập DD Hellohoặc DD codenội dung trái tim của bạn

Tôi có thể đang thiếu một cái gì đó, nhưng macro đó không giả sử AH = 0 khi vào? Cấp, giả định đó là hợp lệ khi sử dụng chương trình thử nghiệm.
dạ dày

1
Có mắt quan sát! Giả định này dựa trên các giá trị đăng ký khởi động ban đầu của DOS, mà hầu hết tất cả các phiên bản của DOS đều 0000hdành cho nguồn AX: fysnet.net/yourhelp.htmlm
640KB

Từ người chơi lắp ráp này đến người khác: tốt đẹp ! Điểm phong cách bổ sung cho việc sử dụng hoàn toàn hướng dẫn tương thích 8088. Đó là một nền tảng trong đó chơi golf mã phần lớn tương đương với tối ưu hóa, và thực sự là một nghệ thuật bị mất. Sử dụng tốt XLATđể làm chính xác những gì nó có nghĩa là để làm. Nếu bạn thực sự tối ưu hóa tốc độ trên kích thước, bạn sẽ muốn thực hiện tra cứu kích thước WORD. Đây vẫn là một chiến thắng tốc độ ngay cả trên 8088 với bus ngoài 8 bit thiếu máu của nó, bởi vì bạn đang tăng gấp đôi thông lượng mà không tăng kích thước mã, tiết kiệm cho một XCHGhoặc hai hướng dẫn.
Cody Grey

@CodyGray cảm ơn! Thật thú vị khi một thử thách xếp hàng độc đáo với nền tảng và tập lệnh. Thêm vào đó, nó rất gọn gàng khi bạn có thể hoàn thành một cái gì đó trên 8088 của PC ban đầu trong 1 byte (chẳng hạn như XLAT), mặc dù phải mất 6 byte để thực hiện dịch chuyển bit theo đúng 4 vị trí (bên trong a LOOP).
640KB

Vâng Đối với hiệu suất, bạn chắc chắn sẽ muốn thực hiện 4 ca riêng biệt bằng 1, loại bỏ việc đẩy và bật. Nó thậm chí không có nhiều byte hơn (+2), do đó, nói chung là một chiến thắng ròng, nhưng không tốt cho việc chơi gôn. Niềm vui thực sự đến khi thử thách không phù hợp với ISA và bạn phải tập trung tìm kiếm những cách thức mới, sáng tạo để áp dụng các khối xây dựng hiện có. Các hướng dẫn chuỗi 1 byte thực sự tốt trên 8088 cho hiệu suất và cả chơi gôn. Tôi sử dụng chúng trong mã thực. XLAT là thứ tôi không thường sử dụng nhiều, tôi đoán vì các kiến ​​trúc hiện đại đã thiên vị tôi chống lại LUT.
Cody Grey

7

Java (JDK) , 131 124 110 84 64 byte

Thật thú vị, "dot" là dash-heavy và "dash" là dot-heavy.

Lấy đầu vào trong tất cả các giới hạn dưới dạng IntStream(cuộn xuống cho một phiên bản có thực tế Stringthêm 8 byte). Tôi đã có khá nhiều sự giúp đỡ khi chơi golf này: Cảm ơn Dữ liệu đã hết hạn để chơi golf 20 byte, đến Neil để chơi gôn 26 byte, đến Olivier Grégoire để chơi golf 18 byte và Kevin Cruijssen để chơi golf 2 byte.

Chứa 26 ký tự không thể in bên trong dấu ngoặc kép.

c->c.map(a->"".charAt(a-65)-4).sum()>0

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

Ung dung:

c -> // lambda taking input as an IntStream in upper case and returning a boolean
  c.map(a -> "" // map each character's ASCII value to its net dot impact (unprintable characters here)
    .charAt(a - 65) // translate the ASCII code into a zero-based index into the above string (65 is 'A')
    - 4) // unprintables are > 0, this restores the proper values
  .sum() > 0 // add up all the values, positive sum indicates a dot-heavy input string

Java (JDK) , 131 124 110 84 72 byte

Đối với những người theo chủ nghĩa thuần túy; lấy đầu vào là a String. Cảm ơn Dữ liệu đã hết hạn để chơi golf 20 byte, đến Neil để chơi gôn 26 byte và Olivier Grégoire để chơi golf 10 byte.

s->s.chars().map(a->"".charAt(a-65)-4).sum()>0

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

Ung dung:

s -> // lambda taking input as a String in upper case and returning a boolean
  s.chars() // convert to a stream of characters
  .map(a -> "" // map each character's ASCII value to its net dot impact (unprintable characters here)
    .charAt(a - 65) // translate the ASCII code into a zero-based index into the above string (65 is 'A')
    - 4) // unprintables are > 0, this restores the proper values
  .sum() > 0 // add up all the values, positive sum indicates a dot-heavy input string



2
Tại sao không sử dụng "35344527512513031462452313".charAt(a-65)-51?
Neil


1
@ OlivierGrégoire 66 byte của bạn thực sự là 65, vì bạn đã quên xóa dấu chấm phẩy. Tuy nhiên, có thể lưu thêm 1 byte bằng cách sử dụng các ký tự không thể in được: 64 byte
Kevin Cruijssen

4

Thạch , 21 byte

Oị“ÆġwıMƥ)ɠịṙ{’D¤Æm>4

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

Làm sao?

Oị“ÆġwıMƥ)ɠịṙ{’D¤Æm>4 - Link: list of characters ([A-Z]), S
                ¤     - nilad followed by link(s) as a nilad:
  “ÆġwıMƥ)ɠịṙ{’       -   base 250 integer = 14257356342446455638623624
               D      -   to decimal digits
                      -   -- that is the number of dots less the number of dashes plus 4
                      -      ... for each of OPQRSTUVWXYZABCDEFGHIJKLMN
O                     - ordinals of S   e.g. "ATHROUGHZ" -> [65,84,72,82,79,85,71,72,90]
 ị                    - index into (1-indexed & modular, so O gets the 79%26 = 1st item
                      -                                  or A gets the 65%26 = 13th item
                 Æm   - arithmetic mean
                   >4 - greater than 4?

4

05AB1E , 22 21 byte

Đã lưu một byte nhờ Kevin Cruijssen

SA•U(Õþć6Δ
»›I•‡3-O.±

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

Giải trình

•U(Õþć6Δ
»›I•

35344527512513031462452313 được nén vào cơ sở 255.

S              # split input into list of chars
       ‡       # transliterate
 A             # the lowercase alphabet
  •...•        # with the digits from the compressed string
        3-     # subtract 3 from each              
          O    # then sum the result
           .±  # and take the sign

Bạn có thể lưu một byte bằng cách thay thế bản đồ bằng S.
Kevin Cruijssen

@KevinCruijssen: Cảm ơn! Tôi chắc chắn rằng tôi đã thử nó, nhưng dường như không :)
Emigna

3
usdgpsahsoaboutlopezgbidolcv = ord(c)*3%83%8

@Arnauld: Thú vị! làm thế nào bạn tìm nó ở ngoài kia? Không phải bằng tay tôi hy vọng: P
Emigna

1
Tôi bắt buộc tất cả các cặp từ và trận đấu dài nhất là aboutlopez. Sau đó tôi tìm kiếm các trận đấu khác với cùng số nhân và modulo. (Vì vậy, nó hoàn toàn không được đảm bảo là tối ưu.)
Arnauld






2

Stax , 20 byte

ÉBÜ◙ƒ╣<Hf6─òɼsäS╗◄↔

Chạy và gỡ lỗi nó

Giải nén, không được chỉnh sửa và nhận xét, nó trông như thế này.

"45D.J57KBJa`"I"    string literal with code points [52 53 68 46 74 53 55 75 66 74 97 34 73]
$                   flatten to string "52536846745355756674973473"
;                   push input
@                   get string characters at indices 
                    (using input codepoints as indices; lookups wrap around)
:V                  arithmetic mean
53>                 is greater than 53

Chạy cái này


2

Ruby , 64 byte

->s{n=0;s.bytes{|i|n+=("[E[LduRgmQSMK"[i%13].ord>>i%2*3)%8-3};n}

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

Sử dụng chuỗi ma thuật 13 byte, 2 số 0..7được mã hóa trong mỗi byte. Trừ 3 cho một phạm vi -3..4.

Mã ASCII cho A(và cũng N) lấy modulo 13 là do trùng hợp ngẫu nhiên, bằng không.


1

Võng mạc 0.8.2 , 51 byte

T`L`35344527412513031462452313
.
$*<>>>
+`<>|><

^<

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Chỉ chấp nhận chữ hoa (+6 byte cho trường hợp hỗn hợp). Không biết xấu hổ ăn cắp chuỗi của @ Arnauld nhưng dù sao tôi cũng sẽ sử dụng thuật toán tương tự. Giải trình:

T`L`35344527412513031462452313
.

Thay đổi mỗi chữ cái thành sự khác biệt về số lượng dấu chấm và dấu gạch ngang, cộng với ba, O=0H=7.

$*<>>>

Thể hiện sự khác biệt như số <s và ba >s. (Đáng buồn là tôi không thể sử dụng dấu chấm vì chúng đặc biệt trong regex.)

+`<>|><

Loại bỏ các cặp <s và >s phù hợp .

^<

Kiểm tra xem vẫn còn bất kỳ dấu chấm nào.


1

Bash + coreutils,  64  60 byte

tr a-z 35344526512513031462452313|sed s/./\&z-+/g|dc -eIK?^p

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

Lấy một chuỗi bằng chữ thường, xuất ra 0 cho sai, không khác cho sự thật

Giải trình

Sử dụng tr và sed để tạo một chương trình dc trông giống như (ví dụ đầu vào 'xin chào'):

IK6z-+4z-+5z-+5z-+0z-+^p

IK     Push 10, then 0 to the stack
6z-+  Push 6 (three more than the dots minus dashes in 'h'), subtract 3, and accumulate
...    Do the same for all other letters, so the stack now has the total dots minus dashes
^      Raise 10 to this power - precision is zero so this turns negative/positive to falsy/truthy
p      Print result

Golfed hai byte bằng cách chỉ đặt dc trong các đường ống chứ không phải là thay thế lệnh sử dụng, sau đó một byte bằng cách thay thế <space>3bằng z(thuận tiện, tôi có 3 mặt hàng trên stack tại thời điểm đó!) Và một byte bằng cách thay thế các dấu ngoặc kép quanh chương trình sed tôi với một dấu gạch chéo ngược để thoát khỏi&
Sophia Lechner


1

TI-BASIC (TI-84), 111 byte

:Ans→Str1:"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str2:"35344527512513031462452312→Str3:0<sum(seq(expr(sub(Str3,inString(Str2,sub(Str1,X,1)),1)),X,1,length(Str1))-3

Tôi đã sử dụng cùng một chuỗi để xác định độ nặng của dấu chấm như một số câu trả lời khác.
Chương trình trả về truey ( 1) nếu chuỗi đầu vào là dot-heavy, falsy ( 0) nếu không.
Chuỗi đầu vào phải ở trong tất cả các mũ.
Đầu vào được lưu trữ trong Ans. Đầu ra được lưu trữ Ansvà được tự động in ra khi chương trình hoàn thành.

Ung dung:

:Ans→Str1
:"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str2 
:"35344527512513031462452312→Str3
:0<sum(seq(expr(sub(Str3,inString(Str2,sub(Str1,X,1)),1)),X,1,length(Str1))-3

Thí dụ:

"HELLO
HELLO
prgmCDGF3
           1
"CODE
CODE
prgmCDGF3
           0

Giải thích:
(TI-BASIC không có ý kiến, giả sử rằng ;chỉ ra một cam kết)

:Ans→Str1                          ;store the input into Str1
:"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str2  ;store the uppercase alphabet into Str2
:"35344527512513031462452312→Str3  ;store dot-dash+3 for each letter into Str3

:0<sum(seq(expr(sub(Str3,inString(Str2,sub(Str1,X,1)),1)),X,1,length(Str1))-3 ;full logic

   sum(                                                                       ;sum the elements of
       seq(                                                               )    ;the list evaluated by
                sub(                                    )                       ;the substring of
                    Str3,                                                        ;Str3
                         inString(                  ),                           ;at the index of
                                       sub(        )                              ;the substring of
                                           Str1,                                   ;Str1
                                                X,                                 ;starting at X
                                                  1                                ;of length 1
                                  Str2,                                           ;in Str2
                                                      1                          ;of length 1
           expr(                                        ),                       ;converted to an integer
                                                          X,                    ;using X as the increment variable
                                                            1,                  ;starting at 1
                                                              length(Str1)      ;ending at the length of Str1
                                                                           -3   ;then subtract 3 from all elements in the list
  0<                                                                           ;then check if the sum is greater than 0
                                                                               ;implicitly output the result

Lưu ý: Số byte của chương trình được ước tính bằng cách sử dụng giá trị trong [MEM] > [2] > [7] (124 byte) sau đó trừ đi độ dài của tên chương trình CDGF3, (5 byte) và thêm 8 byte được sử dụng cho lưu trữ chương trình:

124 - 5 - 8 = 111 byte




0

C ++ (được biên dịch với Visual Studio 2017) 171byte

int f(string i){const char*c="1322131421130102123023121211210120032121323101112232";int j=0,h[2]={0};while(j<sizeof(i)/28)*h+=c[i[j]-97],h[1]+=c[i[j++]-71];return*h>h[1];}

nếu chúng ta sử dụng chương trình chính tồn tại cho mục đích thử nghiệm cũng như vậy.

đây là biến thể "gọn gàng"

#include "stdafx.h"
int main()
{
    const int dotCount[] = {1,3,2,2,1,3,1,4,2,1,1,3,0,1,0,2,1,2,3,0,2,3,1,2,1,2};
    const int dashCount[] = {1,1,2,1,0,1,2,0,0,3,2,1,2,1,3,2,3,1,0,1,1,1,2,2,3,2};
    std::cout << "Enter String:\n";
    std::string input;
    std::cin >> input;
    int inputsHeavyness[2] = { 0 };
    for(int i = 0;i < sizeof(input)/sizeof(std::string);i++)
    {
        inputsHeavyness[0] += dotCount[input[i] - 'a'];
        inputsHeavyness[1] += dashCount[input[i] - 'a'];
    }
    if (inputsHeavyness[0] > inputsHeavyness[1])
    {
        std::cout << "Dot Heavy\n";
    }
    else
    {
        std::cout << "Dash Heavy or Neutral\n";
    }
    return 0;
}

giả sử tất cả chữ thường


1
Bạn có thể muốn thêm một liên kết TIO . (Ngoài ra, tôi nghĩ rằng bạn có một lỗi đánh máy trong mã không được mã hóa: điều này 22nên có 2.)
Arnauld

Vâng, đây có thể là một lỗi đánh máy. Tôi đoán tôi đã sửa nó trong phiên bản golf. i tio cũng không có đầu mối của công cụ đó (tôi nghĩ rằng tôi nhìn nó một lần và nó didnt tính năng im biên dịch sử dụng nên kết quả giữa vs2017 và tio khả năng sẽ thay đổi không tốt ở tất cả?)
der bender

1
145 byte . Kết quả thực sự có thể khác nhau giữa VS và TIO. Nó đôi khi cũng khác nhau đối với tôi và tôi thực sự đang sử dụng GCC (mặc dù MinGW).
dạ dày

1
Tinh chỉnh @ceilingcat cho 131 byte
gastropner

1
Xây dựng trên @gastropner 111 byte Kết hợp cả hai mảng thành một; "132..."112...trở thành "353...51là giá trị ASCII của3
trần mèo

0

c (118 ký tự) trả về giá trị dương cho giá trị quá chấm và giá trị âm cho giá trị vượt quá

int n(char* c){int v=25124858,d=3541434,i=0,o=0;for(;c[i]!=0;i++)o=(1&(v>(c[i]-65)))>0?(1&(d>>(c[i]-65)))>0?o+1:o-1:o;return o;}

không chơi gôn

int n(char* c)
{
  // Bitwise alpha map: 
  // more dots = 1
  // more dashes or equal = 0
  int d=3541434;  
  // validation bit map.
  // dot/dash heavy = 1
  // even = 0
  int v=25124858;
  int i=0,o=0;
  for(;c[i]!=0;i++)   // iterate through all values
  {
    // There is no way to make this pretty
    // I did my best.
    // If the little endian validation bit corresponding
    // to the capitol letter ascii value - 65 = 0,
    // the output does not increment or decrement.
    // If the value is one it increases or decreases based
    // on the value of the d bitmap.
    o=(1& ( v > (c[I] - 65))) > 0 ?
      (1 & (d >> (c[I] - 65))) > 0 ?
        o + 1 :
        o - 1 :
      o;
  }
  return o;
}


Tôi phải thú nhận rằng tôi không hiểu đầy đủ về sự so sánh 1& ( v > (c[I] - 65)), giống như v > c[I] - 65, điều mà tôi không thể tưởng tượng được là sai, vì vậy chúng tôi có thể loại bỏ toàn bộ điều đó trong khi riff trên @ceilingcat cho 56 byte
gastropner

0

MathGolf , 22 byte

{▄="Yⁿ∩┐↑rⁿ¼~<↔"$▒3-§+

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

Sử dụng phương pháp tương tự như nhiều câu trả lời khác, trong đó ⁿ∩┐↑rⁿ¼~<↔"đại diện cho số ma thuật 35344527512513031462452313.


0

Python 2, 90 86 byte

import morse
s=''.join(morse.string_to_morse(input()))
print s.count('.')>s.count('-')

làm việc tại địa phương của tôi với thư viện morse . -4 byte. Cảm ơn vì mẹo @JoKing!

Ngoài ra, đó là thêm 1 byte nếu trong Python 3.

Python 3, 87 byte

import morse
s=''.join(morse.string_to_morse(input()))
print(s.count('.')>s.count('-'))

Mặc dù câu hỏi giả định số lượng '.' Và 'sẽ không bằng nhau; trong trường hợp chúng bằng nhau, mã này sẽ trả về True.


Ý tôi là, bạn có thể sử dụng inputthay vì raw_inputnếu bạn muốn ...
Jo King

@JoKing tôi đã thử. Đó là một lỗi và do đó phải dùng đến raw_input
Koishore Roy

bạn chỉ cần đặt dấu ngoặc kép quanh chuỗi, vì inputtránh STDIN trước khi chuyển nó đến chương trình
Jo King

Đó là một điểm rất công bằng. Tôi cảm thấy ngu ngốc vì đã bỏ lỡ điều đó! : 3
Koishore Roy
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.