그들은 나를 모스 감독관이라고 부릅니다


20

당신의 임무는 당신이 그것을 받아들이기로 선택한다면 주어진 입력 문자열이 도트 헤비인지 대시 헤비인지 결정하는 것입니다.

모스 표현에 대시보다 많은 점이 포함 된 문자열은 점이 무겁습니다. 예를 들어, 문자 E는 단일 점이므로 점이 무겁습니다.

입력

  • 입력 문자열에는 [a-z]또는 범위의 문자 만 포함됩니다 [A-Z]. 모두 대문자인지 아니면 소문자 인지를 결정할 수 있습니다 . AAA, 괜찮습니다 aaa, 괜찮 aAa되지 않습니다.
  • 입력 문자열은 항상 1 자 이상이어야합니다.
  • 입력 문자열에 점과 대시의 양이 같지 않다고 가정 할 수 있습니다.

산출

더 많은 점 문자가 포함 된 입력에 대해서는 Truthy 를 반환해야 합니다.
더 많은 대시 문자가 포함 된 입력의 경우 Falsy를 반환해야합니다.
편집 : 도트에는 양수 값을, 대시에는 음수 값을 허용합니다.

테스트 사례

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

참고

국제 모스 부호

이것은 입니다. 바이트 단위의 최단 코드가 이깁니다.



4
dotheavy의 경우 0보다 큰 값을, dash-heavy의 경우 음의 값을 반환 할 수 있습니까?
무지의 구현

귀하의 게시물에 명시하는 한, 그것은 무지의 구현입니다. 나는 그것이 일반적으로 진실한 허위 테스트를 통과한다고 생각하지 않지만이 경우에는 좋은 해결책처럼 느껴질 것입니다.
Bassdrop Cumberwubwubwub

답변:


5

APL (Dyalog Extended) , 24  15 바이트 SBCS

Ven 덕분에 -9

대문자를 인수로 사용하는 익명의 암묵적 접두사 함수.

>/'.-'⍧∊∘⌂morse

온라인으로 사용해보십시오!

⌂morse 모스 문자열 목록으로 변환
 한 후
ε NLIST (평평)
'.-'⍧ 점에서 점과 대시의 수를 계산
>/ 대시보다 더 많은 점을? (감소보다 큰)


기본적으로 확장 사전로드 dfn이없는 이유는 무엇입니까?
ngn

@ngn 이제 내장되어 있습니다
Adám

7

IBM PC DOS, 8088 어셈블리, 54 35 바이트

차이 방법을 사용하여 -19 바이트

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

미 조립 :

; 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

설명

Intel / MASM 구문에서 8088 호환 명령 만 사용하여 MACRO (기본적으로 함수)로 구현되었습니다. 대문자 문자열 (또는 대소 문자를 허용하기 위해 +2 바이트)로 입력하고 출력 Truthy / Falsy 결과는 SF == OF(사용 JG또는 JL테스트)입니다.

문자 차이 테이블 값은 이진 니블로 저장되므로 총 13 바이트 만 걸립니다.

원본 (54 바이트) :

; 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

설명

Intel / MASM 구문에서 8088 호환 명령 만 사용하여 MACRO (기본적으로 함수)로 구현되었습니다. 문자열로 입력하고 캐리 플래그에 Truthy / Falsy 결과를 출력합니다. 점수 표에는 문자 당 대시 수와 도트 수가 포함됩니다.

입력은 대문자입니다. 대소 문자를 구분하려면 2 바이트를 추가하십시오.

테스트 프로그램 예 (IBM PC DOS 독립형 COM 실행 파일로)

    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$"

출력 예 :

여기에 이미지 설명을 입력하십시오

테스트 프로그램 DD.COM 다운로드

또는 온라인으로 사용해보십시오! 온라인 TIO가 DOS 실행 파일로 직접 연결되는 것을 알지 못하지만 몇 단계 만 거치면 사용할 수 있습니다.

  1. DD.COM을 ZIP 파일로 다운로드
  2. https://virtualconsoles.com/online-emulators/DOS/로 이동 하십시오
  3. 다운로드 한 ZIP 파일을 업로드하고 시작을 클릭하십시오.
  4. 타이핑 DD Hello또는 DD code마음의 내용

뭔가 빠졌을 수도 있지만 해당 매크로는 입력시 AH = 0으로 가정하지 않습니까? 물론, 그 가정은 테스트 프로그램을 사용할 때 유효합니다.
gastropner

1
좋은 눈! 가정은 DOS의 거의 모든 버전을위한 DOS 실행 초기 시작 레지스터 값을 기반으로 0000hAX 소스에 대해 : fysnet.net/yourhelp.htm
640킬로바이트

한 조립 골퍼에서 다른 골퍼로 : nice ! 순전히 8088 호환 명령어를 사용하기위한 추가 스타일 포인트. 그것은 코드 골프가 최적화와 거의 동등한 플랫폼이며, 잃어버린 예술입니다. 의 좋은 사용 XLAT이 할 의미가 정확히 무엇을해야 할 일. 실제로 크기 초과 속도를 최적화하는 경우 WORD 크기 조회를 수행하려고합니다. 코드 크기를 늘리지 않고 처리량을 두 배로 늘리고 XCHG명령을 저장하기 때문에 8088의 빈혈 8 비트 외부 버스를 사용하더라도 속도가 여전히 빨라집니다 .
코디 그레이

@CodyGray 감사합니다! 도전 과제가 플랫폼 및 지침 세트와 잘 일치하면 항상 재미 있습니다. 또한 원래 PC의 8088에서 1 바이트 (예 :)에서 무언가를 달성 할 수있을 때 깔끔합니다. XLAT하지만 4 바이트 (a 내부 LOOP) 에서 비트 단위 이동을 수행하는 데 6 바이트가 필요합니다 .
640KB

예. 성능을 위해서는 푸시와 팝을 제거하면서 1 씩 4 개의 개별 시프트를 수행하고 싶을 것입니다. 그것은 더 많은 바이트 (+2)조차도 아니므로 전체적으로 순 승리하지만 골프에는 좋지 않습니다. 도전 ISA와 맞지 않을 때 정말 재미 있습니다. 기존 빌딩 블록을 적용하는 새롭고 혁신적인 방법을 찾으려면 마음을 확장해야합니다. 1 바이트 문자열 명령은 성능과 골프에 8088에서 정말 좋습니다. 실제 코드에서 사용합니다. XLAT는 내가 자주 사용하지 않는 것인데, 현대의 아키텍처가 LUT에 대해 편향되어 있기 때문입니다.
코디 그레이

7

자바 (JDK) , 131 (124) 110 84 64 바이트

흥미롭게도 "점"은 대시로 무겁고 "대시"는 도트로 무겁습니다.

모든 대문자로 입력을 받습니다 ( IntStream실제로 String8 바이트 인 버전의 경우 아래로 스크롤 ). 골프를하는 데 많은 도움이되었습니다 : 20 바이트 골프를위한 Expired Data , 26 바이트 골프를위한 Neil , 18 바이트 골프를위한 Olivier Grégoire 그리고 2 바이트 골프를위한 Kevin Cruijssen 에게 감사드립니다 .

큰 따옴표 안에 26 개의 인쇄 할 수없는 문자가 들어 있습니다.

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

온라인으로 사용해보십시오!

언 골프 드 :

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

자바 (JDK) , 131 (124) 110 84 72 바이트

순수 주의자들을 위해; 로 입력을받습니다 String. 20 바이트 골프의 데이터 만료 , 26 바이트 골프의 Neil , 10 바이트 골프의 Olivier Grégoire 덕분 입니다.

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

온라인으로 사용해보십시오.

언 골프 드 :

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
왜 사용하지 "35344527512513031462452313".charAt(a-65)-51않습니까?


1
@ OlivierGrégoire 66 바이트는 실제로 세미콜론을 제거하는 것을 잊었으므로 65 바이트입니다. 그러나 인쇄 할 수없는 문자를 사용하여 1 바이트를 더 절약 할 수 있습니다. 64 바이트
Kevin Cruijssen

4

젤리 , 21 바이트

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

온라인으로 사용해보십시오!

방법?

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 바이트

Kevin Cruijssen 덕분에 바이트 절약

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

온라인으로 사용해보십시오!

설명

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

35,344,527,512,513,031,462,452,313 베이스 (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

지도를로 바꾸면 바이트를 저장할 수 있습니다 S.
Kevin Cruijssen

@ KevinCruijssen : 감사합니다! 나는 그것을 시도했다고 확신했지만 분명히 :)
Emigna

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

@Arnauld : 흥미 롭습니다! 어떻게 알았어? 손으로하지 않기를 바랍니다 : P
Emigna

1
모든 단어 쌍을 무차별 대입했으며 가장 긴 일치 시간은 aboutlopez입니다. 그런 다음 동일한 승수와 모듈로로 다른 일치 항목을 찾았습니다. (따라서 최적이라고 보장 할 수는 없습니다.)
Arnauld






2

Stax , 20 바이트

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

실행 및 디버깅

포장을 풀고 포장을 풀고 주석을 달았습니다.

"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

이것을 실행


2

루비 , 64 바이트

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

온라인으로 사용해보십시오!

0..7각 바이트에 2 개의 숫자가 인코딩 된 13 바이트 매직 문자열을 사용합니다 . 범위에 대해 3을 뺍니다 -3..4.

모듈로 13에 대한 A(및 N) 의 ASCII 코드 는 우연의 일치입니다.


1

레티 나 0.8.2 , 51 바이트

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

^<

온라인으로 사용해보십시오! 링크에는 테스트 사례가 포함됩니다. 대문자 만 허용됩니다 (대소 문자는 +6 바이트). 부끄럽게 @Arnauld의 문자열을 훔치지 만 어쨌든 동일한 알고리즘을 사용하려고했습니다. 설명:

T`L`35344527412513031462452313
.

점과 대시의 수의 차이로 각 문자를 변경 + 3, 그렇게 O=0하고 H=7.

$*<>>>

<s와 3 >의 수로 차이를 나타 냅니다. (정말 정규식에 점이 있기 때문에 점을 사용할 수 없습니다.)

+`<>|><

<s와 >s 의 일치하는 쌍을 제거하십시오 .

^<

여전히 점이 남아 있는지 확인하십시오.


1

Bash + coreutils,  64  60 바이트

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

온라인으로 사용해보십시오!

문자열을 소문자로 취하고, 거짓이면 0을 출력하고, 참이면 0이 아닌 값을 출력합니다.

설명

tr 및 sed를 사용하여 다음과 같은 dc 프로그램을 작성하십시오 (예 : 입력 'hello').

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

다만 오히려 사용 명령 대체보다 파이프 라인에 직류를 넣어 2 바이트를 Golfed 후 교체하여 다른 바이트 <space>3z(편리, 내가! 그 시점에서 스택에 3 개 항목이)와 함께 내 나오지 프로그램 주위에 따옴표를 대체하여 다른 바이트 탈출을위한 단일 백 슬래쉬&
Sophia Lechner


1

TI-BASIC (TI-84), 111 바이트

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

나는 다른 답 중 일부와 같은 점을 결정하기 위해 동일한 문자열을 사용했습니다.
프로그램 반환 truthy ( 1) 입력 문자열이 점 무거운 falsy (있는 경우 0)이 아니라면.
입력 문자열은 모두 대문자 여야합니다.
입력은에 저장됩니다 Ans. Ans프로그램이 완료되면 출력이 저장되고 자동으로 인쇄됩니다.

언 골프 드 :

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

예:

"HELLO
HELLO
prgmCDGF3
           1
"CODE
CODE
prgmCDGF3
           0

설명 :
(TI-BASIC에는 설명 이 없으며, 주석을 ;나타내는 것으로 가정 )

: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

참고 : 프로그램의 바이트 수는 [MEM] > [2] > [7] (124 바이트) 의 값을 사용하여 평가 한 다음 프로그램 이름의 길이 CDGF3, (5 바이트) 및 추가 8 바이트 를 뺍니다. 프로그램 저장

124-5-8 = 111 바이트




0

C ++ (Visual Studio 2017로 컴파일) 171 바이트

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];}

우리가 테스트 목적으로 존재하는 주요 프로그램을 더 고려한다면.

이것은 ungolfed "정돈"변종입니다

#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;
}

모든 소문자를 가정


1
TIO 링크 를 추가 할 수 있습니다 . (또한, 나는 당신이 ungolfed 코드에 오타가 있다고 생각합니다 : 이것은 22이어야합니다 2.)
Arnauld

네 오타 일 수도 있습니다. 나는 골프 버전에서 그것을 고쳤다 고 생각한다. TIO 아니라 내가 그 물건의 단서가 없다 (? 나는 vs2017 사이의 결과 때문에 사용하는 컴파일러 메신저 기능 didnt가와 TIO가 전혀 잘 따라 다를 가능성이 것 한 번 그리고 난 그것을보고 생각)
벤더 데르

1
145 바이트 . 결과는 실제로 VS와 TIO에 따라 다를 수 있습니다. 때로는 나에게도 다르며 실제로 GCC (MinGW이지만)를 사용하고 있습니다.
gastropner


1
@gastropner를 기반으로 111 바이트 두 배열을 하나로 결합했습니다. "132..."112..."353...51의 ASCII 값입니다3
ceilingcat는

0

c (118 자) 는 초과 도트의 경우 양수 값을, 오버 대쉬의 경우 음수 값을 반환합니다.

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;}

골퍼가없는

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;
}


나는 비교를 완전히 이해하지 못한다고 고백해야한다 1& ( v > (c[I] - 65)). 이것은 v > c[I] - 65상상도 할 수없는 상상과 다름이 없다. 그래서 @ceilingcat를 56 바이트
gastropner


0

파이썬 2, 90 86 바이트

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

모스 도서관 과 함께 내 지역에서 일했습니다 . -4 바이트. 팁 @JoKing에 감사드립니다!

또한 파이썬 3에 있다면 1 바이트 더 큽니다.

파이썬 3, 87 바이트

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

질문은 '.'와 '-'의 수가 같지 않다고 가정하지만; 동일한 경우이 코드는 True를 반환합니다.


내 말은, 당신 이 원한다면 input대신에 사용할 수 있습니다 raw_input...
Jo King

@ JoKing 나는 시도했다. 오류가 발생하여 raw_input에 의존해야했습니다
Koishore Roy

inputSTDIN을 프로그램으로 전달하기 전에 회피하기 때문에 문자열 주위에 따옴표를 넣어야합니다.
Jo King

그것은 매우 공정한 포인트입니다. 나는 그것을 잃어버린 것에 대해 바보처럼 느낀다! : 3
Koishore Roy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.