Mereka memanggil saya Inspektur Morse

20

Misi Anda, jika Anda memilih untuk menerimanya, adalah memutuskan apakah string input yang diberikan adalah Dot-heavy, atau Dash-heavy.

Sebuah string adalah titik-berat ketika representasi morse-nya mengandung lebih banyak titik daripada tanda hubung. Misalnya, huruf E adalah satu titik, yang artinya Dot-berat.

Memasukkan

  • String input hanya akan berisi karakter dalam kisaran [a-z]atau [A-Z]. Anda dapat memutuskan apakah mereka semua menjadi huruf besar, atau semua huruf kecil. AAAbaik, aaabaik, aAatidak.
  • String input akan selalu memiliki setidaknya 1 karakter.
  • Anda dapat mengasumsikan bahwa string input tidak akan pernah memiliki jumlah titik dan garis yang sama.

Keluaran

Anda harus mengembalikan Kebenaran untuk input yang berisi lebih banyak karakter titik.
Anda harus mengembalikan Falsy untuk input yang berisi lebih banyak karakter tanda hubung.
Sunting: Saya akan mengizinkan nilai positif untuk titik dan nilai negatif untuk tanda hubung juga.

Uji kasus

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

Referensi

Kode Morse Internasional

Ini adalah . Kode terpendek dalam byte menang.

Bassdrop Cumberwubwubwub
sumber
Terkait
Bassdrop Cumberwubwubwub
4
Bisakah kita mengembalikan nilai di atas 0 untuk dotheavy dan nilai negatif untuk dash-heavy?
Perwujudan Ketidaktahuan
@EmbodimentofIgnorance Itu bekerja untuk saya, selama Anda menentukannya di posting Anda. Saya tidak berpikir itu biasanya melewati tes kebenaran palsu tetapi rasanya seperti solusi yang baik dalam kasus ini jadi saya akan mengizinkannya
Bassdrop Cumberwubwubwub

Jawaban:

5

APL (Dyalog Extended) , 24  15 byte SBCS

Terima kasih kepada Ven

Fungsi awalan diam-diam anonim mengambil huruf besar sebagai argumen.

>/'.-'⍧∊∘⌂morse

Cobalah online!

⌂morse konversikan ke daftar string Morse
 lalu
ϵ mendaftar (meratakan)
'.-'⍧ menghitung jumlah titik dan garis dalam yang
>/ lebih banyak titik daripada garis? (lit. lebih besar dari reduksi)

Adm
sumber
kenapa tidak memiliki Extended preload dfns secara default?
ngn
@ ngn Sekarang sudah ada di dalam
Adám
7

IBM PC DOS, 8088 assembly, 54 35 byte

-19 byte menggunakan metode perbedaan

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

Belum dirakit:

; 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

Penjelasan

Diimplementasikan dalam sintaks Intel / MASM sebagai MACRO (pada dasarnya fungsi), hanya menggunakan 8088 instruksi yang kompatibel. Input sebagai string huruf besar (atau +2 byte untuk membolehkan case campuran), hasilnya adalah Truthy / Falsy SF == OF(menggunakan JGatauJL untuk menguji).

Nilai tabel perbedaan huruf disimpan sebagai nibble biner, sehingga hanya membutuhkan total 13 byte.

Asli (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

Penjelasan

Diimplementasikan dalam sintaks Intel / MASM sebagai MACRO (pada dasarnya fungsi), hanya menggunakan 8088 instruksi yang kompatibel. Input sebagai string, hasil Truthy / Falsy menghasilkan Carry Flag. Tabel Skor berisi jumlah tanda hubung dan titik per huruf.

Masukan huruf besar. Tambahkan 2 byte untuk mengambil huruf kecil atau kecil.

Contoh Tes Program (sebagai IBM PC DOS mandiri yang dapat dieksekusi 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$"

Contoh Output:

masukkan deskripsi gambar di sini

Unduh program uji DD.COM

Atau Cobalah Online! Saya tidak mengetahui adanya TIO online untuk mengarahkan tautan ke executable DOS, namun Anda dapat menggunakan ini hanya dengan beberapa langkah:

  1. Unduh DD.COM sebagai file ZIP
  2. Pergi ke https://virtualconsoles.com/online-emulators/DOS/
  3. Unggah file ZIP yang baru saja Anda unduh, klik Mulai
  4. Ketik DD Helloatau DD codesesuka hati Anda
640KB
sumber
Saya mungkin kehilangan sesuatu, tetapi apakah makro itu tidak menganggap AH = 0 saat masuk? Memang, asumsi itu valid ketika menggunakan program uji.
gastropner
1
Mata yang bagus! Asumsi ini didasarkan pada nilai register awal startup pelaksanaan DOS, yang untuk hampir semua versi DOS adalah 0000huntuk sumber AX: fysnet.net/yourhelp.htm
640KB
Dari satu pegolf assembly ke pegolf lain: bagus ! Poin gaya ekstra untuk menggunakan instruksi yang sepenuhnya kompatibel dengan 8.088. Itu platform di mana kode golf sebagian besar setara dengan optimasi, dan benar-benar sebuah karya seni yang hilang. Penggunaan yang baik XLATuntuk melakukan apa yang seharusnya dilakukan. Jika Anda benar-benar mengoptimalkan kecepatan di atas ukuran, Anda ingin melakukan pencarian seukuran WORD. Ini masih merupakan kemenangan kecepatan bahkan pada 8088 dengan bus eksternal 8-bit yang anemia, karena Anda menggandakan throughput tanpa meningkatkan ukuran kode, kecuali untuk satu XCHGatau dua instruksi.
Cody Gray
@CodyGray terima kasih! Itu selalu menyenangkan ketika sebuah tantangan berbaris dengan baik dengan platform dan set instruksi. Plus itu rapi ketika Anda dapat mencapai sesuatu pada PC asli 8088 dalam 1 byte (seperti XLAT), meskipun dibutuhkan 6 byte untuk melakukan bitwise menggeser ke kanan 4 tempat (di dalam a LOOP).
640KB
Ya. Untuk kinerja, Anda tentu ingin melakukan 4 shift terpisah dengan 1, menghilangkan push dan pop. Ini bahkan tidak banyak byte lagi (+2), jadi secara keseluruhan menang bersih, tetapi tidak baik untuk bermain golf. Kegembiraan yang sebenarnya datang ketika tantangan tidak sejalan dengan ISA, dan Anda harus meluruskan pikiran Anda untuk menemukan cara-cara baru dan inovatif dalam menerapkan blok bangunan yang ada. Instruksi string 1-byte benar-benar bagus untuk 8.088 untuk kinerja dan juga golf. Saya menggunakannya dalam kode nyata. XLAT adalah salah satu yang saya tidak sering menemukan gunanya, saya kira karena arsitektur modern telah bias saya terhadap LUT.
Cody Gray
7

Java (JDK) , 131 124 110 84 64 byte

Menariknya, "titik" adalah garis putus-putus dan "garis putus" adalah titik-berat.

Mengambil input dalam semua huruf besar sebagai IntStream(gulir ke bawah untuk versi dengan aktual Stringuntuk 8 byte tambahan). Saya sudah banyak membantu bermain golf yang satu ini: Terima kasih untuk Data yang kadaluwarsa untuk bermain golf 20 byte, untuk Neil untuk bermain golf 26 byte, untuk Olivier Grégoire untuk bermain golf 18 byte dan kepada Kevin Cruijssen untuk bermain golf 2 byte.

Berisi 26 karakter yang tidak patut dicetak di dalam tanda kutip ganda.

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

Cobalah online!

Tidak Terkumpul:

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

Untuk puritan; menerima input sebagai a String. Terima kasih kepada Expired Data untuk bermain golf 20 byte, untuk Neil untuk bermain golf 26 byte dan untuk Olivier Grégoire untuk bermain golf 10 byte.

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

Cobalah online.

Tidak Terkumpul:

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
Ketidakseimbangan
sumber
1
124 byte
Expired Data
1
Jadikan 111 byte
Data Kedaluwarsa
2
Kenapa tidak digunakan "35344527512513031462452313".charAt(a-65)-51?
Neil
1
66 byte
Olivier Grégoire
1
@ OlivierGrégoire 66-byte Anda sebenarnya 65, karena Anda lupa menghapus semi-kolon yang tertinggal. 1 byte lagi dapat disimpan dengan menggunakan karakter yang tidak
diinginkan
4

Jelly , 21 byte

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

Cobalah online!

Bagaimana?

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?
Jonathan Allan
sumber
4

05AB1E , 22 21 byte

Menyimpan satu byte berkat Kevin Cruijssen

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

Cobalah online!

Penjelasan

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

adalah 35344527512513031462452313 dikompresi ke basis 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
Emigna
sumber
Anda dapat menyimpan byte dengan mengganti peta dengan S.
Kevin Cruijssen
@KevinCruijssen: Terima kasih! Saya yakin saya sudah mencobanya, tetapi ternyata tidak :)
Emigna
3
usdgpsahsoaboutlopezgbidolcv = ord(c)*3%83%8
@Arnauld: Menarik! Bagaimana Anda mengetahui itu? Saya harap tidak dengan tangan: P
Emigna
1
Saya dengan kasar memaksa semua pasangan kata dan pertandingan terlama adalah aboutlopez. Saya kemudian mencari pertandingan lain dengan pengali dan modulo yang sama. (Jadi sama sekali tidak dijamin optimal.)
Arnauld
3

C (gcc) , 84 82 81 79 75 byte

Mengasumsikan semua topi.

r;f(char*s){for(r=0;*s;r+="+-+,,-*/--*-)+(+),.*,-*+)+"[*s++%65]-43);s=r>0;}

Cobalah online!

gastropner
sumber
3

Python 2 , 73 70 69 byte

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

Cobalah online!

Hanya huruf besar

-3 byte, terima kasih kepada Erik the Outgolfer


Versi huruf besar dan kecil:

Python 2 , 73 71 byte

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

Cobalah online!

TFeld
sumber
2

Stax , 20 byte

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

Jalankan dan debug itu

Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.

"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

Jalankan yang ini

rekursif
sumber
2

Ruby , 64 byte

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

Cobalah online!

Menggunakan string ajaib 13 byte, 2 angka 0..7 dikodekan dalam setiap byte. Kurangi 3 untuk rentang-3..4 .

Kode ASCII untuk A(dan juga N) yang diambil modulo 13 adalah secara kebetulan, nol.

Level River St
sumber
1

Retina 0.8.2 , 51 byte

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

^<

Cobalah online! Tautan termasuk kasus uji. Hanya menerima huruf besar (+6 byte untuk huruf campuran). Tanpa malu-malu mencuri string @ Arnauld tapi saya tetap akan menggunakan algoritma yang sama. Penjelasan:

T`L`35344527412513031462452313
.

Ubah setiap huruf menjadi perbedaan dalam jumlah titik dan garis, ditambah tiga, jadi O=0dan H=7.

$*<>>>

Mewakili perbedaan karena angka <s dan tiga >s. (Sayangnya saya tidak bisa menggunakan titik karena mereka spesial di regex.)

+`<>|><

Hapus pasangan <s dan >s yang cocok.

^<

Periksa apakah masih ada titik yang tersisa.

Neil
sumber
1

Bash + coreutils,  64  60 byte

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

Cobalah online!

Mengambil string dalam huruf kecil, menghasilkan nol untuk falsy, bukan nol untuk truey

Penjelasan

Gunakan tr dan sed untuk membuat program dc yang mirip (misalnya, masukan 'halo'):

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
Sophia Lechner
sumber
Golfed dua byte dengan hanya menempatkan dc dalam pipa daripada substitusi penggunaan perintah, maka byte lain dengan mengganti <space>3dengan z(nyaman, saya memiliki 3 item pada stack pada saat itu!) Dan byte lain dengan mengganti tanda kutip di program sed saya dengan satu backslash untuk melarikan diri&
Sophia Lechner
1

R , 74 70 byte

f=utf8ToInt;sum(f("42433250265364746315325464")[f(scan(,''))-96]-52)<0

input harus huruf kecil, mengembalikan BENAR atau SALAH

Cobalah online

Aaron Hayman
sumber
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

Saya menggunakan string yang sama untuk menentukan titik-berat seperti beberapa jawaban lainnya.
Program mengembalikan truey ( 1) jika string input dot-berat, falsy ( 0) jika tidak.
Input string harus dalam huruf kapital semua.
Input disimpan di Ans. Output disimpan diAns dan dicetak secara otomatis ketika program selesai.

Tidak Terkumpul:

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

Contoh:

"HELLO
HELLO
prgmCDGF3
           1
"CODE
CODE
prgmCDGF3
           0

Penjelasan:
(TI-BASIC tidak memiliki komentar, anggap itu ;menunjukkan komitmen)

: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

Catatan: Hitungan byte suatu program dievaluasi menggunakan nilai dalam [MEM] > [2] > [7] (124 byte) lalu kurangi panjang nama program CDGF3,, (5 byte) dan tambahan 8 byte yang digunakan untuk menyimpan program:

124 - 5 - 8 = 111 byte

Tau
sumber
0

Faktor , 66 byte

: f ( s -- ? ) >morse [ [ 45 = ] count ] [ [ 46 = ] count ] bi < ;

Cobalah online!

Galen Ivanov
sumber
0

C ++ (dikompilasi dengan Visual Studio 2017) 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];}

jika kita mempertimbangkan program utama yang ada untuk tujuan pengujian juga lebih banyak.

ini adalah varian "rapi" yang 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;
}

mengasumsikan semua huruf kecil

der bender
sumber
1
Anda mungkin ingin menambahkan tautan TIO . (Juga, saya pikir Anda memiliki kesalahan ketik pada kode yang tidak disunat: ini 22seharusnya 2.)
Arnauld
ya ini mungkin salah ketik. Saya kira saya memperbaikinya dalam versi golf. tio baik saya tidak tahu itu (saya pikir saya pernah melihatnya dan tidak menampilkan kompiler im menggunakan sehingga hasil antara vs2017 dan tio kemungkinan akan bervariasi? tidak baik sama sekali)
der bender
1
145 byte . Hasil memang dapat bervariasi antara VS dan TIO. Kadang-kadang bervariasi untuk saya juga, dan saya sebenarnya menggunakan GCC (meskipun MinGW).
gastropner
1
Tweak dari @ceilingcat untuk 131 byte
gastropner
1
Building on @gastropner 111 byte Menggabungkan kedua array menjadi satu; "132...dan "112...menjadi "353...dan 51merupakan nilai ASCII dari3
ceilingcat
0

c (118 karakter) mengembalikan nilai positif untuk over-dot-ness dan nilai negatif untuk over-dash-ness

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

tidak golf

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;
}
mreff555
sumber
99 byte
ceilingcat
Saya harus mengakui bahwa saya tidak sepenuhnya memahami perbandingannya 1& ( v > (c[I] - 65)), yang sama dengan v > c[I] - 65, yang tidak dapat saya bayangkan pernah salah, sehingga kita dapat menghapus semuanya sambil meng-riffing @ceilingcat selama 56 byte
gastropner
0

MathGolf , 22 byte

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

Cobalah online!

Menggunakan metode yang sama dengan banyak jawaban lain, yang ⁿ∩┐↑rⁿ¼~<↔"merepresentasikan angka ajaib 35344527512513031462452313.

maks
sumber
0

Python 2, 90 86 byte

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

bekerja di lokal saya dengan perpustakaan morse . -4 byte. Terima kasih atas tipnya.

Juga, ini 1 byte lebih banyak jika dalam Python 3.

Python 3, 87 byte

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

Meskipun pertanyaannya mengasumsikan jumlah '.'s dan' -'s tidak akan sama; dalam kasus mereka sama, kode ini akan mengembalikan True.

Koishore Roy
sumber
Maksud saya, Anda bisa menggunakan inputalih-alih raw_inputjika Anda mau ...
Jo King
@JoKing saya mencoba. Itu melempar kesalahan dan karenanya harus menggunakan raw_input
Koishore Roy
Anda hanya perlu memberikan tanda kutip di sekitar string, karena inputeval STDIN sebelum meneruskannya ke program
Jo King
Itu adalah poin yang sangat adil. Saya merasa bodoh karena melewatkan itu! : 3
Koishore Roy