Я ожидал опубликовать что-то более сложное в качестве моей первой загадки в PCG, но конкретный, домашний вопрос о переполнении стека вдохновил меня опубликовать это. Они хотят:
напечатать следующий шаблон для любого данного слова, которое содержит нечетное количество букв:
P M R A O R G O R R A P M
Обратите внимание, что буквы - это ход рыцаря в узоре, который нужно напечатать. Итак, все остальные столбцы пусты. - (Спасибо xnor за то, что указал на это.)
правила
- Использование C ++ запрещено. Как я могу связать этот вопрос там.
- Вы можете использовать
stdout
или любые способы быстрого вывода строки (например,alert()
в JavaScript). - Как всегда, выигрывает самый короткий код.
Ответы:
Пиф , 22
Тест:
Объяснение:
источник
~
был не в Pyth. Тогда мы могли бы изменить ,t-lzd
чтобы+lz~d
- еще 5 символов.Vz
это хитрый трюк: я не знал, чтоU<string>
далrange(len(<string>))
.APL (
37353427)Он принимает ввод с клавиатуры, вот так:
источник
Python 2 -
94 90 8988Входные данные:
Выход:
источник
i in[j,L+~j]
.L+~j
хотя.+~
трюк ...for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)
чтобы сохранить символ? (У меня сейчас нет доступа к Python 2 для тестирования.)Python 3: 75 символов
Для строки
i
мы начинаем со списка пробелов и устанавливаем записиi
спереди и сзади равными буквам входной строки. Затем мы печатаем результат.Строки Python являются неизменяемыми, поэтому
a
вместо них должен быть список символов. Списокa
должен быть инициализирован внутри цикла, иначе изменения будут перенесены между циклами. Мы используемprint(*a)
для печати каждого символа в списке через пробел, для чего требуется Python 3.Выходные линии симметричны, поэтому мы можем использовать
i
обратный отсчет, а не увеличение, используя цикл while.Это также работает для четного числа букв.
источник
VlzJ*]dlz=@JN@zN=@Jt_N@_zNjdJ
29 байтов ... Я думаю, мне придется попробовать что-то еще, чтобы побить APL. Кроме того, +1 за доказательство того, что Python 3 можетlen("raw_input()") + len("print ") > len("input()") + len("print()")
.input()
это также справедливо для Python 2 (он действует несколько иначе), поэтому, если входные данные для задания не очень строгие, Python 2 обычно побеждает.print" ".join(a)
ваш код короче (82), чем мой.CJam,
2725 байтовПопробуйте онлайн.
Пример запуска
Как пример в ответе, каждая строка имеет пробел в конце.
Как это работает
источник
Ява - 168
Простой вложенный цикл, здесь нет ничего особенного.
С переносами строк:
источник
Чистый Баш, 94 байта
источник
t%l
расчетов. Сохраните его при первом использовании в переменной,((x=t%l))
затем используйте переменную, чтобы уменьшить ее до 94 символов.x=t%l
иy=t/l
это было дольше ... не приходило мне в голову просто использовать только хРуби, 64
объяснение
String
.n
всего):n
пробелов.i
th иn-i
th (~i
спасибо xnor) пробел наi
th иn-i
th символ ввода.источник
-i-1
как дополнение бит~i
.gets.size.times{|x|u=?\s*~/$/;u[x]=$_[x];u[~x]=$_[~x];puts u}
(предполагается, что ввод не завершается символом новой строки, напримерecho -n CODE-GOLF
). Затем можно дополнительно использовать.chars
для сохранения другого персонажа:x=0;gets.chars{|r|u=?\s*~/$/;u[x]=r;u[~x]=$_[-x+=1];puts u}
JavaScript (E6) 101
95 129 136Изменить неверный интервал букв. Исправлена.
Редактируйте проще и короче, используя классические циклы for.
Как функция, выводите через всплывающее окно.
Предыдущая версия с использованием .map
Тест в консоли FireFox / FireBug
Выход
источник
Befunge-93,
6871Вы можете проверить это здесь . При каждом проходе будет отображаться диалоговое окно ввода
~
; введите ваше слово по одному символу за раз (в конце концов, он говорит, что ввод «klunky»), заканчивая пробелом.Это не будет печатать на консоль; это не было бы Befunge без намека на само-модификацию, в конце концов! Вместо этого он изменит свою сетку для отображения сообщения. После этого сетка будет выглядеть примерно так:
(Обратите внимание на благородную жертву ячейки в (0,0), после того, как мы знаем, что указатель больше не пойдет туда, чтобы сохранить часть данных.)
Он также работает с входами четной длины. Обратите внимание, что, поскольку Befunge-93 ограничен сеткой 80x25, размер ввода ограничен 21 символом, если вы запускаете его в интерпретаторе Befunge-93. Запуск его как Befunge-98 должен снять этот предел.
Редактировать - теперь он работает более точно в соответствии с предполагаемым выводом, за счет длины всего трех символов.
источник
Javascript 102
84 85Изменить: пришлось исправить расстояние. Уже не такой маленький.
источник
function(s)
так как вы не повторяете?CJam,
3836353432 байтаПроверьте это здесь.Это читает входное слово из STDIN. Это также работает для четного числа символов. Это печатает в конце столбец пробелов, но я не вижу ничего в правилах против этого.
объяснение
Содержимое стека печатается автоматически в конце программы.
источник
l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}
на салфетке , чем↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞
... смешкомС 105
два немного разных способа сделать это.
Если вы хотите добавить дополнительные пробелы, замените
putchar(
с вprintf(" %c",
течение дополнительных 5 символов.источник
J -
3630 байт:Изменить: 6 символов короче, кредиты идут на @algorithmshark .
например:
Бонус: работает и со строками четной длины:
источник
Пролог - 240 байт
Призвание:
Удобочитаемый:
источник
Холст , 5 байт
Попробуй это здесь!
Объяснение:
источник
R ,
99989389 байтПопробуйте онлайн!
Строка 1 читает входную строку, разбивает ее на символы, сохраняет ее длину и создает матрицу со словом на его главной диагонали - буквы слова накладываются на единичную матрицу (и по умолчанию повторяются, чтобы соответствовать ее длине), и только те, которые соответствуют 1 сохраняются, другие заменяются пробелами.
В строке 2 печатается матрица, образованная элементами диагональной матрицы или ее горизонтально-зеркальной версии, в зависимости от того, что больше.
-2 + 1 = -1 байт благодаря JayCe
−4 байта благодаря Джузеппе
источник
pmax
и вставляя еще несколько назначений.C # (
214212)(Конечно, плохо) Гольф версия:
Безголовая версия:
Любые намеки, советы, хитрости или замечания приветствуются, так как это моя первая попытка CodeGolf. Я просто хотел попробовать, хотя я знаю, что длина моего байта в C # даже близко не удвоит лучшие решения;)
А как вы, ребята, считаете свои байты? Я только что опубликовал вышеупомянутое в окне Quick Watch и сделал
.Length
. Я мог бы написать небольшую программу для подсчета байтов для себя, но держу пари, что есть более простой способ, которого я пока не знаю.источник
for(;i < l;i++)
.JavaScript (ES6) -
185177175170 байтПоместите это в консоль Firefox и запустите как
f('PROGRAM')
:f("CODE-GOLF")
:источник
Mathematica, 149 байтов
Ввод передан в качестве параметра функции; Функция возвращает строку вывода. В конце вывода есть завершающий символ новой строки.
Объяснение: Мы создаем диагональную матрицу со строкой, затем создаем ее копию, перевернутую по вертикали, с помощью
Reverse@#
реверса строк. Тогда у нас есть третья матрица тех же размеров, содержащая только 32 (пространство ASCII). Мы используем,MapThread
чтобы взять поэлементный максимум этих 3 матриц. Наконец, мыRiffle
помещаем пробелы в каждую строку,Append
новую строку в конце иFlatten
результат.источник
С 119
Это не может быть скомпилировано как C ++, поэтому я надеюсь, что я не нарушил правила :)
источник
i=0
иj=0
не требуется, поскольку глобальные переменные инициализируются нулем. 3. Вы можете использоватьmain(l,v)char**v;
вместоmain(int l,char**v)
. 4. Если вы обновитеi
какi+=puts("")
, вы можете избавиться от фигурных скобок внешнего цикла.Perl - 90
Из этого можно выжать еще несколько символов:
89
+1
за-n
.Бежать с:
Выход:
источник
T-SQL: 180
Принимая входные данные из переменной @i
Это заполняет отдельные символы в / уменьшая от начала и до конца в строку пробелов.
Результат испытаний
источник
PowerShell
11810297Выходы:
источник
Желе , 11 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) , 81 байт
РЕДАКТИРОВАТЬ : -1 Спасибо Джо Кинг. Я не видел, что TIO дает предварительно отформатированную прямую вставку для компьютерной графики.
Попробуйте онлайн!
источник
-i-1
может быть+~i
C # 208
источник
t+=i==j?s[i]:i==n-j-1?s[n-i-1]:"";
.GolfScript 46 ( ДЕМО )
источник
Независимо от того, как долго, всегда должен быть ответ в ...
Ява -
289234 байтаUngolfed:
Вывод, сделанный паршиво, таков:
ДобавилЧерт, я действительно сосу это.import java.util.Scanner
внутри код, потому что я никогда не помню, будет ли импорт считаться с байтовым счетом ...источник
from math import floor as f
он немного обманчивSystem.out.print
вызовы в один, используя несколько троичных операторов.System.out.print
звонка в конце.C # (192/170)
Или как «Только Main ()»:
источник