Bölünebilir dizeler

Sep 09 2020

Görev

Bir dizge verildiğinde s, her harfin ASCII kodu uzunluğuna bölünebiliyorsa s, aksi takdirde yanlışsa doğru bir değer çıktılayın .

Giriş çıkış

Giriş, yalnızca ASCII içeren boş olmayan bir dizedir [32-126]. Çıktı, standart bir doğru / yanlış değerdir. Değerleri değiştirebileceğinizi unutmayın, örneğin döndürme 0/ Falsebölünebiliyorsa ve tersi

Test durumları

Input         Output

Hello         False       (72 101 108 108 111), 5
lol           True        (108 111 108), 3
Codegolf      False       (67 111 100 101 103 111 108 102), 8
A             True        (65), 1
nope          False       (110 111 112 101),4
8  8          True        (56 32 32 56), 4

Yanıtlar

3 LuisMendo Sep 09 2020 at 15:18

MATL , 4 bayt

tn\~
  • Bölünebilir dizeler için çıktı yalnızca 1s içeren bir vektördür , bu doğrudur .
  • Aksi takdirde çıktı, birkaç 1s ve en az bir tane içeren ve yanlış0 olan bir vektördür .

Çevrimiçi deneyin! Veya doğruluk / yanlışlık testi dahil tüm test senaryolarını doğrulayın .

Nasıl çalışır

t   % Implicit input. Duplicate
n   % Number of elements
\   % Modulo
~   % Negate. Implicit display
8 ovs Sep 09 2020 at 15:57

Befunge-98 (FBBI) , 31 bayt

Çıktı, 1sahtecilik için çıkış kodu aracılığıyladır 0.

#v~\1+
v>53p
>:#v_1q
^  >' %#@_

Çevrimiçi deneyin!


Girişlerle çalışan kod lolve ab:

küçük sayılar değişmez bayt değerlerini temsil eder

8 rak1507 Sep 09 2020 at 17:20

Haskell , 42 39 bayt

(<1).sum.(map=<<flip(mod.fromEnum).length)
f s=sum[fromEnum c`mod`length s|c<-s]<1

Ovs ve xnor sayesinde 3 daha az bayt!

Çevrimiçi deneyin!

7 ovs Sep 09 2020 at 15:06

05AB1E , 5 bayt

ÇsgÖP

Çevrimiçi deneyin!

Yorum yaptı

        # implicit input    "lol"
Ç       # push ASCII value  [108, 111, 108]
 s      # swap (with input) [108, 111, 108], "lol"
  g     # length            [108, 111, 108], 3
   Ö    # is divisible?     [1, 1, 1]
    P   # product           1
5 Shaggy Sep 10 2020 at 16:17

Rockstar , 205 192 175 162 bayt

Bu eğlenceliydi. Rockstar'ın bir dizginin uzunluğunu doğrudan okumasının bir yolu yoktur, karakterleri kod noktalarına dönüştüremez ve modulo operatörü yoktur. Bu kadar kısa sürede sonuçlandığına şaşırdım!

listen to S
cut S
X's0
D's0
while S at X
N's32
while N-127
cast N into C
if C is S at X
let M be N/S
turn down M
let D be+N-S*M

let N be+1

let X be+1

say not D

Burada deneyin (Kodun yapıştırılması gerekecektir)

4 Mukundan314 Sep 09 2020 at 17:35

Pyth , 8 bayt

!sm%CdlQ

Çevrimiçi deneyin!

!sm%CdlQ
  m       : map implicit input on
          : lambda d:
    Cd    :   Ascii value of d
   %  lQ  :   mod length of input
 s        : sum result of map
!         : logical negate it
3 Shaggy Sep 09 2020 at 15:57

JavaScript, 32 bayt

Çıktı tersine çevrildi.

s=>Buffer(s).some(c=>c%s.length)

Çevrimiçi deneyin!

3 Kaddath Sep 10 2020 at 21:30

PHP , 56 52 bayt

for(;$c=ord($argn[$i++]);$c%strlen($argn)?die(f):1);

Çevrimiçi deneyin!

Çıktı tersine çevrildi

Yürütme f, herhangi bir karakter bölünemezse veya tümü bölünebilir ise boş dizge (PHP'de yanlış) ile durur

EDIT: @ 640KB sayesinde 4 bayt tasarruf edildi

2 Dion Sep 09 2020 at 15:06

Python 2 , 41 39 bayt

lambda s:all(ord(i)%len(s)<1for i in s)

Çevrimiçi deneyin!

@Ovs sayesinde -2 bayt

2 GalenIvanov Sep 09 2020 at 15:34

K (oK) , 11 bayt

{~+/(#x)!x}

Çevrimiçi deneyin!

2 madlaina Sep 09 2020 at 16:48

Pas , 36 bayt

|s|s.iter().all(|x|1>x%s.len()as u8)

Çevrimiçi deneyin!

Girişi a olarak alır &[u8], a çıkışı verir bool.

2 Razetime Sep 09 2020 at 17:13

Pip , 12 bayt

!$+(A_Ma)%#a

Çevrimiçi deneyin!

Açıklama

!$+(A_Ma)%#a a → input
   (A_Ma)    Map a to Unicode/ASCII codepoints
         %#a Modulo the list by it's length
 $+          Sum up the remainders
!            Not(returns 0 for any positive number, 1 for 0)
2 Razetime Sep 09 2020 at 17:39

Ruby , 43 37 36 32 bayt

->a{a.bytes.all?{|n|n%a.size<1}}

dizelerde sadece harita kullanılabilseydi ..

Ov'lardan -10 bayt.

Dingus'tan -1 bayt.

Çevrimiçi deneyin!

2 NahuelFouilleul Sep 09 2020 at 21:05

Perl 5 -pF , 20 bayt

$_=!grep ord()%@F,@F

Çevrimiçi deneyin!

2 Noodle9 Sep 09 2020 at 16:36

C (gcc) , 54 53 bayt

l;r;f(char*s){l=strlen(s);for(r=0;*s;)r|=*s++%l;l=r;}

Çevrimiçi deneyin!

Her karakterin ASCII değeri girdi dizesinin uzunluğuna bölünebiliyorsa, aksi takdirde doğru ise falsey döndürür.

Açıklama:

l;r;f(char*s){l=strlen(s);for(r=0;*s;)r|=*s++%l;l=!r;}  
l;r;                                                  // Declare 2 int variables
    f(                                                // Function f taking
      char*s){                                        //   string parameter s  
              l=strlen(s);                            // Store length of s in l
                          for(                        // Loop
                              r=0;                    //   initialising r to 0
                                  *s;)                //   until end of s  
                                      r|=             // Bitwise or r with 
                                         *s           //   the ASCII value of the next
                                                      //   character...  
                                           ++         // Aside: push s pointer forward
                                             %l;      //  ... mod the string length
                                                r=l;  // Return r (r will be 0
                                                      //   iff every character was
                                                      //   divisible by l)
2 J42161217 Sep 09 2020 at 15:11

Wolfram Dili (Mathematica) , 40 bayt

{0}==##&@@ToCharacterCode@#~Mod~Tr[1^#]&

Çevrimiçi deneyin!

@att'e bayt tasarrufu sağladığı için teşekkürler

1 Adám Sep 09 2020 at 15:24

APL (Dyalog Genişletilmiş) , 7 bayt ( SBCS )

Anonim zımni önek işlevi

⍱≢|⎕UCS

Çevrimiçi deneyin!

⍱ aşağıdakilerden herhangi biri doğru değil mi (sıfır olmayan)?

≢ uzunluk

| böler (bölünürken kalan bölümü aydınlatır)

⎕UCS kod noktaları

1 LiefdeWen Sep 09 2020 at 15:56

C # (.NET Core) , 25 bayt

a=>a.All(x=>x%a.Length<1)

Çevrimiçi deneyin!

1 Shaggy Sep 09 2020 at 16:36

Japt -e , 6 bayt

c vNÎÊ

Dene

1 KevinCruijssen Sep 09 2020 at 16:42

MathGolf , 4 bayt

$h÷╓

Karakter listesi olarak giriş.

Çevrimiçi deneyin.

Açıklama:

$     # Get the codepoint of each character in the (implicit) input-list
 h    # Push the length of this list (without popping the list itself)
  ÷   # Check for each codepoint if it's divisible by this length
   ╓  # Pop and push the minimum of the list
      # (after which the entire stack joined together is output implicitly as result)
1 ovs Sep 09 2020 at 15:18

Jöle , 4 bayt

LḍOP

Çevrimiçi deneyin! veya tüm vakaları doğrulayın!

Commmented: (En azından bunun böyle çalıştığını düşünüyorum)

   P  # product of ...
L     #   does the length 
 ḍ    #   ... divide ...
  O   #   the char codes
1 DominicvanEssen Sep 09 2020 at 16:20

R , 39 38 bayt

Düzenleme: YANLIŞ için DOĞRU ve DOĞRU için YANLIŞ çıktılayabileceğimiz yeni kural sayesinde -1 bayt

function(s)any(utf8ToInt(s)%%nchar(s))

Çevrimiçi deneyin!

Veya TRUE için TRUE sonucunu veren orijinal 39 baytlık sürümü deneyin ...

1 Stuart Sep 11 2020 at 16:10

Clojure, 41 karakter

(every? #(= 0 (mod (int %) (count x))) x)

Yorumdan sonra boşluklar kaldırılıyor 37 karakter

(every? #(= 0(mod(int %)(count x)))x) 
1 Dion Sep 10 2020 at 20:07

MAWP , 34 33 24 23 bayt

`|_=M0=A0/[M%{0:.}?`]1:

Dene!

9 bayt tasarrufu için @ Razetime'a teşekkürler!

Açıklama:

`        Remove starting 1 on stack
|        Push input on stack as ASCII codes
_=M      Set variable M to length of stack (length of input)
0=A      Set variable A to 0
0/       Push 0 and cycle stack
[        Start of loop
M%       Modulo by M
{0:.}    If not 0 then print 0 and terminate
?`       If 0 then pop value
]        End of loop
1:       Print 1
1 xash Sep 12 2020 at 15:48

Brachylog , 8 bayt

ạfᵐ∋ᵛ~l?

Çevrimiçi deneyin!

ạfᵐ∋ᵛ~l?
ạ        characters to integer
 fᵐ      find all factors
   ∋ᵛ    every list of factors contain …
     ~l? the length of the input

Alternatif versiyon,

⟨ạzl⟩%ᵛ0
⟨fhg⟩    forks! fA & gB ∧ [A, B]h
 ạzl     zip the code blocks with the length;
          [[108, 3], [111, 3], [108, 3]]
     %ᵛ0 every list must be 0 after modulo
1 Steve28 Sep 13 2020 at 08:06

Python 3 , 55 52 bayt

N=input();print(not sum([ord(i)%len(N) for i in N]))

Çevrimiçi deneyin!

1 2014MELO03 Sep 17 2020 at 03:26

GolfScript , 20 bayt

.,0@{(3$%@+\}3$*;!\;

Çevrimiçi deneyin!

Bu, dizge bölünebilirse 1, değilse 0 verir. S dize ve uzunluğu L olsun.

.,0@                  # The stack from bottom up will be: L  0  S
    {       }3$* # Execute this block L times ( # Separate first char from the string as a number 3$%             # Previous number mod L
         @+\          # Add result to the acumulator
                ;     # Discard the ""
                 !    # 1 iff the acumulator is 0
                  \;  # Discard L
Neil Sep 09 2020 at 16:06

Kömür , 8 bayt

¬⊙θ﹪℅ιLθ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı sürümüne yöneliktir. Çıktı bir Kömür boole'idir, yani -doğru için, yanlış için hiçbir şey yoktur. Açıklama:

  θ         Input string
 ⊙          Is there a character where
     ι      Current character
    ℅       Ordinal
   ﹪        Modulo (i.e. is not divisible by)
       θ    Input string
      L     Length
¬           Boolean NOT
            Implicitly print

⬤θ¬﹪℅ιLθ tabii ki de çalışıyor.

GalenIvanov Sep 09 2020 at 16:06

Faktör , 62 bayt

: f ( s -- ? ) dup length [ mod ] curry [ + ] map-reduce 0 = ;

Çevrimiçi deneyin!

BlackPanther Sep 09 2020 at 18:08

C # (Visual C # Etkileşimli Derleyici) , 81 bayt

(s)=>{var bs = ASCIIEncoding.ASCII.GetBytes(s);return bs.All(b=>b%s.Length==0);};

Çevrimiçi deneyin!

C # (Visual C # Etkileşimli Derleyici) , 27 26 bayt

s=>s.All(c=>c%s.Length<1);

Çevrimiçi deneyin!