TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #669 13.6K
Задача та же. 8 ферзей.

Предыдущая часть здесь: Воспользуемся тонкостями языка. На шахматной доске 8 клеток (тут может круто подойти восьмеричная система.) Таким образом заменяем 8 вложенных циклов всего одним!!!, с преобразованием числа в восьмеричное.

Каждая цифра - отдельный столбец.
ㅤ
Значение - номер строки.

#!/bin/bash
#8 ферзей

awk 'BEGIN{
i=8^8
while(i--){
c=sprintf("%08o",i)
j=8
while(index(c,--j)){}
if(j<0){
j=8
while(j--){q[j]=substr(c,j+1,1)}
b=1
for(m=0;m<7 && b;m++){
for(j=m+1;j<8;j++){
a=q[m]-q[j];sub(/-/,"",a)
if(a==(j-m)){b=0;break}}}
if(b){print c}
}}}'
#---


while(index(c,--j)){} - чисел всего 8(0-7), если index=0 (нет цифры j в числе с из 8 цифр, значит каких-то цифр 2).

Обратите внимание тело цикла пустое! Если цикл прошел полностью - дублей нет. Вау.

Алгоритм пермутаций без повторений методом перебора. (проверка на горизонталь).

while(j--){q[j]=substr(c,j+1,1)} - преобразовали число c в массив цифр q[]

Дальше аналогично предыдущей программе, кроме sub(/-/,"",a) - еще один аналог модуля.

Просто отбрасываем "-". Как конструкция по скорости не знаю, не проверял.

Программа отработала примерно за 41с.

Какой-то код маленький получился, и работает быстрее. Но, главное результаты совпадают.

Кто там хотел изучать bash?

Слабо реализовать на чистом bash?

Интересно было бы и время выполнения сравнить.

tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate
More from @bashdays
  1. Sep 24, 2026Post #1565
  2. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  3. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  4. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  5. Sep 11, 2026🤖 DevOps в эпоху AI трансформации: что работает уже сейчас! 17 сентября Сбер собирает Dev…
  6. Sep 9, 2026Всем привет, с вами TagdTagd! Я тут вынужденно перешёл на MAX. Просто Telegram перестал ра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →