Алфавитный дождь
Задание:
Основная предпосылка состоит в том, чтобы распечатать входную строку и затем повторить каждый символ по вертикали, основываясь на его (0-индексированной) позиции в алфавите (без учета регистра) A-Z
. A
находится в позиции 0, поэтому не повторяется, e
находится в позиции 4, поэтому повторяется 4 раза, P
находится в позиции 15, повторяется 15 раз, !
не A-Z
выполняется, повторяется 0 раз и т. д.
Для ясности, все, что выходит за пределы диапазона B-Zb-z
, например цифры или специальные символы, повторяться не будет и, следовательно, будет отображаться только в первой строке.
Это код-гольф , поэтому самое короткое решение на каждом языке - победитель.
Входные данные:
- Ввод будет в стандартном наборе печатных символов ASCII, от 32
~
. - Входная строка будет длиной 1 символ или более.
- Не будет никаких начальных или конечных пробелов.
- Вы можете принять входные данные в виде строки (
"hello"
) или список символов (["h", "e", "l", "l", "o"]
)
Примеры:
Ввод aaaa
дает:
aaaa
Ввод abcda
дает:
abcda
bcd
cd
d
Ввод Programming Puzzles & Code Golf!
, дает:
Programming Puzzles & Code Golf!
Progr mming Puzzles Code Golf
Progr mming Puzzles Code Golf
Progr mming Puzzles ode Golf
Progr mming Puzzles o e Golf
Progr mming Puzzl s o Golf
Progr mming Puzzl s o Gol
Pro r mmin Puzzl s o ol
Pro r mmin Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzz s o o
Pro r n Puzz s o o
Pro r Puzz s o o
Pr r Puzz s
r r uzz s
r r uzz s
uzz s
uzz
uzz
zz
zz
zz
zz
zz
Ввод ~|[abc<0>cba]|~
, дает:
~|[abc<0>cba]|~
bc cb
c c
Примечания:
- применяются стандартные лазейки
- Вывод может быть списком строк, но:
- посторонние завершающие символы новой строки не допускаются (допускается одиночное
\n
на последней строке) - Вывод может быть списком символов, если он выглядит так, как будто идет дождь.
- нет новой строки
- нашим скандинавским пользователям, у которых есть несколько дополнительных букв в алфавите "AZ", не стесняйтесь их поддерживать, но это не является частью проблемы
\n
приемлемым?Ответы:
6502 машинный код (C64), 113 байт
Онлайн демо
Использование:
sys49152,"[string]"
, напримерsys49152,"Programming Puzzles & Code Golf!"
.Важно: если программа была загружена с диска (как в онлайн-демонстрации),
new
сначала введите команду! Это необходимо, потому что при загрузке машинной программы перегружаются некоторые основные указатели C64.Примечание: C64 по умолчанию находится в режиме без строчных букв - чтобы иметь возможность вводить строку в смешанном регистре, сначала переключитесь в режим строчных букв, нажав
SHIFT
+CBM
.объяснение
Вот прокомментированный список разборки:
источник
05AB1E ,
1312 байтПопробуйте онлайн!
объяснение
источник
Ask
для этогоPyth,
12109 байтТестирование.
Объяснение:
12 байтов:
(с завершающим переводом строки)
Тестирование.
Объяснение:
источник
j
Python 3 , 83 байта
Попробуйте онлайн! Принимает список персонажей. Возвращает список списков персонажей.
Python 2 , 90 байт
Попробуйте онлайн! Берет строку Возвращает строку.
источник
Mathematica,
11589 байтОн принимает в
input
качестве списка символов[{"a", "b", "c", "d", "a"}]
и выводит список списков символовПопробуйте онлайн!
-26 байтов от Миши Лаврова
-5 байт от пользователя 202729
но если вы хотите, чтобы результат был таким, как в тестовом примере, попробуйте этот (128 байт) код
Попробуйте онлайн!
источник
∞
(3 байта) ->\[Infinity]
(11 байтов)).\[Infinity]
(11 байт) можно заменить наInfinity
(8 байт) или\:221e
(6 байт). Последний является представлением по умолчанию специальных символов без имен. (хотя это не основная часть)Infinity
полностью избежать . Проблемная часть,If[(d=Min@Position[Alphabet[],If[UpperCaseQ@#,ToLowerCase@#,#]])==∞,1,d]
и мы можем изменить этоMax@Position[Alphabet[]/."a"->#,#|ToLowerCase@#]
. (Выполняя поиск в списке{#,b,c,d,...,y,z}
, мы гарантированно найдем#
хотя бы один раз.)Дьялог АПЛ ,
2722 байта5 байтов сохранено благодаря @ Adám
Попробуйте онлайн!
Как?
⍴¨⍨
- сформировать каждый символ в длину1⌈
- хотя бы один или⎕A⍳819⌶⍨∘1
- индекс символа в верхнем регистре в алфавите27|
- по модулю 27↑
- сплющить к матрице⍉
- и транспонироватьисточник
⍉∘↑⊢⍴¨⍨1⌈27|⎕A⍳819⌶⍨∘1
Древесный уголь , 12 байт
Попробуйте онлайн!
-3 спасибо Нейлу .
источник
Python,
105103 байта2 байта сохранены благодаря @TFeld
Попробуйте онлайн!
источник
Python 2 ,
1111069998978793 байтаПопробуйте онлайн!
источник
while
может быть заменен на,exec
чтобы сохранить несколько байтов,i
может начинаться с 65, чтобы сохранить больше, чтобы достигнуть 87 байтовz
илиZ
.exec
изменения ...C # (.NET Core) , 162 байта
Попробуйте онлайн!
источник
using System.Linq;
сожалению, обязательный импорт необходимо добавить к счетчику байтов (или вы должны перейтиMax
наSystem.Linq.Max
иSelect
кSystem.Linq.Max
, что будет больше, чем простоusing System.Linq;
один раз). Снова добро пожаловать, и приятного пребывания. О, и я вижу @IanH. уже упоминалось Советы по игре в гольф на C #. Советы по игре в гольф на <все языки> также могут быть интересными для чтения.Баш,
78,7671 байтВ зависимости от параметров сортировки (по умолчанию LC_ALL) можно сохранить еще несколько байтов
Попробуйте онлайн
источник
Perl 5 , 43 байта
Код 41 байт + 2 для
-nl
.Попробуйте онлайн!
источник
s/["-$c]/ /gi
и-l
не нуженJavaScript (ES6),
877876 байт-9 байт благодаря @RickHitchcock .
-2 байта благодаря @Neil .
Принимает ввод в виде строки и возвращается с одним завершающим символом новой строки.
Тестовые случаи
Показать фрагмент кода
источник
f=(s,i=10)=>s.trim()&&s+'newline'+f(s.replace(/./g,c=>parseInt(c,36)-i?c:" "),i+1)
s
действительно хороша.parseInt(c,36)-i>0
parseInt(c,36)>i
вместо этого, чтобы сохранить 2 байта?R
118114 байтовСпасибо @Giuseppe за эти 4 байта
Попробуйте онлайн!
Краткое объяснение:
источник
a
все пробелы, это ничего не распечатает ... но ты можешь изменитьwhile
условие, наgrepl()|!F
которое все равно будет байт короче, чем твой исходный ответ.R ,
125123 байтОбойден планнапусом
Попробуйте онлайн!
Печатает на стандартный вывод с одним завершающим символом новой строки и читает из
stdin()
.Давайте разберемся с этим:
Альтернативный ответ, 106 байт
Попробуйте онлайн!
Функция; печатает в stdout, но в основном мой ответ выше портирован, чтобы принять список символов, а не разбивать строку, поэтому я чувствую, что это "обман". Кроме того, подход plannapus с регулярным выражением довольно аккуратный!
источник
Октава / MATLAB,
7466 байтПопробуйте онлайн!
источник
Japt ,
15141110 байтПервый шанс поиграть с новыми методами заполнения строк в Japt, так что может быть место для улучшений.
Попробуй
объяснение
Неявный ввод строки
U
.Пропустите каждый столбец
U
через функцию, гдеZ
находится текущий элемент (или в данном случае буква).Преобразуйте
Z
вu
uppercase ( ), получите его charcode (c
) и subtract (u
) 64 (I
).Начните
Z
с себя, пока не достигнете этой длины.альтернатива
Попробуй
источник
ùZ
чтобыp
спасти б ... неp
(их может быть 1 в истории редактирования), ноù
в итоге победил.Haskell ,
137136127119 байтПопробуйте онлайн!
Довольно долго, но я не могу придумать, как еще сократить его.
Я чувствую, что должен быть какой-то путь короче, чем синтаксис if-then, но я этого не вижу.РЕДАКТИРОВАТЬ: Спасибо @streetster за помощь мне сбрить один байт!
toUpper
Сначала я не использовал из-за стоимости импорта,Data.Char
но я забыл, что он также обеспечивает,ord
что намного короче, чемfromEnum
РЕДАКТИРОВАТЬ 2: Спасибо @Laikoni за сокращение 6 байт и выявление ошибки, которую я сейчас исправил. Я использовал 26 вместо 25, потому что я забыл, что массивы на Haskell включены. Тогда я заметил, что могу использовать
last
вместо того,head
что позволит мне использовать,0:
а не++[0]
.РЕДАКТИРОВАТЬ 3: Еще раз спасибо Лайкони за эти 8 байтов. Я действительно забыл об этом месте. По какой-то причине Sublime Text вылетает без него, и я забыл удалить его. Я не знал, что списки строк были разрешены, я должен был прочитать правила более внимательно.
источник
if i>p c then ' ' else c
можно сократить доlast$c:[' '|i>p c]
.[k |
и возврат списка строк разрешен, так что вам не нужноunlines
. Наконец, вас может заинтересовать наш чат на Haskell .Excel VBA, 110 байт
Anonymous VBE Immediate Window Функция, которая берет входной тип как ожидаемый
Variant\String
из диапазона[A1]
и использует его, чтобы заставить алфавит отображаться в непосредственном окне VBE.Образец ввода / вывода
источник
?A1:...
[]
указывает, что содержащаяся строка должна быть оценена как объект в / on / как рабочая книга,[A1]
вызов не может быть уменьшен доA1
- так как это не будет принимать и печатать начальный ввод из диапазона[A1]
; скорее это просто оставит пустую строку и все последующие строки будут напечатаныPHP,
69 78 7785 + 1 байттребует PHP <7. Запустите как трубу с
-nR
или попробуйте онлайн .источник
$c=A;!$c[1];$c++
. Хороший! К сожалениюextraneous trailing newlines are not allowed (single \n on final line is acceptable)
. Так что это не работает для всех строк, не содержащихz
.Баш + Сед, 37
Попробуйте онлайн .
источник
C (gcc) , 189 байт
Попробуйте онлайн!
источник
puts("");
вместоputchar(10)
Рубин,
706774 байтаБлагодаря @TuukkaX за указание на то, что некоторые символы могут быть отброшены (-3 байта)
К сожалению, мне пришлось добавить 7 байтов, потому что оригинальная версия не смогла обработать "z".
Называя это:
источник
Oracle SQL, 186 байт
Предполагается, что строка будет в таблице
t
в столбцеv
:SQL Fiddle
Настройка схемы Oracle 11g R2 :
Запрос 1 :
Результаты :
источник
Желе , 15 байт
Попробуйте онлайн!
источник
Haskell , 98 байт
Попробуйте онлайн!
Пример использования:
f "[Abc]"
дает список строк:["[Abc]"," bc "," c "]
. использованиеputStr.unlines.f $ "[Abc]"
для довольно печатного вывода:Частично вдохновленТеперь непосредственно на основе ответа пользователя Haskell пользователя 1472751 .Предыдущий подход (
10099 байт)Попробуйте онлайн!
источник
PowerShell ,
122127 байтПопробуйте онлайн!
Коротко благодаря тому, как PowerShell может динамически приводить между
[char]
и[int]
, но долго из-за удаления лишних пробелов и вычисления того, выводить ли пробел или символ.Исправление ошибок благодаря beatcracker.
источник
~|[abc<0>cba]|~
тестовом случае. Попробуйте это:param($a)$a;(1..25|%{$i=$_;(-join([char[]]$a|%{(' ',$_)[$_-match'[a-z]'-and[math]::Max(0,($_-bor32)-96-$i)]})).TrimEnd()})-ne''
Java 8,
151147144143139 байтОбъяснение:
Попробуй это здесь.
источник
q ,
4237 байт-5 спасибо стритстеру!
старое решение + объяснение:
источник
{(+)max[m]$(m:1+mod[.Q.a?(_)x]26)#'x}
для 37 не могу вспомнить, как я решил это при создании вопроса, вероятно, очень похоже, хотя!_
, я набралlower
в интерпретаторе q и получилk){$[~t&77h>t:abs@@x;.z.s'x;19<t;.z.s@. x;~t in 10 11h;'`type;_x]}
. отсюда и мой ответ в д хахаСОГЛ В0.12 ,
1211 байтовПопробуй здесь!
Объяснение:
источник