У человека есть два устройства.
- Машина времени - Он может управлять этой машиной, думая. Это позволяет ему путешествовать из любого момента времени в другой момент времени в прошлом или будущем (или даже в настоящий момент времени) за мгновение. Обратите внимание, что если он путешествует в прошлое от B до A, то все обычные события (машины времени, исключая генераторы) от A до B должны повторяться точно так же. Затем из точки B его возвращают в точку A. Таким образом, одиночное путешествие во времени создает бесконечный цикл.
- Генератор - Осознав эту проблему, он создает еще одну машину. Он замечает, что, хотя все физические события повторяются в цикле, его мысли могут быть разными. Следовательно, эта машина была разработана, чтобы быть управляемой мыслью, а также. Машина может быть использована в любое время, чтобы обеспечить альтернативное будущее (но не прошлое) относительно времени, когда он ее использовал.
пример
Я объясню все детали на длинном примере.
1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25
- 1000 лет прошло. Сейчас 1000 год.
- Он путешествует с 1000 до 1250.
- 250 лет прошло. Сейчас 1500 год.
- Он путешествует с 1500 до 1500. Это не имеет никакого эффекта (и может быть проигнорировано).
- 500 лет прошло. Сейчас 2000 год
- Он путешествует с 2000 по 1800 год.
- 100 лет прошло. Сейчас 1900 год.
- Он путешествует с 1900 по 1850 год.
- Проходит 125 лет. Однако в этот раз, когда он в курсе, все по-другому. 50 лет проходят с 1850 по 1900 год. Он возвращается к 1850 году. Еще 50 лет проходит с 1850 по 1900 год. Он возвращается снова. Проходит 25 лет, а это 1875 год, что завершает 125 лет.
- Он использует генератор. Теперь существует альтернативное будущее 1875 году, в котором он сейчас находится. Прошлое не изменилось.
- 225 лет прошло. Сейчас 2100 год.
- Он путешествует с 2100 до 1700.
- Проход 500 лет: 175 лет с 1700 по 1875 год проходят нормально. Нет, он снова сталкивается с генератором, что означает, что теперь третье будущее было создано после 1875 года. 325 лет проходят нормально, а год 2200.
- Использование генератора переменного тока теперь не имеет никакого эффекта (и его можно игнорировать), поскольку существует только одно будущее до 2200, которое еще не было определено.
- 100 лет прошло. Сейчас 2300.
- Он путешествует с 2300 до 2100.
- 150 лет проходят: 100 лет с 2100 до 2200 проходят нормально. Второе будущее создается с 2200 года. Проходит 50 лет, и сейчас 2250 год.
- Предполагается, что он пойдет с 2250 по 2225 год. Однако в настоящее время существуют два 2225-х годов в двух разных временных рамках. Следовательно, это приводит к парадоксу, поскольку мы не можем определить, какой момент времени он достигнет. (Мы не будем предполагать, что он перейдет на более позднюю временную шкалу) Следовательно, это прекращает нашу симуляцию.
- Все, что дальше
100 T+100 50 A 25
, полностью игнорируется, поскольку возник парадокс, и наша симуляция прекратилась.
Подсказка: если вы изо всех сил пытаетесь понять пример, представьте, что время похоже на путь, который вы копаете в земле. Если вы путешествуете во времени, вы создаете телепорт. Если вы используете генератор переменного тока, вы копаете новый путь в стену существующего пути.
парадокс
Предположим, что A, B и C - три момента времени (один за другим). Говорят, что парадокс произошел тогда и только тогда:
- Вы находитесь в точке C, в точке B существует генератор переменного тока, существует несколько точек в точке B (и вы находитесь в одной из них), и вы пытаетесь получить доступ к любой точке между B и C через путешествие во времени.
- вы находитесь в точке A, в точке B существует генератор переменного тока, в точке B существует более одного будущего, и вы пытаетесь получить доступ к точке C (после B) через путешествие во времени.
вход
Серия событий, похожих на пример. (Формат гибкий.)
Выход
Значение «истина / ложь», указывающее, произошел ли парадокс.
Вызов
Самый короткий код (в байтах) выигрывает.
flexible
этоformat
?Ответы:
Рубин,
510460 байтвход
Согласно примеру
Выход
0 = нет парадокса, 1 = парадокс
Образец
Предоставленный пример ввода:
1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25
возвращает1
, указывая на возникший парадокс.Примечания
Это не только первый упражнение для Codegolf, которое я пробую, но и первая написанная мной программа на Ruby. Следовательно, это могло бы быть еще короче.
Краткое объяснение
Бесконечные циклы будут происходить только во время движения вперед во времени. Я рад за любые отзывы, особенно если они указывают на лучший способ решить эту проблему.
источник
then
являются ненужными и могут быть удалены. Кроме того, вы должны использовать{...}
вместо того,do...end
чтобы сохранить больше символов.map
сохраняет байтыeach
иsplit
разделяет их по умолчанию. Первые четыре строки инициализации могут быть сокращены доp=[];w=[n=x=0]
.05AB1E ,
93928682 байтаВвод в том же формате, что и в описании вызова, за исключением того, что генератор
A
являетсяabcdefghijklmnopqrstuvwxyz
вместо того, чтобы сохранить байты.Выводится,
1
если возник парадокс, или сам ввод, если нет (1
верно только в 05AB1E, все остальное неверно).Свободно основанный на моем ответе Java 10 .
Попробуйте онлайн.
Или попробуйте это онлайн с добавленными отладочными линиями ( TODO: создайте надлежащий набор тестов со всеми тестовыми примерами одновременно. ):
- Тестовый пример с обратным парадоксом путешествия во времени: попробуйте онлайн.
- Тестовый пример с парадоксом путешествия во времени: попробуйте онлайн.
- Тестовый пример без парадокса путешествий во времени: попробуйте онлайн.
Объяснение:
источник
Java 10,
498485478 байтВвод (пока) в том же формате, что и в описании вызова.
-13 байт благодаря @BenjaminUrquhart .
-7 байт благодаря @ceilingcat .
Попробуйте онлайн или попробуйте онлайн с добавленными линиями отладки .
Объяснение:
источник
Long
?int
были короче, но это приводило к ошибкам с парами ключ-значение map-Entry. Не думал об изменении всего на Long после этого .. Спасибо за -13!