Configurer le totem tribal pour la météo demandée

11

Il y a un village Sioux. Il a un totem:

             __
         ___|  |___
   \/    \        /    \/
   /\     ``|  |``     /\
  /^^\      |  |      /^^\
 / /\ \     |  |     / /\ \
''''''''''''''''''''''''''''

Le totem permet aux Sioux de maîtriser la météo pour les aider dans leurs différentes tâches. Aidez les villageois à décorer correctement le totem pour invoquer le temps adéquat. Le totem comprend plusieurs parties:

             __
         ___|AA|___
   \/    \BBBBBBBB/    \/
   /\     ``|CC|``     /\
  /^^\      |DD|      /^^\
 / /\ \  13 |EE| 42  / /\ \
''''''''''''''''''''''''''''
  • Aest pour le soleil () ou les nuages ww
  • Best pour la pluie """""""" ou la neige ::::::::
  • Cest pour orage zz
  • Dest pour le vent ~~
  • Eest pour le brouillard ==

Mais ce n'est pas tout. Le totem a besoin de danseurs météo. Plus les éléments sont invoqués, plus le nombre de danseurs requis est élevé. S'il y a un élément invoqué, un danseur est nécessaire. Deux éléments, deux danseurs. Au-delà de quatre éléments, il y aura toujours au plus quatre danseurs. S'il n'y a aucun élément invoqué, aucun danseur n'est nécessaire. Le totem a besoin de se reposer.

Les danseurs météo doivent apparaître dans l'ordre 1234. Par exemple, s'il y a deux danseurs, les emplacements 1et 2doivent être occupés. De plus, chaque danseur interprète une figure différente:

  • 1 est T
  • 2 est Y
  • 3 est K
  • 4 est X

Maintenant, les villageois vont exprimer leurs souhaits météo. Ils prononceront une phrase contenant les éléments météorologiques qu'ils souhaiteraient avoir. Installez le totem et les danseurs pour répondre à leurs souhaits.

Défi

Écrivez un programme qui prend une chaîne en entrée, fait correspondre les éléments de la phrase ( soleil , pluie ,…), et sort le village complet avec le totem correctement réglé et ses danseurs. Votre programme n'a pas à vérifier l'exactitude de la chaîne d'entrée (par exemple, elle ne contiendra ni soleil ni nuages ). Il doit correspondre aux mots (au sens littéral):

  • La chaîne d'entrée X says: "I like the wind, it blows the worries away"correspond au vent , car la virgule ne fait pas partie du mot
  • La chaîne d'entrée Y says: "I hope the weather won't get too windy"ne correspond pas au vent , car vent et vent sont deux mots différents

Le ou les mots à mettre en correspondance sont garantis dans la partie entre guillemets de la chaîne d'entrée (la première partie désignant qui parle ne contiendra jamais de mot pouvant être mis en correspondance).

Exemples

The squaw says: "I want sun and wind for drying the clothes"
             __
         ___|()|___
   \/    \        /    \/
   /\     ``|  |``     /\
  /^^\      |~~|      /^^\
 / /\ \  T  |  |  Y  / /\ \
''''''''''''''''''''''''''''

The warrior thinks: "A good thunderstorm will afraid the invaders. Or a snow storm. Or an impenetrable fog. Or an oppressive sun."
             __
         ___|()|___
   \/    \::::::::/    \/
   /\     ``|zz|``     /\
  /^^\      |  |      /^^\
 / /\ \  TK |==| XY  / /\ \
''''''''''''''''''''''''''''

The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!"
             __
         ___|()|___
   \/    \        /    \/
   /\     ``|  |``     /\
  /^^\      |  |      /^^\
 / /\ \  T  |  |     / /\ \
''''''''''''''''''''''''''''

The wise grandma whispers: "The totem is an illusion"
             __
         ___|  |___
   \/    \        /    \/
   /\     ``|  |``     /\
  /^^\      |  |      /^^\
 / /\ \     |  |     / /\ \
''''''''''''''''''''''''''''

The shaman confides: "I perform my magic hidden in the fog, under the rain or at least under heavy clouds"
             __
         ___|ww|___
   \/    \""""""""/    \/
   /\     ``|  |``     /\
  /^^\      |  |      /^^\
 / /\ \  TK |==|  Y  / /\ \
''''''''''''''''''''''''''''

The village chief claims: "The meat of bison is better preserved in the snow, or dried under a burning sun. My Pa' used to say that heavy wind and a thunderstorm could help too, but I have no clue how. And despite everyone contradicting me, I am persuaded a good fog will do as well"
             __
         ___|()|___
   \/    \::::::::/    \/
   /\     ``|zz|``     /\
  /^^\      |~~|      /^^\
 / /\ \  TK |==| XY  / /\ \
''''''''''''''''''''''''''''

C'est le donc la réponse la plus courte en octets gagne. Des explications sont encouragées.

Jim
la source
Pouvons-nous supposer que nous n'obtiendrons pas les deux sunet clouds, ou les deux rainet snow?
HyperNeutrino
@HyperNeutrino Ceci est déjà spécifié dans le défi.
Jim
Ah. Je l'ai fait plusieurs fois (parties manquantes du défi). Désolé: P
HyperNeutrino
lol +1 pour The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". De plus, ce défi a été beaucoup moins douloureux et beaucoup plus amusant que je ne le pensais, alors merci pour le défi: P :)
HyperNeutrino
Des défis comme celui-ci me manquent. Pas trop dur, pas trop FGITW, pas trop de langues de golf et vous oblige en fait à coder plutôt que de trouver un petit 4 octets
Uriel

Réponses:

2

Python, 527 524 508 504 481 474 462 461 octets

from re import*
a=r"""!!! __
!! ___|AA|___
   \/!\BBBBBBBB/!\/
   /\! ``|CC|``! /\
  /^^\!  |DD|!  /^^\
 / /\ \  02 |EE| 31  / /\ \
""";s={'sun':'A2()','clouds':'A2w','rain':'B2"','snow':'B2:','thunderstorm':'C2z','wind':'D2~','fog':'E2='};i=0
for y in[w for w in split('\W+',input().lower())if w in s]:i+=1;z=s[y];w=int(z[1]);a=sub(z[0]*w,(z[2:]*w)[:w],a)
for y in range(min(i,4)):a=sub(str(y),'TYKX'[y],a)
print(sub('!',' '*4,sub('[ABCDE0123]',' ',a))+"'"*28)

Essayez-le en ligne!

Uriel
la source
Lors de mon dernier défi, j'ai été déçu de la façon dont tout le monde utilisait l'expression régulière. Je pensais qu'avec celui-ci, je n'en aurais pas. Eh bien, je suis un peu surpris…
Jim
@Jim bien, ils ne sont certainement pas la partie principale de la fonction
Uriel
J'ai posté une autre solution Python qui utilise un algorithme assez différent; si vous pensez qu'il serait préférable de simplement l'utiliser comme un de vos golfs, je supprimerai le mien comme trop similaire au vôtre.
HyperNeutrino
@HyperNeutrino J'étais juste en train de jouer au golf et je pense que j'ai frappé certaines des choses que vous avez utilisées btw. Je ne fais généralement pas attention aux autres solutions dans la même langue que la mienne, bien que je préfère généralement ne pas les publier
Uriel
485 octets
HyperNeutrino
2

Python 3 , 473 464 460 octets

import re
x=re.split('\W+',input().lower())
L='sun clouds rain snow thunderstorm wind fog'.split()
q=sum(map(x.count,L))
print(r'''!    __
!___|#|___
" \/"  \$/" \/
" /\"   ``|%%|``"  /\
  /^^\""  |&&|"" /^^\
 / /\ \  13 |''| 42 / /\ \
'''.translate({33:' '*9,34:' '*2,35:' (w )w'[(L[0]in x)+2*(L[1]in x)::3],36:' ":'[(L[2]in x)+2*(L[3]in x)]*8,37:' z'[L[4]in x],38:' ~'[L[5]in x],39:' ='[L[6]in x],49:' T'[q>0],50:' Y'[q>1],51:' K'[q>2],52:' X'[q>3]})+"'"*28)

Essayez-le en ligne!

-9 octets
-4 octets grâce aux ovs

HyperNeutrino
la source
Je ne vois pas pourquoi tu en aurais besoin s. Fusionnez simplement vos deux dernières lignes print(r...28)pour 460 octets.
ovs
@ovs whoops a oublié cela. Merci!
HyperNeutrino
1

JavaScript (ES6), 417 octets

(s,i=x=>s.toLowerCase()[q](/\W+/).includes(x[0]),g=x=>y=>i(x)?y[0]:(j--,"  "),j=4,t="||   \\/|   /\\|  /^^\\| / /\\ \\"[q="split"]`|`.map(x=>x[p="padEnd"](9)))=>`    __    n___|${i`sun`?"()":g`clouds``ww`}|___n${"\\"[p](9,i`rain`?'"':g`snow``:`)}/n \`\`|${g`thunderstorm``zz`}|\`\` n   |${g`wind``~~`}|   n02 |${g`fog``==`}| 31`.replace(/\d/g,m=>m>j?" ":"TYKX"[m])[q]`n`.map((v,k)=>t[k]+v+t[k]).join`
`+`
`[p](28,"'")

L'idée ici était de générer d'abord le totem, puis d'ajouter les tikis en miroir des deux côtés.

Comprend deux fonctions d'assistance:, iqui vérifie si une chaîne est l'un des mots dans l'entrée; et g, qui effectue iet renvoie la chaîne donnée ou " ". gcompte également le nombre d'éléments manquants à utiliser pour les danseurs du bas.

Extrait de test

let f=
(s,i=x=>s.toLowerCase()[q](/\W+/).includes(x[0]),g=x=>y=>i(x)?y[0]:(j--,"  "),j=4,t="||   \\/|   /\\|  /^^\\| / /\\ \\"[q="split"]`|`.map(x=>x[p="padEnd"](9)))=>`    __    n___|${i`sun`?"()":g`clouds``ww`}|___n${"\\"[p](9,i`rain`?'"':g`snow``:`)}/n \`\`|${g`thunderstorm``zz`}|\`\` n   |${g`wind``~~`}|   n02 |${g`fog``==`}| 31`.replace(/\d/g,m=>m>j?" ":"TYKX"[m])[q]`n`.map((v,k)=>t[k]+v+t[k]).join`
`+`
`[p](28,"'")

let tests = [`The squaw says: "I want sun and wind for drying the clothes"`,`The warrior thinks: "A good thunderstorm will afraid the invaders. Or a snow storm. Or an impenetrable fog. Or an oppressive sun."`,`The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!"`,`The wise grandma whispers: "The totem is an illusion"`,`The shaman confides: "I perform my magic hidden in the fog, under the rain or at least under heavy clouds"`,`The village chief claims: "The meat of bison is better preserved in the snow, or dried under a burning sun. My Pa' used to say that heavy wind and a thunderstorm could help too, but I have no clue how. And despite everyone contradicting me, I am persuaded a good fog will do as well"`];I.innerHTML+=tests.map(t=>"<option>"+t).join``
<select id=I oninput="O.innerHTML=(idx=I.selectedIndex)?(t=tests[idx-1])+'\n\n'+f(t):''" style="width:90vw"><option>---Tests---</select>
<pre id=O></pre>

Justin Mariner
la source