RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1543735
Accepted
Acinit
Acinit
Asked:2023-10-03 13:35:58 +0000 UTC2023-10-03 13:35:58 +0000 UTC 2023-10-03 13:35:58 +0000 UTC

高尔夫代码。回文排列

  • 772

健康)状况

回文是从头到尾读起来相同的单词、短语或字符序列(例如“rotor”或“madam”)。您需要编写一个程序来确定是否可以通过重新排列给定字符串的字符将其制成回文。

输入数据

a由拉丁字母表中的字母(从到)组成的字符串z。

输出

'YES'如果可以重新排列字符形成回文,则打印该字符串,'NO'否则打印该字符串。

测试用例

Вход: "aab"
Выход: "YES" (можно сделать "aba")

Вход: "abc"
Выход: "NO"

Вход: "racecar"
Выход: "YES" (это уже палиндром)

Вход: "aaa"
Выход: "YES"

评价标准

任何编程语言。

比赛将以符号(空格和连字符也是符号)最短的解决方案获胜。

获胜者的答案将被标记为正确。在选择获胜者时不会使用提问者的答案。

比赛期 - 7 天,2023 年 10 月 10 日莫斯科时间 8:00 结束


聚苯乙烯

请在响应头中注明语言以及以逗号分隔的程序字符数。

排行榜(结果表格代码取自此处)

execute("ru.stackoverflow.com", "1543735");
.cssload-container,.cssload-cube{width:97px;height:97px;transform-style:preserve-3d}.cssload-container,.cssload-cube,.cssload-half1,.cssload-half2{transform-style:preserve-3d}.cssload-container{position:relative;margin:23px 84px;perspective:292px}.cssload-cube{animation:cube 11.5s forwards infinite;transform-origin:center 49px}.cssload-half1,.cssload-s1{top:0;transform-origin:50% 100%}.cssload-half1{height:39px;position:absolute;animation:half-fold 11.5s forwards infinite}.cssload-side{width:19px;height:19px;background:#ddd;position:absolute}.cssload-s1{left:39px;animation:s1ani 11.5s forwards infinite}.cssload-s2,.cssload-s3,.cssload-s4{left:39px;transform-origin:50% 0}.cssload-s2{top:19px;animation:s2ani 11.5s forwards infinite}.cssload-s3{top:39px;animation:s3ani 11.5s forwards infinite}.cssload-s4{top:58px;animation:s4ani 11.5s forwards infinite}.cssload-s5{left:19px;top:19px;transform-origin:100% 50%;animation:s5ani 11.5s forwards infinite}.cssload-s6{left:58px;top:39px;transform-origin:0 50%;animation:s6ani 11.5s forwards infinite}@keyframes cube{0%,30%{transform:rotateX(0)}40%{transform:rotateX(45deg) rotateY(0) rotate(45deg)}60%{transform:rotateX(60deg) rotateY(0) rotate(45deg)}65%,70%{transform:rotateX(60deg) rotate(45deg) rotate(180deg)}75%,80%{transform:rotateX(60deg) rotate(45deg) rotate(1turn)}90%{transform:rotateX(0) rotate(0) rotate(0)}}@keyframes s1ani{0%{opacity:1;transform:translateY(0);background:#ddd}40%{transform:rotateX(0);background:#ddd}50%{transform:rotateX(-90deg);background:#ddd}90%{transform:rotateX(-90deg)}}@keyframes s2ani{0%{opacity:0;transform:rotateX(-179deg)}10%{opacity:1;transform:rotateX(0)}40%{background:#ddd}45%,80%{background:#b4b4b4}65%{opacity:1;background:#b4b4b4}90%{opacity:1}to{opacity:0}}@keyframes s3ani{0%,10%{opacity:0;transform:rotateX(-179deg)}20%,90%{opacity:1;transform:rotateX(0)}40%{background:#ddd}45%{background:#969696}to{opacity:0}}@keyframes s4ani{0%,20%{opacity:0;transform:rotateX(-179deg)}10%,to{opacity:0}30%{opacity:1;transform:rotateX(0)}40%{transform:rotateX(0);background:#ddd}50%{transform:rotateX(90deg);background:#b4b4b4}80%{background:#b4b4b4}90%{opacity:1;transform:rotateX(90deg)}}@keyframes s5ani{0%,10%{opacity:0;transform:rotateY(-179deg)}20%{opacity:1;background:#ddd;transform:rotateY(0)}40%{transform:rotateY(0)}50%{transform:rotateY(90deg)}55%{background:#ddd}60%{background:#c8c8c8}90%{transform:rotateY(90deg);opacity:1}to{opacity:0}}@keyframes s6ani{0%,20%{opacity:0;transform:rotateY(179deg)}30%{opacity:1;transform:rotateY(0)}40%{transform:rotateY(0)}50%{transform:rotateY(-90deg);background:#ddd}60%,80%{background:#c8c8c8}90%{opacity:1;transform:rotateY(-90deg)}to{opacity:0}}@keyframes half-fold{0%,50%{transform:rotateX(0)}60%,90%{transform:rotateX(-90deg)}}
<script src="https://mayorovp.github.io/codegolf/table-8c505e68f1349e4c69e7.js"></script>
<div class=cssload-container><div class=cssload-cube><div class=cssload-half1><div class="cssload-side cssload-s1"></div><div class="cssload-side cssload-s2"></div><div class="cssload-side cssload-s5"></div></div><div class=cssload-half2><div class="cssload-side cssload-s3"></div><div class="cssload-side cssload-s4"></div><div class="cssload-side cssload-s6"></div></div></div></div>


结果及获奖者公布:

首先,我对本次比赛所有参赛者的拼搏精神和创造力表示深深的感谢!所提出的解决方案引起了人们的喜悦和钦佩。

特别感谢@Zontik参与审核和编辑答案。

第一名: @Stanislav Volodarskiy,Ruby,56 个字符!

第二名: @Chetaya 四,Python,57 个字符!

第三名: @Alexey R,Python,63 个字符!

感谢大家的参与!

алгоритм
  • 30 30 个回答
  • 945 Views

30 个回答

  • Voted
  1. Stanislav Volodarskiy
    2023-10-04T02:29:35Z2023-10-04T02:29:35Z

    蟒蛇,60

    b=0
    for c in input():b^=1<<ord(c)
    print('YNEOS'[b&b-1>0::2])
    

    整型变量b存储字符数的奇偶校验。例如,'a'奇偶校验存储在第 97 位和'z'第 120 位中。

    最后,它检查是否b只设置了一位。该表达式b & (b - 1)删除数字的最低有效位。如果数字变为零,则该位是唯一的。

    常量'YES'和'NO'混合在一行中。第一个位于偶数位置,第二个位于奇数位置。

    • 20
  2. Best Answer
    Stanislav Volodarskiy
    2023-10-05T19:12:51Z2023-10-05T19:12:51Z

    红宝石,56 岁

    b=1024
    gets.chars{|c|b^=1<<c.ord}
    puts b&b-1>0?:NO: :YES
    

    整型变量b存储字符数的奇偶校验。例如,'a'奇偶校验存储在第 97 位和'z'第 120 位中。

    Начальное значение 1024 нужно так как gets возвращает строку с переводом строки. Переводу строки соответствует десятый бит (1024). Он выставлен заранее, перевод строки в конце строки его снимает.

    В конце проверяется что в b установлен только один бит. Выражение b & (b - 1) стирает младший бит числа. Если число обнулилось, этот бит был единственным.

    • 16
  3. Чёткая Четырка
    2023-10-06T23:53:44Z2023-10-06T23:53:44Z

    Python, 57

    Думал много дней, наконец додумался) Работает так же, как и многие (с проверкой количества одинаковых символов в строке на чётность)

    a={0}
    for i in input():a^={i}
    print('YNEOS'[len(a)>2::2])
    
    

    Подробный разбор кода:

    1. Первой строчкой мы создаём множество a

    2. Идём по всем символам строки:

      Если символ есть в множестве a, удаляем его оттуда, а если нет - добавляем

    3. Печатаем YES если количество элементов в множестве меньше или равно 1, иначе печатаем NO


    Труднее всего понять последнюю строчку. Объясняю. Если длина массива равна 1, то есть два варианта:

    • В строке изначально был 1 символ;
    • Остался один непарный символ в строке, который можно поставить в середину и всё равно получится палиндром.

    Оба этих варианта нам подходят, печатаем YES. А если в строке 0 символов - все были парными, то есть это тоже нам подходят, также печатаем YES.

    P.S. СПАСИБО ОГРОМНОЕ ЗА СОКРАЩЕНИЕ КОДА @StanislavVolodarskiy. Этот код рулит среди питоновских только благодаря ему:)

    • 14
  4. Stanislav Volodarskiy
    2023-10-04T01:10:34Z2023-10-04T01:10:34Z

    C,66

    b;main(c){while(c=getchar()-10)b^=1<<c-87;puts(b&b-1?"NO":"YES");}
    

    这是一个完整的程序,gcc temp.c已转换为功能可执行模块。编译时,发出六个警告,但没有错误。

    下面是相同的代码,但不那么密集。

    整型变量b存储字符数的奇偶校验。例如,'a'奇偶校验存储在零位和'z'第二十五位中。

    最后,它检查是否b只设置了一位。该表达式b & (b - 1)删除数字的最低有效位。如果数字变为零,则该位是唯一的。

    #include <stdio.h> 
    
    int main() {
        int b = 0;
        int c;
        while (c = getchar() - '\n') {
            b ^= 1 << (c - ('a' - '\n'));
        }
        puts((b & b - 1) ? "NO" : "YES");
    }
    
    • 12
  5. Алексей Р
    2023-10-03T14:14:42Z2023-10-03T14:14:42Z

    蟒蛇,63

    算法 - 计算不配对字符的数量

    s=input()
    print(("NO","YES")[sum(s.count(c)%2 for c in{*s})<2])
    
    • 11
  6. ReinRaus
    2023-10-05T22:06:49Z2023-10-05T22:06:49Z

    JavaScript, 73

    JUST FOR FUN

    Решаем задачу на регулярках :)

    Считаю не совсем честным, что другие ответы на JS не содержат promt и console.log, поэтому прилагаю тоже вариант просто функции-обёртки. 73 символа

    g=t=>t.split('').sort().join('').replace(/(.)\1/g,'').length<2?'YES':'NO'
    
    console.log(g('aab'))
    console.log(g('abc'))
    console.log(g('racecar'))
    console.log(g('aaa'))

    Изи, просто делаем скучную замену, 82 символа

    alert(prompt().split('').sort().join('').replace(/(.)\1/g,'').length<2?'YES':'NO')

    Монорегулярка, это уже веселее, но 103 символа

    Большое регулярное выражение, ищет символы, вошедшие нечётное количество раз:

    alert([...prompt().matchAll(/(.)(?<!\1.+)(?=(((.(?<!\1))*\1){2})*(.(?<!\1))*$)/g)].length<2?"YES":"NO")

    • 10
  7. aepot
    2023-10-05T21:10:34Z2023-10-05T21:10:34Z

    C#, 70

    • Использую Linq, который в пустом проекте .NET 7 подключен по умолчанию, просто создайте проект с включенным Top-Level Statements
    • Группирую все буквы, и если количество групп с нечетным числом букв > 1, то это не палиндром.

    Ввод передается аргументом запуска

    Console.Write(args[0].GroupBy(x=>x).Sum(g=>g.Count()%2)>1?"NO":"YES");
    
    • 10
  8. Acinit
    2023-10-03T13:41:59Z2023-10-03T13:41:59Z

    蟒蛇,170

    from collections import Counter
    s = input()
    counts = Counter(s)
    odd_count = sum(1 for count in counts.values() if count % 2 != 0)
    print("YES" if odd_count <= 1 else "NO")
    
    • 10
  9. чистов_n
    2023-10-03T19:34:27Z2023-10-03T19:34:27Z

    蟒蛇,92

    解决方案与Counter!

    from collections import *
    print(["NO","YES"][sum(i%2 for i in Counter(input()).values())<2])
    

    UPD:如果需要,这里有一个 replit 链接:https://replit.com/@nikola-chistov/myfisrtcodegolf#main.py

    UPD2:感谢@Acinit提供的缩短技巧。

    • 8
  10. Андрей NOP
    2023-10-03T22:08:47Z2023-10-03T22:08:47Z

    哈斯克尔,62

    蛮力:我们组成所有排列并检查它们之间是否存在回文:

    p(s)=if any(\x->reverse x==x)$permutations s then"YES"else"NO"
    

    https://ideone.com/nV67QU

    哈斯克尔,66 岁

    一个稍长的版本,但没有暴力,来自邻近答案的想法:

    r[]="YES";r(a)="NO";p(s)=r.tail.filter odd.map length.group$sort s
    

    https://ideone.com/YeNNSO

    • 8

相关问题

  • Golang 中的堆栈实现

  • 二部图中的最大匹配

  • 求两个数的差模为 m 的倍数的算法

  • 如何将平面几何对象表示为矢量以应用于人工神经网络的输入?[关闭]

  • 如何正确执行矩形的 Delaunay 三角剖分?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5