ทำให้ฉันเป็นนิเมชั่นจางหายไป…ได้โปรด


15

งานของคุณคือทำตามคำแนะนำอย่างรอบคอบทำให้แอนิเมชั่นจางหายไปของคำเดียวเปลี่ยนเป็นคำที่สองสำหรับคุณอย่างแท้จริง

ว่าอะไรคือเรื่องนี้ "แอนิเมชั่จาง" คุณอาจถาม?

ในการสร้างอนิเมชันจางหายไปคุณต้องใช้สองสายซึ่งจะมีเฉพาะอักขระ ASCII ที่พิมพ์ได้ คุณเริ่มต้นด้วยการพิมพ์สตริงเริ่มต้นของคุณ (หนึ่งในสอง) จากนั้นคุณสุ่มเลือกอักขระในคำต้นฉบับและเปลี่ยนเป็นอักขระที่สอดคล้องกันในคำที่คุณต้องการทำให้เคลื่อนไหว เมื่อคำมีความยาวไม่เท่ากันคุณจะต้องใส่คำด้วยช่องว่าง

คุณเก็บไว้ในการทำเช่นนี้จนครบทุกตัวละครที่ได้รับการเปลี่ยนแปลง แต่คุณจะไม่เปลี่ยนลักษณะที่ดัชนีบางอย่างมากกว่าหนึ่งครั้ง นี่คือตัวอย่าง i / o:

Hey -> Peeps
Hey    # original string
Hey s  # replace char at index 4
Hey s  # replace char at index 1
Pey s  # replace char at index 0
Pee s  # replace char at index 2
Peeps  # replace char at index 3

คุณต้องเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบที่เปลี่ยนตัวอักษรจากนั้นพิมพ์สตริงใหม่ที่เพิ่มขึ้นหนึ่งวินาที รูปแบบอินพุตหลวม แต่รูปแบบเอาต์พุตเข้มงวด

นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

กรณีทดสอบบางส่วน (แบบฟอร์ม:) init -> final:

Stringy -> Blingy
Banana -> Republic
United -> States
Make America -> Tissue box
I like walls -> I have small hands
Hello, -> world!

การใช้งานอ้างอิงใน Python 2:

import random
import time
def F(c,f):
    print c                                      # before we do stuff
    if len(c)>len(f):f+=" "*(len(c)-len(f))      # add padding part 1
    if len(f)>len(c):c+=" "*(len(f)-len(c))      # add padding part 2
    c, f = list(c), list(f)
    ai = [i for i in range(len(c))]              # a list for keeping track 
    while len(ai) > 0:                           #  of available indices
        time.sleep(1)                            # 1 second pause...
        i = ai.pop(random.randint(0,len(ai)-1))  # get a random index and remove
        c[i] = f[i]                              #   it from the list
        print ''.join(c)                         # print the new string


ฉันไม่คิดว่ารหัสหลามนั้นถูกต้อง? เพราะคุณมีความคิดเห็นที่ไม่มีคำวิจารณ์?
Conor O'Brien

ข้อ จำกัด ใด ๆ เกี่ยวกับความยาวสตริง?
ติตัส

@ ConorO'Brien, ใช่แล้ว .... อ๊ะ: p
Daniel

@Titus ทุกอย่างที่ภาษาของคุณสามารถจัดการได้ฉันเดาว่า
Daniel

คำตอบ:


6

Pyth - 25 24 ไบต์

จะ refactor

AC.tQdV.SU
G
=XGN@HN.d_1

ลองมันออนไลน์ได้ที่นี่


โอเคขอบคุณสำหรับการชี้แจง!
Luis Mendo

5

MATL , 33 ไบต์

cn2/XKZ@!Oyhg*XR"GcK:@mK:Eq+)D1Y.

ลองที่MATL Onlineออนไลน์ คุณอาจต้องรีเฟรชหน้าและกด "Run" อีกครั้งหากไม่ได้ผล

อีกทางเลือกหนึ่งเวอร์ชันนี้ ( 35 ไบต์ ) ลบหน้าจอก่อนที่จะมีการแสดงสตริงใหม่แต่ละอันซึ่งส่งผลให้เกิดผลลัพธ์ที่ "แก้ไขแทนที่":


สิ่งนี้มีการหยุดหนึ่งวินาทีหรือไม่ มันไม่ทำงานบนโทรศัพท์ของฉัน
Daniel

@Dappapp ใช่สุดท้าย1Y.คือหยุดชั่วคราวภายในวง มันใช้งานได้สำหรับฉันจากคอมพิวเตอร์ของฉันโดยใช้ Chrome
Luis Mendo

@Dopapp คุณใช้ระบบปฏิบัติการอะไร?
Suever

@Suever, iOS 9
Daniel

1
@Dopapp เรายังคงแก้ปัญหาบางอย่างดังนั้นแจ้งให้เราทราบหากคุณมีอีก
Suever

2

Perl, 131 + 4 ( -F -l) = 135 ไบต์

@T=@F if!$i++}$T[$_]||=$",$F[$_]||=$"for 0..$#F,0..$#T;say@T;{$==rand@T;redo if$h{$=}++;$T[$=]=$F[$=];sleep 1;say@T;redo if++$v!=@T

ความต้องการ-Fและ-lแฟล็กที่จะรันรวมถึง-M5.010(หรือ-E) โปรดทราบว่าถ้ารุ่น perl ของคุณค่อนข้างเก่าคุณจะต้องเพิ่ม-anในบรรทัดคำสั่งของคุณ (ซึ่งฉันจะเพิ่มร้องเกินไปที่จะแสดง แต่ไม่จำเป็น) ตัวอย่างเช่น

$ cat fade.pl
@T=@F if!$i++}$T[$_]||=$",$F[$_]||=$"for 0..$#F,0..$#T;say@T;{$==rand@T;redo if$h{$=}++;$T[$=]=$F[$=];sleep 1;say@T;redo if++$v!=@T
$ perl -F -anl -M5.010 fade.pl <<< "Hey
Peeps"
Hey  
Pey  
Pee  
Pee s
Pee s
Peeps

ฉันค่อนข้างแน่ใจว่านี่อาจสั้นกว่านี้ แต่ฉันยังหาคำตอบไม่ได้ ... ถึงกระนั้นฉันไม่คิดว่านี่เป็นคำตอบที่ไม่ดีและหวังว่าใครบางคนจะได้รับการดลใจให้สั้นลง (หรือมีความคิดที่ต่างออกไปโดยสิ้นเชิง!)


2

Python 2, 171 169 168 163 ไบต์

import time,random as r
def f(a,b):
 d=len(a)-len(b);a+=' '*-d;b+=' '*d;o=range(len(a));r.shuffle(o);print a
 for i in o:time.sleep(1);a=a[:i]+b[i]+a[i+1:];print a

กรณีทดสอบอยู่ในideone


2

C # 299 ไบต์

void f(string a,string b){var m=Math.Max(a.Length,b.Length);var t=new Collections.Generic.HashSet<int>();while(t.Count<m)t.Add(new Random().Next()%m);var s=a.PadRight(m).ToCharArray();Console.WriteLine(s);foreach(var x in t){Threading.Thread.Sleep(1000);s[x]=b.PadRight(m)[x];Console.WriteLine(s);}}

Ungolfed

void f(string a, string b)
{
    var m = Math.Max(a.Length, b.Length);
    var t = new Collections.Generic.HashSet<int>();
    while(t.Count < m) t.Add(new Random().Next()%m);
    var s=a.PadRight(m).ToCharArray();

    Console.WriteLine(s);
    foreach (var x in t)
    {
        Threading.Thread.Sleep(1000);
        s[x] = b.PadRight(m)[x];
        Console.WriteLine(s);
    }
}

2

Perl, 109 108 99 99 ไบต์

รวมถึง +3 สำหรับ -n

กำหนดสตริงบน STDIN โดยไม่ขึ้นบรรทัดใหม่

echo -n "Make -> Tissue box" | perl -M5.010 fade.pl

fade.pl:

#!/usr/bin/perl -n
/ -> /;$_=$`^$`^$'^$';{$==rand(y/\x00//)+sleep say+($`&~$_|$'&$_)=~y/\x00/ /r;s%(.*?\K\x00){$=}%\xff%&&redo}

ทำงานตามที่แสดง แต่แทนที่\xhhด้วยอักขระตามตัวอักษรเพื่อรับคะแนนที่อ้างสิทธิ์

วิธีการใช้งาน\Kนี้เป็นสิ่งใหม่ที่ฉันคิดว่า ...


น่ากลัวเช่นเคย! เอาฉันสักครู่เพื่อคิดออกว่ามันทำงานอย่างไร! ใช้ดี\Kแน่นอน โปรดทราบว่ามีสอง\0ในรหัสของคุณเช่นเดียวกับ\xffที่สามารถแทนที่ด้วยตัวอักษรที่สอดคล้องกันดังนั้นจำนวนไบต์เป็น 108 จริง ๆ แล้วคุณอาจไม่เห็น แต่รูปแบบการป้อนข้อมูลฟรีจึงอาจมี สิ่งที่เรียงลำดับกว่า `-> 'เป็นตัวคั่น
Dada

@Dada Ah ถูกต้อง ขอบคุณ ในขณะที่กำลังพัฒนาฉันไม่เคยใช้ตัวอักษรที่แท้จริงดังนั้นจึงเป็นเรื่องง่ายที่จะพลาดสิ่งต่าง ๆ เมื่อปรับจำนวนไบต์ ตัวคั่นอีกตัวสามารถรับได้ถึง 3 ไบต์ แต่เป็นการเปลี่ยนแปลงที่ไม่น่าสนใจดังนั้นฉันจะปล่อยมันไว้
Ton Hospel

ใช่แน่นอน ฉันไม่นับการแก้ปัญหาทั้งหมดของคุณ แต่เมื่อผมทดลองกับพวกเขาและในกรณีที่มันทำให้ฉันเห็นบรรดา 4 ไบต์ที่คุณไม่ควรได้นับ;)
Dada


0

Java, 456 454 437 428 ไบต์

import java.util.*;public class c{public static void main(String[]s)throws Exception{char[]a=s[0].toCharArray(),b=s[1].toCharArray();int l,j=0;if(a.length<b.length){l=b.length;a=Arrays.copyOf(a,l);}else{l=a.length;b=Arrays.copyOf(b,l);}Vector i=new Vector();for(;j<l;i.add(j++));System.out.println(s[0]);while(l>0){Thread.sleep(1000);j=(int)i.remove(new Random().nextInt(l--));a[j]=b[j];System.out.println(String.valueOf(a));}}}

Ungolfed:

import java.util.*;

public class c
{

public static void main(String[] s) throws Exception
{
    char[] a = s[0].toCharArray(), b = s[1].toCharArray();
    int l, j = 0;
    if (a.length < b.length)
    {
        l = b.length;
        a = Arrays.copyOf(a, l);
    }
    else
    {
        l = a.length;
        b = Arrays.copyOf(b, l);
    }

    Vector i = new Vector();

    for (; j < l; i.add(j++));

    System.out.println(s[0]);

    while (l > 0)
    {
        Thread.sleep(1000);
        j = (int) i.remove(new Random().nextInt(l--));
        a[j] = b[j];
        System.out.println(String.valueOf(a));
    }
}
}

แก้ไข:ลบ 2 ไบต์โดย CAD97

แก้ไข:ลบ 17 byte โดย Kevin Cruijssen (ฉันแก้ไขข้อเสนอแนะเล็กน้อยโดยนำกลับมาใช้ใหม่jแทนที่จะสร้างตัวแปรใหม่xเพื่อรักษาขนาด)

แก้ไข:ลบ 9 ไบต์


คุณมีช่องว่างที่ไม่จำเป็นในการArrays::copyOfโทรสองสายของคุณ
CAD97

ดังที่ @ CAD97 กล่าวไว้คุณสามารถลบช่องว่างที่ไม่จำเป็นออกได้ ยังอาร์เรย์: และString[]s char[]aนอกจากนี้คุณยังสามารถกอล์ฟแห่งแรกของคุณสำหรับวง: for(;j<l;i.add(j++);; คุณสามารถลบRandom r=new Random();และใช้งานได้โดยตรง: new Random().nextInt(i.size()); คุณยังสามารถเพิ่ม,xเข้าไปในรายการ ints และโอกาสในขณะที่ลูปไปที่while((x=i.size())>0){...j=(int)i.remove(new Random().nextInt(x));...}และอาจมีมากขึ้นในการเล่นกอล์ฟที่ฉันหายไป
Kevin Cruijssen

0

PHP, 123 121 ไบต์

<?=$a=$argv[1];for($b=str_split(str_pad($argv[2],strlen($a)));$b;print"
$a"){$a[$i=array_rand($b)]=$b[$i];unset($b[$i]);}

บันทึกเป็นไฟล์ดำเนินการด้วยphp <filename> <string1> <string2>(หรือphp-cgi)

ชำรุด

<?=$a=$argv[1];                         // 0. print original
for(
    $b=str_split(                       // 2. split to array of single characers
        str_pad($argv[2],strlen($a))    // 1. pad 2nd argument to length of 1st argument
    );
    $b;                                 // 3. while $b has characters left
    print"\n$a"                         // 6. print altered string
){
    $a[$i=array_rand($b)]=$b[$i];       // 4. pick random index from $b, copy character to $a
    unset($b[$i]);                      // 5. remove character from $b
}

0

CJam, 44 ไบต์

q~{_,@\Se]s}2*1$peemr{es{_es-zA3#<}g;~t_p}/;

คำอธิบาย:

q~                                            get input
  {_,@\Se]s}2*                                pad each string to the length of the other
              1$p                             print starting string
                 eemr{                   }/   for each randomly shuffled enum of target string
                      es{_es-zA3#<}g;         1 second waiting loop    
                                     ~t_p     replace one character and print new string
                                           ;  clear stack

ความล่าช้าใช้งานได้กับล่าม Java เท่านั้นไม่ใช่ในล่ามออนไลน์

 java -jar cjam.jar badfade.cjam <<< '"banana" "republic"'

ลองออนไลน์ (ตั้งค่าหน่วงเวลาเป็น 1 มิลลิวินาที)


0

JavaScript (ES6) + HTML, 210 ไบต์

s=>e=>{s=[...s],e=[...e],d=e[k="length"]-s[k],(d>0?s:e).push(..." ".repeat(d>0?d:-d)),a=[...e.keys()],u=_=>{O.value=s.join``,s[i=a.splice(Math.random()*a[k]|0,1)[0]]=e[i],i+1&&setTimeout(u,1e3)},u()}
<input id=O

f("from this")("to this")เรียกว่าใช้ไวยากรณ์แกง:

ทำความสะอาด JS

s => e => {
    s = [...s],
    e = [...e],
    d = e[ k="length" ] - s[k],
    (d>0 ? s : e).push(..." ".repeat(d>0 ? d : -d)),
    a = [...e.keys()],
    u = _ => {
        O.value = s.join``,
        s[ i = a.splice(Math.random()*a[k]|0, 1)[0] ] = e[i],
        i+1 && setTimeout(u, 1e3)
    },
    u()
}

ตัวอย่างการทดสอบ

ต้องปิดวงเล็บปีกกาในการinputทำงานที่นี่

f=
s=>e=>{s=[...s],e=[...e],d=e[k="length"]-s[k],(d>0?s:e).push(..." ".repeat(d>0?d:-d)),a=[...e.keys()],u=_=>{O.value=s.join``,s[i=a.splice(Math.random()*a[k]|0,1)[0]]=e[i],i+1&&setTimeout(u,1e3)},u()}
<style>*{font-family:Consolas;}</style>
Starting String: <input id="A" type="text"><br>&nbsp;
Ending String: <input id="B" type="text">
<button onclick="f(A.value)(B.value)">Run</button>
<br><br>

<input id=O>


-1

Ruby, 106 ไบต์

->a,b{puts a=a.ljust(l=[a.size,b.size].max);b=b.ljust l
[*0...l].shuffle.map{|i|sleep 1;a[i]=b[i];puts a}}

ลองออนไลน์!

โอ้ไม่เป็นไร ไม่มีการคัดลอกใด ๆ อีกต่อไปในลิงค์ทดลองใช้งานออนไลน์ ถ้าไม่โปรดบอกให้ฉันรู้ว่าฉันทำอะไรผิด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.