プログラミングのお題スレ Part22 (862レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
464
(9): デフォルトの名無しさん [] 01/03(金)13:22 ID:dEYOS8Dq(1/2)
お題
AのあとにAと同じ数だけBが続く言語エビがあるとします
文字列が入力されたときそれがエビ言語であるか判定するプログラムを作成してください

→ true
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB→ true
465: デフォルトの名無しさん [] 01/03(金)13:25 ID:dEYOS8Dq(2/2)
>>464
文字化け訂正
誤:AのあとbノAと同じ数だけBが続く言語エビがあるとします
正:AのあとにAと同じ数だけBが続く言語エビがあるとします
466: デフォルトの名無しさん [] 01/03(金)15:30 ID:aGLRGnDr(1/3)
>>464 lisp
https://ideone.com/hHjwKz
467: デフォルトの名無しさん [] 01/03(金)15:34 ID:aGLRGnDr(2/3)
>>464 python
https://ideone.com/2Xa1tx
468
(2): デフォルトの名無しさん [sage] 01/03(金)17:52 ID:aGLRGnDr(3/3)
>>464 lisp (chatgptに教えてもらった)
https://ideone.com/UYK3Qu
https://chatgpt.com/share/67778c2d-647c-8011-96dd-954a8f0fba92
469: デフォルトの名無しさん [sage] 01/03(金)20:07 ID:yesC/P5F(1)
>>464
fn is_ab_lang(input: &str) -> bool {
match input
.chars()
.fold(Some(0), |state, char| match (state, char) {
(Some(count), 'A') => Some(count + 1),
(Some(count), 'B') if count > 0 => Some(count - 1),
_ => None,
}) {
Some(0) => true,
_ => false,
}
}

fn main() {
for s in ["", "AB", "AABB", "ABAABBAAABBB"] {
assert!(is_ab_lang(s)); // true
}
for s in ["A", "B", "BA", "ABB", "AAB", "ABBA"] {
assert!(!is_ab_lang(s)); // false
}
}
470: デフォルトの名無しさん [sage] 01/03(金)23:45 ID:AD9nWeeV(1)
>>464 c
https://ideone.com/KDcKNc
#include <stdio.h>
#include <string.h>
int isablang(const char *s) {
size_t a = strspn(s, "A"), b = strspn(s + a, "B");
return !*s || 0 < a && 0 < b && a == b && isablang(s + a + b);
}
void g(const char *s) {
printf("%s\t%s\n", isablang(s) ? "true" : "false", s);
}
int main() {
g("A"), g("B"), g("C"), g("BA"), g("CA"), g("ABB"), g("AAB"), g("AABABB"), g("ABC"), g("CAB"), g("ABCAB");
g(""), g("AB"), g("ABAB"), g("AABB");
return 0;
}
473: デフォルトの名無しさん [sage] 01/04(土)16:26 ID:kbkaPDs8(1)
>>464 c
https://ideone.com/x7a81M
・strspn使わない
・再帰しない
#include <stdio.h>
int isablang(const char *s) {
const char *t, *u;
for (; *s; s = u) {
if (*s != 'A') return 0; else for (t = s; *t == 'A'; t++);
if (*t != 'B') return 0; else for (u = t; *u == 'B'; u++);
if (t - s != u - t) return 0;
}
return 1;
}
478: 警備員[Lv.18] [] 01/12(日)04:14 ID:zWON4EbF(1/2)
>>464
Kotlin
https://paiza.io/projects/SkS05OZPJQJlBJ0iWlkkeA
492
(1): 9 [sage] 01/24(金)17:38 ID:cg1ZmS3G(1)
>>464 Perl5

for (<DATA>) {
 chomp;
 print "$_ → ", (/^(A((AB)?|(?1))B)+$/g ? 'true' : 'false'), "\n";
}
__DATA__

A
B
AB
ABB
AAB
AABB
ABAABBAAABBB
ABC
AABABB

※見易くするためにインデントを全角スペースに置換してあります

実行結果
~ $ perl 22_464_AB_rec_rex.pl
→ false
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB → true
ABC → false
AABABB → false
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.031s