.Txt फ़ाइल से फ्रेम्स प्रदर्शित करें


14

काम:

.txtASCII कला के फ्रेम वाली फाइल को देखते हुए प्रत्येक को एक से अलग किया जाता है \n(यदि आप अस्पष्ट हैं तो इस उदाहरण को देखें) 1 फ्रेम प्रति सेकंड के साथ फ्रेम के साथ एक मोशन पिक्चर को आउटपुट करता है।

ध्यान दें कि \nअंतिम फ्रेम पर एक अनुगामी है ।

प्रत्येक फ्रेम आयाम होंगे:

  • एक्स <80
  • Y <20

नियम

  • पिछला फ़्रेम अगले प्रदर्शित होने से पहले साफ़ किया जाना चाहिए, इसलिए टर्मिनल पर प्रत्येक फ़्रेम को प्रिंट करना एक मान्य उत्तर नहीं है।
  • नया आप जिस फ़ाइल का नाम चाहते हैं, उसे हड़प सकते हैं, या तो इसे एक चर में संग्रहित किया जा रहा है या sys args से।
  • नई छवियों को अनिश्चित काल तक लूप करना चाहिए
  • यह कोड गोल्फ है: सबसे छोटा कार्यक्रम जीतता है।

उदाहरण

इनपुट

0   0
0   0
00000
0   0
0   0

00000
0
00000
0   
00000

0   0
 0 0
  0
  0
  0

उत्पादन

उदाहरण आउटपुट

संयुक्त राष्ट्र के golfed

import curses, time

stdscr = curses.initscr()

Frames = file.read(file('Frames.txt')).split('\n')
while True:
    y = 0
    for i in range(len(Frames)):
        stdscr.addstr(y,0,Frames[i])
        stdscr.refresh()
        y += 1
        if Frames[i] == '':
            y = 0
            stdscr.clear()
            time.sleep(1)

5
उन भाषाओं में जो वास्तव में फ़ाइल हैंडलिंग (जावास्क्रिप्ट की तरह) का समर्थन नहीं करती हैं, क्या इनपुट को एक चर में रखना भी ठीक है?
प्रोग्रामफॉक्स

2
@ProgramFOX मुझे लगता है कि आप एक ब्राउज़र में फ़ाइल खोल सकते हैं और उपयोग कर सकते हैंdocument.body.innerText
user12205

3
@ProgramFOX इसे थोड़ा अनुचित बनाएं, फ़ाइल से निपटने का पहलू ज्यादातर भाषाओं में कई चार्ट जोड़ता है
हैरी बीडल

जवाबों:


10

गणितज्ञ, 41 बाइट्स

Import@f~StringSplit~"\n\n"~ListAnimate~1

फ़ाइल नाम को चर में संग्रहीत करने की अपेक्षा करता है f

यह पहली बार है जब मैथमेटिका की पूर्वता के नियम हैं @और .~.~.ठीक उसी तरह से हैं जैसे मुझे उनकी आवश्यकता है।

Btw, यह स्निपेट बुरी तरह से गलत हो सकता है अगर फ़ाइल एक्सटेंशन कुछ और है .txt(क्योंकि गणितज्ञ यह अनुमान लगाने की कोशिश करेगा कि उस पर आधारित आयात कैसे किया जाए), लेकिन सौभाग्य से वह फ़ाइल समाप्ति चुनौती विनिर्देश का हिस्सा है।


6

बैश, 82

IFS=
clear
for((;;)){
while read a;do
[ "$a" ]&&echo $a||(sleep 1;clear)
done<$1
}

मान लें कि .txt फ़ाइल का नाम स्क्रिप्ट के पहले तर्क के रूप में प्रदान किया गया है।

ध्यान दें कि इसके लिए काम करने के लिए .txt फ़ाइल के अंत में एक अनुगामी खाली रेखा मौजूद होनी चाहिए।

@Professorfish और @DigitalTrauma के लिए विशेष धन्यवाद।


1
$IFSडिफ़ॉल्ट रूप से रिक्त नहीं है ? इसके अलावा, के for ((;;)){ ... }बजाय का उपयोग करेंwhile :;do ... done

डिफ़ॉल्ट रूप से @professorfish IFS <space> <tab> <newline> है। इसे ऐसे सेट करने की आवश्यकता है ''जो readलगातार कई रिक्त स्थान पढ़ सकें , जैसे कि Y की अंतिम पंक्ति में
user12205

1
छोटे कटौती की एक जोड़ी: IFS=और [ "$a" ]इसके बजाय[ -n "$a" ]
डिजिटल आघात

4

रूबी, 88 86 56 55 वर्ण

$<.read.split($/*2).cycle{|i|system'cls';$><<i;sleep 1}

यह प्रोग्राम मानता है कि फ़ाइल का नाम पहले तर्क के रूप में दिया गया है।

महान सुधारों को साझा करने के लिए वेंटरो को बहुत-बहुत धन्यवाद!

संयुक्त राष्ट्र के golfed:

$<.read.split($/*2).cycle{ |i|   # read file, split by two newlines, and loop
    system 'cls'   # clear screen
    $><<i   # print the current array item
    sleep 1   # sleep one second
}

यह प्रोग्राम फ़ाइल को पढ़ता है, इसे विखंडू में विभाजित करता है, और स्क्रीन को साफ़ करने के बाद प्रत्येक चंक को अलग से प्रिंट करता है। clsकेवल विंडोज पर काम करता है। एक प्रकार के साथ clear57 वर्ण हैं।


आप एक चरित्र या दो को बचा सकते हैं, पहले के बजाय एक लाइन ब्रेक का उपयोग करके ;और कॉल करते समय कोष्ठक को छोड़ सकते हैं split
मार्टिन एंडर

2
यह इस बात पर निर्भर करता है कि आप अपने संपादक को कैसे कॉन्फ़िगर करते हैं। : पी मैं लगभग विशेष रूप से विंडोज का उपयोग कर रहा हूं, लेकिन मेरा सब्लिम \nवैसे भी उपयोग करने के लिए कॉन्फ़िगर किया गया है। यहाँ भी कोड गोल्फ पर कोई भी आपको प्रत्येक पंक्ति विराम के लिए अपने स्कोर में एक और बिंदु जोड़ देगा क्योंकि आप विंडोज का उपयोग कर रहे हैं। ;)
मार्टिन एंडर

1
$*के लिए आशुलिपि है ARGV, जो दो पात्रों को बचाएगा। इस मामले में, आप हालांकि ARGF(या $<) का उपयोग करके और भी अधिक बचत कर सकते हैं a=$<.read.split"\n\n":। a.sizeसे भी छोटा है a.length। और चूंकि sleepलौटने के बाद अपना तर्क देता है, आप अंतिम दो कथनों को अपने पाश में जोड़ सकते हैं i+=sleep 1
वेंटरो

1
वास्तव में, अंतिम बिट कभी नहीं, आप पूरी तरह iसे उपयोग करके समाप्त कर सकते हैं Array#cycle, जो हमेशा के लिए बंद हो जाता है यदि कोई तर्क नहीं दिया जाता है a.cycle{|i|system"cls";$><<i;sleep 1}:। और पर विभाजित $/+$/एक और चरित्र की तुलना में कम है "\n\n"
वेंटरो

1
यह आपको इसकी परिभाषा भी बताता है a: $<.read.split($/+$/).cycle{...}(तिहरे टिप्पणी के बारे में क्षमा करें, मैं हमेशा टिप्पणी को संपादित करने की अवधि समाप्त होने के बाद नए सुधारों के बारे में सोचता हूं :))
वेंटरो

2

डायलॉग एपीएल (64)

(इस बार गणितज्ञ को हरा नहीं सकते। ऐसा लगता है कि हर चीज के लिए एक अंतर्निहित है।)

{⎕ML←3⋄{⎕SM←1 1,⍨⊂⊃⍵⊂⍨~⍵∊⎕TC⋄⎕DL 1}¨M⊂⍨~(4/1)⍷⎕TC∊⍨M←80 ¯1⎕MAP⍵}

यह एक फ़ंक्शन है जो फ़ाइल नाम को अपने तर्क के रूप में लेता है। यह मानता है कि फ़ाइल विंडोज ( \r\n) प्रारूप में है।

स्पष्टीकरण:

  • ⎕ML←3: 3 के लिए माइग्रेशन स्तर सेट करें ( APL2 के विभाजन सुविधा के रूप में उपयोग करने की अनुमति )
  • M←80 ¯1⎕MAP⍵: ASCII फ़ाइल के रूप में सही तर्क द्वारा दी गई फ़ाइल को पढ़ें, और सामग्रियों को संग्रहीत करें M
  • M⊂⍨~(4/1)⍷⎕TC∊⍨M: लगातार चार टर्मिनल नियंत्रण वर्णों की सभी घटनाओं को खोजें, और Mउन पर विभाजित करें। यह प्रत्येक फ्रेम देता है।
  • {... : इनमें से प्रत्येक के लिए ...
    • ⊂⊃⍵⊂⍨~⍵∊⎕TC: टर्मिनल नियंत्रण वर्णों पर तर्क (= एक फ्रेम) को विभाजित करें, और फिर वेक्टर-ऑफ-वैक्टर को एक मैट्रिक्स में बदल दें (इसलिए यह प्रत्येक पंक्ति को एक अलग लाइन पर प्रदर्शित करेगा, यह आवश्यक है क्योंकि ⎕SMनियंत्रण वर्णों को समझ में नहीं आता है।)
    • ⎕SM←1 1,⍨: फिर इसे ⎕SMविंडो के ऊपरी बाएँ में प्रदर्शित करें ।
    • ⎕DL 1: और फिर एक सेकंड के लिए प्रतीक्षा करें।

हा, आखिर! और अभी भी मेरा जवाब बहुत कम नहीं है क्योंकि फ़ंक्शन के नाम अभी बहुत लंबे हैं! : डी
मार्टिन एंडर

1
किसी को एक मैथेमेटिका प्रीप्रोसेसर लिखने की ज़रूरत है जो हर एक फ़ंक्शन में यूनिकोड चरित्र के लिए बनाया गया हो
डिजिटल ट्रॉमा

2

अवाक, ५३

BEGIN{RS=RS RS}{system("clear")}1;{system("sleep 1")}


नये नियम:

अवाक, ,४

BEGIN{RS=z}{a[NR]=$0}END{while(!system("sleep 1;clear"))print a[i++%NR+1]}

1
यह केवल एक बार लूप करता है, लेकिन इसे छोटा किया जा सकता है BEGIN{RS=z}{system("sleep 1;clear")}1... awk में, ""विशेष रूप से RSबहुस्तरीय रिकॉर्ड के रूप में विशेष है । अनिश्चित काल तक लूपिंग के नए नियम का समर्थन करने के लिए, मेरे पास यह अब तक है: BEGIN{RS=z}END{for(;!system("sleep 1;clear");)print a[i++%NR+1]}{a[NR]=$0}74 अक्षरों पर। gawk बदलने का समर्थन करता है ARGVताकि आप BEGIN{RS=z}{system("sleep 1;clear");ARGV[ARGC++]=ARGV[ARGC-1]}163 वर्णों पर कर सकें ।
laindir

@laindir: धन्यवाद, मैं कुछ भी बेहतर नहीं कर सकता।
शाम

1

पर्ल, ४०

seek ARGV,0,!eof;sleep 1;system clear

ऐसे दोड़ो

perl -p00 frames.pl < animation.txt

(यानी एनिमेशन फाइल STDIN के जरिए पढ़ी जाती है)। p00गणना के लिए 3 बाइट्स जोड़े गए थे। इसके बजाय विंडोज पर 2 अक्षर छोटे यानी 38cls हैं clear। या, पोर्टेबल होने के लिए:

seek ARGV,0,!eof;sleep 1;system$^O=~/Win/?cls:clear

या, नियमों को थोड़ा बढ़ाकर (और फिर 31 + 3 = 34 ):

seek ARGV,sleep(1)&`reset`,!eof

1

प्रतिबल, ,४

forever[foreach s split to-string read f"^/^/"[call"clear"print s wait 1]]


फ़ाइल नाम को वैरिएबल में संग्रहीत करने की अपेक्षा करता है f। नीचे एक ungolfed उदाहरण है:

f: %ascii-art.txt

forever [
    foreach s split to-string read f "^/^/" [
        call "clear"
        print s
        wait 1
    ]
]

1

जावा, 678 वर्ण (जब गोल्फ हो)

जीयूआई के साथ, क्योंकि कंसोल में सामान करना जावा के साथ बेकार है, खासकर यदि आप स्क्रीन को साफ करना चाहते हैं ...

import java.awt.Font;
import java.io.File;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingWorker;

public class G extends JFrame
{
    static JTextArea b = new JTextArea();

    G()
    {
        setSize(170, 370);

        add(b);
        b.setFont(new Font(Font.MONOSPACED, 0, 50));
    }

    public static void main(final String[] args)
    {   
        new G().setVisible(true);
        new SwingWorker()
        {
            protected Void doInBackground()
            {
                for(;;)
                {
                    try(Scanner s = new Scanner(new File(args[0])))
                    {
                        String l = null;
                        while(s.hasNextLine())
                        {                           
                            if(l == null  || (l = s.nextLine()).isEmpty())
                            {
                                Thread.sleep(1000);
                                b.setText(l == null ? (l = s.nextLine()) + '\n' : null);
                            }
                            else
                                b.setText(b.getText() + l + '\n');
                        }
                    }
                    catch(Exception i){}
                }
            }
        }.execute();
    }
}

बस एहसास हुआ कि लेखक के पद में आयाम थे, लेकिन अब मैं अपने कोड को बदलने के लिए बहुत आलसी हूं। वैसे भी नहीं जीतेंगे: पी
लियो पफ्लग

1

कोबरा - 163

class P
    def main
        while 1
            for i in File.readAllLines("t.txt")
                print i
                if i=="",.x
            .x
    def x
        Threading.Thread.sleep(1000)
        Console.clear

1

पायथन 117

मान लें कि फ़ाइल नाम चर में संग्रहीत है f

import time,os
while 1:
 for i in file.read(file(f)).split('\n'):
  print i
  if i=='':time.sleep(1);os.system('cls')

नोट: बदलने के 'cls'साथ 'clear'करता है, तो एक यूनिक्स आधारित सिस्टम पर, 2 chrs जोड़ने।

ctl+C छोड़ना


for i in F: s.addstr(y,0,i); ... if i=='': ...
user12205

4 बाइट्स से कम के open(f).read()बजाय का उपयोग करें file.read(file(f))
nyuszika7h

0

ग्रूवी - 121 119 चार्ट

Groovy 2.2.1 को पोर्टफ़ेड प्रोग्रामफ़ॉक्स का जवाब । "स्पष्ट कंसोल" कमजोर है।

संपादित करें : लूप करते समय सरल के साथ पुनरावर्ती बंद को बदल दिया जाता है, जो छोटा होता है और स्टैक ओवरफ्लो नहीं होता है

a=new File(args[0]).text.split "\n\n";i=0;p={println it};while(1){p a[i++%a.size()];Thread.sleep(1000);80.times{p ""}}

Ungolfed:

a = new File(args[0]).text.split "\n\n"
i = 0

p = { println it }

while(1) {
    p a[i++%a.size()]
    Thread.sleep(1000)
    80.times{p ""}
}


0

ग्रूवी, 81

यह एक अधिक विशाल तरीका है:

new File(args[0]).text.split("\n\n").each{["cls"].execute();print it;sleep(1000)}

ungolfed

new File(args[0]).text.split("\n\n").each{
    ["cls"].execute()
    print it
    sleep(1000)
}

कमांड "cls" मेरे मैक पर काम नहीं करता है। इसके अलावा, आवश्यकताओं का सुझाव है कि गति चित्र छोरों।
माइकल ईस्टर

2
@ clsclear
माइकल

0

C # 226

क्यों परेशान?

namespace System{class P{static void Main(){for(;;)foreach(var x in Text.RegularExpressions.Regex.Split(new IO.StreamReader("f.txt").ReadToEnd(),"\n\r\n")){Console.Clear();Console.WriteLine(x);Threading.Thread.Sleep(1000);}}}}

अन-गोल्फ :

namespace System
{
    class P
    {
        static void Main()
        {
            for(;;)
            foreach (var x in Text.RegularExpressions.Regex.Split(new IO.StreamReader("f.txt").ReadToEnd(), "\n\r\n"))
            {
                Console.Clear();
                Console.WriteLine(x); 
                Threading.Thread.Sleep(1000);
            }
        }
    }
}

या LINQPAD में (इसलिए C # uber शॉर्टहैंड लैंग्स के साथ अर्ध-प्रतिस्पर्धी रह सकता है: D)

C # LINQPAD - 134

for(;;)foreach(var x in Regex.Split(new StreamReader("f.txt").ReadToEnd(),"\n\r\n")){x.Dump();Thread.Sleep(1000);Util.ClearResults();}

मैं थोड़ा गंदा महसूस करता हूं, लेकिन हे, यह कोड-गोल्फ है।


0

स्माइलबासिक, 74 बाइट्स

F=LOAD(F)@L
IF" "*!CSRX>F[I]THEN WAIT 60CLS
?F[I];
I=(I+1)MOD LEN(F)GOTO@L

एफ फ़ाइल नाम होना चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.