Задний план
Вы работаете на какого-то производителя настольных игр и вам нужно изготовить деревянные плитки с выгравированными на них числами от 0 до n . Однако без дальнейших церемоний некоторые плитки станут неразличимыми, например, 6и 9. Чтобы избежать этого, вы должны снабдить числа, которые могут быть перепутаны с другими (и только теми), точками с неоднозначными значениями, например, у вас будут плитки типа 9.или 6089..
К сожалению, для этого вам нужно использовать какое-то старое, но программируемое устройство для гравировки на дереве, интерфейс которого настолько сломан, что вам приходится кодировать каждый символ программы вручную в невероятно утомительном процессе. К счастью, устройство понимает все существующие языки программирования. Таким образом, вы ищете самую короткую программу, которая печатает такие плитки.
Актуальное задание
Напишите самую короткую программу, которая:
- Принимает положительное целое число n в качестве входных данных. Как читать ввод, зависит от вас.
- Печатает каждое из чисел от 0 до n ( включая 0 и n ) ровно один раз в выбранном вами порядке, разделенных одним пробелом (включая символ новой строки). Числа должны быть напечатаны без начальных нулей.
- Добавляет точку (.) К каждому числу, которое превращается в другое действительное число при повороте на π (180 °), даже если это число больше n. 0 и 8 вашей гарнитуры симметричны по отношению к вращению, а 9 - повернутые 6. 2 и 5 различаются при вращении; 1 не является вращательно-симметричным. Числа с ведущими нулями не действительны.
Примеры
Каждый из следующих номеров должен быть напечатан именно так:
2
4
5
6.
8
9.
16
60
66.
68.
69
906
909.
8088.
9806.
9886
9889.
60
быть60.
?8088.
в ваши примеры в качестве числа, небезопасного для поворота, которое не имеет 6 или 9.Ответы:
Пиф - 34
38Я должен поблагодарить @ Sp3000 за помощь в удалении 4 байтов. Первоначально у меня была дополнительная проверка,
&@JK
которая проверяла число 6 или 9, но после просмотра ответов перед публикацией я прочитал его ответ и заметил, что мой идентичный перевод и обращение уже позаботились об этом.Также спасибо @isaacg за указание, что строки являются итеративными, и вы можете использовать над ними операции над множествами. Также для создания текущего кода;)
Объяснение:
источник
K
иJ
- строки просто используйте вместо этого. ПереключениеK
на <backtick> 69 иJ
на <backtick> N сохраняет несколько символов, как и вставкаK
в результирующей программе. Самое короткое, что я мог получить под эту технику, былоVhQJ``N+J*\.&nJX_J``69``96&eN!-J"0689
34 символа. (Два кавычки действительно один.)hell`o wo`rld
_
, перед`96
.CJam,
46444342 байтаЯ думаю, что есть место для улучшения.
Проверьте это здесь.
объяснение
источник
n
во Ввод.CJam,
46 45 4342 байтаЯ думаю, что это может быть в гольф немного больше.
Берет
n
из STDIN.Попробуйте онлайн здесь
источник
APL 66
Объяснение:
Попробуйте это на tryapl.org
Обратите внимание, что в онлайн-интерпретаторе функция doesn't не работает, поэтому мне пришлось заменить ее на 2⊃⎕VFI, которая делает то же самое в этом случае, выполняет и возвращает число с заданной строкой.
источник
⊃,/
или,/
вы можете использовать∊
на передней панели.Perl 5, 53 байта
Демо онлайн.
Использует
say
функцию Perl 5.10+ , поэтому ее необходимо запустить сperl -M5.010
(илиperl -E
), чтобы включить ее. (См. Эту мета-ветку. ) Читает ввод из stdin, печатает в stdout.источник
Python 2,
130116113 байтовОпределяет функцию,
f
которая печатает числа в STDOUT в порядке возрастания.На этот раз я решил взять листок из книги @ feersum с
.translate
:)Expanded:
Предыдущее решение:
Спасибо @xnor за то, что показали мне
.replace
трюк некоторое время назад.источник
(u''+S[::-1])
вместоunicode(S[::-1])
. Кроме того, если вы поменяете местамиprint
рекурсивный вызов, номера будут появляться в порядке возрастания.u""+
это действительно сработаетC #,
343309 символовПуть слишком долго, но в любом случае:
Как это работает? Чтобы добавить точку к номеру, он должен соответствовать следующим требованиям:
0
,8
,6
и9
.6
s и9
s, иc
= число со всеми6
s заменяется на9
s,c
==c
,Числа разделены пробелом.
Код с отступом:
источник
M (MUMPS) -
7270Большинство встроенных команд и функций в M имеют сокращенные версии. Я использовал полные имена ниже.
READ n
- Считайте строку с клавиатуры и сохраните ееn
.FOR i=0:1:n
- Цикл от нуля доn
, увеличиваясьi
на 1 каждый раз. (Остальная часть строки составляет тело цикла.)WRITE !,i
- Распечатайте новую строку с последующим значениемi
.SET r=$TRANSLATE($REVERSE(i),69,96))
- В обратном порядкеi
замените девятки на шестерки, а шестерки на девятки и сохраните их вr
.WRITE:r=+r*r'=i*'$TRANSLATE(i,0689) "."
:
- Обозначает постусловное выражение, поэтомуWRITE
команда выполняется только в том случае, еслиr=+r*r'=i*'$TRANSLATE(i,0689)
значение равно истинному.r=+r
- Проверьте, чтоr
нет начального нуля. Унарный+
оператор преобразует строку в число, которое удаляет начальные нули, если они есть.*
- Оператор умножения. М не имеет порядка операций; все бинарные операторы оцениваются в порядке их появления слева направо.r'=i
- Проверьте, чтоi
это не то же самое, что перевернутая версияr
.'$TRANSLATE(i,0689)
- Уберите все нули, шестерки, восьмерки и девяткиi
и убедитесь, что ничего не осталось. ('
является оператором логического отрицания.)"."
- Наконец, аргументWRITE
команды (буквальная строка).Изменить: Сделано это немного короче, злоупотребляя оператором умножения. Предыдущая версия:
источник
APL, 53 символа
∊{⍵,'. '↓⍨∨/(3≡⊃i)(5∊i),⍵≡'9608x'[i←⌽'6908'⍳⍵]}∘⍕¨0,⍳
источник
C # 205
209C # не должен быть таким длинным ...
более или менее, порт моего ответа JavaScript
Ungolfed
источник
Руби, 81
Ввод берется из командной строки.
Создает список
String
с от0
доn
. Он проходит через них и печатает их. Он добавляет точку, если выполнены все условия:6
s на9
s не дает оригинала0
,6
,8
и9
0
источник
JavaScript (ES6) 101
104 106 109Функция с n в качестве аргумента, вывод через console.log
Редактирование с использованием% 10 для проверки на лидерство 0
Редактирование 2
for
реорганизация, мне не нужно понимание массива после того, как всеРедактирование 3 изменило (снова) проверку на лидерство 0
Разряженный и легче тестировать
Выход
источник
[]
? Я ищу документацию, потому что я знал об этом только по Python.Баш + coreutils, 105
Тест:
источник
Сед, 467
Дольше чем C # ...
Я почти закончил это, когда @ edc65 указал, что ответы должны обрабатывать числа 0-n, а не только n. Добавление кода sed к приращению 0-n добавляет намного больше кода, поскольку эта задача плохо подходит для sed без арифметики.
В соответствии с ОП, порядок не имеет значения, поэтому мы работаем в направлении вниз от n до 0.
Выход:
источник
AWK: 120
Прочитайте значение n из стандартного ввода.
Тест:
источник
Реболь - 195
Ungolfed + некоторые аннотации:
источник
до н.э., 158
После того, как я сделал это чисто в sed, используя все операции с строками и регулярными выражениями без собственной арифметики, мне было любопытно посмотреть, как это будет выглядеть наоборот, то есть все арифметические и логические операции и отсутствие строки / регулярного выражения:
Вывод сортируется в порядке убывания.
Выход:
источник
Питон - 152
источник
"."if a[i]else"" -> "."*a[i]
,int(raw_input()) -> input()
(что на самом деле простоeval(raw_input())
)str(i)
на`i`
. (2) Вы используетеa
только один раз, так зачем назначать его переменной.str(i)
несколько раз. Какой я могу заменитьi
?i
, ноi
с кавычками, что является синонимомrepr(i)
. Вы можете использовать его вместоstr(i)
повсеместного использования, хотя, если у вас естьstr(i)
такое количество раз, может быть короче присвоить его переменной и использовать его в дополнение к обратным галочкам. (т.е.x=`i`; (do stuff with x)
)JavaScript -
168 129 119 113 111108Или читаемая версия:
Я не очень доволен регулярным выражением, какие-нибудь идеи?
Edit : Узнал ловкий трюк с
~
иfor (... of ...)
от @ edc65Edit2 : Реорганизованные условия
Edit3 : прикладные предложения по @ edc65
источник
i=n+"";for(c of i)
=>for(c of i=n+"")
сохранить 2 байтаc==6?A:B
=>c!=6=>B:A
=>c-6?B:A
for(c of i=n+"")
, когда я это вижу, это вполне логично, но я бы об этом не подумал.c-6?B:A
Не дай бог, я когда-нибудь поместил это в производственный код05AB1E ,
38373029 байтПопробуйте онлайн.
Объяснение:
Дополнительное объяснение для некоторых частей:
источник
Perl - 84
источник
Powershell,
111102 байтаПояснил тестовый скрипт:
Выход:
источник
Stax , 27 байт
Запустите и отладьте его
Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
источник