PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Программа для подсчёта и составления чисел.


Программа для подсчёта и составления чисел.

Сообщений 1 страница 16 из 16

1

Программа для подсчёта количества всех существующих чисел со неповторяющимися цифрами с выводом на экран количества этих чисел и записью в файл отсортированных по возрастанию чисел.
Дано: цифры от 0 до 9.
Составить все комбинации и целых и дробных чисел со неповторяющимися цифрами.
Решение:

Код:
Global  NewList Num$()

Procedure$ ShiftSeparator(Value$,  Shift); Shift = 0..9
  Value$  = InsertString(Value$,  ".",  Len(Value$) - Shift)
  If  Left(Value$,  1)  = "."
    Value$  = "0" + Value$
  EndIf
  If  Right(Value$, 1)  = "0"
    Value$  = Left(Value$,  Len(Value$) - 1)
  EndIf
  If  Right(Value$, 1)  = "."
    Value$  = Left(Value$,  Len(Value$) - 1)
  EndIf
  ProcedureReturn Value$
EndProcedure

Procedure AddOnce(Value$)
  IsFound = #False
  ForEach Num$()
    If  Num$()  = Value$
      IsFound = #True
      Break
    EndIf
  Next
  If  IsFound = #False
    AddElement(Num$())
    Num$()  = Value$
  EndIf
EndProcedure

OpenConsole("Поиск всех чисел со неповторяющимися цифрами.")
PrintN("Составление списка изо чисел, удовлетворяющих условию выборки.")

For CurrentNumber  = -9876543210 To  9876543210
  String$ = Str(CurrentNumber)
  If  CountString(String$,  "0")  <=  1 And CountString(String$,  "1")  <=  1 And CountString(String$,  "2")  <=  1 And CountString(String$,  "3")  <=  1 And CountString(String$,  "4")  <=  1 And CountString(String$,  "5")  <=  1 And CountString(String$,  "6")  <=  1 And CountString(String$,  "7")  <=  1 And CountString(String$,  "8")  <=  1 And CountString(String$,  "9")  <=  1
    AddOnce(String$)
    AddOnce("-"+String$)
    If  String$ <>  "0"
      For i = 0 To  9
        S$ = ShiftSeparator(String$, i)
        If  CountString(S$,  "0")  <=  1
          AddOnce(S$)
          AddOnce("-"+S$)
        EndIf
      Next
    EndIf
  EndIf
Next

PrintN("Количество чисел со неповторяющимися цифрами равно "+Str(ListSize(Num$()))  + ".")

PrintN("Сортировка списка чисел по возрастанию...")
SortList(Num$(),  #PB_Sort_Ascending)

PrintN("Запись всех чисел во текстовый файл...")
File  = CreateFile(#PB_Any, "Список всех чисел со неповторяющимися цифрами.txt")
ForEach Num$()
  WriteStringN(File,  Num$(), #PB_Ascii)
Next

PrintN("Готово! Нажмите [ВВОД].")
Input()

End 0

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

Отредактировано PSY (15.05.2024 10:14:19)

0

2

PSY написал(а):

хотя бы одноядерный процессор

Вот как мимо такого перла пройти?
А у некоторых "защитничков" потом истерика будет ))

0

3

PSY написал(а):

Составить все комбинации и целых и дробных чисел со неповторяющимися цифрами.

И, кстати, тема дробных чисел не раскрыта :D

0

4

Можно и обфустить все процедуры и их исписать просто, добавить блокиратор-распределитель потока Mutex и распараллелилить, но доступ то ко динамическому списку только такой какой предоставлен средой разработки и можно было бы выиграть примерно в пару раз в скорости работы со строками, н не более так как всё упрётся в LockMutex и UnlockMutex.

0

5

Smitis написал(а):

PSY написал(а):

    Составить все комбинации и целых и дробных чисел со неповторяющимися цифрами.

И, кстати, тема дробных чисел не раскрыта :D

Вы ынимательно изучите исходник - там сдвиги запятой в числах - дробные получаются от целых. Изучите внимательно.

0

6

Вообще нужен компьютер с большой тактовой частотою, я избежал деление на 10, 100, 1000 и так далее так как результат деления округляется форматом хранения числа, а во моём случае это было float 64 бит то есть Double и там окргуление происходит и искажение результата (проверял в PureBasic 6.10 а щас откатился до 5.70 потому как съ кириллическими названиями файлов он стал конфликтовать).

0

7

PSY написал(а):

Вы ынимательно изучите исходник - там сдвиги запятой в числах - дробные получаются от целых. Изучите внимательно.

А нахрена?
Нахрена эти фокусы с точкой если и так понятно, что в найденом числе можно поставить точку в ЛЮБОМ места? Чтобы больше памяти занять?
А нахрена перебираются отрицательные числа если достаточно перебрать положительные? Чтобы ещё больше памяти занять?
Это даже не вопрос оптимизации, это... очередная бессмысленная задача решённая самым дурацким способом, каким можно.

Отредактировано Smitis (16.05.2024 00:10:21)

0

8

А перл про одноядерный процессор это нечто.
Жаль, башорг умер. Ибо так рождаются мемы.

0

9

Smitis написал(а):

PSY написал(а):

    Вы ынимательно изучите исходник - там сдвиги запятой в числах - дробные получаются от целых. Изучите внимательно.

А нахрена?
Нахрена эти фокусы с точкой если и так понятно, что в найденом числе можно поставить точку в ЛЮБОМ места? Чтобы больше памяти занять?
А нахрена перебираются отрицательные числа если достаточно перебрать положительные? Чтобы ещё больше памяти занять?
Это даже не вопрос оптимизации, это... очередная бессмысленная задача решённая самым дурацким способом, каким можно.

Отредактировано Smitis (Сегодня 00:10:21)

Вы не внимательно читали по поводу того, что я упомянул об оптимизации, почему я её не делал. Это задача, на которую ещё ни одна нейросеть и все GPT4 не смогли ответить, а тем более предоставить список всех существующих чисел. Жаль вы не додумались даже до такого дурацкого способа, который даёт программу весом в 13Кб после сжатия упаковщиком UPX.

0

10

PSY написал(а):

Это задача, на которую ещё ни одна нейросеть и все GPT4 не смогли ответить, а тем более предоставить список всех существующих чисел.

Это задача неплохо подходит для олимпиады по информатике для учеников средних классов. С условием, что победитель придумает свой эффективный способ проверки, есть ли в числе одинаковые цифры.
Вам первые места с таким решением точно не светят, если вообще решение зачтут :crazyfun:

Жаль вы не додумались даже до такого дурацкого способа, который даёт программу весом в 13Кб после сжатия упаковщиком UPX.

И не собираюсь. Страдаете фигнёй - страдайте в одиночестве. :D

0

11

AddOnce() - добавить единично, тут логичное решение, просто по логике. А мне и не надо более, я уже сказал почему я пренебрёг оптимизацией, а вы расчитываете на обсуждение вообще раздувая из мухи слона.

0

12

PSY написал(а):

я уже сказал почему я пренебрёг оптимизацией

который даёт программу весом в 13Кб после сжатия упаковщиком UPX

Зато программа отлично сжимается UPX.
Это просто охренительное достижение. Вы гениальный программер. Остальные тихо рыдают в сторонке. o.O

Отредактировано Smitis (16.05.2024 12:40:51)

0

13

Smitis написал(а):

А у некоторых "защитничков" потом истерика будет ))

Я услышал. Но мне сейчас не до тебя. Есть на много гораздо более важные дела. Любимые люди, любимые тусовки, любимое дело.
Как будет время, обязательно на твой троллипупинг отвечу  :D

0

14

Webarion написал(а):

Как будет время, обязательно на твой троллипупинг отвечу

Вот и москвич-истеричка нарисовался. Тусовка, да, чем же ещё тебе заниматься, очень важное и любимое дело :D

0

15

у меня друг от такой фигни умер

0

16

Не переходите на личности и уважительно относитесь к остальным участникам форума, иначе будут приняты меры!

+1


Вы здесь » PureBasic - форум » PureBasic для Windows » Программа для подсчёта и составления чисел.