Я предполагаю, что у каждого программиста есть слабость к первому написанному им коду. Для меня это была изящная маленькая программа CLI, выполняющая интересный математический трюк, которому я научился у своего отца.

Я написал эту программу, когда еще был в середине курса Введение в Ruby на Learn.co (который, кстати, настоятельно рекомендуется, если вы ищете карьеру в программировании), всего через несколько недель после того, как я начал баловаться кодирование. В то время, когда я писал его, я очень гордился своим достижением, код имел структуру, он был удобен для пользователя и содержал положения для различных крайних случаев. В целом, довольно аккуратная программа, если бы я мог так сказать сам!

То есть, пока я не вернулся к нему недавно. Все, что мне нужно было сделать, это бросить быстрый взгляд, чтобы увидеть, как далеко я продвинулся за последние несколько месяцев. То, что я увидел, было самым дилетантским куском кода, который только можно себе представить (хотя я все же должен признать, что для дилетанта это неплохо…)

Глядя на мой первый кусок кода, я был одновременно и милым (посмотрите, каким симпатичным программистом я был раньше :), и унизительным (вот как я буду смотреть на свой текущий код через несколько месяцев).

Моим первым побуждением было немедленно начать переписывать, рефакторить и реструктурировать это затруднение, но, подумав, я решил оставить все как есть. Я всегда мог бы написать новую программу для своего изящного математического трюка, может быть, даже скоро превратить его в полноценное веб-приложение, но этот фрагмент кода навсегда останется моим первым фрагментом кода…

Я уверен, что вам уже интересно посмотреть на программу и узнать, как работает этот математический трюк :)

Программу можно найти здесь.

Вы можете немного поиграть с ним, прежде чем читать о самом трюке.

Этому трюку меня научил мой отец, когда я был ребенком. Он нашел его в книге писем Любавичского Ребе (Игрос Кодеш, т. 8, стр. 266), который, в свою очередь, цитировал талмудический труд XV века под названием Кол-Бо.

Кол-Бо представляет это как трюк, к которому учащиеся ешивы привыкли развлекаться (это было до тех дней, когда гифки с котиками были на расстоянии одного щелчка мыши), как способ «определить возраст человека с помощью логики [без сказано явно]», хотя трюк может работать для любого числа.

Я не уверен, как работает этот трюк; Я просто знаю, как это сделать.

Вы просите кого-нибудь выбрать число от 1 до 100. Затем вы просите его разделить число на 3 и дать вам остаток (например, если число было 10, 9/3 = 0, а остаток равен 1). Затем попросите их разделить исходное число на 5 и дать вам остаток, а затем сделайте то же самое с 7.

Теперь у вас должно быть 3 числа, остатки от деления исходного числа на 3, 5 и 7; назовем их x3, x5 и x7 соответственно. Умножьте эти числа следующим образом: х3 нужно умножить на 70, х5 на 21 и х7 на 15. Сложите их все и, если сумма больше 100 (технически 105), вычтите 105, пока не получите правильное число.

Пример: Возьмем число 32.

x3 = 32 % 3 = 2
x5 = 32 % 5 = 2
x7 = 32 % 7 = 4

так что теперь давайте умножим их:

x3 * 70 = 140
x5 * 21 = 42
x7 * 15 = 60

Складывая их, получаем:

140 + 42 + 60 = 242

Вычитая 105, мы получаем 137, что еще больше, чем 105, поэтому мы снова вычитаем 105 и получаем 32, наше исходное число!

Этот трюк может работать и для чисел больше 100, но вы должны знать, в какой группе из 100 (технически 105) находится исходное число. В случае больших чисел вам, возможно, придется ДОБАВИТЬ 105 вместо вычитания, чтобы получить на нужный номер.

Программа, которую я написал, предполагает число от 1 до 100 (хотя она по-прежнему будет работать до 105), и однажды, когда я ее создам, я найду способ заставить ее работать и с большими числами.

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

Обновление: с тех пор я написал обновленную версию программы, вы можете прочитать об этом здесь

Первоначально опубликовано на yechiel.me 8 августа 2016 г.