Bu benim X'im değil, Y'si çok Z


17

Bu zorluğa, son zamanlarda kızımla birlikte keyif aldığım Fiona Watt ve Rachel Wells'in bir dizi genç çocuk kitabı ilham verdi.

Her kitapta bir fare (resimli fakat metnin bir parçası değil), aynı türden 5 şeyden oluşan bir dizinin kendi işi olmadığından şikayet eder. Daha sonra, nesnenin bazı bileşenlerinin beklediği özelliğe sahip olmadığını bildirerek bunu yedekler.

Altıncı soruda, fare bir şey bulur ve beklenen özelliğe sahip olduğu için memnun olur.

İşte tipik bir örnek metni:

That's not my bunny, its tail is too fluffy.
That's not my bunny, its paws are too rough.
That's not my bunny, its tail is too woolly.
That's not my bunny, its eyes are too shiny.
That's not my bunny, its nose is too wrinkled.
That's my bunny! Its ears are so soft.

Şimdi, çoğu programlama halkının bunun bazı metinler üretmek için çok algoritmik bir yöntem olduğunu anlayacaktı. Çok açık bir süreç olduğu için bunu bir kod yazarak çoğaltabilmeliyiz.

Üç kelime koleksiyonu ile başlayalım:

things = ["dinosaur", "lamb", "princess", "reindeer", "train"]
parts = ["back", "bells", "body", "bows", "crown", "dress", "ears",
  "engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
  "nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
  "tiara", "wheels", "windows"]
properties = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
  "hairy", "red", "rough", "rusty", "shiny", "silky", "slippery", 
  "soft", "sparkly", "squashy", "thick", "velvety", "woolly"]
  • İlk olarak, ne tür bir şey tarif edeceğimize karar veriyoruz.
  • Sonra 5 kez, "Bu benim [şeyim değil, [kısmı] da [mülkiyet]] satırını üreteceğiz.
  • Sonunda, "Bu benim [şeyim!" [Onun] kısmı [mülkiyet]!

Meydan okuma

  • "Bu benim değil ..." hikayesinin metnini oluşturun.
  • Aynı metni tutarlı bir şekilde üretmemelidir.
  • Bu kod golf, bu yüzden bayt az sayıda bunu yapmaya çalışın.
  • Lütfen dilinizi kullanın.
  • Beyaz boşluk önemli değildir, ancak çizgiler arasında yeni satır karakteri olmalıdır.
  • Kaynak kelime listeleri cevabınızın bir parçası değildir (TIO'da başlığa eklenebilir).
  • Kaynak sözcük listelerini yeniden adlandırabilirsiniz.
  • Çıkış bir nesneye veya bir nesneye üretilen metne gönderilebilir.
  • Lütfen çevrimiçi bir tercümanın bağlantısını ekleyin.
  • Çoğulları görmezden gelin, "boynuzları iyi".
  • Mantıklı olması gerekmez. Prensesinizin hunisi çok kabarıksa, söyleyin.

Örnek çıktı:

That's not my train, its engine is too rusty.
That's not my train, its hooves is too thick.
That's not my train, its sash is too fuzzy.
That's not my train, its tail is too velvety.
That's not my train, its horns is too glittery.
That's my train! Its hooves is so hairy.

Mutlu golf!


2
@Shaggy İlk örnek, kitaplardan birinin gerçek metnidir. Bu meydan okuma için geçerli bir cevap değil. Meydan okumayı biraz basitleştirmek için çoğulları görmezden gelmeyi söyledim. Bu örnek temelde arka plan bilgisidir.
AJFaraday


10
"Mantıklı olması gerekmiyor" diyorsunuz, bu kasılmalara yakın mı? (yani "Bu benim tavşanım değil, gözleri çok parlak. ... Bu benim tavşanım! Gözleri çok parlak." olası bir çıktı olarak kabul edilebilir mi?) - Tahmin ediyorum, sadece kontrol edeceğimi düşündüm.
Jonathan Allan

13
"Sürekli aynı metni yeniden üretmemeli " ve kolmogorov-karmaşıklığı bir tür uyumsuz değil mi?
Joseph Sible-Reinstate Monica

2
@ChrisH Bu benim taksonomik hatam. Her ikisi de Glires olarak sınıflandırılmış olsa da, bugün öğrendiğim bir şey.
AJFaraday

Yanıtlar:


1

05AB1E , 63 bayt

ΩU6F€Ω`XN5Qi“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ë“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“}.ª,

Çevrimiçi deneyin.

Yinelenen parçaların veya özelliklerin çıktısını almayan 68 baytlık sürüm:

ΩUε.r6£}øεXª`N5Qi“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ë“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“}.ª,

Çevrimiçi deneyin.

Her iki program da şeylerin listesinin ilk girdi olduğunu ve parça listesini ve özellik listesini içeren listenin ikinci girdi olduğunu varsayar.

Açıklama:

Ω            # Pop and push a random element of the things-list
 U           # Pop and store it in variable `X`
  6F         # Loop 6 times:
    €Ω       #  Get a random element from both the parts and properties list
      `      #  Push them to the stack
       X     #  And also push variable `X`
             #  (the order on the stack is now: property, part, thing)
    N5Qi     #  If it's the last iteration:
        “€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ 
            '#   Push dictionary string "that's my ÿ! its ÿ is so ÿ."
       ë     #  Else:
        “€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“
            '#   Push dictionary string "that's not my ÿ, its ÿ is too ÿ."
             #  (where the `ÿ` are automatically replaced with the words on the stack)
       }.ª   #  After the if-else: sentence-capitalize the strings
             #  (so the "That's " as well as the "! Its")
          ,  #  And output it with trailing newline


ΩU           # Pop and store a random thing in variable `X`
  ε          # Map the list of lists of parts/properties to:
   .r        #  Shuffle the list
     6£      #  And leave the first six elements
           # After the map: zip/transpose to create pairs of part & property
    ε        # Foreach over the pairs:
     `XN5Qi“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ë“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“}.ª,
             #  And the rest of the code is the same as above

Neden “€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“olduğunu "that's my ÿ! its ÿ is so ÿ."ve “€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“olduğunu anlamak için bu 05AB1E ipucuma bakın ( sözlük nasıl kullanılır? )"that's not my ÿ, its ÿ is too ÿ." .


10

Python 3 , 149 bayt

lambda a,*l:shuffle(a)or["That's "+s%(a[0],*map(choice,l))for s in["not my %s, its %s is too %s."]*5+["my %s! Its %s is so %s."]]
from random import*

Çevrimiçi deneyin!

Movatica sayesinde -9 bayt


İyi iş! Kısa grup sözdizimi: 149 bayt
movatica

1
@movatica Ooh, güzel. Teşekkürler!
HyperNeutrino

"Bu benim ren geyiğim değil, kulakları çok inişli çıkışlı." - is / are arasında geçiş yapmak için bir şeye ihtiyaç duyar.
John Hunt

1
Kurallar çoğulları görmezden geldiğini söylüyor.
19:19, HyperNeutrino

Benim hatam. Bu etkileyici.
John Hunt

8

Kömür , 72 bayt

≔‽θθF⁵«That's not my θ, its ‽η is too ‽ζ.⸿»That's my θ! Its ‽η is so ‽ζ.

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Şeyler parça ve özellikleri dizileri değişken olmasını bekler θ, ηve ζen kolay giriş yerine başlığında sağlayarak yerleştirilmiş olan,. Açıklama:

≔‽θθ

Rastgele bir şey seçin.

F⁵«That's not my θ, its ‽η is too ‽ζ.⸿»

Beş olumsuz cümle yazdırın.

That's my θ! Its ‽η is so ‽ζ.

Olumlu cümleyi yazdırın.


6

Japt v2.0a0 -R, 73 bayt

ö
6Æ`Tt's {`not `pT=Y<5}my {+`!,`gT} {73dT*H}ts {Vö}  {`tÑ?`ë2!T} {Wö}.

Olarak üç listeleri Alır U, Vve W. Bunlar zaten varsayılan giriş değişkenleridir, bu yüzden giriş listesine üç listeyi koymanız yeterlidir.

Dene

ö                         Saves the random object in variable U
6Æ                        Range [0..6), and map each to the following string
`That's                   The string "That's " plus
{`not `pT=Y<5}            "not " if the index is less than 5 (and store that in variable T), else ""
my                        Literal "my " plus
{+`!,`gT}                 U plus ',' if T, else '!'
{73dT*H}ts                "its " if T, else "Its "
{Vö}                      Random item from V
is                         
{`tsooo`ë2!T}             "too" if T, else "so"
{Wö}.                     Random item from V, plus a period

"Çok / çok" ile çok güzel hile :)
Shaggy

6

Güç kalkanı , 147 bayt

Bu ana program, herhangi bir parçayı veya özelliği bir çalıştırmada tekrarlamaz ve makul bir randomizasyona sahiptir.

$t=$l|Random
$a=$a|Random -c 6
$r=$r|Random -c 6
0..4|%{"That's not my $t, its $($a[$_]) is too "+$r[$_]}
"That's my $t! Its $($a[5]) is so "+$r[5]

Çevrimiçi deneyin!

Bu get-randomkadar çok kez yazmak çok fazla karaktere mal oluyor! Ancak, parçaların ve özelliklerin tekrarlanmasına izin vermek istemiyorsanız, bunu powershell'de küçültmenin bir yolunu daha fazla göremiyorum. İlk 3 hat borusunu başlıktaki 3 atama çizgisinin sonuna taşımazsanız. Gibi bir şeye sahip olmak

# Header
$l = ("dinosaur", "lamb", "princess", "reindeer", "train")|Get-Random
$a = ("back", "bells", "body", "bows", "crown", "dress", "ears",
  "engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
  "nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
  "tiara", "wheels", "windows")|sort{Get-Random}
$r = ("bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
  "hairy", "red", "rough", "rusty", "shiny", "silky", "slippery", 
  "soft", "sparkly", "squashy", "thick", "velvety", "woolly")|sort{Get-Random}

# Main
(1..5)|%{echo("That's not my $t, its "+$a[$_]+" is too "+$r[$_])}
"That's my $t! Its "+$a[6]+" is so "+$r[6]

Ama bu hile gibi görünüyor ve hala Neil'in cevabını geçmiyor.

Düzenleme: İpuçları Matt için teşekkürler, ve onları temizlemek için AdmBorkBork teşekkür, 3 set get-metin kaldırılması 159 bayt azaldı, sonra Adm biraz daha golf 147 aşağı var. Düşünüyorum kod hangi yinelenen izin ve çelişkili ifadeler aynı golf ipuçlarını uyguladıktan sonra 144 karakterdi .

function n{(random 18)+1}
$t=$l[(n)%5]
0..4|%{"That's not my $t, its $($a[(n)]) is too "+$r[(n)]}
"That's my $t! Its $($a[$(n)]) is so "+$r[(n)]

Çevrimiçi deneyin!

Bununla birlikte, sadece aynı şeyi birden çok kez söyleme eğilimi yoktur, aynı zamanda girişlerinizin aynı sayıda öğe olmasını gerektirir. Kullanılan sözde rasgele sayı üretecinin büyük ölçüde saate bağlı olduğuna inanıyorum ve hızlı tekrarlanan çağrılar genellikle aynı sonuçla sonuçlanabilir. Sonra sadece tüm listeler aynı uzunlukta ise tüm listeyi kullanması koşulu vardır. Sadece 3 ~ 5 karakter kaydederek ve çok sayıda uyarı ile, bu yazının başında kodu tercih ederim.


1
PPCG'ye Hoşgeldiniz! Parçalar ve özellikleri olabilir o bazı bayt kaydetmek gerekir bu yüzden tekrarlanmalıdır.
Shaggy

2
Sen bırak Get-dan Get-Random. Komutları değerlendirirken test edilen varsayılan fiildir.
Matt

2
Hoşgeldiniz! Bazı kolay golfler alır sen aşağı için 147 bytes
AdmBorkBork


2

JavaScript, 129

(a,b,c)=>(z='',a.forEach((f,i)=>z+=`That's ${q=i!=5?"not ":""}my ${f}${q?", i":"! I"}ts ${b[i]} is ${q?"to":"s"}o ${c[i]}.\n`),z)

girdi üç dizidir, dize döndürür



2

C # , 204 203 bayt

()=>{int a(int x)=>new Random().Next(x);var j=t[a(5)];string s()=>$"That's not my {j}, its {p[a(25)]} is too {o[a(19)]}.\n";return s()+s()+s()+s()+s()+$"That's my {j}! Its {p[a(25)]} is so {o[a(19)]}.";};

Bu sitedeki ilk cevabım, umarım iyi çalışır. Ayrıca bu üç şeye de ihtiyacı var, ancak soruya göre bunlar sayılmaz:

   var t = new[] { "dinosaur", "lamb", "princess", "reindeer", "train" };
   var p = new[] {"back", "bells", "body", "bows", "crown", "dress", "ears",
          "engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
          "nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
          "tiara", "wheels", "windows" };
   var o = new[] {"bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
          "hairy", "red", "rough", "rusty", "shiny", "silky", "slippery",
          "soft", "sparkly", "squashy", "thick", "velvety", "woolly"};

Çevrimiçi deneyin!

Sok sayesinde daha az bayt.


1
PPCG'ye Hoşgeldiniz! TIO'ya bir bağlantıda düzenleme özgürlüğünü cevabınıza aldım, böylece diğerleri kodunuzu kendileri için kolayca deneyebilirim - Bu yorumda size bağlantıyı verirdim, ancak URI ne yazık ki çok uzundu! Umarım konaklamanızdan keyif alırsınız: o)
Sok

1
Sizin için bir küçük golf - \r2 bayt kurtaracak gerekli değildir.
Sok

1

APL (Dyalog Unicode) , 117 bayt SBCS

↑('That''s not my ',(tT⊃⍨?5),', its ')∘,¨P[5?25],¨' is too '∘,¨V[5?19]
'That''s my ',t,'! Its',P[?25],'is so',V[?19]

Çevrimiçi deneyin!

?N ilk N endeksleri arasında rastgele bir indeks oluşturur.

M?N ilk N indeksleri arasında M rasgele indeksleri (replasman olmadan) üretir.

, birleştirme

t←T⊃⍨… Rastgele bir şey seçip çağırıyor t ve son satırda yeniden kullanılmaya .

∘,¨ soldaki dizeyi sağdaki her dizeyle birleştirir.

soldaki her dizeyi sağdaki her dizeyle birleştirir.

 dize listesini sağa yazdırmak için bir karakter matrisine dönüştürür.


1

Pyth , 88 78 76 bayt

JONj_ms.ic"That's
 my 

ts 
 is 
o 
."b[?d" not"kJ?d", i""! I"OG?d\s"to"OH)6

Çevrimiçi deneyin!

Yukarıda sunulan kod için aşağıdaki başlık gerekir:

=N["dinosaur""lamb""princess""reindeer""train")=G["back""bells""body""bows""crown""dress""ears""engine""fan""flippers""funnel""hooves""horns""neck""nose""roof""sash""side""spines""spots""tail""teeth""tiara""wheels""windows")=H["bumpy""fluffy""furry""fuzzy""glittery""glossy""hairy""red""rough""rusty""shiny""silky""slippery""soft""sparkly""squashy""thick""velvety""woolly")

TIO'nun Pyth ile birlikte 'Başlık' özelliğini kullanmayla ilgili küçük bir sorun var, çünkü TIO yeni satırlardaki kod bloklarına katılıyor ve Pyth için yeni satırlar önemli. Burada, çıkışta önemsiz bir çizgi bulunan 'Header' bloğunu kullanan aynı koda bir bağlantı bulunmaktadır.

JONj_ms.ic"That's¶ my ¶¶ts ¶ is ¶o ¶."b[?d" not"kJ?d", i""! I"OG?d"to"\sOH)6   Newlines replaced with ¶
                                                                               Implicit: k="", b=newline
                                                                               From header: N=things, G=parts, H=properties
JON                                                                            Choose a random element from N, store in J
     m                                                                     6   Map [0-6), as d, using:
                                        ?d" not"k                                If d is truthy (i.e. not 0), yield " not", else ""
                                                 J                               J (the chosen thing)
                                                  ?d", i""! I"                   ", i" if d else "! I"
                                                              OG                 Random element from G
                                                                ?d"to"\s         "to" if d else "s"
                                                                        OH       Random element from H
                                       [                                  )      Wrap the previous 6 results in an array
         c"That's¶ my ¶¶ts ¶ is ¶o ¶."b                                          Split the template string on newlines
       .i                                                                        Interleave the template string elements with the previous list
      s                                                                          Concatenate
    _                                                                          Reverse lines
   j                                                                           Join on newlines, implicit print

Düzenleme: 10 bayt golf yeniden yaz, önceki sürüm: J+" my "ONV5%"That's not%s, its %s is too %s."[JOGOH;%"That's%s! Its %s is so %s."[JOGOH


1

Perl 5.10, 127 bayt

İle çalıştırın perl -M5.010 -f filename.pl.

my @t = qw(dinosaur lamb princess reindeer train);
my @r = qw(back bells body bows crown dress ears engine fan flippers funnel
           hooves horns neck nose roof sash side spines spots tail teeth tiara
           wheels windows);
my @p = qw(bumpy fluffy furry fuzzy glittery glossy hairy red rough rusty shiny
           silky slippery soft sparkly squashy thick velvety woolly);

sub r{rand@_}$a=" my $t[r@t]";say"That's not$a, its $r[r@r] is too $p[r@p]."for(1..5);say"That's$a! Its $r[r@r] is so $p[r@p]."

1

JavaScript ES6, 149 (+15?) Bayt

a = ["dinosaur", "lamb", "princess", "reindeer", "train"]
b = ["back", "bells", "body", "bows", "crown", "dress", "ears",
  "engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
  "nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
  "tiara", "wheels", "windows"]
c = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
  "hairy", "red", "rough", "rusty", "shiny", "silky", "slippery", 
  "soft", "sparkly", "squashy", "thick", "velvety", "woolly"]

// r=x=>x[parseInt(Math.random()*x.length)] 164 for better random on fast pc

r=x=>x[new Date%x.length]
s=r(a)
g=j=>console.log(`That's ${j?`not my ${s}, its ${r(b)} is to`:`my ${s}! Its ${r(b)} is s`}o ${r(c)}.`)
a.map(g) 
g()


Code Golf'e hoş geldiniz! İyi iş!
AJFaraday

1
Teşekkürler AJ! Hoş geldiniz :)
Onitz

1

Toplu Dosya, 434424 + 7 bayt

Yoluyla yürütülür cmd/q/c.

Kod sayılmadı

set a=dinosaur lamb princess reindeer train
set b=back bells body bows crown dress ears engine fan flippers funnel hoobes horns neck nose roof sash side spines spots tail teeth tiara wheels windows
set c=bumpy fluffy furry fizzy glittery glossy hair red rough rusty shiny silky slippery soft sparkly squashy thick velvety woolly

Kod sayıldı

set q=random
set m=set/ar=1+%%%q%%%%%%%
call %m%5
for /f "tokens=%r%" %%x in ("%a%")do set x=%%x
:a
set/ad+=1
call %m%25
for /f "tokens=%r%" %%y in ("%b%")do set y=%%y
call %m%19
for /f "tokens=%r%" %%z in ("%c%")do echo That's not my %x%, its %y% is too %%z.
if %d% neq 5 goto a
call %m%25
for /f "tokens=%r%" %%y in ("%b%")do set y=%%y
call %m%19
for /f "tokens=%r%" %%z in ("%c%")do echo That's my %x%! Its %y% is so %%z.

Karşılaşabileceğiniz bazı zorluklardan geçeceğim ve başkalarının gelişebilmesi için yaptığım şeyi açıklayacağım / gerekçelendireceğim.

Bir diziden bir rastgele eleman seç
I arasında rasgele bir sayı üretmek ile bunu 1ve nburada nbu dizideki elementlerin miktarıdır. Daha sonra bu rastgele sayıyı her fordöngüde ( tokens=%r%) kapmak için jeton olarak kullandım . Bu şekilde yaptığım için, bu fordöngüler artık tokens=!r!benim için çalışmadığı gibi (gecikmeli genişleme ile) iç içe olamazdı . Bu, belirteçleri değişken olarak kaydetme ihtiyacını ortadan kaldıracağı için birkaç bayt tasarruf ederdi (set x=%%x ) .

Rastgele sayı üretme
m , rastgele sayı üretme makrosumdur. Bu şekilde yapmak, set/ar=%random%%%n+1her satırda olduğu gibi 32 bayt tasarruf etmenizi sağlar . Sen yarı hile ve belirteçleri karar verebilir yve zaynı eleman olmak şunlardır:

call %m%19
for /f "tokens=%r%" %%y in ("%b%")do set y=%%y
for /f "tokens=%r%" %%z in ("%c%")do echo That's not my %x%, its %y% is too %%z.

Bu, hala bazı rasgelelikleri korurken, son 6 unsurunu hariç tutacaktır c. Bu en az 20 bayt tasarruf sağlardı, ancak bunun op'un gereksinimleri için doğru olduğunu düşünmüyorum.

Teorik İyileştirmeler Baytları
kaydederken bu "sahte kod" un çalışmasını sağlamak için epey zaman harcadım:

set 1-5=echo That's not my %x%, its %y% is too %%z.
set 6=echo That's my %x%! Its %y% is so %%z.
...
set/ad+=1
for /f "tokens=%r%" %%z in ("%c%")do call %%d%%

Ne yazık ki bunun için kurulum karlı olmak için çok fazla bayt almayı kanıtlıyor (<144 bayt içinde uygulamak zorunda) ama son 4 satır kod eklemenin gereksiz ve sarsıntılı olduğu hissini sallayamıyorum.


Önceden tanımlanmış değişkenler aracılığıyla girdi alma izniniz yok. Standart IO yöntemlerinden
Jo King

1
@JoKing Zorluktan:The lists of source words are not part of your answer (in TIO they can be added to the header).
AdmBorkBork

Diğer yanıtlarda her iki şekilde de yapıldığına izin verilip verilmediğinden emin değilim, ama meraklılarınız için cevabım set a=%~1vb.
Şeklinde

1

mürekkep , 119 bayt

~a=LIST_RANDOM(a)
-(l)That's{l<6: not} my {a}{l<6:, i|! I}ts {LIST_RANDOM(b)} is {l<6:to|s}o {LIST_RANDOM(c)}
{l<6:->l}

Listeler,

LIST a=(dinosaur),(lamb),(princess),(reindeer),(train)
LIST b=(back),(bells),(body),(bows),(crown),(dress),(ears),(engine),(fan),(flippers),(funnel),(hooves),(horns),(neck),(nose),(roof),(sash),(side),(spines),(spots),(tail),(teeth),(tiara),(wheels),(windows)
LIST c=(bumpy),(fluffy),(furry),(fuzzy),(glittery),(glossy),(hairy),(red),(rough),(rusty),(shiny),(silky),(slippery),(soft),(sparkly),(squashy),(thick),(velvety),(woolly)

Çevrimiçi deneyin!


Liste olarak neyin sayıldığına bağlı olarak, başka yaklaşımlar da vardır. Bir liste, bir liste öğesini rastgele döndüren bir işlevse, aşağıdaki yaklaşım yalnızca 91 bayttır:

~temp t=u()
-(l)That's{l<6: not} my {t}{l<6:, i|! I}ts {p()} is {l<6:to|s}o {q()}
{l<6:->l}

("listeler" aşağıdaki gibi tanımlandığında)

==function u
~return "{~dinosaur|lamb|princess|reindeer|train}"
==function p
~return "{~back|bells|body|bows|crown|dress|ears|engine|fan|flippers|funnel|hooves|horns|neck|nose|roof|sash|side|spines|spots|tail|teeth|tiara|wheels|windows}"
==function q
~return " {~bumpy|fluffy|furry|fuzzy|glittery|glossy|hairy|red|rough|rusty|shiny|silky|slippery|soft|sparkly|squashy|thick|velvety|woolly}."

Çevrimiçi deneyin!


Aşağıdaki yaklaşım da var.

~temp t="{~dinosaur|lamb|princess|reindeer|train}"
-(l)That's{l<6: not} my {t}{l<6:, i|! I}ts {~back|bells|body|bows|crown|dress|ears|engine|fan|flippers|funnel|hooves|horns|neck|nose|roof|sash|side|spines|spots|tail|teeth|tiara|wheels|windows} is {l<6:to|s}o {~bumpy|fluffy|furry|fuzzy|glittery|glossy|hairy|red|rough|rusty|shiny|silky|slippery|soft|sparkly|squashy|thick|velvety|woolly}
{l<6:->l}

Çevrimiçi deneyin!

Bu çözüm 389 bayttır, ancak shuffle değişmez değerleri (bu senaryoda gerçekten hareket ettirilemez) liste tanımları olarak sayılır ve bayt sayısından hariç tutulabilirse, bu 80 bayta düşer.


0

Bash + awk, 209 bayt

T=$(shuf $1|head -1)
join <(sed "s/.*/$T\t&/" $2) <(sed "s/.*/$T\t&/" $3)|shuf|awk 'NR<6{printf "That'\''s not my %s, its %s is too %s.\n",$1,$2,$3}NR==6{printf "That'\''s my %s! Its %s is so %s.\n",$1,$2,$3}'

Çevrimiçi deneyin!

Girdileri, things parts propertiesher birinin istenen türde satır başına bir öğe içeren bir dosya olduğu kabul eder.

Bu dosya merkezli bir yaklaşımdır. İyileştirilip iyileştirilemeyeceğini görmek için dizi merkezli bir yaklaşımı deneyebilir.


-2

Python 3, 130 bayt

Gereksinimlerinizi tam anlamıyla almak ve satır başlarını birer bayt almak:

y=0
def x():
    global y
    y=1-y 
    print(("That's not my lamb, it's "+b[0:1][y]+" is too red\n")*5+"That's my lamb! Its fan is so red")

"Aynı metni tutarlı bir şekilde yeniden üretmemelidir." Söyleyebileceğim kadarıyla, kodunuz her zaman bana tutarlı çıktı gibi görünen iki seçenekten biri arasında değişecektir. Ayrıca, her satırda aynı özellikleri her zaman kullanma durumu, açıklama açıklamalarında açıkça izin verilmemiştir.
Değer Mürekkebi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.