1
Общий раздел / Re:Задачка архитекторная.
« : Апрель 12, 2011, 06:46:19 pm »
На этом форуме плохо видно пришедшие личные сообщения. valexey, я вам уже несколько дней как написал.
Онлайн компилятор Oberon-07/11
Путеводитель по Оберон-проектам.
Логи jabber-конференции.
Онлайн исходники BlackBox: тут:WeBB и на github
Исходники Project Oberon V4 на github.
Сборник решений задач книги "Современное программирование с нуля!" тут. А обсуждение здесь.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Пока занят сделать описаловоБог с ним, с описанием. Исходников было бы достаточно. Они уже опубликованы или нет?
Кто-то обещал, что будет короче, чем на хаскеле?Я думал, что статическая типизация показала бы себя при переписывании С Питона, а не НА него. Или я чего-то не догнал?Ну а статическая типизация вэтой задаче пока себя никак не показала. Судя по тому, что на питон переписалось без проблем.
Если в программе vlad'а удалить функцию test (и её вызов), то вот ещё -38 строк...Это я уже сделал и учёл в подсчётах.
Интересная попытка, но увы! Слишком мало расчётов, пролетает мгновенно, надо что-то покруче...Это я не для расчётов, а для глубины рекурсии. Можно сделать поиск с заменой, исправив "+1" на "*2/2*2/2*2/2*2/2*2/2..." Тогда и рекурсия будет, и расчётов сколько угодно. Впрочем, при моём максимальном числе 255 символов в ячейке всё равно влёт считает.
Да, и 26*9 = 234 всё-таки...
Долгожданный С++ вариант530 строк - самый жрный вариант, как я понимаю.
По поводу большой таблицы и вычислений - представьте себе какую-нибудь инкрементальную колоночку в табличке с миллионами строк. Т.е. каждая ячейка ссылается на предыдущую + 1... Хм, только в текущем языке формул нет относительного синтаксиса.
9 26
=B1+1 =C1+1 =D1+1 =E1+1 =F1+1 =G1+1 =H1+1 =I1+1 =J1+1 =K1+1 =L1+1 =M1+1 =N1+1 =O1+1 =P1+1 =Q1+1 =R1+1 =S1+1 =T1+1 =U1+1 =V1+1 =W1+1 =X1+1 =Y1+1 =Z1+1 =A2+1
=B2+1 =C2+1 =D2+1 =E2+1 =F2+1 =G2+1 =H2+1 =I2+1 =J2+1 =K2+1 =L2+1 =M2+1 =N2+1 =O2+1 =P2+1 =Q2+1 =R2+1 =S2+1 =T2+1 =U2+1 =V2+1 =W2+1 =X2+1 =Y2+1 =Z2+1 =A3+1
=B3+1 =C3+1 =D3+1 =E3+1 =F3+1 =G3+1 =H3+1 =I3+1 =J3+1 =K3+1 =L3+1 =M3+1 =N3+1 =O3+1 =P3+1 =Q3+1 =R3+1 =S3+1 =T3+1 =U3+1 =V3+1 =W3+1 =X3+1 =Y3+1 =Z3+1 =A4+1
=B4+1 =C4+1 =D4+1 =E4+1 =F4+1 =G4+1 =H4+1 =I4+1 =J4+1 =K4+1 =L4+1 =M4+1 =N4+1 =O4+1 =P4+1 =Q4+1 =R4+1 =S4+1 =T4+1 =U4+1 =V4+1 =W4+1 =X4+1 =Y4+1 =Z4+1 =A5+1
=B5+1 =C5+1 =D5+1 =E5+1 =F5+1 =G5+1 =H5+1 =I5+1 =J5+1 =K5+1 =L5+1 =M5+1 =N5+1 =O5+1 =P5+1 =Q5+1 =R5+1 =S5+1 =T5+1 =U5+1 =V5+1 =W5+1 =X5+1 =Y5+1 =Z5+1 =A6+1
=B6+1 =C6+1 =D6+1 =E6+1 =F6+1 =G6+1 =H6+1 =I6+1 =J6+1 =K6+1 =L6+1 =M6+1 =N6+1 =O6+1 =P6+1 =Q6+1 =R6+1 =S6+1 =T6+1 =U6+1 =V6+1 =W6+1 =X6+1 =Y6+1 =Z6+1 =A7+1
=B7+1 =C7+1 =D7+1 =E7+1 =F7+1 =G7+1 =H7+1 =I7+1 =J7+1 =K7+1 =L7+1 =M7+1 =N7+1 =O7+1 =P7+1 =Q7+1 =R7+1 =S7+1 =T7+1 =U7+1 =V7+1 =W7+1 =X7+1 =Y7+1 =Z7+1 =A8+1
=B8+1 =C8+1 =D8+1 =E8+1 =F8+1 =G8+1 =H8+1 =I8+1 =J8+1 =K8+1 =L8+1 =M8+1 =N8+1 =O8+1 =P8+1 =Q8+1 =R8+1 =S8+1 =T8+1 =U8+1 =V8+1 =W8+1 =X8+1 =Y8+1 =Z8+1 =A9+1
=B9+1 =C9+1 =D9+1 =E9+1 =F9+1 =G9+1 =H9+1 =I9+1 =J9+1 =K9+1 =L9+1 =M9+1 =N9+1 =O9+1 =P9+1 =Q9+1 =R9+1 =S9+1 =T9+1 =U9+1 =V9+1 =W9+1 =X9+1 =Y9+1 =Z9+1 =1
Александр, а слабо переделать программу на разумно-модульный вид? Собственно, этого автор задачи и ожидал в качестве хорошего решения -- декомпозиция программы, удобная для развития в будущем.Слабо, конечно. Я считаю, что процедурная декомпозиция вполне адекватна задаче. Все точки расширения вполне обозримы. Добавить строковые операции? Ищем errStringOp, добавляем нужную константу для operation. Огромные таблицы? Правим загрузку и дереференс ячейки. Избавиться от рекурсии в интерпретации выражений? Поле marked из BOOLEAN превращаем в INTEGER.
Вот если расширить язык этой таблицы, введя возможность вычисления формул -- было бы прикольно...
Было бы любопытно сделать такую таблицу, расчёт которой занял бы ощутимое время -- интересно было бы сравнить разные варианты решений на скорость вычислений.
Но таблица размером 26*9 не очень способствует таким замерам. Вот если расширить язык этой таблицы, введя возможность вычисления формул -- было бы прикольно...
Простейший вариант:Да, там тоже есть, я только что дочитал:Код: [Выделить]int'to'str :: Int -> StringНо это не по-джедайски.
int'to'str n = show n
q)string 18873
"18873"
Так что вот:Ага, рекурсия. Точно, что это я сразу не подумал?Код: [Выделить]import Char
int'to'str :: Int -> String
int'to'str 0 = ""
int'to'str n = int'to'str (n `div` 10) ++ [chr (n `mod` 10 + ord '0')]
Я не знаток этих брейнфаков, так что я пас...А можно аналог на Хаскеле?
Как я понял, Q -- более читабельная обёртка над K, используемая для запросов к базе данных KDB...Моя первая программа на языке q: преобразует положительное целое число в последовательность символов (запись числа).
q)x:18873; L:"012345679"; res:""; while[x>0; res:res,L[x mod 10]; x:x div 10]; reverse res
"18873"Не знаю, как векторизовать без while : (Самое ТруЪ-решение Задачи-К -- это решение на языке К от самого Трурля:А что, он - первоначальный автор задания?