Ваша задача - взять строку ввода символов ascii и вывести строку в виде серии вертикальных слов, разделенных пробелами. Пример показан ниже:
Учитывая строку:
Hello, World! My name is Foo.
вывод должен быть:
H W M n i F
e o y a s o
l r m o
l l e .
o d
, !
10 бонусных баллов будут начислены, если ваша программа правильно обрабатывает строки, которые необходимо обернуть вокруг терминала, которые мы установим в 80 символов.
50 баллов, если ваша программа также может сделать обратное!
code-golf
string
printable-ascii
Фу Барриньо
источник
источник
Ответы:
J, 15
Использование:
источник
Javascript -
228172145126Мой первый код гольф :)
источник
"Input ?"
не влияет на поведение программы, удалите его тоже.length
вместо того, чтобы спрашивать их дважды, несколько бессмысленных скобок, несколько ненужных точек с запятой.A=prompt().split(" "),B="";for(y=0;y<(l=A.length);y++){for(i=0;i<l;i++)if(A[i][y])B+=A[i][y];else B+="_";B+="\n"}alert(B)
, (В мета-вопросе « Стандарты JavaScript для ввода-вывода» наиболее распространенное мнение заключалось в том, что полагаться на неявный вывод REPL не следует считать правильным.)if(A[i][y]){B+=A[i][y];}else{B+=" ";}
=>B+=(x=A[i][y])?x:" "
APL, 22
объяснение
пример
источник
Руби,
9187Ура, я победил Perl! : D
Рубин, бонус 150 - 50 = 100
Он просто обнаруживает новые строки и применяет специальную обработку, если они обнаружены.
Запустите это как
источник
Javascript
184149123С определенной строкой примера:
Вы можете скопировать второе утверждение в консоль браузера.
Unminified:
Ссылка JsFiddle: http://jsfiddle.net/FzMvK/
Мой первый пост в гольф-коде: P
источник
float:right
на реверс?Perl - 92
97Делает работу довольно простым способом.
источник
while
здесь также используется модификатор оператора.do{}while()
петля?do
Сама по себе ничего другого, только блок. Этоwhile
отдельная вещь.К, 33
Пример ввода и вывода:
источник
"
быть там?{-1@" "/:',:''x@'/:!max@#:'x:" "\:x;}
(37 символов), что даст вывод без"
Python:
Одна строка кода для обработки укуса:
источник
Python 2.7,
108103Я уверен, что это может быть больше в гольфе, но вот первоначальное решение в Python.
Улучшения:
источник
i=m
и зацикливаетесь на 0, вы можете побрить еще 3 символа для четных 100.F #, 187
источник
Руби, 63
Алгоритм очень прост; только в гольф. Длина кода составляет 61 байт, плюс 2 байта для
-na
опций, которые ему нужны для работы. Отruby -h
:Образец прогона:
источник
Python 2,7 -
137112 байтКто-то уже сделал это лучше, но я мог бы также бросить это. Добавляет пробелы к каждому слову во входных данных до тех пор, пока его длина не станет самой длинной (чтобы избежать ошибок индексации для следующей части), а затем печатаетc
th-ую букву каждого слова, в то время какc
изменяется от 0 до длины каждой строки.Я придумал гораздо лучший способ сделать это и вырезал 25 байтов. Вместо того, чтобы заполнять строки пробелами, чтобы избежать ошибки индекса, я обрабатываю ошибку напрямую! Всякий раз , когда нет ничего , чтобы напечатать, напечатать единое пространство на своем месте с
try:print w[c],
,except:print' ',
. Я также вспомнил, что мне не нужен пробел между оператором печати и строковым литералом, который сохранил один байт.Обратите внимание, что Python 2 позволяет смешивать табуляции и пробелы и рассматривает их как отдельные уровни отступа. Интерпретатор Markdown в SE заменяет символ табуляции четырьмя пробелами, но каждая строка этой программы, кроме первой, имеет ровно один байт отступа.
Форматирование было довольно простым, поскольку
print 'something',
печатает,'something '
а не'something\n'
. Я делал это для каждого персонажа и использовал пустойprint
оператор, чтобы получить новую строку там, где мне это было нужно.источник
C
1111109590 байтЭто решение использует коды управления VT-100 для перемещения курсора на терминал.
^[
последовательность является заполнителем для одного ASCII ESC характера, которые не могут быть отображены здесь.^[7
сохраняет текущую позицию указателя^[8
восстанавливает позицию курсора в сохраненную позицию^[[2C
движется на 2 шага вправо^[[B
движется на 1 шаг внизредактировать 1:
^[[D
(1 шаг влево) VT-100 код был заменен на забой (показано^H
здесь, но это только один ASCII символов); также забыл инструкцию "разделены пробелами", теперь исправленоредактировать 2:
7 символов сохраняются с помощью
for
цикла вместоwhile
, а32
не' '
:Еще 8 символов сохраняются путем вызова на один меньше
printf
:?:
теперь вprintf
параметрах используется троичный операторредактировать 3:
Избавился от локальной переменной
s
, работающей напрямую сargv
акаv
. Это совершенно отвратительно. Но сохранил 4 символа. Также заменены==
с^
и поэтому переключил?:
операнды, чтобы сохранить больше 1 символ.использование
Версия без гольфа (первая версия)
Версия без гольфа (последняя версия)
источник
Я ответил на этот вопрос очень давно. На самом деле это был один из моих первых вкладов на сайт. Я недавно столкнулся с этим снова и был отчасти смущен. 112 байт ?! Неприемлемый. Поэтому я сделал еще один снимок:
Python 3 - 92 байта
За 109 дней, прошедших с того момента, как я опубликовал первый ответ, мне нравится думать, что я прошел долгий путь. Даже что-то вроде использования Python 3 над 2.7 1 мне бы не пришло в голову. Когда этот код заполнен до 100 байтов, моя душа наконец-то может отдохнуть, и я могу перейти к загробной жизни.
объяснение
Он получает строку
stdin
и создает список, разбивая его на пробельные символы. Единственным пробелом, который может быть во входных данных, являются пробелы, поэтому эта строка получает список слов.Давайте возьмем вторую строку изнутри:
map
принимает функцию и итерацию в качестве аргументов. Он применяет функцию к каждому элементу итерируемого и возвращает новый итерируемый результат. Здесь я создаю итерацию с длинами каждого входного слова.max
получает максимальное значение от повторяемого. Это дает нам самое длинное слово на входе.Понимание списка похоже на
map
. Он что-то делает с каждым элементом итерируемого и возвращает список результатов. Для каждого слова на входе я делаюthat_word.ljust(
код)
.ljust
является сокращением от «левого выравнивания». Он принимает целое число в качестве аргумента и добавляет пробелы в строку, пока она не станет такой длинной.Это изящный трюк. В этом контексте
*
означает «распаковать эту итерацию как несколько аргументов». Таким образом,zip
можно использовать для транспонирования матрицы (например,zip(*[(1,2),(3,4)])
->[(1,3),(2,4)]
). Единственное ограничение заключается в том, что все строки в матрице должны быть одинаковой длины, или элементы из всех строк, но самые короткие, обрезаются для соответствия.Мы уже знаем, что
map
делает. Здесь есть толькоjoin
одна новая вещь , которая берет итеративную строку и делает ее единственной строкой, используя разделитель, к которому она присоединена. Например,'a'.join(['I', 'can', 'play', 'the', 'saxophone'])
2 становитсяIacanaplayatheasaxophone
.Это
join
берет кучу строк и разделяет их переводом строки. Все, что осталось,print
чтобыstdout
и мы сделали!Все вместе сейчас:
Найти длину самого длинного слова из входных данных, добавить пробелы к каждому слову, пока они не станут одинаковой длины, транспонировать с помощью трюка
zip(*
3 , использоватьjoin
для разделения каждого символа в строке с пробелами,join
снова для разделения каждой строки с новой строкой, и распечатать! Неплохо для единственной строки без обработки ввода в 92-байтовой программе.1. Дополнительные символы, потраченные на
print()
круглые скобки, перевешиваются четырьмя символами, которые я опускаюraw_input()
->input()
.2. Я не могу играть на саксофоне.
3
)
.. Пожалуйста.источник
print("\n".join(...))
на*map(print,...),
. Попробуйте онлайн!05AB1E , оценка
8-20-21 (3029 байт - 50 бонусов):Попробуйте онлайн (обычный однострочный ввод).
Попробуйте онлайн (многострочный обратный ввод).
Объяснение:
Оригинальный 8-байтовый ответ:
Попробуйте онлайн.
Объяснение:
источник
Mathematica 49
Очевидно, что Mathematica не лучший для этого:
источник
Javascript, 141
Образец
источник
GolfScript [41 байт]
Как это устроено:
Вы можете увидеть онлайн демо здесь .
PS: Это мой первый код на GolfScript, так что не судите меня строго;)
источник
R 116
источник
Баш + coreutils, 54
Выход:
источник
$()
конструкции теперь является распространенным методом подстановки команд.APL: 18
Объяснение:
← '', поставьте пробел перед строкой и присвойте
'' = найти пробелы, выдает логическое значение
1 ↓ ¨a⊂⍨ создает подстроки, начинающиеся там, где логическое значение имеет 1, и отбрасывает первый элемент каждого (поэтому пробел)
↑ ↑ Сделать матрицу из результирующих подстрок и повернуть ее по диагонали
источник
R , 81 байт
Сохраните байт, сохранив символ новой строки как
e
, который можно использовать как вscan
вызовах, так и в вызове сравненияcat
.Попробуйте онлайн!
источник
K (ок) , 26 байтов
Решение:
Попробуйте онлайн!
Объяснение:
источник
Python 2.7 -
119106Возьмите 1 - 166. Перестановка списков была необходима, чтобы заставить поп работать в нужном мне порядке, но это казалось расточительным. И когда я пытался объединить в едином понимании для развлечения, поп все испортил.
Возьмите 2 - 119. Поэтому я перешел на простую индексацию списка. Все еще кажется неуклюжим, хотя, особенно отступы пробелов и новых линий.
Возьми 3 - благодаря @grc
источник
[len(l)for l in w]
можно сократить доmap(len,w)
,.split(' ')
до.split()
и.join([...])
до.join(...)
.v.pop(0)
для выталкивания первый элемент вместо последний?Питон 3, 124
источник
Хаскелл, 112
Golfed:
Разъяснение:
Пример:
источник
JavaScript, 139 (156 с выводом console.log)
Я думаю, что это игра в гольф, насколько я могу получить. Я просто делю, нахожу самое большое слово и переставляю соответственно, добавляя пробелы, если в более коротких словах нет символа. Больше, чем предыдущий ответ JavaScript, но этот ответ не работает?
источник
Japt
-R
, 5 байтПопытайся
объяснение
источник
Pyth, 8 байт
Попробуйте онлайн!
Довольно просто. Принимает ввод, заключенный в кавычки, т.е.
"Hello World"
источник
C
усекает до длины самой короткой записи, так что это не работает . Вот быстрое исправление, которое также составляет 8 байтов.APL (NARS), 79 символов, 158 байтов
тестовое задание:
У старой функции вывод не идеален:
источник