Bu dize bir palindrom mu (Mors alfabesinde)?


16

Meydan okuma

Bu videodan ilham alındı

Bildiğiniz gibi, bir palindrom, geriye doğru olduğu gibi ileri doğru yazılmış bir kelimedir. "PULP" kelimesi bir palindrom değildir, ancak Mors Kodu'na çevrildiğinde (harfler arasındaki boşluk kaldırıldığında), "PULP" "olur. - ...-.-...--." bu bir palindrom. Göreviniz, bir dizeyi alan ve bu kelimenin Uluslararası Mors Kodunda bir palindrom olup olmadığını döndüren bir program veya işlev yazmaktır.

A: .-
B: -...
C: -.-.
D: -..
E: .
F: ..-.
G: --.
H: ....
I: ..
J: .---
K: -.-
L: .-..
M: --
N: -.
O: ---
P: .--.
Q: --.-
R: .-.
S: ...
T: -
U: ..-
V: ...-
W: .--
X: -..-
Y: -.--
Z: --..

kurallar

Giriş

Giriş herhangi bir makul formatta alınabilir. Giriş dizesi tercih ettiğiniz her durumda yalnızca harf içerir. Dize, boşluk, sayı veya noktalama işareti içermez.

Çıktı

Programınız, girdinin palindrom olup olmadığına bağlı olarak 2 farklı sabit sonuçtan 1'ini çıkarmalıdır, örn. Doğru / Yanlış, 1/0, HOTDOG / NOTHOTDOG

puanlama

Bu bayt kazanır çok kısa cevaptır. Standart boşluklar yasaktır.

Test Durumları

Giriş => Çıkış

"PULP"       => True
"RESEARCHER" => True
"HOTDOGS"    => True
""           => True
"A"          => False
"RACECAR"    => False
"PROGRAMMING"=> False
"PUZZLES"    => False


4
Sadece benim oyum bir çekiç, bu VTC Luis bağlı meydan okuma bir dupe olarak; çoğu çözümün büyük kısmı girdiyi Mors koduna dönüştürecek.
Shaggy

1
Görünüşe göre tüm çözümler sadece bir Morse kod eşlemeleri "tersiyle aynı" onay tacked ile görünüyor, bu yüzden bir kopya olarak kapanıyorum.
xnor

2
Yinelenen hedef (a) girdinin standart girdiden (işlevlere izin vermeme) olduğunu ve (b) birinin [AZ] | [Az] | [0- 9] girişte olduğu gibi. Bunlar birlikte burada bazı cevapları limana önemsiz olmaktan daha az yapar.
Jonathan Allan

Oh adamım - ben de çekiçle açtım! Sadece bir oy kullandığımı sanıyordum. Tekrar kapattım, ama belki de olmamalı.
Jonathan Allan

Yanıtlar:


7

Jöle , 28 bayt

ØAŻŻ“¡9o|çṫ¡X1ỴỌġQ’œ?iⱮḃ2FŒḂ

Çevrimiçi deneyin!

ØA                             The uppercase alphabet.
  ŻŻ                           Prepend two zeroes.
    “¡9o|çṫ¡X1ỴỌġQ’œ?          Get the 73540211105102870315464559332nd permutation.
                                  (= “ETIANMSURWDKGOHVF0L0PJBXCYZQ”)
                     iⱮ        Find indices of input letters in this list.
                       ḃ2      Bijective base 2: map [1,2,3,4,5…] to
                                 [1], [2], [1,1], [1,2], [2,1], …
                         F     Flatten.
                          ŒḂ   Is palindrome?

Bu cevabı bunlardan birine bakarak yazdım (satırları sağdan sola okuyun ve sihirli dizgimi aldın!):

resim açıklamasını buraya girin


73,540,211,105,102,870,315,464,559,332nd... ne?! Bu numarayı nasıl buldun ? Ayrıca bu nasıl sonsuza kadar sürmez ?
Sihirli Ahtapot Urn

@MagicOctopusUrn Temelde, bu dizedeki harflerin sıraya göre sırasının bir kodlamasıdır 00ABCDEFGHIJKLMNOPQRSTUVWXYZ. Jelly, bir permütasyonu böyle bir sayıya ve böyle bir sayıyı tekrar permütasyona dönüştürmek için yerleşiktir. Wikipedia'daki faktöriyel sayı tabanına
Lynn

1
Bu uzun zamandır gördüğüm en havalı şey! Temel olarak faktöriyellerle permütasyonun nerede olacağını "bilebilirsiniz", çünkü permütasyonlar belirli bir sırada yapılır. Bu sürekli bir zaman erişimi mi? Doğrusal? Giriş? Tamamen başka bir şey mi?
Sihirli Ahtapot Urn


7

Jöle ,  35 32 27  25 bayt

-2 sayesinde Dennis (önlemek için permütasyonu değiştirin %32)

Oị“¡\ḣḶɼz3ç³ƝMƒ§’Œ?¤ḃ2FŒḂ

Büyük harfle girdi alır; çıktı 1doğru, 0yanlış içindir.

Çevrimiçi deneyin! Veya test takımına bakın .

Nasıl?

Oị“...’Œ?¤ḃ2FŒḂ - Link: list of characters (in [A-Za-z]), S   e.g. 'FoOl'
O               - to ordinals                                      [70,111,79,108]
 %32            - modulo by 32 (A->1, a->1, ...)                   [6,15,15,12]
         ¤      - nilad followed by link(s) as a nilad:
  “...’         -   base 250 literal = 41482574787853596522350494865
       Œ?       -   first permutation of [1,N] which resides at that
                -   index when all permutations of [1,N] are sorted
                -   = [8,16,10,24,26,27,18,20,4,23,25,11,1,17,13,15,3,22,12,19,6,5,14,21,28,9,7,2]
                - index into (modular-indexing & vectorises)       [17,14,14,19]
          ḃ2    - to bijective base 2 (vectorises)                 [[1,1,2,1],[2,2,2],[2,2,2],[1,2,1,1]]
            F   - flatten                                          [1,1,0,1,0,0,0,0,0,0,1,0,1,1]
             ŒḂ - is palindromic?                                  1

Önceki 35 baytlık çözüm (büyük harfle de girdi alır) ...

ØẠḣ29“...’œ?iⱮ⁸d⁴BnⱮ/€FŒḂ - Link: list of characters (in [A-Z] only), S
ØẠ                        - alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  ḣ29                     - head to index 29 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabc'
     “...’                - base 250 literal = 1222276956185766767980461920692
          œ?              - permutation at index = 'EAIWRUSJPaLbFVHcTNMDKGOBXCYZQ'
              ⁸           - chain's left argument = S       e.g. 'FOOL'
             Ɱ            - map with:
            i             -   first index of (char in 'EAI...')  [13,23,23,11]
                ⁴         - literal 16                           16
               d          - divmod                               [[0,13],[1,7],[1,7],[0,11]]
                 B        - to binary (vectorises)               [[[0],[1,1,0,1]],[[1],[1,1,1]],[[1],[1,1,1]],[[0],[1,0,1,1]]]
                     €    - for each:
                    /     -   reduce by:
                   Ɱ      -     map with:
                  n       -       not equal                      [[1,1,0,1],[0,0,0],[0,0,0],[1,0,1,1]]
                      F   - flatten                              [1,1,0,1,0,0,0,0,0,0,1,0,1,1]
                       ŒḂ - is palindromic?                      1


2

MBASIC , 325 bayt

Büyük deneme buraya gelmeden önce ilk girişim :-)

1 DATA .-,-...,-.-.,-..,.,..-.,--.,....,..,.---,-.-,.-..,--,-.,---,.--.,--.-,.-.,...,-,..-,...-,.--,-..-,-.--,--..
2 DIM C$(26):FOR I=1 TO 26:READ C$(I):NEXT:INPUT T$:FOR I=1 TO LEN(T$):N=ASC(MID$(T$,I,1))-64:S$=S$+C$(N):NEXT:L=LEN(S$):FOR I=1 TO L:IF MID$(S$,I,1)<>MID$(S$,(L+1)-I,1) THEN 4
3 NEXT:PRINT"True":END
4 PRINT"False

Çıktı

? PULP
True

? RESEARCHER
True

? HOTDOGS
True

?
True

? A
False

? RACECAR
False

? PROGRAMMING
False

? PUZZLES
False


2

Perl 6 , 87 bayt

{$_ eq.flip}o*.trans(/./=>{S/.//}o{'  ETIANMSURWDKGOHVF L PJBXCYZQ'.index($/).base(2)})

Çevrimiçi deneyin!

Kelimeyi 1s ve 0s serisine dönüştürür ve palindromik olup olmadığını kontrol eder.

Açıklama:

             *.trans(/./=>  # Translate each letter of the input to
                                   '...'.index($/)   # The index of the letter in the lookup string
                                                  .base(2)  # Converted to binary
                          {S/.//}o{                       } # With the first digit removed
{$_ eq.flip}o   # Return if the string is equal to its reverse

2

Piton 3 , 172 148 104 bayt

İlk kod golf hiç. Lütfen nazik olun ve herhangi bir yardım sunun :)

Bu, C # yanıtını temel alır: /codegolf//a/175126/83877 . Aynı fikirleri aldım ve Python 3'e uyguladım. Golf-ify koduna elimden geleni yaptım, ama yapabileceğim çok daha fazla şey olduğundan eminim.

EDIT 1: Bazı boşlukları ve gereksiz kodları kaldırmama yardımcı oldukları için @Stephen ve @Cowabunghole'a teşekkürler.

EDIT 2: İkili olarak yapmak için öneri için @ JoKing teşekkürler. Bu '-' ve '' gerçekten temiz bir numara. gerekli bile değil. Bu büyük bir bayt azalmasına yol açtı.

Çözüm

def b(w):x=''.join(map(lambda c:bin('  ETIANMSURWDKGOHVF L PJBXCYZQ'.index(c))[3:],w));return x==x[::-1]

Çevrimiçi deneyin!


1
PPCG'ye Hoşgeldiniz! İşte beyaz alan golf ile 152 bayt: Çevrimiçi deneyin!
Stephen

1
Birkaç karakteri kaydetmek için birkaç ipucu: Boşluğu olabildiğince kaldırın. Örneğin, 2 bayt kaydetmek while i > 0:için while i>0:olarak değiştirebilirsiniz . Ayrıca, yanılmış olabilirim ama bence > 0tamamen ortadan kaldırabilir ve kullanabilirsiniz while i:. İkincisi, while döngüsünde yer alan ifade, while satırıyla aynı satıra gidebilir ve yeni satırı ve girintiyi kaydedebilir. Son olarak, bu kod golf dışında her yerde korkunç bir tavsiye, ancak Python 3 yerine Python 2 kullanıyorsanız , bölme /yerine kullanmak için 1 bayt kaydedebilirsiniz //.
Cowabunghole

1
Ah, ~-ibunun yerine kullanabilirsiniz i-1. Bu aynı bayt sayısıdır, ancak daha sonra 2 bayt kaydeden parantezleri atlayabilirsiniz.
Cowabunghole

1
Sen kullanmak yerine ikili yapabileceğini -ve .. 105 bayt
Jo King

1
Hayır, tekniği kullanan bir Perl 6 cevabım var. Tekniği kullanmaktan çekinmeyin
Jo King

1

Pyth, 35 33 bayt

Kod yazdırılamayan karakterler içeriyor, bu yüzden bir hexdump.

00000000: 5f49 7358 7a47 632e 2207 0901 3f08 82ee  _IsXzGc."...?...
00000010: bd3f c256 9d54 c381 7dac 6590 37d3 c8f5  .?.V.T..}.e.7...
00000020: 52                                       R

Çevrimiçi deneyin. Test odası.

açıklama

."Kodun sonundan başlayarak, noktalar olarak \x08ve kesik çizgilerle \x07ayrılmış ve sekmelerle ayrılmış Morse alfabesi oluşturur .

c dizeyi sekmelerle böler.

XzG( X) girişini ( z) alfabesinden ( G) bu "Mors alfabesi" ne çevirir .

sMors sembollerini toplar (birleştirir). Boş girişler için 0 döndürür, ancak bu bir sorun değildir.

_IIters ( _) olduğunda sonucun değişip değişmediğini ( ) kontrol eder . Boş giriş için, reddedildiğinde 0'ın değişip değişmediğini kontrol eder.


0

Retina 0.8.2 , 87 bayt

[B-ILNPRSZ]
$&.
[AJKMOQT-Y]
$&-
}T`L`\EDKN_UMS\EWNRTTMWGAI_ISADKG
+`^(.)(.*)\1$
$2
^.?$

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. Açıklama:

[B-ILNPRSZ]
$&.

Bu setteki harflerin tüm Mors kodları ile biter ..

[AJKMOQT-Y]
$&-

Bu setteki harflerin tüm Mors kodları ile biter -.

T`L`\EDKN_UMS\EWNRTTMWGAI_ISADKG

Her bir harfi, Mors kodu o harfin öneki olan harfle değiştirin (burada Eve Tçıkış karakterinden silinir _, ancak normalde boşluklara dönüştürülürler). Örneğin , sonunda bir ekstra ile PMors kodu ; Yukarıdakileri ekledik, böylece geriye kalan tek şey kodunu çözmek .W..W

}

Harf kalmayıncaya kadar yukarıdaki adımları tekrarlayın.

^(.)(.*)\1$
$2

İlk ve son karakterler aynıysa, ikisini de silin.

+`

Eşleşen kadar karakter için tekrarlayın.

^.?$

Bu bir palindrom olsaydı, en fazla bir karakter kaldı.


0

Wolfram Dili (Mathematica) , 107 bayt

PalindromeQ[##2&@@@(IntegerDigits[Tr@StringPosition[" ETIANMSURWDKGOHVF L PJBXCYZQ",#],2]&/@Characters@#)]&

Çevrimiçi deneyin!

Bu Jelly cevabına benzer şekilde : Mors kodunu ikili olarak düşünüyoruz ve " ETIANMSURWDKGOHVF L PJBXCYZQ"bir karakterin ikili olarak pozisyonunun bize Mors kodunu verdiği bir dize yazıyoruz . Ama fazladan 1 ile, çünkü ayırt etmek istiyoruz S = 000ve H = 0000mesela. Sonra ##2&@@@aynı anda bu önde gelen 1 kurtulmak ve düzleşir.


Ha, Wolfram Dilinin yerleşik bir Mors kodu olmasını beklerdim. Yoksa bir tane var, ama çok ayrıntılı mı?
Jack Brounstein

1
Bir tane bulamadım. (Ve belgeler
Mese Lavrov

0

05AB1E , 37 bayt

v•1êÿµµÈ∞Ƶipδ8?a¡š%=тîδ/•3B0¡Aykè}JÂQ

Çevrimiçi deneyin!


Taban 3'teki alfabeyi taban 255'e dönüştürür:

12021110212102110101121022101111011012220212012110220210222012210221201210111020112011120122021120212202211

Temel 255:

•1êÿµµÈ∞Ƶipδ8?a¡š%=тîδ/•

Sonra temelde, 0'ları parçalara ayırıyorum, dizeyi konuma göre inşa ediyorum ve palindromu kontrol ediyorum.


0

C # (.NET Core) , 191 bayt

a=>{var s="";int r=1,x=0,i;foreach(var t in a){var c="";for(i=" ETIANMSURWDKGOHVF L PJBXCYZQ".IndexOf(t);i>0;i/=2)c="-."[i--%2]+c;s+=c;}i=s.Length;for(;x<i;x++)r=s[x]==s[i-x-1]?r:0;return r;}

Çevrimiçi deneyin!

Bu cevabın bir kısmı Nick Larsen'in mors kodu golfünden uyarlandı . Cevabın yorumlarına dayanarak, bu potansiyel olarak daha fazla golf olabilir.

Ungolfed:

a => {
    var s = "";                 // initialize s
    int r = 1, x = 0, i;        // initialize r, x, and i

    /*
        This portion was adapted from Nick Larsen. He described it as follows:
            -- The string of characters is a heap in which the left child is a dot and the right child is a dash.
            -- To build the letter, you traverse back up and reverse the order.
        I have edited it to remove number support, which saves 34 bytes.
    */
    foreach(var t in a)
    {
        var c = "";
        for(i = " ETIANMSURWDKGOHVF L PJBXCYZQ".IndexOf(t); i > 0; i /= 2)
            c = "-."[i-- % 2] + c;
        s += c;
    }

    i = s.Length;               // reuse i and set to the length of the morse code string
    for(; x < i; x++)           // increment x until x reaches i
        r = s[x] == s[i - x - 1] ?      // if the xth character on the left side of s is equal to the xth character on the right side of s
                                    r :     // true: do not change r
                                        0;  // false: set r to zero (set to false)

    return r;
}

0

PowerShell , 204 187 bayt

param($a);$a|% t*y|%{$b+=[convert]::ToString("  ETIANMSURWDKGOHVF L PJBXCYZQ".IndexOf($_),2).substring(1)};$c=($b=($b|% *ce 0 .|% *ce 1 -)).ToCharArray();[array]::Reverse($c);$b-eq-join$c

Çevrimiçi deneyin!

Boş dize hataları ... Bu konuda kimse yardımcı olabilir mi?

Test kodu (Kodu bir Komut Dosyası Bloğuna sararak ve $ Z ... değişkenine atandıktan sonra):

$tests = @(
    "PULP", "True"
    "RESEARCHER", "True"
    "HOTDOGS", "True"
    "A", "False"
    "RACECAR", "False"
    "PROGRAMMING", "False"
    "PUZZLES", "False"
)
$outputs = @()
for($i = 0; $i -lt $tests.length/2; $i++){
    $output = New-Object "PSObject"
    $output  | Add-Member -MemberType NoteProperty -Name Name -Value "`"$($tests[2*$i])`""
    $output | Add-Member -MemberType NoteProperty -Name Expected -Value $tests[2*$i + 1]
    $output | Add-Member -MemberType NoteProperty -Name Result -Value $(&$Z -a $tests[2*$i])
    $outputs += $output 
}
$outputs | Format-Table

Çıktı:

Name          Expected Result
----          -------- ------
"PULP"        True       True
"RESEARCHER"  True       True
"HOTDOGS"     True       True
"A"           False     False
"RACECAR"     False     False
"PROGRAMMING" False     False
"PUZZLES"     False     False

PPCG'ye hoş geldiniz. PowerShell'de golf için ipuçları
mazzy

Teşekkürler @mazzy!
KGlasier
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.