Squiggly Sequence

29

Все благодарности Аднану за то, что он решил эту задачу.

Мой последний вызов, прежде чем я пойду на перерыв .

задача

Если задано положительное целое число n, если nоно нечетное, повторите /это много раз; если nдаже, повторите \это много раз.

(Серьезно, тестовые примеры будут намного понятнее, чем это описание, так что просто посмотрите на тестовые случаи.)

Спекуляции

Testcases

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
Дрянная Монахиня
источник

Ответы:

17

Javascript, 22 байта

n=>"\\/"[n%2].repeat(n)

Определяет анонимную функцию.

Если бы только *повторяющиеся строки в Javascript. вздохи

DanTheMan
источник
1
Наконец-то вы нашли нужного оператора
Leaky Nun
@ LeakyNun О чем ты говоришь?
DanTheMan
Вы использовали троичный оператор, чтобы выбрать символ, нет?
Утренняя монахиня
@LeakyNun Изначально да, но если вы посмотрите на чат, я также опубликовал это примерно через минуту.
DanTheMan
2
@Jordumus Вы можете либо присвоить функцию переменной: f=n=>...вы можете сразу назвать его: (n=>...)(5). (Или, если вы используете REPL Node.js, вы можете использовать this._, что означает последнюю
введенную
16

Python, 20 байт

lambda n:'\/'[n%2]*n
XNOR
источник
Великолепно, просто и элегантно ^ _ ^
ABcDexter
9

Perl, 20 байт

Включает +1 для -p

Запустить с вводом на STDIN:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/
Тон Хоспел
источник
Это может быть просто моя версия Perl (я все еще на 5.10), но это выдает ошибку, если я не добавлю лишнюю; к концу. Я думаю, это потому, что вы используете
точку с запятой
@theLambGoat Вы уверены, что используете эту -pопцию? Я использую ;в транслитерации именно потому -p, что ;в конце кода есть неявное значение, поэтому я могу сохранить еще 1 байт. Это работало, по крайней мере, с Perl 5.6 (вероятно, до тех пор, пока -pопция существовала)
Тон Хоспел
@theLambGoat Мм, я нашел старый redhat с Perl 5.10, где он действительно не работает. Либо это патч redhat, либо он действительно не работал около 5.10 (я уверен, что он работал в более старых версиях Perl, а также в более новых версиях)
Ton Hospel
Я работаю на SUSE Enterprise Server 11, так что это не просто редкая вещь. Но я думаю, что пока он работает в некоторых версиях, он все равно должен быть верным ответом. (Я также только что проверил в 5.08, единственная другая версия, к которой у меня есть доступ в данный момент, и она там тоже не работает)
theLambGoat
1
Этот трюк с ;добавленным -pдовольно круто, хорошо сделано.
Дада
7

C #, 42 байта

string f(int n)=>new string("\\/"[n%2],n);

Выбирает правильный символ, затем создает новую строку, состоящую из повторений этого символа n.

Scepheo
источник
7

PHP, 38 байт

for(;$i++<$a=$argv[1];)echo'\/'[$a%2];

(вариант 38 байт)

while($i++<$a=$argv[1])echo'\/'[$a%2];

(вариант 38 байт)

<?=str_pad('',$a=$argv[1],'\/'[$a%2]);

(вариант 40 байт)

<?=str_repeat('\/'[($a=$argv[1])%2],$a);
крипто-
источник
6

Желе , 5 байт

ị⁾/\x

Попробуйте онлайн! или Проверьте все тестовые случаи.

ị⁾/\x

ị⁾/\    modular-indexing into the string "/\"
    x   repeat
Дрянная Монахиня
источник
Хотя я подозреваю, что этот вызов может иметь какое-то отношение к существующему, стоит отметить, что Ø^он на байт короче ⁾/\ .
Несвязанная строка
6

J, 10 байт

#'\/'{~2|]

Это шестиступенчатый глагол, состоящий из:

# ('\/' {~ 2 | ])

Это крюк между #и ('\/' {~ 2 | ]); ловушка (f g) yрасширяется до y f (g y), поэтому расширяется до y # (... y), что для одиночных символов дает список yсимволов.

Вторая часть представляет собой 5-состав, состоящий из:

'\/' {~ 2 | ]

Это оценивает две вилки:

'\/' {~ (2 | ])

Внутренняя вилка 2 | ], является модулем два. Внешняя вилка, следовательно, это:

'\/' {~ mod2

Который берет ( {~) индекс mod2 ( mod2) из строки /.

Затем с помощью крючка сверху:

y # (apt char)

Это дает то, что мы хотим, и мы сделали.

Конор О'Брайен
источник
6

Haskell, 25 байт

f n=cycle"\\/"!!n<$[1..n]

-1 байт благодаря Дэмиену с cycle.

XNOR
источник
1
f n=cycle"\\/"!!n<$[1..n]
Дэмиен
@ Дэмиен Ух ты, как я забыл цикл.
xnor
Я не знаю. Но я рад, что имел возможность «одолеть» тебя однажды :)
Дэмиен
6

Mathematica, 34 32 28 байт

If[OddQ@#,"/","\\"]~Table~#&

Анонимная функция. Принимает целое число в качестве входных данных и возвращает список символов в качестве выходных данных.

LegionMammal978
источник
Вы можете использовать ~Table~#.
Мартин Эндер
Я думаю, что это было добавлено в 10.2.
Мартин Эндер
Кроме того, я думаю, что вы можете отказаться от <>""и вернуть список символов.
Мартин Эндер
1
@MartinEnder Должно быть, они также добавили ~Do~Infinityи такие в 10.2+ ...
LegionMammal978
5

Powershell, 30 27 байтов

Обновить:

param($n)('\','/')[$n%2]*$n

Переключение на param, благодаря Тиммиду .


"$("\/"[$args[0]%2])"*$args[0]

или чуть более читабельный

("\","/")[$args[0]%2]*$args[0]

Тест:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\
krontogiannis
источник
3
Добро пожаловать в PPCG! Приятно видеть другого пользователя PowerShell здесь. Вы можете сбрить несколько байтов, взяв param($n)вместо них ввод, как $argsparam($n)('\','/')[$n%2]*$n
показано
5

Mathematica, 29 байт

"\\"["/"][[#~Mod~2]]~Table~#&

Жестоко использует тот факт, что [[1]]возвращает первый аргумент функции, в то время как [[0]]возвращает саму функцию (голову), примененную к странно допустимой функции с именем, по "\\"которой "выполняется оценка" "/".

Грег Мартин
источник
Это немного менее странно, если учесть, что что-то в форме a[b]- это просто обобщенное выражение с заголовком a(индексом 0) и элементом b(индексом 1), а функции - это просто особые выражения (на самом деле, было бы правильнее сказать, что функции не t выражений вообще, но это просто правила для преобразования выражений, которые обычно имеют форму f[x...]). :)
Мартин Эндер
2
Я видел много языков, злоупотребляющих на этом сайте, но я думаю, что это первое злоупотребление Mathematica, которое я видел. Отличная работа!
DanTheMan
4

CJam , 9 байт

ri_"\/"=*

Попробуйте онлайн!

объяснение

ri     e# Read input and convert to integer N.
_      e# Duplicate N.
"\/"=  e# Use N as cyclic index into "\/", giving '\ for even and '/ for odd inputs.
*      e# Repeat N times.
Мартин Эндер
источник
4

> <> (Рыба), 30 байт

:2%?'/'o1-:?!;30.
30.  >'\'50p

В первый раз, используя этот язык, но я думаю, что я по крайней мере сэкономил немного места, условно используя / как часть вывода или зеркало для перенаправления потока. Вероятно, все еще ужасно неэффективный, хотя, я чувствую, что это могло бы быть сокращено немного больше по крайней мере.

Вход - это начальный стек, выход - stdout

Попробуйте онлайн!

Каллум Керр
источник
Добро пожаловать в Программирование Пазлов и Код Гольф!
Деннис
@ Деннис Спасибо! Я ценю приветствие.
Каллум Керр
4

Дьялог АПЛ , 11 байт

Требуется ⎕IO←0по умолчанию во многих системах.

⊢⍴'\/'⊃⍨2|⊢

Аргумент

изменяет (повторяет)

'\/'⊃⍨ строка "/" выбрана

2|⊢ остаток от деления, когда аргумент делится на два

Попробуй APL онлайн!

Адам
источник
Круто! Очень похоже на J.
Конор О'Брайен
@ ConorO'Brien Да, единственное отличие состоит в том, что 2 поезда в J - это крюки, в то время как в Dyalog они находятся на вершине, поэтому необходим явный левый зубец.
Адам
Ах, мне было интересно, почему аргумент был там.
Конор О'Брайен
1
Наконец ответ APL со всеми символами, представленными правильно для меня!
Cyoce
@Cyoce Да, хотелось бы, чтобы мы указали (и вставили) шрифты в SE.
адам
3

Java 7, 68 65 байт

void c(int i){for(int x=0;x++<i;)System.out.print(i%2<1?92:'/');}

3 байта сохранены благодаря @ user902383 и @SeanBean .

Как и в случае с этим ответом , кажется, что самый короткий код-гольф зацикливается и печатается. Оба рекурсивны и
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
кажутся длиннее.

Ungolfed & тестовый код:

Попробуй это здесь.

class M{
  static void c(int i){
    for(int x = 0; x++ < i;){
      System.out.print(i % 2 < 1
                        ? 92
                        : '/');
    }
  }

  public static void main(String[] a){
    for(int i = 0; i < 10; i++){
      c(i);
      System.out.println();
    }
  }
}

Выход:

/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
Кевин Круйссен
источник
Привет Кевин. Почему не лямбда-выражение?
Вейл
@ Вейл Привет Вейл. Потому что я старомодный программист на Java 7. :) Если у вас есть ответ Java 8 или 9, который немного отличается от моего ответа, не стесняйтесь опубликовать его.
Кевин Круйссен
2
@ Вейл (он такой странный: P)
Шон Уайлд
1
я думаю , что если вы измените x=-1;++x<iк x=0;x++<iвам может уменьшить на один байт
user902383
1
Также вы можете заменить "\\" : "/"на 92:'/';)
Shaun Wild
3

R, 47 46 байт

n=scan();cat(rep(c("\\","/")[n%%2+1],n),sep="")

В R вы должны избежать обратной косой черты. аргумент sepтакже должен быть полностью указан, так как он идет после... . Таким образом досадно мало возможностей для сохранения символов :(

Благодаря баунсиболу для игры в гольф байт.

JDL
источник
1
Сохраните один байт с помощью индексации:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
bouncyball
3

T-SQL 50 байтов

Конечно, нет STDINздесь, поэтому давайте предположим, что жестко закодированная INTпеременная DECLARE @ INTвыглядит так: тогда решение:

PRINT IIF(@%2=0,REPLICATE('\',@),REPLICATE('/',@))
S.Karras
источник
3

Пип , 8 байт

"\/"@aXa

Непосредственная. Использует модульное индексирование, чтобы выбрать символ и повторение строки, чтобы умножить его. Попробуйте онлайн!


Этот вопрос представляет интересное сравнение между Пипом, Питом и Желе , последние два из которых набрали по 5 байт. Все три языка имеют неявный вывод, с одно-символьными операторами для модульной индексации и повторения строк, и нет необходимости избегать обратной косой черты в строках. Однако есть два ключевых различия:

  1. При определенных обстоятельствах Питу и Желе нужен только один разделитель для определения строки;
  2. У Pyth и Jelly синтаксис такой, что входные данные не нужно явно представлять в коде (хотя по совсем другим причинам, как объяснил мне Малтисен ).

Ни одна из этих функций, скорее всего, не появится в Пипе 1 (мне не нравится эстетика несбалансированных разделителей, а бессмысленный синтаксис или неявные операнды кажутся слишком чуждыми моему анализатору выражений инфиксных выражений), но я ' Я в порядке, играя в третью скрипку. Несмотря на то, что «удобочитаемость» чрезвычайно относительна при игре в гольф, я бы сказал, что эти три дополнительных байта делают программу Пипа намного проще для понимания с первого взгляда - и в моей книге это достойный компромисс.

1 Несмотря на то, что односимвольные строки в Pip используют один 'разделитель, вдохновленный CJam и цитированием в Lisp.

DLosc
источник
Я не уверен, что читаемость является плюсом, в коде гольф? Не за счет байтов !
GreenAsJade
@GreenAsJade Я ожидаю, что многие люди чувствуют то же самое. Я бы просто сделал одно различие code golf:! = golflang design. Теперь вы можете утверждать, что тот же принцип (чем короче, тем лучше) применим и к языковому дизайну. Я просто говорю, что для меня удобство использования и даже эстетика - это соображения.
DLosc
Профессиональный совет по созданию языка игры в гольф: не используйте инфикс
Cyoce
Pyth не имеет неявного синтаксиса без точек. он работает почти так же, как в python, делая его читаемым, но коротким. с другой стороны, ваш комментарий о несбалансированных разделителях вполне правдив
Maltysen
2

Pyth , 5 байт

*@"\/

Тестирование.

Модульная индексация в строку \/и затем повторение.

Дрянная Монахиня
источник
14
Вы FGITW'а свой собственный вызов?
xnor
1
@xnor это не совсем мой вызов.
Утренняя монахиня
2

Perl 6 , 16 байт

{<\ />[$_%2]x$_}

Использование:

for 1..6 {
  say $_, {<\ />[$_%2]x$_}( $_ )
}
1/
2\\
3///
4\\\\
5/////
6\\\\\\
Брэд Гилберт b2gills
источник
2

SpecBAS - 28 байт

1 INPUT n: ?"\/"(ODD(n)+1)*n

ODDвозвращает 1, если число нечетное, а затем использует его в качестве индекса для печати правильного символа n раз. Необходимо добавить 1, так как строки SpecBAS начинаются с символа 1.

Брайан
источник
2

Java 8, 56 байт

(i,j)->{for(j=i;j-->0;)System.out.print(i%2<1?92:'/');};

Я хотел бы поблагодарить @Kevin Cruijssen за продвижение моего ответа в дальнейшем.

Тестовая программа Ungolfed

public static void main(String[] args) {
    BiConsumer<Integer, Integer> consumer = (i, j) -> {
        for (j = i; j-- > 0;) {
            System.out.print(i % 2 < 1 ? 92 : '/');
        }
    };

    consumer.accept(5, 0);
    consumer.accept(1, 0);
    consumer.accept(8, 0);
}
Шон Уайлд
источник
2

На самом деле, 10 байт

Предложения по игре в гольф приветствуются. Попробуйте онлайн!

;'\'/2(%I*

Как это работает

       Implicit input of n
;      Duplicate n
'\'/   The strings "/" and "\"
2(%    n mod 2
I      If n mod 2, then "/", else "\"
*      Multiply by n. Implicit print at the end.
Sherlock9
источник