Terinspirasi oleh Apakah berbicara dua kali lipat? Saya menemukan tantangan yang lebih sulit. Diberikan string, tentukan apakah string tersebut adalah n-spoke , untuk setiap .
Bicara didefinisikan dengan mengulangi setiap huruf kali. Dengan , string Hello
ditransformasikan menjadi HHHHeeeelllllllloooo
. Tujuan Anda adalah untuk mengetahui apakah input tersebut merupakan output yang valid untuk setiap transformasi n-spoke.
Perlu dicatat bahwa kalimat apa pun yang valid untuk berbicara , untuk n = 2 k , juga berlaku untuk berbicara k. Dengan demikian, bagian yang sulit untuk dipecahkan adalah nilai ganjil dari .
Memasukkan
Sebuah string yang terdiri dari setidaknya 2 karakter. Input juga bisa berupa daftar karakter. Input peka huruf besar-kecil.
Keluaran
Truthy
jika stringnya adalah n-speak, falsey
sebaliknya.
Contohnya
Kasus yang benar
HHeelllloo,, wwoorrlldd!!
TTTrrriiipppllleee ssspppeeeaaakkk
QQQQuuuuaaaaddddrrrruuuupppplllleeee ssssppppeeeeaaaakkkk
7777777-------ssssssspppppppeeeeeeeaaaaaaakkkkkkk
999999999
aaaabb
aaaaaaaabbbbcc
aaaaabbbbb
@@@
Jika Anda ingin membuat kasus kebenaran tambahan, Anda dapat menggunakan skrip MathGolf ini . Tempatkan string dalam tanda kutip, dan nilai sebagai input.
Kasus palsu
Hello, world!
TTTrrriiipppllleee speak
aaaaaaaaaaaaaaaab
Ddoouubbllee ssppeeaakk
aabbab
aaaabbb
a (does not need to be handled)
(empty string, does not need to be handled)
Tentu saja, karena ini adalah kode golf, bersiaplah untuk memotong beberapa byte!
aabbab
aaaabbb
Jawaban:
APL (Dyalog Unicode) , 12 byte
Dijalankan dengan
⎕io←0
Cobalah online!
Bermain golf bersama Adám .
Pada input (contoh :,
"aaccccaaaaaabb"
gunakan""
untuk menunjukkan string (array karakter) dan''
untuk menunjukkan char)∊0⍞0
mengelilingi dengan 0s dan ratakan,0 'a' 'a' 'c' 'c' 'c' 'c' 'a' 'a' 'a' 'a' 'a' 'a' 'b' 'b' 0
2≠/
melakukan berpasangan tidak sama,1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
⍸
dapatkan indeks-indeks 0,0 2 6 12 14
∨/
menghitung GCD,2
1≠
Apakah ini tidak sama dengan 1?sumber
Java 10, 85 byte
Regex porting dari jawaban JavaScript @Arnauld .
Cobalah online.
Penjelasan:
Penjelasan regex:
sumber
Jelly , 5 byte
Cobalah online!
sumber
JavaScript (ES6), 53 byte
Berasal dari ekspresi reguler yang digunakan oleh @wastl di Apakah ini berbicara ganda? .
Cobalah online!
Versi rekursif, 55 byte
Cobalah online!
Berkomentar
sumber
05AB1E , 5 byte
Cobalah online!
sumber
Python 2,
73706967 bytesTry it online!
-4 bytes, thanks to Jitse
sumber
set(...)
with{...}
...1 in[...
Python 3, 69 bytes
Try it online!
sumber
QuadS, 16 bytesSBCS
Try it online!
1≠
is 1 different from∨/
the GCD⍵
of the result of(.)\1*
PCRE Searching for any character followed by 0 or more repetitions thereof⊃⍵L
and returning the first of the match lengths (i.e. the length of the match)sumber
Stax, 5 bytes
Run and debug it
Procedure:
sumber
T-SQL 2008 query, 193 bytes
Try it online
sumber
PHP,
7675 bytesTry it online!
First attempt, a somewhat naïve iterative approach.
Ungolfed:
-1 byte, thx to @Night2!
sumber
Perl 6,
302726 bytesTry it online!
Also uses the GCD trick, but uses the index of the end position of each run matched by the regex. Returns a negative number (truthy) if n-speak, zero (falsey) otherwise.
sumber
Haskell, 48 bytes
Try it online!
Straightforward; uses the GCD trick.
sumber
Red, 80 bytes
Try it online!
More idiomatic Red:
Red, 81 bytes
Try it online!
sumber
Brachylog, 5 bytes
Try it online!
Takes input through the input variable and outputs through success or failure.
At first I thought this would actually be shorter than my solution to Is it double speak?, but then I realized that
ġ
can and will try a group length of 1.sumber
Japt
-¡
, 8 bytesTry it
sumber
Kotlin, 78 bytes
Try it online!
Explanation
sumber
Scala, 80 bytes
Try it online!
PS. Original solution was based on
split
function but it's longer (83 bytes).sumber
true
for inputaab
, unfortunately.s.
replaced with(s+s).
to handle that.aaaabb
andaabbbb
.Wolfram Language (Mathematica), 34 bytes
Try it online!
sumber
Perl 5
-p
,83797674 bytesTry it online!
sumber
Brain-Flak, 96 bytes
Try it online!
Uses the same GCD trick that many other submissions use. Output is 0 if the input is not n-speak, and a positive integer otherwise.
sumber
Oracle SQL, 182 bytes
It works with an assumption that input data is stored in a table t(x), e.g.
sumber
K (ngn/k),
2923 bytesTry it online!
edit: removed some unnecessary colons (i know when a monadic is required but it's not always clear to me if there's ambiguity so i default to including the colon) and changed the mod
x-y*x%y
to ngn/k'sy!x
, which meant i could remove a variable assignmentsumber
APL (Dyalog Unicode),
2422 bytesSBCSAnonymous tacit prefix function.
Try it online!
⊂
enclose the string to treat map using the entire stringe.g.
"aaabbb"
⍳∘≢{
…}¨
for each of the⍳
ɩndices 1 through the tally of characters in the string:e.g.
3
⍺↑⍺
take the current number of elements from the current number, padding with 0se.g.
[3,0,0]
(≢⍵)⍴
cyclically reshape into the shape of the tally of characters in the stringe.g.
[3,0,0,3,0,0]
⍵/⍨
use that to replicate the string's characters"aaabbb"
1↓
drop the first one (n = 1)⊂∊
is the the entire string a member of that list?sumber
[1,0,0,1,0,0…]
etc. I'll be happy to teach you APL (it doesn't take long to learn). Just pop unto the APL Orchard.{1<∨/≢¨⍵⊆⍨≢∘∪¨,\⍵}
for 18{1<∨/≢¨⍵⊆⍨≢¨∪\⍵}
?aacccaaaaabb
Retina 0.8.2, 28 bytes
Try it online! Link includes test cases. Explanation:
Split the text into runs of identical characters.
Replace them all with the same character.
Check whether the GCD of the lengths of the runs is greater than 1.
sumber
Japt
-mR
, 12 bytesTry it
sumber
MathGolf, 14 bytes
Try it online!
Explanation
Checks all possible divisions of the input string into equal length chunks, and checks if there is a partition in which all chunks have just one unique character.
sumber
Pyth, 7 bytes
Outputs 0 for falsy inputs or a positive integer otherwise.
Try it online!
sumber
Pyth, 8 bytes
Try it online!
sumber
Perl 5
-n
, 38 bytesTry it online!
The
print"\n"
in the footer is needed to separate the outputs.Straightforward loop through all possible
n
s. Outputs nothing for "1-speak", anything else for n-speak where n > 1.sumber