Шаблон шахової дошки


18

Введення: додатне число, менше 80, від stdin або як аргумент командного рядка.

Вихід: Шаблон квадратної шахової дошки, розмір вхідного номера. Темні поля представлені буквою "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на an Xі повертає результуючу рядок, який, отже, знаходиться "X "на першому, третьому і т.д. рядках та " X"на інших.


... але APL - ні. Дякуємо, що натрапили. Цікаво, чи ОП повторно прийме ...
Adám

"Pyth є занадто новим, щоб мати право на перемогу". Я цього не розумію і не сприймаю цього.
steenslag

1
@steenslag Щоб пояснити, існує стандартна лазівка, що мови, новіші за питання, не підходять. Це робиться для того, щоб мови, спеціально розроблені для успішного виконання конкретних проблем. Ви, звичайно, можете робити те, що хочете, зі своїм завданням.
isaacg

11

Гольфскрипт - 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

Що робить '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 символів

EDIT: 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
Я люблю всі магічні числа.
Joey Adams

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

k (26 символів)

26 Для голої функції:

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

Або ще 7, щоб взяти вклад з stdin

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

2

Bash: 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":""));}

Спробуйте його онлайн тут .

Завдяки плафоні для гри в гольф на 4 байти та Кевіну Кройссену для гольфу ще 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":" ")
roofcat


2

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

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

'X '⊇⍨2|⍳+⍀⍳

Спробуйте в Інтернеті!

d ndices 0… n – 1

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

d ndices 0… n – 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

enter image description here


Ви можете використовувати on...go toкоманду умовно, як-от ON-(I+JAND1)GOTO3:?"X";:там, де вона дорівнює нулю, вона перейде до наступного твердження, в цьому випадку, якщо (I + J AND 1) === 0тоді вона буде друкувати X. Це дозволяє упакувати більше операторів на рядок і зберігати байти.
Shaun Bebbers


2

Scala, 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, який дозволяє отримувати легкі підрахунки байтів та спільні запуски. Перевірте іншу відповідь Скали, щоб побачити приклад її . Це не вимагається від вас розуму, просто приємно мати.
Веська

Дякую @Veskah за пропозицію.
jseteny

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

@pme Дякую за пропозицію, але виходу немає, якщо я заміню foreach картою. Однак я змінюю його на функцію, як ви запропонували.
jseteny

ви маєте рацію - вибачте, здається, карта ледача; (.
pme

1

Пітон - 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 em і змінив ці ▒█ і █░ на □ ■ і ■ □, тоді він виходить схожим на справжню (квадратну) шахівницю.

Код:

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);

Вихід:

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

Чи працює це для дощок з непарною кількістю квадратів на сторону?
Гарет

@Gareth Зараз це робить
Event_Horizon


1

CJam, 18 байт

Я, певно, міг би просто перенести відповідь GolfScript, але ось інший підхід. (І CJam все одно не має права виграти.)

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

Перевірте це тут.

Ідея полягає у перегляді 2D сітки з індексами x та y на стеці, використовуючи в 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.