.Txt ফাইল থেকে ফ্রেম প্রদর্শন করুন


14

কাজটি:

.txtএএসসিআইআই আর্টের ফ্রেমযুক্ত একটি ফাইল দেওয়া প্রত্যেককে একটি দ্বারা পৃথক করা \n(আপনি যদি অস্পষ্ট হন তবে এই উদাহরণটি দেখুন) প্রতি সেকেন্ডে 1 ফ্রেম সহ ফ্রেম সহ একটি গতি চিত্র আউটপুট দেয়।

মনে রাখবেন \nচূড়ান্ত ফ্রেমে একটি পিছনে রয়েছে ।

প্রতিটি ফ্রেমের মাত্রা হবে:

  • এক্স <80
  • Y <20

নিয়ম

  • পূর্ববর্তী ফ্রেমটি পরবর্তীটি প্রদর্শিত হওয়ার আগে অবশ্যই সাফ করতে হবে, তাই কেবলমাত্র প্রতিটি ফ্রেম টার্মিনালে মুদ্রণ করা বৈধ উত্তর নয়।
  • নতুন আপনি চাইলে ফাইলের নামটি দখল করতে পারেন, এটি ভেরিয়েবলের মধ্যে থেকে সংরক্ষণ করা যেতে পারে অথবা সিস আরগ থেকে নেওয়া যেতে পারে।
  • নতুন চিত্রগুলি অবশ্যই অনির্দিষ্টকালের জন্য লুপ করবে
  • এটি কোড গল্ফ: ক্ষুদ্রতম প্রোগ্রামের জয়।

উদাহরণ

ইনপুট

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
@ প্রোগ্রামআফক্স আমি অনুমান করি আপনি একটি ব্রাউজারে ফাইলটি খুলতে এবং ব্যবহার করতে পারেনdocument.body.innerText
ব্যবহারকারী 12205

3
@ প্রোগ্রামআফক্স মেক এটিকে কিছুটা অন্যায় করুন, ফাইল পরিচালনার দিকটি বেশিরভাগ ভাষায় অনেকগুলি অক্ষর যুক্ত করে
হ্যারি বিডল

উত্তর:


10

গণিত, 41 বাইট

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

ফাইলের নামটি ভেরিয়েবলের মধ্যে সঞ্চয় করার আশা করে f

এই প্রথম ম্যাথমেটিকার অগ্রাধিকার নিয়ম @এবং .~.~.আমার ঠিক যেমনভাবে তাদের প্রয়োজন are

তবে, এই স্নিপেটটি যদি ফাইল এক্সটেনশন ছাড়া অন্য কিছু হয় তবে মারাত্মকভাবে ভুল হতে পারে .txt(কারণ ম্যাথামেটিকা ​​তার ভিত্তিতে কীভাবে আমদানি করবেন তা অনুমান করার চেষ্টা করবে), তবে ভাগ্যক্রমে ফাইলটির সমাপ্তি চ্যালেঞ্জের নির্দিষ্টকরণের অংশ।


6

বাশ, 82

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

.Txt ফাইলটির ফাইলটির নামটি স্ক্রিপ্টের প্রথম আর্গুমেন্ট হিসাবে সরবরাহ করা হয়েছে Ass

নোট করুন যে এটির জন্য একটি টেক্সেল ফাঁকা লাইন অবশ্যই .txt ফাইলের শেষে উপস্থিত থাকতে হবে।

@ প্রোফেসরফিশ এবং @ ডিজিটাল ট্রামুমাকে বিশেষ ধন্যবাদ।


1
$IFSডিফল্টভাবে ফাঁকা না ? এছাড়াও, ব্যবহারকারীর for ((;;)){ ... }পরিবর্তে ব্যবহার করুনwhile :;do ... done

ডিফল্টরূপে @ প্রফেসারফিশ আইএফএস হ'ল <স্পেস> << ট্যাব> <নিউলাইন>। এটি সেট করা দরকার ''যাতে readY এর শেষ লাইনে যেমন একাধিক একটানা স্পেস পড়তে পারে
ব্যবহারকারী 12205

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, যা চিরকাল loops কোন যুক্তি দেওয়া হয়: a.cycle{|i|system"cls";$><<i;sleep 1}। এবং বিভক্ত করা এর $/+$/চেয়ে আরও ছোট একটি চরিত্র "\n\n"
ভেন্টোরো

1
এটি আপনাকে এর সংজ্ঞাটিও ইনলাইন করতে দেয় a: $<.read.split($/+$/).cycle{...}(ট্রিপল মন্তব্যের জন্য দুঃখিত, মন্তব্য সম্পাদনার সময় শেষ হওয়ার পরে আমি সবসময় নতুন উন্নতির কথা ভাবি :))
ভেন্টোরো

2

ডায়ালগ এপিএল ()৪)

(এবার ম্যাথেম্যাটিকাকে পরাজিত করতে পারবেন না everything মনে হচ্ছে এটি সব কিছুর জন্য অন্তর্নির্মিত।

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

এটি এমন একটি ফাংশন যা ফাইলনামটিকে তার আর্গুমেন্ট হিসাবে গ্রহণ করে। এটি ধরে নেয় ফাইলটি উইন্ডোজ ( \r\n) ফর্ম্যাটে রয়েছে।

ব্যাখ্যা:

  • ⎕ML←3: মাইগ্রেশন স্তর 3 তে সেট করুন ( এপিএল 2 এর বিভক্ত বৈশিষ্ট্য হিসাবে ব্যবহারের অনুমতি দেওয়া)
  • M←80 ¯1⎕MAP⍵: ASCII ফাইল হিসাবে সঠিক যুক্তির দ্বারা প্রদত্ত ফাইলটি পড়ুন এবং এতে সামগ্রী সংরক্ষণ করুন M
  • M⊂⍨~(4/1)⍷⎕TC∊⍨M: টানা চারটি টার্মিনাল নিয়ন্ত্রণের অক্ষরগুলির সমস্ত উপস্থিতি সন্ধান করুন এবং সেগুলিতে বিভক্ত Mহন। এটি প্রতিটি ফ্রেম দেয়।
  • {... : এই প্রতিটি জন্য ...
    • ⊂⊃⍵⊂⍨~⍵∊⎕TC: টার্মিনাল নিয়ন্ত্রণ অক্ষরগুলিতে আর্গুমেন্টটি (= একটি ফ্রেম) বিভক্ত করুন এবং তারপরে ভেক্টর-অফ-ভেক্টরগুলিকে একটি ম্যাট্রিক্সে পরিণত করুন (সুতরাং এটি প্রতিটি লাইন একটি পৃথক লাইনে প্রদর্শিত হবে, এটি প্রয়োজনীয় কারণ ⎕SMনিয়ন্ত্রণের অক্ষর বোঝে না))
    • ⎕SM←1 1,⍨: তারপরে এটি ⎕SMউইন্ডোর উপরের বামে প্রদর্শন করুন ।
    • ⎕DL 1: এবং তারপরে এক সেকেন্ডের জন্য অপেক্ষা করুন।

হা, শেষ পর্যন্ত! এবং এখনও আমার উত্তর খুব সংক্ষিপ্ত নয় কারণ ফাংশনটির নামগুলি এত জঘন্য দীর্ঘ! : ডি
মার্টিন এন্ডার

1
কাউকে এমন একটি ম্যাথমেটিকা ​​প্রিপ্রোসেসর লিখতে হবে যা প্রতিটি ইউনিকোড চরিত্রের জন্য নির্মিত প্রতিটি ফোল্ডারে ম্যাপ করে
ডিজিটাল ট্রমা

2

আওক, 53

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


নতুন নিয়ম:

ওউ, 74

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... অজস্রভাবে, মাল্টলাইন রেকর্ডগুলির অর্থ ""বিশেষ is RSঅনির্দিষ্টকালের জন্য লুপিংয়ের নতুন নিয়মকে সমর্থন করার জন্য আমার এখন পর্যন্ত এটি রয়েছে: BEGIN{RS=z}END{for(;!system("sleep 1;clear");)print a[i++%NR+1]}{a[NR]=$0}74৪ টি অক্ষরে। গোক পরিবর্তনটি সমর্থন করে ARGVযাতে আপনি BEGIN{RS=z}{system("sleep 1;clear");ARGV[ARGC++]=ARGV[ARGC-1]}163 টি অক্ষরে করতে পারেন ।
লিন্ডির

@ লাইল্ডির: ধন্যবাদ, আমি এর চেয়ে ভাল আর কিছু করতে পারি না।
প্রথমত

1

পার্ল, 40

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

হিসাবে চালান

perl -p00 frames.pl < animation.txt

(যেমন এসিডিনের মাধ্যমে অ্যানিমেশন ফাইলটি পড়া হয়)। 3 বাইট জন্য p00গণনা যোগ করা হয়েছে। এর পরিবর্তে এটি উইন্ডোজে 2 অক্ষর সংক্ষিপ্ততর অর্থাৎ 38 টি কম । বা, বহনযোগ্য হতে:clsclear

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

অথবা, প্রসারিত কিছুটা নিয়ম করে (এবং তারপরে 31 + 3 = 34 ):

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

1

রেবোল, 74

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


ফাইলের নামটি ভেরিয়েবলের মধ্যে সঞ্চয় করার আশা করে f। নীচে একটি অবারিত উদাহরণ দেওয়া হল:

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'একটি UNIX ভিত্তিক সিস্টেমে, 2 chrs যোগ।

ctl+C ছাড়তে


for i in F: s.addstr(y,0,i); ... if i=='': ...
ব্যবহারকারী 12205

এর open(f).read()পরিবর্তে file.read(file(f))4 বাইট দ্বারা সংক্ষিপ্ততর ব্যবহার করুন ।
nyuszika7h

0

গ্রোভি - 121 119 অক্ষর

গ্রোভির ২.২.১-এ প্রোগ্রামে ফক্সের উত্তর পোর্ট করা হয়েছে । "ক্লিয়ার কনসোল" দুর্বল।

সম্পাদনা করুন : সরল অবস্থায় লুপের সাহায্যে পুনরাবৃত্তির বন্ধটি প্রতিস্থাপন করা হয়েছে যা সংক্ষিপ্ত এবং কোনও স্ট্যাকের ওভারফ্লো নয়

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

গ্রোভি, ৮১

এটি আরও কৌতুকপূর্ণ উপায়:

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)
}

"ক্লাস" কমান্ডটি আমার ম্যাকটিতে কাজ করে না। এছাড়াও, প্রয়োজনীয়তাগুলি প্রস্তাব দেয় যে গতি চিত্র লুপ হয়।
মাইকেল ইস্টার

2
clsclear
@ মিশেল

0

সি # 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);
            }
        }
    }
}

বা লিনকপ্যাডে (যাতে সি # উবার শর্টহ্যান্ড ল্যাংসের সাথে আধা প্রতিযোগিতামূলক থাকতে পারে: ডি)

সি # লিনকপ্যাড - 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

এফ ফাইলের নাম হওয়া উচিত

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.