Чере-Пух и все, все, все

Лиха беда Begin!

Решаем Beginные задачи и развиваем соображалку здесь:

Пора освежевать знания – скоро в школу!

Программировать учиться всегда пригодится!

Алгоритмы и трут всё перетруд!

Запас знаний карман не тянет.

Регексы и линки решай без запинки.

Структуры данных и алгоритмы не осилишь без пол-литры.

Скажите ЧИЗ →

Сейчас вылетит программа!

Задачу из первой части можно решить перебором на компьютере гораздо проще не задействуя никакие среды программирования, а просто введя вот такую команду в стандартную командную строку bash, правда у меня это было в одну строку, но для удобства восприятия я добавил табуляцию и разбил на строки:

for a in {1..9}; do
  for b in {1..9}; do
    for c in {1..9}; do
      for d in {0..9}; do
        if ((100*$a$b$c$d/$c$d==$b$c$d*100)); then
          echo "$a$b$c$d:$c$d=$b$c$d"
        fi
      done
    done
  done
done

Умножение на 100 здесь нужно поскольку bash работает только с целочисленной арифметикой, без него получается три лишних варианта:

3125:25=125
7148:48=148
8153:53=153
8235:35=235

Вторая задача ещё проще, а iconv тут понадобился только из-за кодировки исходного файла. Ну серьёзно, кто хранит текст в UTF-16?

$ iconv -f utf16 makarov_frc.txt | egrep '(.)\1(.)\2' 
ГЕЕННА
ВАКУУММЕТР
МАССООБМЕН
ВАКУУММЕТРИЯ
МЕТАЛЛООПТИКА
ВОЕННООБЯЗАННАЯ
ВОЕННООБЯЗАННЫЙ
КРИСТАЛЛООПТИКА
МЕТАЛЛООБРАБОТКА
ПАРААГГЛЮТИНАЦИЯ
ТЕЛЕГАММААППАРАТ
МИЦЕЛЛООБРАЗОВАНИЕ
КРИСТАЛЛООБРАЗОВАНИЕ
$ iconv -f utf16 makarov_frc.txt | egrep '(.)\1(.)\2(.)\3'
ТЕЛЕГАММААППАРАТ

Третья задача ничем не отличается от второй, только тут проблема c форматом уже другая, в конце каждой строки мусорный байт 0x13, который надо учесть:

$ egrep '^(.*)\1\s$' EnDictionary_frc.txt
COCO
DODO
GAGA
MAMA
PAPA
BONBON
BULBUL
CANCAN
DUMDUM
MURMUR
MUUMUU
TARTAR
TESTES
BERIBERI
CHOWCHOW
FROUFROU
HOTSHOTS

Третья задача тоже решается в одну строку, но вывод слишком длинный, чтобы его приводить полностью:

$ tr -d \\r < EnDictionary_frc.txt | sort | egrep -z '\s(.*)\s\1' 

Для следующей задачи делаем так:

$ iconv -f utf16 makarov_frc.txt | egrep '[БВГДЖЗКЛМНПРСТФХЦЧШЩ]{6}'
АДЪЮНКТСТВО

Как-то странно Вы решаете задачи. Сначала вы дискутировали с RAlex, что нужно решать задачи просто и понятно. А здесь я вижу какие-то извращения.

Зачем нужно занимательные задачи решать таким способом, что BASHку сносит?

Лично для пользы от такого решения никакой. Может, кому-нибудь повезёт больше.

Лучше бы решать на PascalABC.NET, чтобы не забивать себе голову другими ЯП, которых у меня в голове и так полно.

Радует Ваша активность и находчивость. Требую продолжения банкета!

Почему странно-то? Гораздо проще ввести одну коротенькую строчку в терминал, чем писать эпохальную программу на несколько сотен строк.

Ну ладно, первая получилась не очень короткой, но тоже вполне наглядной.

Не совсем. Я говорил о том, что при объяснении школьникам темы делимости чисел полезнее использовать математическое разложение числа на цифры (div и mod). А здесь не школьники.

Но с другой стороны, ничего сложного и непонятного не вижу.

В первой задаче просто идёт перебор всех возможных значений A, B, C и D, а затем проверяется равенство 100*ABCD/CD=BCD*100 и если оно верно, то эти самые ABCD выводятся командой echo.

В остальных задачах используется команда egrep, которая аналогична grep, но использует расширенные регекспы. Для неё исходные файлы предварительно подготавливаются. Команда iconv конвертирует кодировку (в данном случае из utf-16 в utf-8), tr -d \\r вырезает из файла мусорные \r. то есть байты с кодом 0x0D

Так что в этом сложного?

А теперь представим, что у нас Windows и никакого bash там нет. Ну не все в мире закостенелые линуксоиды…

1 лайк

По-моему, с раскраской куба в три цвета, так чтобы видеть за раз не более двух цветов в журнале ответ неверный. Рассуждаем так:

Поскольку на кубе есть все три цвета, а вершин где все они сходятся нет, то неизбежно существует хотя бы одна вершина, в которой сходится одна грань одного цвета и две грани другого цвета.

Грань третьего цвета может быть только противоположной грани первого цвета, поскольку если бы она была смежна с первым цветом, то ей пришлось бы быть смежной и со вторым, а это невозможно по условию.

Так же, грани смежные с гранью первого цвета, не могут быть сами первого цвета, иначе первый цвет опять окажется смежным и со вторым и с третьим, а такого быть не может.

Следовательно, все грани смежные с первоцветной имеют второй цвет, то есть образуют пояс вокруг неё. Поскольку две грани, не входящие в пояс, симметричны относительно друг друга, для трёх заданных цветов всего может быть только три вариации, где пояс окрашен в один цвет, а остальные две грани в два других.

Например, если заданы цвета: красный, желтый и зелёный, то эти способы таковы:

  1. Красный пояс, остальные две грани: желтая и зелёная.
  2. Желтый пояс, остальные две грани: красная и зелёная.
  3. Зелёный пояс, остальные две грани: красная и желтая.

Раскраска куба - напишите программу, которая доказывает Ваши выводы.

Зачем мне писать программу, если я уже решил задачу чисто логикой, без компьютера? Прочитайте мои рассуждения, найдите ошибку, если есть, если нет, признайте их верными и исправьте у себя. Можете воспринимать эти рассуждения как код для исполнителя “мозг” на русском языке, если вам так легче.


@RAlex, в Microsoft уже довольно давно поняли, что cmd и powershell никуда не годятся и добавили и bash тоже, оставив две первые для совместимости со старыми скриптами. А в более ранние версии можно доустановить mingw32, cygwin, gnuwin или andlinux, но это всё уже не по теме, так что спасибо админу, остальной флуд в болталке.

12 сообщений было перемещено в эту тему: Болталка PascalABC.NET

книга Основы визуального программирования на Юнити

Юнити – это почти Си-шарп

Си-шарп – это почти PascalABC.NET

Визуальное программирование – это наглядно. К сожалению, в PascalABC.NET такого нет, но, глядя на, возможно, да.

Юнити – хороший игровой движок, но чересчур мудрёный и сложный. Если кто решится – книга ему в помощь!

Визуально это буквально здесь:

1 лайк

а в смекайлике3 на странице 14 написано, что решение единственное, да и программа выводит Квант

ABCD : CD = BCD 3125:125 = 25

несоответствие чисел в две и три цифры и на ответе - картинке странно все написано: CD 125 а BCD 25

поменял вывод ‘ABCD : CD = BCD {0}:{2} = {1}’ ответ все равно один ABCD : CD = BCD 3125:25 = 125

Если бы мы наверняка знали, что решение единственное, то дальнейший перебор нам бы не понадобился. Но поскольку сомнения остаются, то мы доводим перебор до конца. … однако выше нашлись 4 варианта.

Решение действительно единственное, остальные “решения” возникли из-за того, что bash считает только целые числа. Если ввести в калькулятор остальные три “решения”, будет видно, что в результате получается дробное число. Именно чтобы их убрать, я и добавил умножение на 100 и слева и справа. А эти лишние решения будут, если это умножение убрать.

Если есть желание найти остальные “решения”, то / надо заменить на div


@Valery, так я жду. Верно ли что вариантов раскраски кубика в три цвета так, чтобы одновременно видеть не более двух всего три, а не шесть? Если неверно, то где я ошибся?

понятно. ну так надо было их не публиковать. а то по условию задачи они вроде как подходят.

там умножение

Всё познаётся в сравнении

Как известно, давление невинных пластиковых пузырей – лучшее интеллектуальное развлечение и психическое успокоение (релакс).

В связи с ухудшившейся (не смог ни правильно написать, ни произнести с первого раза) экологической ситуацией в мире и повсюду, давить следует виртуальные пузыри на экране компьютера. Для этого и писаны эти 2 программы.

Они внешне как бы одинаковые, но одна написана не спеша на Юнити,

а вторая второпях на PascalABC.NET.

Визуально программа PascalABC.NET явно обошла конкурента на 2 круга. Сравнение исходников добавляет ещё пару кругов в пользу и на системе программирования PascalABC.NET. Тут всё короче, понятнее и разумнее. Значит ли это, что? – Вовсе нет! Но давилки и прочие малоподвижные игры не надо и не стоит писать на Юнити. Получится занудно и весьма худшего наглядного на экране качества.

И наоборот!

Сравнивать Unity vs PascalABC.NET методом (х)лопания здесь:

Цени уют и

ЛОПАЙ, ЧТО ДАЮТ

Чехов. Жалобная книга

В этой жалостной до юмора книге ещё много интересного и полезного для пытливого естественного ума.

Читайте книги и не жалуйтесь в книги и на книги!

1 лайк

В архиве нет самой игры, только какие-то звуки, картинки, шрифты и исполнимые файлы. А как без самой игры можно сравнить имплементацию на PascalABC.net и Unity? Плюс архив неприлично много весит, лучше сделайте другой архив, все файлы которые можно получить самостоятельно с помощью компилятора (exe, dll) выкиньте, чтобы место не занимали, а саму игру (pas, cs) добавьте.

Ну и ещё есть проблемы с кодировкой, почему-то в некоторых архиваторах имя файла выглядит кракозябрами. Лучше всего решить эту проблему не используя имён файлов вне ASCII.

Исполняемые файлы исполняются. Ваши хотелки игнорируются. Просьба не беспокоить меня своей хренью.

У меня .NET не установлен, поэтому они не исполняются. Я хотел посмотреть исходники, чтобы сравнить насколько короче / понятнее код на Pascal ABC чем на Unity, но в архиве их почему-то нет. Я думал вы их забыли вложить в архив.

Выражайте свои мысли и чаяния яснее. Исходники на паскале будут в новой книге. Исходники на Юнити довольно тяжёлые, но можно из книги выдернуть этот проект. Этого будет достаточно, чтобы сравнить. Но на Юнити делать простые игры, тем более без перемещения объектов смысла нет. Я делал эти проекты в учебных целях, чтобы не браться сразу за сложные программы. Но и сложные программы на Юнити довольно сложные. На Юнити есть смысл делать только коммерческие программы, а не развлекаться. Но это уже не для меня.

На PascalABC.NET вполне можно изучить простые игровые механики. Если будет мало, тогда можно переходить на Юнити (ближе к PascalABC.NET), на Godot (тоже недалеко ушёл) и прочая - до бесконечности. Но это уже не для удовольствия, а для кошелька.

Можно попробовать писать простые игры на Tcl/Tk, там должно быть достаточно просто, причём без зависимости от .NET и необходимости компилировать. Но при желании можно делать бандлы (вся игра в одном исполнимом файле под нужную систему)

Согласен: писать можно на чём угодно. Особенно это касается игр. Я бы даже посоветовал Processing или JavaScript. У меня есть некоторый опыт и книги об этом. Но Вы должны были заметить, что я решительно хочу привлечь для этого PascalABC.NET. Поэтому я скептически отношусь к Вашим предложениям использовать Баш на баш или что-то другое. У меня нет желания вообще писать программы или игры, я хочу показать, как это можно сделать на PascalABC.NET. Вы могли бы принести немало пользы, если бы от критики PascalABC.NET перешли к его изучению и использованию. Ваш энтузиазм был бы весьма полезен для общего дела.

Как говорил Аркадий Райкин: критиковать, скандалить - это каждый может.

Покажите сетя с лучшей стороны. Она у Вас наверняка есть.

1 лайк

На паскале исходник – это обычный текст. На Юнити нужно во многих местах нажимать кнопки, так что только скрипты тут не помогут. То есть нужно не только хорошо выучить Си-шарп, но и интерфейс Юнити, который далеко не очевиден.

Исходящие пузыри здесь PascalABC.NET:

И здесь Юнити:

Делитесь впечатлениями от увиденного!

1 лайк

Залипательная игра Стек

Достойная наследница Пузырей.

Здесь нужно и следует давить круги мышкой до звукового хлопка и схлопывания круга в ноль. Игра заканчивается при полном обнулении числа здравствующих кругов.

В отличие от пузырей, круги нужно давить сверху вниз, то есть на кликнутом круге не должно быть других кругов, а под ним – сколько угодно.

Ума для этой игры не требуется, но аккуратность, твёрдость и верность глаза и руки приветствуются и необходимы.

Круговой стек здесь:

Линуксовым пользователям: установите Виндоус на свой комп или купите дешёвый ноутбук с оной ОС, чтобы приносить - себе удовольствие и пользу – людям.

Залипательность – дело личное.

Если кто не залипнет, то не обессудьте, а сразу после отлипания напишите сами что-нибудь более залипательное.

1 лайк