Codegolf — Список Вложенных Заголовков

  • Автор темы Kstep73
  • Обновлено
  • 23, Oct 2024
  • #1

Целью этой задачи является составление списка последовательных вложенных номеров заголовков с указанием начала и конца. Когда дано

 100 bytes - 100*(0.125+0.125+0.5) = 25 bytes 
and start вам следует сгенерировать end

Особые правила

  1. Ваша запись должна занимать range , end и несколько необязательных 1 parameters. Parameters can be taken form STDIN (or nearest equivalent) or a file.
  2. Ваша запись может предполагать действительный ввод
  3. Ввод будет иметь следующий формат:
    1. start = '1.1.5.1', end = '1.1.6.1', range = [5] Output: 1.1.5.1, 1.1.5.2, 1.1.5.3, 1.1.5.4, 1.1.5.5, 1.1.6.1 ^ previous value is iterated only when iterating value limit set by range start = '1.1.5.1', end = '1.1.7.1', range = [5] Output: 1.1.5.1, 1.1.5.2, 1.1.5.3, 1.1.5.4, 1.1.5.5, 1.1.6.1, 1.1.6.2, 1.1.6.3, 1.1.6.4, 1.1.6.5, 1.1.7.1 start = '1.5.1.1', end = '1.6.1.1', range = [5,2] Output: 1.5.1.1, 1.5.1.2, 1.5.2.1, 1.5.2.2, 1.5.3.1, 1.5.3.2, 1.5.4.1, 1.5.4.2, 1.5.5.1, 1.5.5.2, 1.6.1.1 and range будут строки range delimited integers of the same length
    2. range and 1 будет иметь три сегмента; (1) заданные значения, (2) итератор, (3) конечные значения.
      • Итератор — это первое значение, которое отличается между end and start .
      • Установленные значения — это значения перед итератором. Эти ценности никогда не меняются
      • Завершающие значения — это значения после итератора. Эти значения повторяются в соответствии с range parameter(s). Все конечные значения в end and start будет end .
    3. start will be a list of integers or strings (depending on which you prefer) with a length corresponding to the number of trailing values. When there are no trailing values, . не указано. Стоимость end corresponding to each trailing value determines the включающая верхняя граница к которому повторяется эта запись.
  4. Вывод будет осуществляться в STDOUT (или ближайшую альтернативу) и будет отображать каждое значение, разделенное хотя бы одним разделителем. Разделителем может быть любой символ или строка символов, но он должен быть последовательным. Вывод должен быть правильно отсортирован

Примеры

start

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

Бонусы

  1. Разрешить конечным значениям быть значениями, отличными от range in end параметр - Скидка 12,5%
  2. Обработка неправильного количества значений в start parameter - Скидка 12,5%
  3. Ручка 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5 less than 1.1.5 создав список в обратном порядке - скидка 50%

Бонусы рассчитываются исходя из исходного количества байтов; 100-байтовый ответ, получивший все бонусы, будет иметь окончательную оценку 1.1.1

#код-гольф

Kstep73


Рег
21 Nov, 2012

Тем
76

Постов
195

Баллов
595
  • 26, Oct 2024
  • #2

Хаскелл, 201 194 188*0,25 = 47 байт

 
 
 
 
 
 
 $end 

Я гонюсь за всеми бонусами.

«Нормальное» использование:

$f

Бонус 1:

"$q=[[5,6], [1,2,3,4,5], [1,2]]"

Бонус 2:

diff/Compare-Object

Бонус 3:

-split '\.'

Как это работает:

Расколоть PS C:\Scripts> .\nestedh.ps1 '1.5.1.1' '1.6.1.1' @(5,2) 1.5.1.1 1.5.1.2 1.5.2.1 1.5.2.2 1.5.3.1 1.5.3.2 1.5.4.1 1.5.4.2 1.5.5.1 1.5.5.2 1.6.1.1 и param($s,$e,$r) $f={param($v,$w)if($w){$w[0]|%{&$f "$v.$_" $w[1..$w.Count]}}else{$v;if($v-eq$e){break}}} $x,$y=($s-split'\.'|diff $e.split('.')).inputobject $q=,($x..$y) $r|%{$q+=,(1..$_)} &$f ($s-split".$x")[0] $q в списки чисел, например. end -> [[1,5,1,1],[1,5,1,2],[1,5,2,1],[1,5,2,2],...] . Добавить элементы из sequence to [[1],[5,6],[1,2,3,4,5],[1,2]] так, чтобы полученный список имел ту же длину, что и [1,6,5,2] , например [1,5,1,1] and enumFromTo -> start . Заархивируйте этот список и [1,6,5,2] with the list building function "1.6.1.1" , e.g. [5,2] and end -> range . end строит все их комбинации, где числа в позиции i берутся из подсписка i, -> [1,5,1,1] . Re-insert the dots and take elements as long as the they are less or equal than "1.5.1.1" .

 

DrypeCler23


Рег
21 Apr, 2005

Тем
74

Постов
187

Баллов
597
  • 26, Oct 2024
  • #3

PowerShell, 214 байт, никаких бонусов :(

end

например

start

Это:

  • Использование *Main> ((.p).(!).p) "1.6.1.1" "1.5.1.1" [5,2] ["1.6.1.1","1.5.5.2","1.5.5.1","1.5.4.2","1.5.4.1","1.5.3.2","1.5.3.1", "1.5.2.2","1.5.2.1","1.5.1.2","1.5.1.1"] feeding to *Main> ((.p).(!).p) "1.5.1.1" "1.6.1.1" [3] ["1.5.1.1","1.5.1.2","1.5.1.3","1.6.1.1"] чтобы найти два разных числа (этот подход блокирует бонус, при котором значения хвоста могут меняться, поскольку он меняет вывод разницы).
  • Создает массив диапазонов, необходимых для каждой позиции заголовка, на основе параметров диапазона. В результате получается что-то вроде *Main> ((.p).(!).p) "1.5.1.1" "1.6.4.1" [5,2] ["1.5.1.1","1.5.1.2","1.5.2.1","1.5.2.2","1.5.3.1","1.5.3.2","1.5.4.1", "1.5.4.2","1.5.5.1","1.5.5.2","1.6.1.1","1.6.1.2","1.6.2.1","1.6.2.2", "1.6.3.1","1.6.3.2","1.6.4.1"]
  • Они передаются в рекурсивную функцию *Main> ((.p).(!).p) "1.5.1.1" "1.6.1.1" [5,2] ["1.5.1.1","1.5.1.2","1.5.2.1","1.5.2.2","1.5.3.1","1.5.3.2","1.5.4.1", "1.5.4.2","1.5.5.1","1.5.5.2","1.6.1.1"] which takes the set values prefix and a list of sublists, adds the prefix to each number, and calls itself with that as the new prefix, and the remaining sublists
  • прекращает работу, когда достигает import Data.Lists l=length p x=read<$>splitOn"."x (s#e)r=intercalate".".map show<$>(fst$span(<=e)$sequence$zipWith enumFromTo s$take(l e-l r)e++r) s!e|s<e=s#e|1<2=reverse.(e#s) (.p).(!).p string
 

PAHKOP


Рег
07 Nov, 2010

Тем
64

Постов
198

Баллов
518