Описание
Вот очень суеверный лифт отеля в Шанхае:
Он избегает числа 13, потому что тринадцать не повезло в западном мире, и он избегает цифры 4, потому что четыре не повезло в некоторых частях Азии. Что если этот отель был выше?
Считайте положительное четное целое число n
из STDIN, представляющее количество этажей, и напечатайте, как макет кнопки будет выглядеть как STDOUT:, -1
а затем следующие n-1
положительные целые числа, которые не равны 13 и не содержат цифру 4. Расположите их числа в двух столбцах, такие как на изображении выше: выведите два номера этажа в строке, разделенных горизонтальной табуляцией, чтобы при чтении строк в обратном порядке слева направо получалась последовательность в порядке возрастания. (При желании вы также можете распечатать завершающий символ новой строки.)
Контрольные примеры
Для ввода 14
вывод должен быть таким, как на рисунке выше:
15 16
11 12
9 10
7 8
5 6
2 3
-1 1
где пробел в каждой строке представляет собой одиночный горизонтальный символ табуляции.
Для ввода 2
вы должны распечатать -1 1
.
Для ввода 100
вы должны напечатать:
120 121
118 119
116 117
113 115
111 112
109 110
107 108
105 106
102 103
100 101
98 99
96 97
93 95
91 92
89 90
87 88
85 86
82 83
80 81
78 79
76 77
73 75
71 72
69 70
67 68
65 66
62 63
60 61
58 59
56 57
53 55
51 52
39 50
37 38
35 36
32 33
30 31
28 29
26 27
23 25
21 22
19 20
17 18
15 16
11 12
9 10
7 8
5 6
2 3
-1 1
Цель
Это код-гольф . Кратчайший ответ в байтах побеждает.
Ответы:
Pyth, 27 байт
Попробуйте это онлайн здесь .
Получает
.f
первыеQ-1
числа, которые соответствуют фильтру!=13
и4
отсутствуют в строковом представлении числа. Затем он добавляется-1
, разбивается пополам, объединяется с помощью tabs (C9
) и соединяется переводом строки.источник
Bash + общие утилиты, 51
seq
генерирует возрастающие целые числа от 1 до N с дополнительными 9 цифрами впереди - более чем достаточно для 64-битного целочисленного вводаsed
отфильтровывает незадачливые полы и вставляет-1
перед строкой 1rs
превращается в два столбца, разделенных табуляциейsed
останавливается после N / 2 строкtac
меняет порядок вывода строкисточник
sed $[$1/2]q
после того, какrs
сsed $1q
до него. Я думаю, что это делает его совместимым с POSIX-оболочкой.1
не будет достаточно, чтобы компенсировать прохождение только 0,9 ^ n входов (числа, не содержащие,4
становятся все меньше и меньше по мере увеличения числа цифр). Но если в вашем отеле более нескольких сотен миллионов этажей, у вас, вероятно, возникнут другие проблемы, такие как работа сантехники и организация работы персонала.$[]
арифметики оболочки . Я думаю, что это разумное ограничение в отсутствие явного упоминания произвольной арифметики точности в вопросе. Несмотря на это, я теперь9
вместо этого префикс1
, просто чтобы быть в безопасности.JavaScript ES6,
236234233210195188 байтСпасли целую кучу байтов благодаря нам и друзьям!
Использует
function*
для генераторов. Вероятно, более короткий способ сделать это, но это было весело. Кстати, весело. Готов поспорить, можно поиграть в гольф. Эти странные пробелы являются вкладками.источник
z=+prompt(i=x=0,l=[]);
==>z=prompt(i=x=0,l=[]);
(-1 байт).join
с табуляцией и замените пробел на/-?\d+ \d+/g
табуляцию, удалите.map(x=>x.replace(/ /,"\t"))
(следует сохранить 23 байта).filter(x=>x!=".0")
==>.filter(x=>+x)
, (-5 байт).filter(..)
часть! Попробуйтеl.push(a);
==>+a&&l.push(a);
(-15 байт)C, 282 байта
Отформатировано:
Функции :
Он может рассчитывать до 2095984 этажей, если каждый этаж
19.5m
высокий (включая потолок), то это здание достаточно длинное, чтобы обернуться вокруг экватора!2095984*19.5=40871688m=~40000km=one 'lap' around the planet
,источник
while
можно преобразовать в,for
и это позволит вам удалить несколько фигурных скобок.t/=10
на байт корочеt=t/10
. Добавьте 1 в c вfor
цикле, чтобы сохранить пару байтов ->a[c+1]
становитсяa[c]
, в то время как все другие числа имеют одинаковую длину. Я также объединил бы дваprintf
s в цикле и снова сбросил фигурные скобки.Юлия,
134132 байтаЭтот забавный пробел там буквальная вкладка. Как отметил Конор О'Брайен, это на байт короче, чем на самом деле
\t
.Ungolfed:
источник
Python 2,
120110 байтисточник
i-13
вместоi!=13
JavaScript, 116
122Редактировать Сохранено 6 байт thx @Neil
Простое решение для массива - даже не используя ES6
Попробуйте с любым браузером
источник
!/4/.test(v)
.' '
вместо'\t'
(буквальная вкладка)Python 2 , 94 байта
Попробуйте онлайн!
В строке есть символ табуляции, который SE не отображает (спасибо Sp3000 за предложение использовать его, сохраняя байт).
Проверяет полы,
c
начиная с пола и-1
до достижения квотыn
этажей. Для каждого этажа, тесты, которые не содержат4
ни равно,0
ни13
. Если это так, добавляет его к строке лифтаs
и уменьшает квотуn
.Трюк со строковым форматированием используется, чтобы два этажа на столбец отображались в правильном порядке при добавлении. Каждая новая строка подготовлена так
'%d\t%%d\n'
, что, когда два этажа заменяются по порядку, первый находится слева, а второй справа. Например,источник
\t
. Ах, дни до TIO существовали.C #, 296 байт
Ungolfed:
Используемые гольф-трюки:
j+""
вместоj.ToString()
namespace System.Collections.Generic
не только так, чтобы мы могли получить к ним доступList<T>
, но и неявно использовали пространство именSystem
без дальнейшей квалификацииusing
внутри пространство имен, чтобы мы могли писатьusing Linq;
вместоusing System.Linq;
.Insert(0,j)
короче чем использование.Add(j)
и последующее применение.Reverse()
К сожалению,
using Linq;
это необходимо, так как это нужно только для.Zip
, но писать это какLinq.Enumerable.Zip()
дольше.источник
Ruby 2.3,
8483 символа(82 символа кода + 1 символ командной строки)
Образец прогона:
Рубин,
9392 персонажа(Код из 91 символа + 1 символ командной строки)
Образец прогона:
источник
Луа, 169 байт
Довольно просто, мы сначала собираем таблицу, заполненную всеми значениями кнопок. Затем мы выполняем его в обратном порядке, печатая два значения за раз или ничего, если второе значение не существует.
источник
Mathematica, 105 байт
Замените
\t
фактическим символом табуляции.источник
Брахилог , 105 байт
С поддержкой CLPFD было бы намного короче, здесь я должен итеративно пробовать целые числа в первом предикате.
Новая строка перед
"w,?bb:2&}
обязательна, это новая строка, которая печатается между каждой строкой.источник
C #,
277343Это только как функция. Я новичок в C #. Увеличение должно было быть действительным для 40-49, и для включения
using
сUngolfed, как полная программа бега:
Разъяснения
Я создаю два списка и чередую нажатие на них, переворачиваю их, перебираю один и беру другой по индексу.
источник
if(s==1)
наif(s)
(автоматическое приведение от int к логическомуPython 3, 155 байт
Я думаю, что прослушивание, реверсирование и самоархивирование генератора номера этажа,
s()
возможно, было слишком умным для его же блага, но другие уже сделали альтернативу (выталкивая два элемента за один раз), не говоря уже об использовании Python 2, который сохраняет байты по некоторым ключевым моментам.Более короткая, но уже сделанная-лучшая альтернатива занимает 140 байт.
источник
(0!=n!=13)!=('4'in str(n))
5 байт короче, чемnot(n in(0,13)or'4'in str(n))
.Japt, 42 байта
Четыре пробела должны быть фактическим символом табуляции. Попробуйте онлайн!
Как это устроено
источник
Луа, 141 байт
Ungolfed
Попробуйте онлайн (вам нужно нажать «выполнить» вверху, а затем нажать терминал внизу, прежде чем вводить ввод; я ищу лучший способ тестирования lua онлайн с помощью stdin и stdout)
источник
05AB1E ,
252322 байта-1 байт благодаря @ ASCII-only
Попробуйте онлайн!
объяснение
источник
0 13ª
часть немного лучше. Спасибо!ʒ4å_}
на4мïê
. PS: на основании вашего предыдущего комментария:0 13ª
могло бы быть¾13ª
и так.C ++ 11,
259258203202195194 байтаВырезал 1 байт, благодаря идее Конора О'Брайена использовать буквенную вкладку вместо
\t
.UPD 2: сокращены 55 байтов с улучшенной логикой и злоупотреблением запятыми.
UPD 3: еще один байт, благодаря floorcat.
UPD 4: 7 байтов от потолочной кошки.
UPD 5: и еще один байт от потолочного кота.
Рад, что все включает в себя и по-прежнему побить решения C и C #.
Ungolfed:
источник
iostream
включает в себяstring
, так что вы можете пропустить второе включение для большого уменьшения bytecount :)Java, 333 байта
Добавляет разрешенные номера этажей в стек, а затем отбрасывает их обратно, чтобы распечатать.
Я играл с использованием IntStream, но со всеми импортерами этот оказался меньше.
источник
Scala 147
источник
Python 3, 117 байт
Модифицированная версия поста Python 2 для соответствия спецификации Python 3.
источник
PowerShell, 106
107байтUngolfed
пример
источник
Haskell 202 байта
Я начинающий на хэскелле ...
источник
by2
, используя 1-символьное имя и переупорядочение: используйте последнюю строку как есть, а затемb x = [x]
после.Javascript ES6 114 байт
использование
F (100);
источник
Perl 6 , 73 байта
Предполагается четное количество этажей, поскольку в постановке задачи, по-видимому, это тоже предполагается, и, по крайней мере, еще одно предоставленное решение ломается на нечетное количество этажей. Просто добавьте
,:partial
в качестве второго аргумента ещеrotor
девять байтов для поддержки нечетного числа этажей.источник
Желе , 20 байт
Попробуйте онлайн!
Как?
источник
JavaScript (ES6),
151146Сделал это до того, как понял, что edc65 уже сделал более короткий. Ну что ж!
источник
R , 106 байт
Попробуйте онлайн!
c("\t","\n")
\t
источник
APL (Dyalog) , 34 байта
Попробуйте онлайн!
источник