Author Topic: Построить ряды чисел от 1 до Х  (Read 2558 times)

0 Members and 1 Guest are viewing this topic.

quant13

  • Активный участник
  • ***
  • Posts: 174
    • View Profile
Построить ряды чисел от 1 до Х
« on: January 30, 2016, 07:38:41 AM »
У меня есть схожая задача. Нужно построить ряды чисел от 1 до Х, количеством Х, но числа в ряду повторяться не должны и ряды повторяться тоже не должны. например ряд 1 до 3 в лог должно выдать примерно:
123
132
213
231
312
321

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Построить ряды чисел от 1 до Х
« Reply #1 on: January 30, 2016, 12:39:12 PM »
Я тоже  думаю, что вопрос чисто теоретический, так что подтягивание теории конечно-же в тему.  :)
Смущает постановка задачи от 1 до х,
сразу вспоминается анекдот
Вам сколько вешать?
- Ну, грамм 20-30.
- Говорите точно, сколько вешать в граммах!
- А к чему такая точность?!
- Да потому что это кокаин, дура!!!
Понятно, что такой постановкой задачи, автор хочет получить универсальный микроскоп, для раскалывания всех орехов от грецких до арахиса, вот только он одни орехи решил проигнорировать (кедровые- цифра 0 ), а другие ему попробовать в этой жизни несветит(кокосовые - цифры A, B и т.д.). Вот если выбирать числа, от у до х, тогда всё выглядит логично, если от 1 до 7, выглядит практично, поэтому выбираем золотую середину.  :P
Если нужно, код можно обрезать или дописать под нужное колличество используемых цифр .
Code: (clickermann) [Select]
#name "от 1 до 5 Построить ряды из цифер"
STRSEPARATE("1,2,3,4,5", ",", $arr1)
$siz = ARRSIZE($arr1)
FOR($a1=0,$a1<$siz)
   FOR($a2=0,$a2<$siz))
      FOR($a3=0,$a3<$siz)
        FOR($a4=0,$a4<$siz)
           FOR($a5=0,$a5<$siz)               
 // условие неповторяемости цифр в числе             
               IF(($a1!$a2)&($a1!$a3)&($a1!$a4)&($a1!$a5)&($a2!$a3)&($a2!$a4)&($a2!$a5)&($a3!$a4)&($a3!$a5)&($a4!$a5))           
                  ARRPUSH($arr2, STRCONCAT($arr1[$a1],$arr1[$a2],$arr1[$a3],$arr1[$a4],$arr1[$a5]))
               END_IF
            END_CYC           
         END_CYC
      END_CYC
   END_CYC
END_CYC
TFWRITEARR("ряды чисел.txt", $arr2)
TFWRITE("ряды чисел.txt", "//ряды чисел от 1 до 5",1)// шапка в текстовый файл
HALT// сливай воду, генератор сдох  ;-)
« Last Edit: January 30, 2016, 01:15:26 PM by Золотой »

quant13

  • Активный участник
  • ***
  • Posts: 174
    • View Profile
Re: Построить ряды чисел от 1 до Х
« Reply #2 on: January 30, 2016, 07:14:13 PM »
до Х, потому что я надеялся да универсальное элегантное решение, и был прав, т.к я смотрю на решение 1-5 и глаза от количества условий и циклов разбегаются, что же будет если надо будет например до 9? ужс.

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Построить ряды чисел от 1 до Х
« Reply #3 on: January 30, 2016, 09:51:09 PM »
Добавляется 4 цикла, 26 условий, всего 6 новых строк кода,это займёт минуту, если не ковырять в носу двумя руками.
 Ничего придумывать не нужно просто копируются существующие участки и вставляются в код всего 5 раз . Человек не страдающий олигофренией за 2 минуты исправит в скопированных участках цифры на нужные, дописать строку используемых цифр, дописать разрядность в итоговой строке, с этим заданием за 2 минуты справится даже цыган, на призывной коммиссии, если пообещать что служить будет конюхом.  :P
Ну и в чём тут УЖС, в том что в коде вы ни бум бум? А ведь вам специально написал максимально просто, на основе доступных вам ранее примеров, в код Анрея довавлено всего одно, так понравившеесе вам, комплексное условие и ведь тоже специально решил короче написать, чтоб особо одарённым было понятнее. Я то могу всё это подпрограммами описать, но в ответ от тебя гарантированно увижу традиционный вопль сына пустыни при встрече с ШАЙТАНАРБОЙ!  :o

Незабываем систематически обрабатывать мышку и монитор моюще-дизинфицирующими средствами, как выяснилось всёж таки есть среди нас тонкие ценители элегантности. А чёж, ты раньше боялся поделиться своими надеждами? 8)

quant13

  • Активный участник
  • ***
  • Posts: 174
    • View Profile
Re: Построить ряды чисел от 1 до Х
« Reply #4 on: January 31, 2016, 03:12:45 AM »
Как ты элегантно сумел оскорбить среди "многабукафф". Блеск. Еще бы программные решения были такими же.
А сделать ряд 1-999? Добавляется еще 100500 циклов и 99999999 условий, всего бесконечность новых строк, это займет минуту.. и человек не страдающий шизофренией быстренько отправляется в психушку.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Построить ряды чисел от 1 до Х
« Reply #5 on: January 31, 2016, 09:04:45 AM »
Вот сделал более универсальный вариант, но обработка занимает куда больше времени.
Code: (clickermann) [Select]
$start = 1 // начальное число
$end = 5 // конечное число

FOR($a=$start,$a<$end+1) // подготавливаем массив чисел
   ARRPUSH($arr1, $a)
END_CYC
TFWRITEARR("temp_arr.txt", $arr1)
UNDEFINE($arr1)

$num = $start
FOR($a=$start,$a<$end+1) // тут вычисляем количество вариантов
   $num = $num*$a
END_CYC

WHILE(ARRSIZE($arr2)<$num) // основной цикл
   TFREADARR("temp_arr.txt", $arr)
   $i = ARRSIZE($arr)-1
   WHILE($i>0) // рандомизация массива чисел
      $j = RND(0,$i)
      IF($i ! $j)
         $tmp = $arr[$j]
         $arr[$j] = $arr[$i]
         $arr[$i] = $tmp
      END_IF
      INC($i,-1)
   END_CYC
   
   $str = ""
   $siz = ARRSIZE($arr)
   FOR($a=0,$a<$siz) // собираем строку из чисел
      IF(STRLEN($str) = 0)
         $str = $arr[$a]
      ELSE
         $str = STRCONCAT($str, $arr[$a])
      END_IF
   END_CYC
   UNDEFINE($arr)
   
   $check = 0
   $siz = ARRSIZE($arr2)
   FOR($a=0,($a<$siz)&($check = 0)) // проверяем есть ли такая строка в конечном массиве
      IF($arr2[$a] = $str)
         $check = 1
      END_IF
   END_CYC
   IF($check = 0) // если нет записываем
      ARRPUSH($arr2, $str)
   END_IF
END_CYC
TFCLEAR("temp_arr.txt", 1)

// здесь сортируем конечный массив по порядку (можно и без этого, будет быстрее)
$siz = ARRSIZE($arr2)
$srtcheck = 0
$srt = 0
FOR($a=$siz-1,($a>0)&($srt=0),-1)
   FOR($b=0,$b<$a)
      IF($arr2[$b] > $arr2[$b+1])
         $srtcheck = 1
         $tmp = $arr2[$b]
         $arr2[$b] = $arr2[$b+1]
         $arr2[$b+1] = $tmp
      END_IF
   END_CYC
   IF($srtcheck = 0)
      $srt = 1
   END_IF
END_CYC

TFWRITEARR("Ряды чисел.txt", $arr2) // выводим конечный массив в файл
HALT
« Last Edit: January 31, 2016, 09:06:46 AM by Oraven »

quant13

  • Активный участник
  • ***
  • Posts: 174
    • View Profile
Re: Построить ряды чисел от 1 до Х
« Reply #6 on: January 31, 2016, 10:29:05 AM »
Это оно. Спасибо.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Построить ряды чисел от 1 до Х
« Reply #7 on: January 31, 2016, 10:50:54 AM »
Это оно. Спасибо.

Там долеко не все гладко. Правильно будет работать только от 0-9.