Snake Number Challenge
Интересно, сколько змеевых чисел существует от 1 до 50000?
Змеиные цифры в этой игре - это числа, которые можно набирать на традиционной цифровой клавиатуре (формат ниже), перемещая одну клавишу вверх, вниз, влево или вправо.
7 8 9
4 5 6
1 2 3
0
Например, если вы начнете с цифры 5, вы можете выбрать 4, 6, 8 или 2 в качестве следующего допустимого шага - однако 7, 3, 9 и 1 являются недопустимыми, поскольку они расположены по диагонали к текущей клавише. , Итак, если у вас есть 5, то 2, ваш следующий жизнеспособный выбор ключа снова будет 0, 1, 3 или 5.
В этом упражнении Code Golf вы должны вывести список всех положительных чисел от 1 до 50k, а также окончательное количество всех чисел, которые соответствуют критерию.
правила
- Числа не могут начинаться с нуля.
- Числа должны быть целыми положительными целыми числами.
- Каждый последовательный номер, читаемый слева направо, должен «змейиться» вокруг цифровой клавиатуры.
- Змея не может путешествовать по диагонали через ключи
- Номер 0 доступен как из номеров 1, так и из 2.
- Числа не могут быть соединены (например: 22)
Примеры действительных номеров змеи:
12369
45201
1254
10102
1
12
987
Примеры неверных номеров
1238 - 8 is not connected
0001 - multiple leading 0s
0101 - leading 0
159 - snake cannot travel diagonally
4556 - duplicate 5
В соответствии с нормой Code Golfs, цель - наименьшее количество байтов!
Согласно моей математике и правилам, в вашем списке должно быть 670 действительных чисел змеи, а само 670 напечатано как последнее число.
Ответы:
K (нгн / к) ,
6057 байтПопробуйте онлайн!
!50000
список0
..49999
1+
добавить 1 ко всем{
}#
фильтр с функцией в{
}
10\x
десятичные цифры аргумента(
)@
использовать в качестве индексов в ...!3 3
пара списков:(0 0 0 1 1 1 2 2 2;0 1 2 0 1 2 0 1 2)
2*
умножить все на 20 1,'
приставить0
к первому списку и1
ко второму+
транспонировать (пара списков -> список пар). это дает нам приблизительные координаты кнопки.-':
вычтите из каждой пары предыдущую пару. использовать0 0
как воображаемый элемент перед первым.1_
брось первый+
транспонированияx*x:
квадрат (назначитьx
и умножить наx
). вотx
пара списков - ∆xs и ∆ys+/
суммировать два списка (элемент за элементом)5&
мин с 53!
мод 31=
логический список, где он равен 1*/
продукт (логическое «и»)(x;#x:
)
составить пару результата и длину (#
) результатаисточник
Желе ,
2423 байтаПолная программа, которая печатает список всех результатов, а затем количество результатов.
Попробуйте онлайн!
Как?
источник
1.
оценивать1.5
?Python 3 , 140 байт
Попробуйте онлайн!
Я уверен, что кто-то сможет сделать это с помощью выражения вместо строки поиска.
источник
Python 2 , 101 байт
Попробуйте онлайн!
Шестнадцатеричное число является десятичным
10120214525632365878969854741
, которое кодирует каждую упорядоченную пару цифр, которые могут появляться рядом друг с другом.источник
JavaScript (V8) ,
112 106104 байтаСохранено 2 байта благодаря @NahuelFouilleul
Полная программа.
Попробуйте онлайн!
Или 96 байт, если мы можем вывести числа в обратном порядке:
Попробуйте онлайн!
источник
3
возможно, потому что36
уже в строке6589632145201478
на один байт корочеStax ,
3735 байтЗапустите и отладьте его на staxlang.xyz!
Это было так мило и коротко, пока не стало.
Распакованный (42 байта) и пояснения
2012365478963258741 кодирует клавиатуру. Посмотрите на пары соседних цифр. Возможно, если бы я мог получить прилично короткую альтернативу, которая идет в обоих направлениях для каждой пары, я мог бы сократить восемь байтов
{{om
.Без этого конечного 670 достаточно простого фильтра:
f..!
вместо{..C_Qf%p
. Там может быть лучший способ справиться с этой нерегулярностью. В любом случае это поведение диапазона фильтра недокументировано.источник
PHP , 145 байт
Попробуйте онлайн!
Для каждого числа от 1 до 50 000 проверяет каждую цифру этого числа слева направо. Если все цифры находятся в списке действительных цифр предыдущей цифры, этот номер печатается. В конце печатается жесткий код 670, так как он занимает меньше байтов, чем фактически подсчитывает.
источник
05AB1E , 23 байта
Попробуйте онлайн!
Порт Джонатана Аллана желе ответ .
источник
₄50*
или4°5*
когда делал попытку раньше. И сначала я был смущен , почему у вас€OP
вместо того , чтобы простоOP
, но потом я понял , одиночные значные номера (будучи пустой список после того , какüα
) затем будет[] → 0 → 0
вместо[] → [] → 1
. :)4°5*
когда вы можете5°;
? Хотя мне больше нравится ZAK. И да, тот крайний случай для однозначных чисел - боль.Perl 5 (
-M5.01
),96, 92 байта-4 байта благодаря @Xcali
TIO
источник
JavaScript (SpiderMonkey) ,
179173151129 байтПопробуйте онлайн!
-22 байта спасибо Дане -22 байта спасибо Дане
объяснение:
@dana также дала решение 123 байта, если мы можем сначала напечатать 670
источник
Рубин , 99 байт
Попробуйте онлайн!
источник
Stax ,
2826 байтЗапустите и отладьте его
Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
Секретный соус в буквальном смысле слова
"{<f:[/T8Z"
. После объединения всех кодовых точек, вы получите12360102589147845690
. Восходящие пары в этой строке являются допустимыми движениями змеи.источник
15JJ
вместо того,219J
чтобы работать, но я не думаю, что вы можете сыграть в гольф любой байт оттуда, если нет константы в 1 байт для15
.Haskell , 118 байт
Попробуйте онлайн!
Первый проход; Я не хорош в сжатии.
Это
s=
не считается, так как нам не нужно связывать результат.Код без правил .
источник
Древесный уголь , 42 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Процесс инклюзивного диапазона от
1
до50,000
преобразованного в строку.Отфильтруйте те, у которых есть пары цифр, не содержащиеся в сжатой строке
01478963202125458565236987410
.Выведите оставшийся массив и его длину.
источник
Japt , 34 байта
Попытайся
источник
Perl 6 , 64 байта
Попробуйте онлайн!
объяснение
источник
~>
еще не реализован, иначе вы могли бы сделать это только с помощью строковых операторов, а битовое поле - это строкаPyth ,
686545 байтПопробуйте онлайн!
Вдохновение для пересмотренного процесса поиска пришло от ответа Халдрасет на'Барьи в Stax , иди дать им голос!
Редактировать 2: переписано, чтобы сохранить кучу байтов, предыдущая версия:
Редактировать: Гольф 3 байта с помощью поиска строк, предыдущая версия:
источник