Соревнование
Ваша задача - создать программу, которая принимает любой заданный строковый ввод и выводит ввод в квадрате. Пустые строки должны возвращать пустую строку.
Примеры
Учитывая вход:
golf
Ваша программа должна вывести:
golf
o l
l o
flog
Входные данные:
123
Выход:
123
2 2
321
Входные данные:
a
Выход:
a
Входные данные:
Hello, world!
Вывод (обратите внимание на пробел между, и w - пробел не просто перевод строки):
Hello, world!
e d
l l
l r
o o
, w
w ,
o o
r l
l l
d e
!dlrow ,olleH
счет
Это код-гольф , поэтому выигрывает самый короткий ответ на каждом языке.
code-golf
string
code-golf
number
sequence
combinatorics
code-golf
tips
javascript
code-golf
kolmogorov-complexity
fibonacci
restricted-time
code-golf
ascii-art
code-golf
string
text-processing
code-golf
sequence
set-partitions
code-golf
kolmogorov-complexity
natural-language
code-golf
string
code-golf
math
code-challenge
restricted-source
code-golf
code-golf
number
base-conversion
cops-and-robbers
encryption
code-challenge
quine
optimized-output
king-of-the-hill
python
SpookyGengar
источник
источник
Ответы:
Древесный уголь ,
75 байтПопробуйте онлайн! Ссылка на подробную версию кода. Изменить: Сохранено 2 байта благодаря @CarlosAlejo. Объяснение:
(Несколько указаний на команду «Отражать» выполняются последовательно, а не одновременно.)
источник
θ‖B↙↘
. Попробуйте онлайн!ReflectOverlap
вместо того,ReflectButterfly
чтобы избегать переключения символов. :-)MATL ,
201611 байтПопробуйте это в MATL онлайн!
РЕДАКТИРОВАТЬ: код работает в выпуске 20.2.1, который предшествует вызову. Ссылка использует этот выпуск. (В 20.2.2 код был бы короче, но это ставит перед проблемой).
объяснение
источник
Желе ,
29 2217 байтУголь
будетпороть + d этот счет ...Монадическая ссылка, берущая и возвращающая списки символов; или полная программа печати результата.
Попробуйте онлайн!
Как?
источник
'Hello'
, «Spooky's»"123"
и т. Д. (Python используется для интерпретации ввода).C 109 байтов
Попробуйте онлайн!
Заслуживающие внимания приемы:
Вместо того, чтобы тратить байты
strlen
, мы просто берем длину строки и одновременно печатаем первую строку:Это работает, потому что
printf
возвращает количество записанных байтов.Для средних строк нам нужно перебрать строку, но исключить как первый, так и последний символ. Это достигается с условием
(который короче, чем
(++s)[1]
), который пропускает первый символ из-за++
нахождения в условии и пропускает последний, останавливаясь, когда находится символ после текущего символа'\0'
(а не останавливаясь на'\0'
).В теле первого цикла
мы печатаем текущий символ, а затем соответствующий «зеркальный» символ (отслеживая с
j
, который переходит в отрицательные значения, что приводит к нечетной ситуации индексации в строку с отрицательным числом), дополненную длинойi
с пробелами (гдеi
есть удобноstrlen(s) - 1
).Обратная печать на последней строке довольно проста; единственный трюк -
*s*~i--
это самый короткий способ получитьi+2
итерации тела цикла (который не зависит отi
; всеi
, что нужно, это считать). Прикольная*s*
часть гарантирует, что цикл не запускается, если*s
есть'\0'
, что происходит на входе length-1.источник
Октава, 40 байт
Попробуйте онлайн!
Это мой ответ, но опубликованный после ответа @Luis MATL
источник
Haskell ,
8478 байтПопробуйте онлайн! Использование:
f "test"
. Возвращает список строк.Изменить: -6 байт благодаря Дайан!
источник
reverse
;r=reverse;f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]
составляет 78 байтов.Python 2 ,
89818886 байтПопробуйте онлайн!
источник
р 113 байтов
Попробуйте онлайн!
источник
05AB1E ,
17161519 байтовПопробуйте онлайн!
объяснение
Пример с
input = golf
Исправление для ввода 1 буквы было довольно дорого.
Я чувствую, что другой подход может быть лучше сейчас.
источник
Python 2 ,
9988 байт-4 байта благодаря musicman523.
Попробуйте онлайн!
Возвращает список строк.
источник
s
иs[::-1]
вjoin
Mathematica, 128 байт
источник
C 96 байтов
Бонусная версия (122 байта):
источник
Swift 3 ,
215199 байтПопробуйте онлайн
источник
Python 3, 88 байт
источник
l+1 and
может быть переписано,l+1and
чтобы сохранить байт.0or
, когда python не сможет выполнить синтаксический анализ, поскольку0o
является восьмеричным префиксом.JavaScript (ES8),
108112 байтМенее голф
Спасибо Джастину Маринеру за сохранение большого количества байтов, которые потом привыкли добавлять проверку нуля или одного символа, необходимую для выполнения задачи. Вы получаете это :-(
источник
`+s[i+1].padEnd(s.length-1)+v,s)+`
и используяr.join``
.String.prototype.padStart
и помеченные литералы шаблонов. Мне это нужно, чтобы(n=s.length-1)?(r=<...>+r.join``:s
и используяpadEnd(n)
. Если длина1
,length-1
это0
(ложь).padEnd
это ES2017.PHP , 118 байт
Попробуйте онлайн!
источник
APL , 58 байт
С
⎕IO←0
.Попробуйте онлайн!
Как?
c←≢⍵
- длина струныr←⍳
- диапазонo←∘.⌈⍨
- внешний продукт с минимумомo⌊⌽⊖
- минимизировать с собой повернутый на 180 o×
- умножить наx←∘....⍨r
- внешний продукт ассортимента с((c-1)=⍺⌈⍵)∨0=⍺⌊⍵
- рамка матрицыx+
- добавить рамку(' ',⍵)[...]
- получить по индексу строку, соединенную с пробеломисточник
⍉⊖⍉⊖
быть⌽⊖
?JavaScript (ES2017), 87 байт
Версия ES6: 93 байта
Меньше гольфа
источник
padEnd
это ES2017.l+~i
этого, чтобы избежать необходимости вычитать 1 дважды, вместо этого вы можете вычесть 2 один раз.l-~-i
s=>[...s].reverse(l=s.length).map((c,i,z)=>i?l+~i?s[i]+' '.repeat(l-2)+c:z.join``:s).join`\n`
ноs=>[...s].reverse(l=s.length-2).map((c,i,z)=>i?i+~l?s[i]+' '.repeat(l)+c:z.join``:s).join`\n`
также работает.Java, 191 байт
источник
(s)
может быть простоs
. У петель с единственными линиями внутри могут быть удалены их фигурные скобки. Вы можете вернуться вместо печати, если это сэкономит вам какие-либо байты. Вы используетеint i
в обоих циклах, я не могу сказать, находятся ли они в разных областях, но стоит указать. Инициализация одинаковых переменных вместе обычно сохраняет байты.for(int i=0;i<l;i++){o.print(s.charAt(l-1-i));}
->for(int i=0;i<l;){o.print(s.charAt(l-1-i++));}
. Вам не нужна конечная точка с запятой.C # (.NET Core) ,
179161 байт-18 байт благодаря TheLethalCoder
Попробуйте онлайн!
Я не уверен насчет правил, нужно ли это для подсчета байтов или нет:Кто-нибудь, пожалуйста, поправьте меня по этому поводу.Ungolfed:
источник
using
в свой счетчик байтов. Поскольку вы используете LinqToCharArray()
может быть простоToArray()
, вам действительно нужно, прежде чемReverse()
хотя? Поскольку вы используете,String
вам нужно либо полностью квалифицировать его, либо включить использование, однако, это можно легко исправить, изменив его тожеstring
.if
Может быть короче как трехкомпонентной какs+=l>1?if code:"";
. Вы можете удалитьi++
из цикла и разместить его наd[i++]
.i
сl
лайкомint l=s.Length-1,i=1;
. И я думаю, что это может быть!Сетчатка , 106 байт
Попробуйте онлайн! Объяснение:
Если есть хотя бы два символа, продублируйте ввод.
Переверните дубликат.
Превратите струны в треугольники. Верхний треугольник начинается с ввода и удаляет первый символ каждый раз, тогда как нижний треугольник начинается с первой буквы обратного ввода и добавляет символ каждый раз.
Соедините треугольники вместе, перекрывая друг друга так, что последний символ образует
/
диагональ.Измените все символы на пробелы, если они находятся на расстоянии не менее одного символа от конца на каждой стороне.
Удалите все оставшиеся пустые строки.
источник
Python 3, 85 байт
Используя вход для верхнего ряда :)
источник
Lua , 104 байта
Попробуйте онлайн!
источник
p
один раз ...Python 3, 106 байт
Функциональная версия ...
источник
Python 2 , 100 байт
Попробуйте онлайн!
источник
Mathematica,
13891 байтВы можете попробовать это онлайн, вставив следующее в Wolfram Cloud Sandbox и нажав «оценить ячейку» или нажав Shift + Enter или Numpad Enter:
источник