Bölünebilir dizeler
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
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ış0olan 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
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
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!
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
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)
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
JavaScript, 32 bayt
Çıktı tersine çevrildi.
s=>Buffer(s).some(c=>c%s.length)
Çevrimiçi deneyin!
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
Python 2 , 41 39 bayt
lambda s:all(ord(i)%len(s)<1for i in s)
Çevrimiçi deneyin!
@Ovs sayesinde -2 bayt
K (oK) , 11 bayt
{~+/(#x)!x}
Çevrimiçi deneyin!
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.
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)
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!
Perl 5 -pF , 20 bayt
$_=!grep ord()%@F,@F
Çevrimiçi deneyin!
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)
Wolfram Dili (Mathematica) , 40 bayt
{0}==##&@@ToCharacterCode@#~Mod~Tr[1^#]&
Çevrimiçi deneyin!
@att'e bayt tasarrufu sağladığı için teşekkürler
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ı
C # (.NET Core) , 25 bayt
a=>a.All(x=>x%a.Length<1)
Çevrimiçi deneyin!
Japt -e , 6 bayt
c vNÎÊ
Dene
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)
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
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 ...
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)
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
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
Python 3 , 55 52 bayt
N=input();print(not sum([ord(i)%len(N) for i in N]))
Çevrimiçi deneyin!
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
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.
Faktör , 62 bayt
: f ( s -- ? ) dup length [ mod ] curry [ + ] map-reduce 0 = ;
Çevrimiçi deneyin!
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!