Bana Müfettiş Morse diyorlar


20

Göreviniz, kabul etmeyi seçerseniz, belirli bir giriş dizesinin Nokta-ağır mı yoksa Kısa-çizgi mi olduğuna karar vermektir.

Mors temsili çizgilerden daha fazla nokta içerdiğinde, bir dize nokta ağırdır. Örneğin, E harfi tek bir noktadır, yani Nokta-ağırdır.

Giriş

  • Giriş dizesi yalnızca [a-z]veya aralığında olan karakterler içerir [A-Z]. Hepsinin büyük harf mi yoksa küçük harf mi olacağına karar verebilirsiniz . AAAiyi, aaaiyi, aAadeğil.
  • Giriş dizesi her zaman en az 1 karakter uzunluğunda olacaktır.
  • Giriş dizelerinin asla eşit miktarda nokta ve tire olmayacağını varsayabilirsiniz.

Çıktı

Daha fazla nokta karakteri içeren girişler için Gerçeği döndürmelisiniz .
Daha fazla çizgi karakteri içeren girişler için Falsy döndürmelisiniz.
Düzenleme: Nokta için pozitif bir değere ve tire için de negatif bir değere izin vereceğim.

Test senaryoları

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

Referans

Uluslararası Mors Kodu

Bu . Bayt cinsinden en kısa kod kazanır.



4
Dotheavy için 0'ın üzerinde ve tire-ağır için negatif bir değer döndürebilir miyiz?
Cehalet

@EmbodimentofIgnorance Bu, yayınınızda belirttiğiniz sürece benim için çalışır. Ben genellikle truthy falsy testi geçer sanmıyorum ama bunu sağlayacak yüzden bu durumda iyi bir çözüm gibi hissediyor
Bassdrop Cumberwubwubwub

Yanıtlar:


5

APL (Dyalog Genişletilmiş) , 24  15 bayt SBCS

-9 Ven sayesinde

Bağımsız değişken olarak büyük harf alan anonim taktik önek işlevi.

>/'.-'⍧∊∘⌂morse

Çevrimiçi deneyin!

⌂morse Morse dizeleri listesine dönüştürmek
 ardından
ε nlist (düzleştirmek)
'.-'⍧ ki noktalar ve çizgiler sayısını
>/ tire daha noktaların? (lit. azaltmadan daha büyük)


Neden varsayılan olarak Genişletilmiş önyükleme dfns'leri yok?
ngn

@ngn Artık yerleşik
Adám

7

IBM PC DOS, 8088 derlemesi, 54 35 bayt

Fark yöntemini kullanarak -19 bayt

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

unassembled:

; 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

açıklama

Intel / MASM sözdiziminde yalnızca 8088 uyumlu talimatlar kullanılarak bir MACRO (temel olarak bir işlev) olarak uygulanır. Büyük harfli dize olarak girdi (veya karışık-duruma izin vermek için +2 bayt), çıktı Truthy / Falsy sonucu SF == OF( test etmek için JGveya JLkullanın).

Harf farkı tablosu değerleri ikili nibbles olarak saklanır, bu nedenle toplamda sadece 13 bayt alır.

Orijinal (54 bayt):

; 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

açıklama

Intel / MASM sözdiziminde yalnızca 8088 uyumlu talimatlar kullanılarak bir MACRO (temel olarak bir işlev) olarak uygulanır. Dize olarak giriş yapın, Doğruluk / Falsy sonucunu Taşıma Bayrağı ile sonuçlayın. Puan tablosu, harf başına tire ve nokta sayısını içerir.

Giriş büyük harftir. Küçük veya karışık harf almak için 2 bayt ekleyin.

Örnek Test Programı (IBM PC DOS bağımsız COM yürütülebilir olarak)

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

Örnek Çıktı:

resim açıklamasını buraya girin

DD.COM test programını indirin

Veya Çevrimiçi Deneyin! DOS yürütülebilir dosyasına yönlendirmek için çevrimiçi bir TIO'nun farkında değilim, ancak bunu sadece birkaç adımla kullanabilirsiniz:

  1. DD.COM dosyasını ZIP dosyası olarak indir
  2. Https://virtualconsoles.com/online-emulators/DOS/ adresine gidin.
  3. İndirdiğiniz ZIP dosyasını yükleyin, Başlat'ı tıklayın
  4. Yazın DD Helloveya DD codekalbinizin içeriğine

Bir şey eksik olabilir, ama bu makro girişte AH = 0 varsaymıyor mu? Bu varsayım, test programı kullanılırken geçerlidir.
gastropner

1
Güzel göz! Varsayım DOS neredeyse tüm sürümleri içindir DOS yürütme ilk başlatma kayıt değerlerine dayanmaktadır 0000hAX kaynağı için: fysnet.net/yourhelp.htm
640KB

Bir montaj golfçüsünden diğerine: güzel ! Tamamen 8088 uyumlu talimatları kullanmak için ekstra stil noktaları. Bu, kod golfünün büyük ölçüde optimizasyona ve gerçekten de kayıp bir sanatla eşdeğer olduğu bir platformdur. XLATNe yapmak istediğini yapmak için güzel bir kullanım . Aslında boyutun üstündeki hızı optimize ediyor olsaydınız, WORD boyutlu aramalar yapmak istersiniz. Anemik 8-bit harici veriyolu ile 8088'de bile bu bir hız kazancıdır, çünkü kod boyutunu büyütmeden verimi iki katına çıkarırsınız, bir XCHGveya iki talimat için tasarruf edin .
Cody Gray

@CodyGray teşekkürler! Bir meydan okuma, platform ve talimat setiyle güzel bir şekilde hizalandığında her zaman eğlencelidir. Ayrıca, orijinal bilgisayarın 8088'de 1 baytta (örneğin XLAT) bir şey başarabildiğinizde temizdir , ancak 4 baytlık sağa doğru 4 yer (a içinde LOOP) kaydırmak 6 bayt sürse de .
640KB

Evet. Performans için, itme ve patlamayı ortadan kaldırarak kesinlikle 1'e kadar 4 ayrı vardiya yapmak istersiniz. Hatta daha fazla bayt (+2) değil, genel olarak net bir kazanç, ancak golf için iyi değil. Meydan zaman asıl eğlence geliyor gelmez ISA ile hizaya ve varolan yapı taşlarını uygulayarak yeni, yenilikçi yollar bulmak için akıl germek zorundadır. 1 baytlık dize talimatları 8088'de performans ve golf için gerçekten güzel. Onları gerçek kodda kullanıyorum. XLAT, sık sık pek fazla kullanamadığım bir şey, sanırım çünkü modern mimariler beni LUT'lara karşı önyargılar.
Cody Gray

7

Java (JDK) , 131 124 110 84 64 bayt

İlginç bir şekilde, "nokta" çizgi ağır ve "çizgi" nokta ağırdır.

Tüm büyük harflere girişi alır IntStream( String8 bayt için gerçek değere sahip bir sürüm için aşağı kaydırın ). Ben bu golf golf oldukça yardımcı oldu: 20 bayt golf için süresi doldu veri , 26 bayt golf için Neil , 18 bayt golf için Olivier Grégoire ve 2 bayt golf için Kevin Cruijssen için teşekkürler .

Çift tırnak içinde 26 yazdırılamaz karakter içeriyor.

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

Çevrimiçi deneyin!

Ungolfed:

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 bayt

Puristler için; girişi a olarak alır String. Sayesinde Süresi Dolan Veri 20 bayt, golf için Neil 26 bayt golf için ve Olivier Grégoire 10 bayt golf için.

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

Çevrimiçi deneyin.

Ungolfed:

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
Neden kullanmıyorsunuz "35344527512513031462452313".charAt(a-65)-51?
Neil


1
@ OlivierGrégoire Sondaki noktalı virgül kaldırmayı unuttuğunuz için 66 baytınız aslında 65'tir. Yazdırılamayan karakterler kullanılarak 1 bayt daha kaydedilebilir: 64 bayt
Kevin Cruijssen

4

Jöle , 21 bayt

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

Çevrimiçi deneyin!

Nasıl?

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 bayt

Kevin Cruijssen sayesinde bayt kurtardı

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

Çevrimiçi deneyin!

açıklama

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

olduğu 35344527512513031462452313 taban 255 sıkıştırılır.

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

Haritayı değiştirerek bir bayt kaydedebilirsiniz S.
Kevin Cruijssen

@KevinCruijssen: Teşekkürler! Bunu denediğime emindim ama görünüşe göre değil :)
Emigna

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

@Arnauld: İlginç! Bunu nasıl buldun? Elle değil umarım: P
Emigna

1
Tüm kelime çiftlerini acımasızca zorladım ve en uzun maç oldu aboutlopez. Daha sonra aynı çarpan ve modulo ile diğer maçları aradım. (Yani kesinlikle en iyi olacağı garanti edilmez.)
Arnauld




3

Python 2 , 73 70 69 bayt

lambda s:sum(int(`0x21427b563e90d7783540f`[ord(c)%25])-3for c in s)>0

Çevrimiçi deneyin!

Yalnızca büyük harf

-3 bayt, Outgolfer Erik sayesinde


Hem büyük hem de küçük harfli sürüm:

Python 2 , 73 71 bayt

lambda s:sum(int(oct(0x1d7255e954b0ccca54cb)[ord(c)%32])-3for c in s)>0

Çevrimiçi deneyin!



2

Stax , 20 bayt

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

Çalıştır ve hata ayıkla

Ambalajından çıkarılmış, golf edilmemiş ve yorum yapılmış gibi görünüyor.

"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

Bunu çalıştır


2

Ruby , 64 bayt

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

Çevrimiçi deneyin!

13 baytlık sihirli bir dize, 0..7her baytta 2 sayı kodlanmış kullanır . Bir aralık için 3 çıkarın -3..4.

Modulo 13 için A(ve ayrıca N) alınan ASCII kodu tesadüf, sıfırdır.


1

Retina 0.8.2 , 51 bayt

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

^<

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. Yalnızca büyük harf kabul eder (karışık harf için +6 bayt). Utanmadan @ Arnauld'un telini çaldı ama yine de aynı algoritmayı kullanacaktım. Açıklama:

T`L`35344527412513031462452313
.

Noktalar ve çizgiler sayısında farkı içine Her harfi değiştirme, artı üç, böylece O=0ve H=7.

$*<>>>

Farkı bu <s ve üç >s olarak temsil edin . (Ne yazık ki noktaları kullanamıyorum çünkü normal ifadelerde özeller.)

+`<>|><

Eşleşen <s ve >s çiftlerini kaldırın .

^<

Hala nokta olup olmadığını kontrol edin.


1

Bash + coreutils,  64  60 bayt

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

Çevrimiçi deneyin!

Küçük harfle bir dize alır, falsy için sıfır, doğruluk için sıfır olmayan çıktılar

açıklama

Şuna benzeyen bir dc programı oluşturmak için tr ve sed kullanır ('hello' örnek girişi için):

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

Sadece ziyade kullanım komut ikamesi daha boru hattı dc koyarak iki bayt golfed ardından değiştirerek başka bayt <space>3ile z(elverişli, ben! O noktada yığın 3 öğe var) ve benim sed programının sonuna tırnak işareti değiştirerek başka bayt kaçmak için tek bir ters eğik çizgi&
Sophia Lechner


1

TI-BASIC (TI-84), 111 bayt

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

Nokta ağırlığını belirlemek için diğer bazı cevaplarla aynı dizeyi kullandım.
Program döner truthy ( 1) girdi dizesi nokta ağır falsy (eğer 0) değilse.
Giriş dizesi tamamen büyük harfle yazılmalıdır.
Giriş, içinde saklanır Ans. Çıktı kaydedilir Ansve program tamamlandığında otomatik olarak yazdırılır.

Ungolfed:

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

Örnek:

"HELLO
HELLO
prgmCDGF3
           1
"CODE
CODE
prgmCDGF3
           0

Açıklama:
(TI-BASIC'in yorumu yok, ;bir taahhüdü gösterdiğini varsayın )

: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

Not: Bir programın bayt sayısı, [MEM] > [2] > [7] (124 bayt) içindeki değer kullanılarak değerlendirilir ve ardından program adının uzunluğu CDGF3, (5 bayt) ve için kullanılan fazladan 8 bayt çıkarılır. programı saklama:

124-5-8 = 111 bayt




0

C ++ (Visual Studio 2017 ile derlenmiştir) 171bytes

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

test amacıyla var olan ana programı daha fazla hesaba katarsak.

bu ungolfed "düzenli" varyant

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

tüm küçük harfleri varsayar


1
Bir TIO bağlantısı eklemek isteyebilirsiniz . (Ayrıca, ungolfed kodda bir yazım hatası olduğunu düşünüyorum: bu 22olmalı 2.)
Arnauld

evet bu bir yazım hatası olabilir. sanırım ben golfed sürümünde sabit. tio iyi ben bu şeyler hakkında hiçbir ipucu var (i bir kez baktım ve bu yüzden vs2017 ve tio arasındaki sonuçlar muhtemelen değişir? hiç iyi değil) derleyici im özelliği yoktu sanırım
der bender

1
145 bayt . Sonuçlar gerçekten VS ve TIO arasında değişebilir. Bazen benim için de değişiyor ve aslında GCC kullanıyorum (MinGW de olsa).
gastropner


1
@Gastropner 111 bayt üzerine inşa etme Her iki diziyi de bir araya getirin; "132...ve "112...olur "353...ve 51ASCII değeri3
ceilingcat

0

c (118 karakter) , aşırı nokta vuruşu için pozitif bir değer ve fazla çizgi çizgisi için negatif değer döndürür

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

un-golfed

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


İtiraf etmeliyim ki karşılaştırmayı tam olarak anlamadım 1& ( v > (c[I] - 65)), ki v > c[I] - 65bu hiç de yanlış olduğunu hayal edemiyorum, bu yüzden her şeyi kaldırabiliriz @ @ilingcat için 56 bayt
gastropner

0

MathGolf , 22 bayt

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

Çevrimiçi deneyin!

ⁿ∩┐↑rⁿ¼~<↔"Sihirli sayıyı temsil eden diğer birçok cevapla aynı yöntemi kullanır 35344527512513031462452313.


0

Python 2, 90 86 bayt

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

mors kütüphanesi ile benim yerel üzerinde çalıştı . -4 bayt. @JoKing bahşiş için teşekkürler!

Ayrıca, Python 3'te ise 1 bayt daha fazla.

Python 3, 87 bayt

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

Her ne kadar soru '.' Ve '-'ler eşit olmayacaksa da; eşit olmaları durumunda bu kod True döndürür.


Kullanabileceğin, demek inputyerine raw_inputisterseniz ...
Jo Kral

@ JoKing denedim. Bir hata atıyordu ve bu nedenle raw_input'a başvurmak zorunda kaldı
Koishore Roy

çünkü sadece, dize tırnak koymak zorunda inputevals programa geçirmeden önce stdin'nin
Jo Kral

Bu çok adil bir nokta. Bunu özlediğim için kendimi aptal hissediyorum! : 3
Koishore Roy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.