Создайте программу, которая печатает все целые числа включительно между интервалами (a, b)
и заменяет кратные 8 в последовательности случайными (равномерно распределенными, независимыми от других символов), нечисловыми, непробельными, печатными символами ASCII.
Предположим, что 0 <a <b во всех случаях.
Если номер имеет более 1 цифры, убедитесь, что количество символов в замене совпадает!
Примеры:
(1, 16) -> 1 2 3 4 5 6 7 $ 9 10 11 12 13 14 15 n@
(115, 123) -> 115, 116, 117, 118, 119, :F<, 121, 122, 123
(1, 3) -> 1 2 3
Non-Примеры:
(1, 16) -> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(115, 123) -> 115 116 117 118 119 $ 121 122 123
Это код гольф, поэтому выигрывает самый короткий код в байтах!
Текущий победитель:
Самый популярный:
Ответы:
Пайк,
2221 байтПопробуй это здесь!
Принимает входной сигнал в виде:
higher
,lower
источник
Python 2, 126 байт
Попробуйте онлайн!
Большое спасибо Flp.Tkc и EasterlyIrk за их помощь!
источник
b/a
вместо,a<=b
и вам не нужно;
в конце. Такжеimport random,string
сохраняет несколько байтов. tio.run/nexus/…Python 2 , 119 байт
Попробуйте онлайн!
источник
зш,
10098 байтДва входных аргумента передаются как аргументы командной строки, а числа выводятся в отдельных строках.
источник
Mathematica, 96 байт
объяснение
Для входов
m
иn
:генерировать
{m, m + 1, m + 2, ... , n}
Для всех чисел, которые делятся на 8 (назовите это
a
), примените это правило замены:Получить список всех печатных символов ASCII, кроме цифр.
Псевдослучайно выбирает
Floor[Log10[a] + 1]
символы из списка, допуская дублирование.Присоединяйтесь к персонажам.
источник
FromCharacterCode
(r=Range)@##/.a_?(8∣#&):>FromCharacterCode[Join[33~r~47,58~r~127]~RandomChoice~⌊Log10@a+1⌋]<>""&
R, 73 байта
Считывает ввод из stdin и заменяет заменяемые числа на
8
равномерно выбранную выборку символов ascii в диапазоне32...47, 58...126
. Чтобы нарисовать случайную выборку, нам нужен вектор символов, к сожалению,intToUtf8()
возвращает одну строку, а не вектор, поэтому мы также должны векторизовать ее по диапазону, используяsapply
.источник
Python 2, 126 байт
(Деннис просто не обгоняет)
Поскольку я много работал над ответом Хизер, я подумал, что я тоже опубликую свои собственные решения.
Это функция, которая принимает два аргумента и печатает напрямую
STDOUT
.127 байт
Это безымянная анонимная функция - использовать, присваивать переменной (например,
f
), а затем вызывать с помощьюf(a, b)
. Это возвращает вывод в виде списка.источник
Пип , 28 байт
Принимает числа в качестве аргументов командной строки и выводит разделенный на новую строку список результатов. Попробуйте онлайн!
Объяснение:
источник
JavaScript (ES6), 114 байт
Эти чертовы встроенные 23-байтовые имена ....
источник
MATL , 26 байт
Попробуйте онлайн!
объяснение
источник
Pyth , 24 байта
Попробуйте онлайн!
Объяснение:
источник
Баш + apg ,
6476 байтправок:
Golfed
Тест
источник
crazy8 8 8
дастPerl 6 , 60 байт
Объяснение:
{ map { }, $^a .. $^b }
: Лямбда, которая принимает два аргумента, генерирует список целых чисел в этом диапазоне и возвращает его со следующим преобразованием, примененным к каждому элементу:$_ % 8 ?? $_ !!
: Если элемент не делится на 8, передайте его без изменений. Иначе...S:g/./{ }/
: ... заменить каждый символ его строкового представления значением, сгенерированным этим выражением:grep(/\D/, "!" .. "~").pick
: Создать диапазон символов между!
и~
(в порядке Юникода), отфильтровать цифры и случайным образом выбрать один из оставшихся символов.источник
PHP, 163 байта
Объяснение:
$n = range(48,57)
Это коды ASCII для чисел, которые находятся в середине специальных символов (32-47) и других символов (58-126).$c = array_diff(range(32,126), $n)
Используя$n
массив, исключите числовые символы и создайте массив приемлемых символов ASCII.foreach(range($a,$b) as $v)
Цикл по диапазону значений от$a
до$b
(включительно), как $ v внутри цикла.if($v % 8 != 0) { echo $v; }
Проверьте, что $ v делится на 8 равномерно, используя оператор мода%
.else { for($i = 0; $i < strlen($v); $i++) { ... }}
Если неравномерно не делится на 8, зациклите достаточное количество раз для количества цифр в числе и напечатайте символы (на следующем шаге).echo chr($c[array_rand($c)])
Выведите один символ из допустимого массива значений ASCII в$c
.array_rand
возвращает индекс в массиве, поэтому мы должны получить фактическое значение по этому индексу, используя$c[random_key]
.Я мог бы, вероятно, сделать это меньше, создавая по-
$c
другому, и цикл печати символов ASCII кажется неуклюжим, поэтому я продолжу размышлять, как сократить это.источник
postgresql9,6 251 символов
очень длинный код, но Postgresql также делает это.
отформатированный sql здесь:
источник
Perl, 66 байт
Запустить с
-E
флагом:Это довольно просто:
-
<>..<>
создает список чисел между двумя входными числами. И затемmap
перебирает его:-
$_%8||...
:...
выполняются, только если$_
кратно 8.-
s%.%xxx%ge
: заменить каждый символ наxxx
.-
do{$_=chr rand 126}until/[!-\/:-~]/
выбрать случайный символ (от кодов 0 до 126), пока мы не получим тот, который удовлетворяет/[!-\/:-~]/
, т.е. тот, который печатается и не является цифрой.-
say
: распечатай.источник
C (gcc) ,
129119 байтовПопробуйте онлайн!
129 → 119 Используйте
%94+33
трюк от OOBalanceUngolfed:
источник
puts
вместоprintf
).C
157115 байтПопробуйте это онлайн здесь . Спасибо jxh за игру в гольф 42 байта.
Безголовая версия:
источник
Java 10,
149147 байт (лямбда-функция)Попробуйте онлайн.
Java 10,
227225 байт (полная программа)Попробуйте онлайн.
Объяснение:
источник
t<33|(t>47&t<59)|t>126;
для чего он выше. Он в основном генерировал случайное число в диапазоне[0,127)
, а затем проверяет, является ли оно допустимым (то есть в диапазоне[33..47,59..126]
все печатные нецифровые символы ASCII). Если это так: хорошо, добавь это. Если нет:[0,127)
снова сгенерируйте случайное число в диапазоне и проверяйте его снова, пока мы не найдем действительный символ.APL (Dyalog Extended) , 32 байта
Попробуйте онлайн!
Огромное спасибо Адаму и Дзайме за помощь. Впервые с помощью Dyalog Extended!
Объяснение:
источник
Скала , 198 байт
Улучшенная функциональная версия с неизменным состоянием (03-04-2018)
Попробуйте онлайн!
Функциональное стилевое решение в Scala (350 байт) для удовольствия.
Предложения по улучшению приветствуются.
источник
Python 2, 180 байт
РЕДАКТИРОВАТЬ:
Спасибо @ Flp.Tkc за понимание, что я не прочитал задачу должным образом.
Спасибо @Caleb за указание, что я могу использовать несколько, чтобы уменьшить количество байтов.
Спасибо @Dennis за указание на то, что числа не могут быть включены.
РЕДАКТИРОВАТЬ 2:
Текущая версия, вероятно, может быть упрощена больше, чем она есть.
источник
PowerShell ,
8289 байтПопробуйте онлайн!
источник
QBIC , 79 байт
Пропуск чисел является дорогостоящим делом, вот версия, которая может также случайно выбрать
0-9
на 20 байтов меньше:Пример вывода для
1, 89
Объяснение:
источник
05AB1E , 17 байт
Принимает вход как
highest\nlowest
и выводит список.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Japt , 20 байт
Попытайся
источник
Forth (gforth) , 128 байтов
Попробуйте онлайн!
объяснение
Цикл от начала до конца, выведите число, если оно не кратно 8, в противном случае получите количество цифр в числе и напечатайте столько случайных символов, за которыми следует пробел
Код Объяснение
UnGolfed
Я обычно не разгадываю свои решения, но этот достаточно длинный / сложный, так что я думаю, что он нужен
источник
PHP , 130 байт
Попробуйте онлайн!
Ungolfed:
источник
$x-= $x > 58 ?: 11; // subtract 11, if x is less than 58
- не могли бы вы уточнить?Subtract one from x. If x was less than or equal to 58, subtract a further ten from it.
, нет?Котлин , 136 байт
Попробуйте онлайн!
источник