Проаналізуйте великі переміщення


13

Род модерує карткові ігри між двома гравцями: Джорджем і Тімом. Наразі Тім перетасовує картки. Род підозрює, що Тім намагається обдурити, тому йому потрібна ваша допомога, щоб переконатися, що перетасування справедливе.

Тім робить велику перестановку: він вирізає купу карток із нижньої частини колоди, потім вирізає різні частини зверху ворсу на вершину колоди і повторює процес кілька разів.

Род з орловими очима і може точно бачити, скільки карток Тим ріже кожен раз, проте він не може обчислити та відслідковувати карти так швидко, як Тім перетасовує. Це місце, куди ви заходите: Rod хотів би, щоб ви написали програму чи функцію, яка отримує детальну інформацію про перетасування та визначає, чи є перемішування справедливим, слабким чи хитрощі.

  • Якщо після перетасовування менше 25 пар сусідніх карт залишаються сусідніми (в тому ж порядку), тоді перетасування відбувається справедливо, і гра може продовжуватися.
  • Якщо щонайменше 25 (але не всі) пари сусідніх карт залишаються сусідніми, тоді перетасування слабке, і Род накине Тіма на голову і попросить його перемістити ще трохи.
  • Якщо всі карти залишаться в одному положенні в кінці, тоді Тім, очевидно, обманює, і Род битиме його великою фореллю.

Це кодовий гольф, тому найкоротший код виграє.

Вхід:

Ви отримаєте серію чисел від 0 до 52 (обидва ексклюзивні), розділені пробілом, на кілька рядків, де кожен рядок являє собою раунд перетасування, який починається і закінчується усіма картами, складеними разом.

У кожному рядку перше число - це кількість карток, які Тім вирізає з нижньої частини колоди, а кожне наступне число - це кількість карток, які він опускає з руки на верхню частину колоди. Якщо якісь картки залишаються після останнього номера на рядку, слід припустити, що Тім ставить їх на вершину колоди.

Вхід гарантовано є дійсним. Існує хоча б один рядок чисел, і кожен рядок містить принаймні 2 числа. Перше число у кожному рядку не менше суми всіх інших чисел у тому ж рядку. Новий рядок не є обов'язковим, ви можете припустити, що вхід має один або його немає.

Вихід:

Ваша програма повинна надрукувати / повернути "справедливо", якщо перетасування справедливе, "слабке", якщо переташування слабке, і "хитрість", якщо Тім зберігає всі картки в одному порядку. Новий рядок не є обов'язковим.

Приклад:

На палубі передбачається 52 карти, але для демонстраційних цілей я буду використовувати меншу колоду з 10 карт.

Вхід:

5 3 1
4 2 2

Початкова колода, зверху: 0 1 2 3 4 5 6 7 8 9
50 1 2 3 4( 5 6 7 8 9у руці)
35 6 7 0 1 2 3 4( 8 9у руці)
18 5 6 7 0 1 2 3 4( 9у руці)
кінець рядка ➜ 9 8 5 6 7 0 1 2 3 4
49 8 5 6 7 0( 1 2 3 4у руці)
21 2 9 8 5 6 7 0( 3 4у руці)
23 4 1 2 9 8 5 6 7 0
4 пари залишаються сусідніми:(3 4) (1 2) (5 6) (6 7)

Тестові приклади:

43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5

Вихід: fair


43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5

Вихід: weak


29 24
19 18
38 2 1 8 13 6 4
47 15 16 5 2 1 7
34 22 9 3
44 9 10 11 3 1 7
33 18 4 2 3 3

Вихід: fair


24 6 12 4
25 3 19
36 4 25 2
19 11 1 3
15 9 3
37 5 27

Вихід: weak


26 13
26 13
26 13
26 13

Вихід: trick


50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Вихід: weak


50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Вихід: trick


50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
49 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Вихід: fair

Вимоги:

  • Якщо ви пишете функцію, вона може або читати зі стандартного вводу, або отримувати вхід як єдиний параметр рядка. Також функція може або роздрукувати вихід, або повернути його.
  • Програма повинна бути запущена в Linux, використовуючи вільно доступне програмне забезпечення.
  • У вихідному коді повинні використовуватися лише символи ASCII.
  • Немає стандартних лазівки

2
Чому обмеження на ASCII? Багато мов (APL, машинний код, TI-BASIC) взагалі не використовують ASCII, тому ви неявно забороняєте їх.
ліртосіаст

@ThomasKwa Тому що мені не подобаються проблеми, пов’язані із відображенням та підрахунком символів, що не належать до ASCII. Деякі з цих мов мають представлення або альтернативи ASCII. Я думаю, що це не дуже суворе обмеження, і це трохи вирівнює ігрове поле.
aditsu кинути, тому що SE - EVIL

Я думаю, що система підрахунку балів на кшталт "У записів, які використовують тільки друковані символи ASCII, буде їх кількість байтів, помножене на журнал (95) / журнал (256)", буде кращим варіантом, якщо ви хочете досить стимулювати подані для друку ASCII подання. Аргументація полягає в тому, що інформаційний зміст записів з однаковим балом був би рівним. Особисто я все-таки вважаю за краще бальне бальне бажання.
lirtosiast

@ThomasKwa Добре, як щодо цього? Тільки символи, що
друкуються з унікодом

Відповіді:




2

JavaScript, 292 289 байт

Можливо, це може витягти з нього ще кілька байт, але зараз це швидкий перший пропуск:

d=[];for(i=0;i<52;i+=1)d[i]=i
s=prompt().split('\n')
s.forEach(function(e,i){s[i]=e.split(' ')
h=d.splice(-s[i][0],99)
for(j=1;j<s[i].length;j+=1)d.unshift.apply(d,h.splice(0,s[i][j]))
d.unshift.apply(d,h)})
for(c=0;i>1;i-=1)if(d[i-2]==d[i-1]-1)c+=1
alert(c<25?"fair":c<51?"weak":"trick")

EDIT: Збережено 3 байти шляхом повторного використання значення iциклу побудови колоди при підрахунку кількості сусідніх карт.

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