Побудуйте шахову дошку


20

Для цього завдання ви надрукуєте координати та колір кожного фрагмента на початку гри в шашки.

Введіть x і y (відокремлені комами) для кожного квадрата (з індексом 0-7) на контрольній дошці, а потім "r" або "b" (для червоного або чорного кольору) там, де верх дошки (ближче до y = 0 ) червоний, а низ чорний. нові рядки між шматками не потрібні і пробіли не потрібні.

Це тому відповіді набираються у байтах, менша кількість байтів - краща.

Додаткові нові рядки дозволені, але не потрібні, і замовлення має бути саме таким, як нижче.

Бажаний вихід:

0,0r
0,2r
0,4r
0,6r
1,1r
1,3r
1,5r
1,7r
2,0r
2,2r
2,4r
2,6r
5,1b
5,3b
5,5b
5,7b
6,0b
6,2b
6,4b
6,6b
7,1b
7,3b
7,5b
7,7b

3
Чи є конкретна причина пропустити x=3і x=4?
HyperNeutrino

1
@HyperNeutrino, тому що в шахівниці заповнено лише 3 верхніх та нижніх 3 ряду (на початку гри)
Джастін

3
Таким чином, це в основному вихідне положення шашок, він же англ. Drafts. Це правильно?
Арнольд

2
Ласкаво просимо на PPCG.SE! Особливістю цього сайту, який деякі з нас люблять використовувати, є пісочниця . Не потрібно користуватися ним, але це корисний канал, за допомогою якого можна отримати зворотній зв'язок про будь-які нові ідеї, які ви маєте, без необхідності проходити через цілий нещасний випадок.
Цифрова травма

1
Чи можна розділяти координати роздільником, відмінним від нового рядка? Тобто 0,0r;0,2r;0,4r;0,6r;1,1r;1,3r;1,5r;1,7r;2,0r;2,2r;2,4r;2,6r;5,1b;5,3b;5,5b;5,7b;6,0b;6,2b;6,4b;6,6b;7,1b;7,3b;7,5b;7,7b?
Kevin Cruijssen

Відповіді:


8

05AB1E , 26 байт

2ÝD5+«v4Fy',N·yÉ+„bry3‹èJ,

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

Пояснення

2Ý                           # push [0,1,2]
  D5+                        # duplicate and add 5: [5,6,7]
     «                       # concatenate
      v                      # for each y in [0,1,2,5,6,7] do:
       4F                    # for each N in [0 ... 3] do:
         y                   # push y
          ',                 # push ","
            N·yÉ+            # push N*2+isOdd(y)
                 „br         # push "br"
                    y3‹è     # index into the string with y<3
                        J,   # join everything to a string and print

Я відчуваю, що [0,1,2,5,6,7]могло б бути висунуто менше байтів ... але все, про що я міг придумати, - 7Ý34SKтак я гадаю, що ні.
Чарівна урва восьминога



7

C (gcc) , 83 81 79 78 байт

  • Збережено два байти завдяки Tahg ; гольф x/4+2*(x/12)до x/4+x/12*2.
  • Збережено два байти завдяки Kevin Cruijssen ; гольф x%8*2%8до x*2%8.
  • Збережено байт завдяки плафоні .
x;main(){for(;x<24;)printf("%d,%d%c\n",x/4+x++/12*2,x*2%8+x/4%2,114-x/12*16);}

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


2
Ви можете зробити x / 4 + x / 12 * 2 і позбутися від ()
Tahg

x%8*2%8можнаx*2%8
Кевін Круїйсен

@ceilingcat Дякую
Джонатан Фрех


4

Java 8, 102 96 95 93 91 байт

v->{for(int i=0;i<24;System.out.printf("%d,%d%c%n",i/4+i/12*2,i*2%8+i/4%2,i++<12?114:98));}

Порт з відповіді на C @JonathanFrech , після чого я сам грав у байті 5 байт.

Спробуйте тут.

Пояснення:

v->{                    // Method without empty unused parameter and no return-type
  for(int i=0;i<24;     //  Loop from 0 to 24 (exclusive)
    System.out.printf("%d,%d%c%n",
                        //   Print with format:
                        //   (%d=digit; %c=character; %n=new-line)
      i/4+i/12*2,       //    Print first coordinate
      i*2%8+i/4%2,      //    Print second coordinate
      i++<12?114:98)    //    Print either 'r' or 'b'
  );                    //  End of loop
}                       // End of method



3

Желе , 35 байт

8Ḷḟ3ḟ4µḂr7m2ṭ€µ€Ẏµḣ1<3Ḣị⁾rbṭj”,$µ€Y

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

Повна програма без аргументів

Пояснення

8Ḷḟ3ḟ4µḂr7m2ṭ€µ€Ẏµḣ1<3Ḣị⁾rbṭj”,$µ€Y  Main link; no arguments
8                                    8
 Ḷ                                   Push 0 .. 8 - 1
  ḟ                                  Remove all instances of
   3                                 3
    ḟ                                Remove all instances of
     4                               4
                €                    For each in [0, 1, 2, 5, 6, 7]
       µḂr7m2ṭ€µ                     Generate all of the piece coordinates across that row
        Ḃ                            row number % 2
         r                           inclusive range up to
          7                          7
           m                         modular; take every   elements
            2                                            2
              €                      For each column coordinate
             ṭ                       Tack the row coordinate (reverse append)
                 Ẏ                   Tighten; flatten once
                                 €   For each piece coordinate (in the right order now)
                 µḣ1<3Ḣị⁾rbṭj”,$µ    Convert to its final output
                  ḣ                  Head; take the first   element(s)
                   1                                      1
                    <                Less Than; compare each element to
                     3               3
                      Ḣ              Head; take the comparison out of the list
                       ị             Index (1-indexed) into
                        ⁾rb          "rb"
                           ṭ         Tack the color character behind
                            j”,$     The coordinates joined by a comma
                            j        Join with separator
                             ”,      ","
                                  Y  Separate by newlines


3

JavaScript (ES6), 64 байти

Це здається досить відмінним від @ Arnauld's до правового розміщення:

f=(n=0,y=n>>3,c=y>2)=>y<6?[y+c*2,n%8+y%2+'rb'[+c]]+`
`+f(n+2):''

Пояснення:

f=(n = 0,            //the numbered square on checkerboard
   y = n >> 3,       //current row (n / 8 rounded)
   c = y > 2         //false if red pieces, true if black
  ) => 
  y < 6 ?            //if y less than 6 
    [                //  using an array automatically adds the comma
     y + c * 2,      //  0 - 2 if red pieces, 5 - 7 if black
     n%8 + y%2 +     //  n%8 returns 0, 2, 4, or 6.
                     //  y%2 returns 0 or 1.
                     //  added, they return the appropriate position (0 - 7)
     'rb'[+c]        //  'r' if red, 'b' if black.  Plus sign coerces boolean to number.
    ]+`              //  new line
    `+
    f(n+2) :         //  recurse on n+2
    ''               //else return an empty string

Фрагмент:



3

APL (Dyalog) , 45 44 байт *

-1 завдяки ngn.

Ніладична функція, яка передбачає індексацію на основі 0 ( ⎕IO←0), яка є типовою для багатьох систем. Друкується в STDOUT.

' 'R','⊃,/(8 ¯8↑¨⊂⍕¨⍸∘.=⍨2|⍳8),¨¨'rb'

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

(),¨¨'rb' Додайте «r» до кожної першої групи елементів та «b» до кожної другої:

⍳8 нуль через вісім

2| залишок поділу при половинці

∘.+⍨ плюс стіл з самим собою по обох осях

 індекси справжніх значень

⍕¨ форматувати кожен (перетворює в рядки з шаблоном, d dде кожен dє цифрою)

 укласти (щоб ми могли використовувати його повторно для кожного…)

8 ¯8↑¨ візьміть перші дев'ять і останні дев'ять

тепер у нас є два списки d dрядків

,/ скорочення катенації (об'єднайте два списки)

 розкрити (оскільки скорочення знизило ранг з 1 до 0)

' '⎕R',' Пробіл PCRE R замінить комами

 мікс (усі списки в одну матрицю)


* У Dyalog Classic, рахуючи як ⎕U2378.


~2|∘.+⍨⍳8міг бути∘.=⍨2|⍳8
ngn

не слід виводити рядки x = 3 і x = 4
ngn

@ngn 2⍴⊂'Thanks'
Adám

2

Bubblegum , 59 байт

00000000: 15ca b101 0030 0400 c1de 2c0a 2462 1f23  .....0....,.$b.#
00000010: d8bf 886f ae3a 531b 310d b8f0 465c 1d0e  ...o.:S.1...F\..
00000020: 24d4 48ec 5b02 2eec 4bf5 5e0e 2454 cb53  $.H.[...K.^.$T.S
00000030: 8380 0baf a5d4 e140 42f5 07              .......@B..

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


Це гексдумп, правда?
Стен Струм

@StanStrum Так, це гекдамп фактичного джерела. За допомогою hexdump не втрачаються недруковані матеріали. Фактичне джерело нічого не додає у відповідь IMO.
ovs

Гаразд, мені просто було цікаво. Спасибі
Стен Струм

2

Піт , 37 36 35 байт

isaacg не пишатиметься

V+U3}5 7FG4p++N\,+yG?!%N2Z1?<N5\r\b

Пояснення:

V+U3}5 7            For in the array [0, 1, 2, 5, 6, 7] as N
 FG4                 For in the array [0, 1, 2, 3] as G
  p                   Print without newline:
   ++N\,+yG?!%N2Z1     N, (2 * G) + 1 if N is even, else 0
  ?<N5\r\b            Output with newline "r" if N < 5 else "b"

Для цього використовується проста модель, яку я трохи скорочую. Так:

Якщо Xкоордината рівна, використовуйте парні числа0, 2, 4, 6 . Інше,1, 3, 5, 7 бо Y.

Якщо Xкоордината менша за 5, колір ( rабо b) є r. Ще, так і є b.

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

редагувати : за ніч отримано +40 реп. на 3 різні відповіді w00t



1

Javascript (89 байт):

for(x=y=0,r="r";x<7|y<8;console.log(x+","+y+r),y+=2){if(y>7)y=++x%2;if(x==3){x+=2;r="b"}}

Читає:

for(var x = y = 0, red = true; x < 7 || y < 8; y += 2) {
    if(y > 7) { //new row
        x++;
        y = x % 2;
    }
    if(x == 3) { //new color
        x += 2;
        red = false;
    }
    console.log(x + "," + y + (red ? "r" : "b") );
}

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


4
Зауважте, що не рекомендується відповідати на ваш власний виклик відразу після публікації.
Арнольд

Добре. Чи варто його зняти і, можливо, опублікувати пізніше?
Джастін

Добре, зроблю. Дякую за голову вгору
Джастін

Це може здатися дурним, але як видалити публікацію на мобільному пристрої?
Джастін

@Justin Не можна видаляти публікації на мобільному пристрої. Це роздратує багатьох.
Пшеничний майстер

1

Желе , 27 байт

8Ḷµḟ3,4pµSḂ$Ðḟj€”,ż⁾rbx12¤Y

Повна програма, яка друкує необхідний вихід.

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

Як

8Ḷµḟ3,4p⁸SḂ$Ðḟj€”,ż⁾rbx12¤Y - Link: no arguments
8                           - literal eight
 Ḷ                          - lowered range = [0,1,2,3,4,5,6,7]
  µ                         - new monadic chain
    3,4                     - literal list = [3,4]
   ḟ                        - filter discard = [0,1,2,5,6,7]
        ⁸                   - chain's left argument = [0,1,2,3,4,5,6,7]
       p                    - Cartesian product = [[0,0],[0,1],...,[2,7],[5,0],...,[7,6],[7,7]]
            Ðḟ              - filter discard if:
           $                -   last two links as a monad:
         S                  -     sum
          Ḃ                 -     modulo by 2
                ”,          - literal comma character
              j€            - join €ach pair with a comma = [0,',',0],[0,',',2],...,[2,',',6],[5,',',1],...,[7,',',5],[7,',',7]]
                         ¤  - nilad followed by links as a nilad:
                   ⁾rb      - literal list = ['r','b']
                       12   - literal twelve
                      x     - repeat = ['r','r','r','r','r','r','r','r','r','r','r','r','b','b','b','b','b','b','b','b','b','b','b','b']
                  ż         - zip together = [[[0,',',0],'r'],[[0,',',2],'r'],...,[[2,',',6],'r'],[[5,',',1],'b'],...,[[7,',',5],'b'],[[7,',',7],'b']]
                          Y - join with newlines = [[0,',',0],'r','\n',[0,',',2],'r','\n',...,'\n',[2,',',6],'r','\n',[5,',',1],'b','\n',...,'\n',[7,',',5],'b','\n',[7,',',7],'b']
                            - implicit print (smashes the list of lists and characters
                            -                 together and prints the digits)


1

PowerShell , 63 байти

0..2+5..7|%{$i=$_;0,2,4,6|%{"$i,$($_+$i%2)"+('r','b')[$i-ge5]}}

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

Петлі 0,1,2,5,6,7і кожна ітерація встановлюється $iна поточне число. Потім петлі переверніть 0,2,4,6. Кожен внутрішній цикл ми побудуємо рядок, починаючи з $i,потім з'єднаної з поточним номером нашого внутрішнього циклу плюс $iпарне чи непарне (що отримує нас 0,2,4,6один раз і 1,3,5,7в інший час), а потім об'єднується з rредакцією або bвідсутністю на основі того, чи $iє -gреатер-ніж -або- eдо 5. Ці рядки залишені на конвеєрі, і неявна Write-Outputпри завершенні програми надає нам нові рядки безкоштовно.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.