Squiggly Sequence


29

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

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

задача

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

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

Спекуляции

Testcases

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\

Ответы:


17

Javascript, 22 байта

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

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

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


1
Наконец-то вы нашли нужного оператора
Leaky Nun

@ LeakyNun О чем ты говоришь?
DanTheMan

Вы использовали троичный оператор, чтобы выбрать символ, нет?
Утренняя монахиня

@LeakyNun Изначально да, но если вы посмотрите на чат, я также опубликовал это примерно через минуту.
DanTheMan

2
@Jordumus Вы можете либо присвоить функцию переменной: f=n=>...вы можете сразу назвать его: (n=>...)(5). (Или, если вы используете REPL Node.js, вы можете использовать this._, что означает последнюю
введенную



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.


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.


1
f n=cycle"\\/"!!n<$[1..n]
Дэмиен

@ Дэмиен Ух ты, как я забыл цикл.
xnor

Я не знаю. Но я рад, что имел возможность «одолеть» тебя однажды :)
Дэмиен

6

Mathematica, 34 32 28 байт

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

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


Вы можете использовать ~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 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\

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

> <> (Рыба), 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также должен быть полностью указан, так как он идет после... . Таким образом досадно мало возможностей для сохранения символов :(

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


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('/',@))

3

Пип , 8 байт

"\/"@aXa

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


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

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

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

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


Я не уверен, что читаемость является плюсом, в коде гольф? Не за счет байтов !
GreenAsJade

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

Профессиональный совет по созданию языка игры в гольф: не используйте инфикс
Cyoce


Pyth не имеет неявного синтаксиса без точек. он работает почти так же, как в python, делая его читаемым, но коротким. с другой стороны, ваш комментарий о несбалансированных разделителях вполне правдив
Maltysen




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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.