Генератор карт Бінго


10

Картка Бінго - це п'ять стовпців по п’ять квадратів у кожному, середній квадрат позначений "БЕЗКОШТОВНО". Числа не можна дублювати.

П'ять стовпців заповнене таким діапазоном чисел:

  • Б: 1-15
  • Я: 16-30
  • N: 31-45
  • Г: 46-60
  • O: 61-75

Якнайменше символів виведіть рядок, який можна інтерпретувати як рандомізовану карту Бінго. Наприклад:

1,2,3,4,5,16,17,18,19,20,31,32,33,34,35,46,47,48,49,50,61,62,63,64,65

Цей приклад не є рандомізованим, щоб я міг показати, що колонка 1 заповнена 1,2,3,4,5. Також зауважте, що у вільному просторі не було надано жодної спеціальної обробки, оскільки передній край, який інтерпретує цей рядок, пропустить його.

Іншим прикладом може бути:

1,16,31,46,61,2,17,32,47,62 ...

У цьому прикладі виведення є рядком, а не стовпцем.

Третім прикладом може бути:

01020304051617181920313233343546474849506162636465

Це той самий вихід, що і перший приклад, за винятком фіксованої довжини.


Я єдиний, хто ніколи не чув про Бінго, а натомість лише про фігня Бінго?
Joey

Так! Це воно! Моя ідея - скласти список із 75 і більше слів і заповнити картку вибором * З переліку ЗАМОВЛЕННЯ НОВОМ ()
Phillip Senn

Відповіді:


2

PHP, 86

for($o=[];25>$i=count($o);){$n=rand(1,15)+($i-$i%5)*3;$o[$n]=$n;}echo implode(",",$o);

Ласкаво просимо до PPCG, приємна перша відповідь c:
Rod

Дякую, я трохи пізно зауважив, що цьому питанню 5 років ... xD Не впевнений, чи має значення він
chocochaos

joinПсевдонім для, ìmplodeі ви можете помістити завдання в цикл після. Це скоротить вашу ідею доfor($o=[];25>$i=count($o);$o[$n]=$n)$n=rand(1,15)+($i-$i%5)*3;echo join(",",$o);
Йорг Гюльсерманн


1

Windows PowerShell, 51 54

Я не впевнений, чи правильно я зрозумів ваше завдання.

(0..4|%{($x=15*$_+1)..($x+14)|random -c 5})-join','

Приклади виходів:

5,9,1,7,13,26,18,23,17,22,37,33,34,41,44,50,53,59,60,58,73,72,64,69,66
14,10,13,5,1,24,29,26,17,30,34,33,43,41,38,59,50,60,49,56,71,61,72,70,68
3,11,4,5,13,27,16,25,26,22,43,34,42,32,38,51,52,49,58,54,61,70,73,71,62
1,9,13,12,4,23,25,20,26,22,40,33,35,44,37,55,47,52,59,53,74,70,75,64,69
8,6,7,1,9,16,21,23,18,17,35,41,37,38,34,60,50,57,51,59,66,75,73,74,71
11,6,13,4,1,29,27,24,22,18,40,35,41,32,43,51,54,57,58,53,74,71,69,66,64

1

PHP 106

<?$z=1;for($i=0;$i<5;$i++){for($j=0;$j<rand(1,5);$j++){$o[]=rand($z,$z+15);}$z+=15;}echo implode(",", $o);

Я не впевнений, що я правильно зрозумів проблему ... Чи можете ви надати більш детальне пояснення?


Вихід невірний. Вам завжди потрібно вивести всі 25 квадратів :)
chocochaos

1

R, 63 51 50 49 45 байт

Дякую Billywob за постійні пропозиції та заохочуючи мою конкурентну боротьбу.

cat(sapply(split(n<-1:75,cut(n,5)),sample,5))

5 14 15 3 1 20 30 28 18 27 32 45 42 43 41 49 54 50 56 47 68 66 64 73 71


Векторизований підхід, який я спробував, трохи коротший. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))Редагувати: неважливо, друк, доданий catзамість цього
Billywob

@Billywob Спасибі, це чудова відповідь! З тих пір я знайшов такий, який ще коротший. (Без вектора, на жаль.)
rturnbull

1
Виявляється можна зробити ще краще: cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). Працює, розбиваючи вектор 1:75на список, де кожен елемент є вектором довжини 15замість того, list()щоб використовувати для передачі об'єктів sapply.
Billywob

Дуже хороший! У мене було розміщено ваше рішення кілька секунд, але потім я зрозумів, як перевершити вас одним байтом.
rturnbull

Га! Навіть краще. Але я не думаю, що вам потрібен labels = FALSEваріант cut. Тому що важливо лише те, що 5для функції розділення функції передаються фактори, що повторюються, незалежно від імен.
Billywob

0

Clojure - 52 символи

(map #(take 5(shuffle %))(partition 15(range 1 76)))

Приклад виведення (зауважте, що він містить окремі рядки як підсписи):

((4 1 12 10 2) (25 23 21 16 27) (39 33 45 44 43) (48 53 59 54 47) (73 71 61 64 63))

0

Пітон 2, 84 байти

from random import*
print sum([sample(range(1+i*15,16+i*15),5)for i in range(5)],[])

Якщо вихід як список, якщо списки нормальні, є рішення в 75 байт :

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.