Создайте свое собственное гимнастическое упражнение и следуйте по irl


10

Давайте делать упражнение вместе, не так ли? Просто следуйте движениям крупье. Какой крупье ты спрашиваешь? Тот, который мы собираемся создать!

Создайте программу, которая допускает строковый ввод, содержащий только целые числа, и выводит следующие девять фигурок с интервалом между ними:

 @  \@/ |@_ _@| @/   \@ |@| \@\ /@/
/|\  |   |   |   |   |   |   |   |
/ \ / \ / \ / \ /|\ /|\ / \ / \ / \
 1   2   3   4   5   6   7   8   9

Это приведет к анимации, которой мы можем следовать по irl.

Вот пример вывода, созданного, когда ввод " 123245762":

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

Некоторые правила:

  • Это помечено , поэтому выигрывает самый короткий код в байтах
  • Входные данные stringсодержат только [1-9]длину, которая может варьироваться от 2 до 100 символов **
  • Анимация должна быть бесконечной петлей
  • Интервал времени должен составлять 750 мс
  • Не допускается дублирование смежных целых чисел во входных данных - это также включает в себя первое и последнее целые числа входных данных (см. Седьмой и восемь контрольных примеров) **

** Как это терпит неудачу в случае неправильного ввода, полностью зависит от вас, но должно быть ясно, что это терпит неудачу . Это может вызвать исключение; просто вернитесь в начале; перезагрузите компьютер; удалить свой собственный исходный код / ​​код компиляции; взломайте военные и стреляйте ракетой по компиляции GPS-локации. Ваш звонок. РЕДАКТИРОВАТЬ: не допускается просто отображать (правильно / половина) анимации как неудачный ввод. Должно быть ясно, что что-то не так с входом для неудачных тестовых случаев ниже. Спасибо @ user81655 за то, что обратили на это мое внимание, отсюда и редактирование.

подправил:

  • Пожалуйста, опубликуйте gif для одного из (без сбоев) тестовых случаев ниже в своем ответе, который вы можете сделать очень легко с помощью следующей программы: screentogif.codeplex.com ( Разумеется, любая другая программа для создания gif-файлов также разрешена.)
  • Бонусные баллы, если вы действительно выполняете упражнение вместе с анимацией, когда она закончена. ;)

Правильные тестовые случаи:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

Неудачные тестовые случаи:

  1. 2 // Слишком мало символов
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 // Слишком много символов
  3. 1232405762// Содержит неверный ввод (the 0)
  4. 112212// Сбой из-за 11и 22настоящего
  5. 1232457621 // Сбой из-за начального и ведущего 1

5
IMO это пограничный контратип это
Питер Тейлор

1
Кстати, вносить изменения после публикации заявки не рекомендуется.
Голубой

IMO проверка ввода разрушает проблему.
FlipTack

@FlipTack Ты действительно прав. Я должен был просто принять вызов и предположить, что все данные верны. Это был мой самый первый вопрос здесь о PPCG. Хотя уже слишком поздно, чтобы изменить это.
Кевин Круйссен

Ответы:


0

Pyth, 114 байт

.V0j@cv.Z"xÚí» À0DW¹NM@+Üñ\">íÂA¸êÄÓw»`3±2þ&'NövfAé8é~0,p'ÆìÞúr_'¥,d!YÈBíéqs"3tv@zb.d.75

Выходной GIF

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

(Без пауз, не бесконечно)


Хм, невозможно вернуть / бросить или зациклить в Pyth? Или это займет слишком много байтов / слишком много времени, чтобы сделать? (В настоящее время он работает одинаково для всех правильных тестовых случаев, а также для всех неудачных тестовых случаев. И он также добавляет в вывод для 0.) Независимо, спасибо за запись. Одно из самых нечитаемых фрагментов кода для этой записи - мое предположение. :)
Кевин Круйссен

Онлайн-переводчик не сбрасывает IO во время сна, поэтому его не замечают. Вы сказали, что хотите бесконечный цикл, поэтому я не уверен, что вы там спрашиваете. «Как это терпит неудачу, зависит от вас» - я делаю неопределенное поведение для этого; код может делать что угодно (даже если он ДОЛЖЕН вести себя одинаково). Также я ожидаю, что он будет относительно читабельным по сравнению с некоторыми возможными записями
Blue

4

SpecBAS - 387 байт

1 DIM m$=" @"#13"/|\"#13"/ \","\@/"#13" |"#13"/ \","|@_"#13" |"#13"/ \","_@|"#13" |"#13"/ \","@/"#13" |"#13"/|\"," \@"#13" |"#13"/|\","|@|"#13" |"#13"/ \","\@\"#13" |"#13"/ \","/@/"#13" |"#13"/ \"
2 INPUT a$: o=0
3 IF LEN a$<2 OR LEN a$>100 THEN 10
4 FOR i=1 TO LEN a$
5 n=VAL(a$(i))
6 IF n=0 OR n=o THEN 10
7 CLS : ?m$(n): o=n: WAIT 750
8 NEXT i
9 GO TO 4
10 CLS : ?" @"#13"-O-"#13"/ \"#13"FAT"

Продолжает цикл, пока вы не нажмете ESC. Неправильное упражнение (неправильный ввод - в этом примере 0 в качестве одного из шагов) приводит к ожирению. Циклы GIF, в программе он просто останавливается в этой точке.

#13является эквивалентом SpecBAS \nи позволяет включать перевод строки в строки.

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


1
"ЖИР": D ......
Адам Вархеги,

2

JavaScript (ES6), 165 байт

f=s=>{n=s[0];e.textContent=' @ \\@/|@__@|@/  \\@|@|\\@\\/@/'.substr(n*3-3,3)+(n>1?`
 | 
`:`
/|\\
`)+(n<5|n>6?'/ \\':'/|\\');s=s.slice(1)+n;s[0]-n&&setTimeout(f,750,s)}
f("123245762")
<pre id=e>


1

JavaScript (ES6), 210 байт

s=>setInterval(_=>(c=console).clear(i=0)&c.log(`, @
/|\\
/ \\,\\@/
 |
/ \\,|@_
 |
/ \\,_@|
 |
/ \\,@/
 |
/|\\, \\@
 |
/|\\,|@|
 |
/ \\,\\@\\
 |
/ \\,/@/
 |
/ \\`.split`,`[s[i++%s.length]]),750)

Как это обрабатывает правила об исключении 0и дубликатах?
Морган Трепп

4
@ Morgan'Venti'Thrappuccino У меня сложилось впечатление, что недопустимые входные данные не требуют определенного поведения, так как это говорит How it fails in case of invalid input is completely up to you. Я просто обрабатываю неверный ввод, отображая анимацию. : P Ни один из других существующих ответов также не проверял это, однако ответ, который только что опубликовал ОП, делает, поэтому, возможно, он действительно хотел, чтобы мы обрабатывали неверный ввод.
user81655

"Я просто обрабатываю неверный ввод, отображая анимацию.: P" Лол .. Это один из способов посмотреть на это. xD я отредактирую вопрос.
Кевин Круйссен

0

Mathematica, 252 байта

i=0;Dynamic[Uncompress["1:eJxTTMoPSuNkYGAoZgESPpnFJcFCQIaCQ4yBoZF+TUwMmFaIiQELx8Q46IMEFGrgwoJA4RqHeCyi8Q41aKICQFEUA2qg5gIlHdCEIeaimyAMcQTEWWj26aO7DQDaqDEh"][[FromDigits[#~StringTake~{i=i~Mod~StringLength@#+1}]]],UpdateInterval->3/4,TrackedSymbols->{}]&

Было бы хорошо, если бы кто-то мог создать GIF. Запустите в записной книжке.


0

Python3, 338 байт

import os,time
p=" @ \n/|\\\n/ \\","\\@/\n | \n/ \\","|@_\n | \n/ \\","_@|\n | \n/ \\","@/ \n | \n/|\\"," \\@\n | \n/|\\","|@|\n | \n/ \\","\\@\\\n | \n/ \\","/@/\n | \n/ \\"
i=input()
for j in range(len(i)):(i[j]in"123456789"and i[j]!=i[(j+1)%len(i)])or exit()
while 1:[[time.sleep(0.75),os.system("clear"),print(p[int(j)-1])]for j in i]

0

Java 8, 663 636 634 631 596 355 354 байта

Просто для LOL я пытался сделать программу на Java. По общему признанию, я довольно плохо разбираюсь в гольфе и регулярных выражениях, так что он, скорее всего, может быть в гольфе (много?) Больше. Тем не менее, это происходит в Java 7.
Теперь, почти два года спустя, и я почти вдвое сократил код в Java 8. Почему я когда-либо делал эти правила о проверке ввода и требовании полной программы, хотя ...>.> Я ненавижу мое прошлое я сейчас ..

interface M{static void main(String[]a)throws Exception{if(!a[0].matches("[1-9]{2,100}")|a[0].matches("(.).*\\1|.*(.)\\2.*"))return;for(;;)for(int c:a[0].getBytes()){c-=48;System.out.printf("%s%n%s%n%s%n",c<2?" @ ":c<3?"\\@/":c<4?"|@_":c<5?"_@|":c<6?"@/ ":c<7?" \\@":c<8?"|@|":c<9?"\\@\\":"/@/",c<2?"/|\\":" | ",c%7>4?"/|\\":"/ \\");Thread.sleep(750);}}}

Объяснение:

Попробуйте онлайн. (По истечении 60 секунд.)

interface M{                     // Class
  static void main(String[]a)    //  Mandatory main-method
      throws Exception{          //    Required throws for the `Thread.sleep`
    if(!a[0].matches("[1-9]{2,100}")
                                 //   Validate 2-100 integers only containing 1-9
       |a[0].matches("(.).*\\1|.*(.)\\2.*")
                                 //   Validate no adjacent duplicated char (with wrap-around)
      return;                    //    If either isn't valid, stop the program
    for(;;)                      //   Loop indefinitely
      for(int c:a[0].getBytes()){//    Inner loop over the characters of the input
        c-=48;                   //     Convert character-code to integer
        System.out.printf("%s%n%s%n%s%n",
                                 //     Print:
          c<2?" @ ":c<3?"\\@/":c<4?"|@_":c<5?"_@|":c<6?"@/ ":c<7?" \\@":c<8?"|@|":c<9?"\\@\\":"/@/",
                                 //      The top part of the stick figure
          c<2?"/|\\":" | "       //      The middle part of the stick figure
          c%7>4?"/|\\":"/ \\");  //      The bottom part of the stick figure
        Thread.sleep(750);}}}    //     Sleep 750 ms

Gif:
(Примечание: старый gif, поскольку сейчас он явно jdk1.8 +.)

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


Обычно мы говорим, Java 7что ссылаемся на эту версию Java, так как это 1.7может сбить некоторых с толку, когда они думают, что это Java 1ревизия7
GamrCorps

Длинное выражение if можно превратить в нечто подобное p(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();. Также я думаю, что определение lи wтратить персонажей, теперь, когда они используются только дважды. Подумайте, sвместо того чтобы быть char[] s=a[0].toCharArray(); все остальные операции с ним намного короче.
Алекс Мейбург
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.