Шахматная доска


18

Ввод: положительное число, меньшее 80, из стандартного ввода или в качестве аргумента командной строки.

Выход: квадратная шахматная фигура, размер входного числа. Темные поля представлены буквой «X», белые поля - пробелом. Верхнее левое поле должно быть 'X'.

Полная программа не требуется.


Примеры:

Вход : 1

Выход :

X

Вход : 8

Выход :

X X X X 
 X X X X
X X X X 
 X X X X
X X X X 
 X X X X
X X X X 
 X X X X

1
Я искал тег типа «легкий» для этого.
Steenslag

1
Целая и полная программа, я полагаю?
JB

@JB: Да. Как мне это сформулировать? Добавить 'к stdout' к требуемому выводу?
Steenslag

1
Просто скажи, что хочешь законченную программу. Вы также можете указать аргументы командной строки , чтобы избежать путаницы с аргументами функции.
JB

Когда вы говорите сверху-справа, вы имеете в виду сверху слева? Если нет, исправьте пример выходных данных для ввода 8.
Питер Тейлор

Ответы:


5

Пиф, 13 символов

Примечание: Pyth слишком нов, чтобы иметь право на победу. Тем не менее, это был веселый гольф, и я решил поделиться им.

VQ<*QX*d2N\XQ

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

Как это устроено:

                       Q = eval(input())
VQ                     for N in range(Q):
  <         Q                                                        [:Q]
   *Q                                    (Q*                        )
     X*d2N\X                                assign_at(" "*2, N, "X")

В основном, это используется Xдля генерации "X "или " X"поочередно, затем повторяет это Qвремя строки и принимает его первые Qсимволы. Это повторяется Qраз.

Как работает Xфункция (назначить в)? Он принимает исходную строку, " "в данном случае, место назначения, Nв этом случае, и символ замены, "X"в этом случае. Поскольку присваивания Pyth являются модульными, это заменяет пространство в местоположении N%2на Xи возвращает результирующую строку, которая, следовательно, находится "X "в первой, третьей и т. Д. Строках, а также " X"в других.


... но APL нет. Спасибо, что натолкнулся. Интересно, будет ли OP повторно принимать ...
Adám

«Пиф слишком нов, чтобы иметь право на победу». Я не понимаю этого и не принимаю это снова.
Steenslag

1
@steenslag Чтобы объяснить, есть стандартная лазейка, что языки, более новые, чем вопрос, не подходят. Это сделано для предотвращения использования языков, специально предназначенных для решения конкретных задач. Конечно, вы можете делать то, что хотите, с вашей задачей.
Исаак

11

Golfscript - 17 символов

~:N,{"X "N*>N<n}%

Анализ

~преобразовать ввод в
:Nхранилище int в переменной N
,{...}для каждого значения [0 ... N-1],
"X "N*повторить «X», чтобы получить строку из N * 2 символов,
>взять подстроку, начиная с индекса цикла ...
N<... окончание N символов позже
nпоставить новую строку в конце каждой строки


5

Perl, 41 40

for$i(1..$_){say substr" X"x$_,$i%2,$_}

Perl 5.10 или более поздней версии, запускается с perl -nE 'code'( nсчитается в размере кода)

Образец вывода:

$ perl -nE'for$i(1..$_){say substr" X"x 40,$i%2,$_}' <<<5
X X X
 X X
X X X
 X X
X X X
$ perl -nE'for$i(1..$_){say substr" X"x 40,$i%2,$_}' <<<8
X X X X
 X X X X
X X X X
 X X X X
X X X X
 X X X X
X X X X
 X X X X

Что делает «х» в «х 40» делать?
Steenslag

2
@steenslag: xэто оператор повторения строк. 'a' x 3доходность 'aaa'.
JB



3

Scala - 141 95 символов

var a=args(0).toInt
for(y<-1 to a;x<-1 to a)print((if((x+y)%2<1)"X"else" ")+("\n"*(x/a)take 1))

Использование: scala filename Nгде n - ваш вклад в программу.


3

APL (16)

Если предположить, ⎕IO=0 (то есть массивы с нулевым индексом, это настройка)

' X'[=/¨2⊤¨⍳2⍴⎕]

Объяснение:

  • ⍳2⍴⎕: прочитайте число N и создайте матрицу N × N, содержащую (0,0) - (N-1, N-1).
  • 2⊤¨: получить младший значащий бит каждого числа в матрице. (Так что теперь у нас есть (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: для каждой пары посмотрите, равны ли два числа. (Теперь у нас есть 1 0 1 0 1 0 ...)
  • ' X'[... ]: ставьте пробел для каждого 0 и X для каждого 1.

3

Руби 45 42

(x=gets.to_i).times{|i|puts ("X "*x)[i,x]}

Демо: http://ideone.com/Mw25e


(x=gets.to_i).timesсохраняет три символа. Почему внезапно возобновился интерес к этому старику?
Steenslag

@steenslag Спасибо! Я применил твой совет. Я только что увидел этот вопрос в верхней части списка и решил опубликовать ответ, чтобы отряхнуть свои навыки в Ruby. Видимо, я их не достаточно вычистил. :)
Кристиан Лупаску

2

питон

48 символов

РЕДАКТИРОВАТЬ: Kinda Wrong ... В конце есть дополнительное место ... но это не видно. Если вы измените пробел на «O» (или любой непробельный символ), то измените [i%2:n]на [i%2:n+i%2]. для правильной версии.

n=input()
i=0;
while i<n:print('X '*n)[i%2:n];i+=1

2

C ++ - 253 запутанных персонажа

#include <iostream.h>
int main(int i,char*c[]=0)
{
  char a=i,b=i>>8;i&32512?((i>>16&255)<a)?(cout<<b)?main((i^30720)+65536):0:(cout<<endl)?(((b=(i>>24)+1)<a)?main((i&2130706559)+((b&1)?16785408:16799744)):0):0:main((i>=2?atoi(1[c]):8)|22528);
}

1
Я люблю все магические числа.
Джои Адамс

2

JavaScript, 169

function b(w){var i=w,j=w,r='';while(i--){while(j--){if((i+j)%2)r+=' ';else r+='X'}j=w;r+="\n"}return r}do{n=parseInt(prompt('Number'))}while(isNaN(n)||n<1);alert(b(n));

Я уверен, что вы можете преобразовать в число, как +'1'вместо parseInt('1'). Не даст вам целое число, но я не думаю, что важно, чтобы оно было целым, не так ли?
Какой-то парень

2

к (26 символов)

26 Для голой функции:

{-1',/x#',x#'("X ";" X");}

Или еще 7, чтобы принять вход от стандартного ввода

{-1',/x#',x#'("X ";" X");}"I"$0:0

2

Баш: 60 символов

yes X|fmt -w80|paste -d '' <(yes '
 ') -|head -$1|cut -c1-$1

Размер таблицы передается в качестве параметра командной строки, например bash chesstable.sh 8.


2

Java 10, лямбда-функция, 92 87 84 байта

n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}

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

Благодаря потолку catcat для игры в гольф 4 байта и Кевину Cruijssen для игры в гольф еще 3.

Безголовая версия:

n -> { // void lambda taking an int as argument
    for(int i = 0; i < n*n; ) // loop over the entire square
            System.out.print(((i%n + i/n) % 2 < 1 ? "X" : " ") // print an 'X' or a space depending on which line&column we're on
               + (++i % n < 1 ? "\n" : "")); // print a newline at the end of a line
}

Java 8, полная программа, 155 139 байт

interface M{static void main(String[]a){int i=0,n=new Byte(a[0]);for(;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}}

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

Безголовая версия:

interface M {
    static void main(String[] a) {
        int i = 0, // iterator variable for the loop
            n = new Byte(a[0]); // take the argument and convert it to an int
        for(; i < n*n; ) // loop over the entire square
            System.out.print( ((i%n + i/n) % 2 < 1 ? "X" : " ") // print an 'X' or a space depending on which line&column we're on
                             +(++i % n < 1 ? "\n" : "") ); // print a newline at the end of a line
        }
    }
}

@ceilingcat Спасибо! Мне удалось сбрить еще один байт и применить твой подход ко всей моей программе. 16 байтов сохранено там.
OOBalance

Выполнение двух s+=на 2 байта короче скобок:n->{var s="";for(int i=0;i<n*n;s+=++i%n<1?"\n":"")s+=(i%n+i/n)%2<1?"X":" ";return s;}
Кевин Круйссен,

Или еще один байт от (84 в общей сложности ), печатая непосредственно (с скобкой снова XD): n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Попробуйте онлайн.
Кевин Круйссен

Предложите "X ".charAt(i%n+i/n&1)вместо((i%n+i/n)%2<1?"X":" ")
floorcat


2

APL (Dyalog Extended) , 12 байтов SBCS

Функция анонимного молчаливого префикса. Требуется ⎕IO←0(индексация с нуля).

'X '⊇⍨2|⍳+⍀⍳

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

ɩ ndices 0 ... п-1

+⍀ плюс таблица с этим по горизонтали и вертикали:

ɩ ndices 0 ... п-1

2| остаток деления при делении на два

'X '⊇⍨ использовать эту матрицу для индексации в строке



2

Brainfuck, 140 байт

-[+[+<]>>+]>++++[<++++++++>-]<<<<<<,[->+>+>+<<<]>>[->[->.<[->>.>]<<<]<[<<<]>>>>>[-<+>]>[-<+>]<<[->>+<<]<<[-<+>]<[->+>>+<<<]++++++++++.[-]>>]

2

Javascript, 67 байт

for(j=n=readline()|0;j--;)console.log(' X'.repeat(n).substr(j%2,n))

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

C 83 байта

i,j;main(n){for(scanf("%d",&n);i++<n;puts(""))for(j=0;j<n;)putchar(i+j++&1?88:32);}

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

Базовый C64, 89 байт

1 INPUTN:FORI=1TON;FORJ=1TON:IFI+JAND1THENPRINT" ";:GOTO3
2 PRINT"X";
3 NEXT:PRINT"":NEXT

введите описание изображения здесь


Вы можете использовать on...go toкоманду условно, например, ON-(I+JAND1)GOTO3:?"X";:там , где она равна нулю, она будет переходить к следующему оператору, в этом случае, если (I + J AND 1) === 0тогда она напечатает X. Это позволяет вам упаковать больше операторов на строку и сохранить байты.
Шон Бебберс


2

Скала, 40 и 54

Количество символов составляет 40 для функции, 54 для полной программы.

Решение, дающее только тело функции:

("X "*n)sliding n take n foreach println

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

 

Решение, дающее полную программу:

val n=readInt;("X "*n)sliding n take n foreach println

Вы можете запустить его с помощью следующей командной строки.

scala -e 'val n=readInt;("X "*n)sliding n take n foreach println' <<< 8

где 8 - вход.


1
Добро пожаловать в PP & CG и хороший первый ответ. Есть хороший сайт под названием Try It Online, который позволяет вам легко подсчитывать байты и обмениваться данными. Проверьте другой ответ Scala, чтобы увидеть пример этого . Это не обязательно, просто приятно иметь.
Веска

Спасибо @Veskah за предложение.
jseteny

Хорошее решение, изменив это на функцию и используя карту, вы получите 34 символа:("X "*n)sliding n take n map println
pme

@pme Спасибо за предложение, но я не получу вывод, если я заменю foreach на map. Однако я изменил его на функцию, как вы предложили.
jseteny

Вы правы - извините, кажется, карта ленивая; (.
Pme

1

Python - 127 символов

from sys import*
r=stdout.write
s=int(raw_input())
[[r((x+y+1)%2 and"x"or" ")for x in range(s)]and r("\n")for y in range(s)]


1

Q, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}

{(x;x-1-x mod 2)#"X "}для 22 ... ах нет, имеет такую же ошибку , как ваша - оленья кожа имеет 4 иксы на нечетных строк для ввода 8.
streetster


1

PHP - 136 символов (без пробелов)

Позволяет вводить функции x и y.

Также поддерживает нечетные входы сейчас.

Если вы стилизуете вывод, чтобы иметь высоту строки 0,65 мкм, и измените ▒█ и █░ на □ ■ и ■ □, то он получится похожим на настоящую (квадратную) шахматную доску.

Код:

function gen_cb($x,$y)
{
$c=0;
$y*=2;
for($i=0;$i<$y;$i++){
for($j=0;$j<$x;$j++){
echo $c%2==0 ? "░█" : "█░";
}
echo "<br/>";
$c++;
}
}
gen_cb(7,7);

Выход:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█

Работает ли это на досках с нечетным числом квадратов на сторону?
Гарет

@ Гарет Теперь это так
Event_Horizon


1

CJam, 18 байт

Я, вероятно, мог бы просто перенести ответ GolfScript, но здесь другой подход. (И CJam не имеет права на победу в любом случае.)

l~,_f{f{+2%S'X?}N}

Проверьте это здесь.

Идея заключается в том , чтобы перебрать 2D - сетку с й и у индексов в стеке, используя в f{f{...}}трик . Учитывая x и y, мы можем просто определить черно-белое как (x+y)%2и использовать это, чтобы выбрать между символомX и строкой, содержащей пробел.



1

VB.net, 161

Module C
   Sub Main()
     Dim n As Integer
     If Integer.TryParse(Console.ReadLine,n) Then
     For x=1To n
        For y=1To n
          Console.Write("* "((x+y)Mod 2))
        Next
        Console.WriteLine()
      Next
     End If
    End Sub
End Module

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