Étant donné l'entrée d'un "hôtel" dans l'art ASCII avec une seule pièce marquée, indiquez le numéro de la pièce selon certaines règles.
Voici un exemple d'hôtel ASCII:
##
##
##### ##
##### ###### ##
##### ###### ##
##### ###### ##
Voici quelques informations supplémentaires sur les hôtels ASCII:
Chaque "bâtiment" est représenté par un rectangle de
#
caractères, où chacun#
représente une "pièce".L'hôtel ci-dessus se compose de trois bâtiments. Chaque bâtiment est séparé par deux colonnes d'espaces, et le "plancher" le plus bas sera toujours sur la dernière ligne.
Chaque bâtiment aura toujours de 1 à 9 "étages" (rangées) et 1 à 9 "chambres" à chaque étage. Il y aura aussi toujours 1 à 9 bâtiments.
Les chambres sont numérotées comme suit:
[building #][floor #][room on floor #]
. Par exemple, marquons quelques pièces dans le dessin ci-dessus:## ## ##### ## ##### ####$# ## ##%## ###### ## ##### ###### #@
La pièce marquée avec
%
est la chambre 123 (bâtiment 1, étage 2, 3ème chambre étage). De même, la pièce marquée avec$
est la pièce 235 et la@
pièce 312.Les bâtiments, les étages et les "nièmes chambres sur le sol" sont toujours indexés.
L'entrée consistera en un hôtel ASCII avec une chambre simple remplacée par un astérisque ( *
). C'est la pièce pour laquelle vous devez entrer le numéro de la pièce. L'entrée doit être considérée comme une chaîne unique, mais vous pouvez utiliser des virgules comme séparateurs de ligne au lieu de nouvelles lignes (dans le cas où la langue de votre choix ne peut pas utiliser une entrée multiligne ou si elle est plus courte pour une entrée ligne unique). Vous pouvez éventuellement exiger une virgule de fin / nouvelle ligne. Vous pouvez également ajouter des lignes avec des espaces pour que l'entrée soit un rectangle complet.
Puisqu'il s'agit de code-golf , le code le plus court en octets gagne.
Cas de test (contenus dans un seul bloc de code pour préserver l’espace vertical):
Input:
*
Output: 111
Input:
# # * # #
Output: 311
Input:
#####
#####
####*
#####
#####
Output: 135
Input:
#####
##### ######
##### ######
# # # ##### # # # ###### *
Output: 911
Input:
#
# #
# # ##
# # ## ###
# # ## ### #####
# # ## ### ##*## ########
# # ## ### ##### ########
Output: 523
Input:
#
*
#
#
#
#
#
#
######### # #
Output: 281
Input:
########*
#########
#########
#########
#########
#########
#########
#########
# # # # # # # # #########
Output: 999
Réponses:
CJam,
34 à31 octetsCela nécessite que l'entrée soit complétée en un rectangle avec des espaces.
Essayez-le en ligne! Vous pouvez également exécuter tous les cas de test.
Explication
la source
Pyth, 34 octets
Manifestation
Cela utilise une astuce de golf que je n’ai jamais utilisée auparavant: Assigner à une variable (
K
) dans une fonction (y
) pour enregistrer un résultat partiel de cette fonction.Explication:
la source
JavaScript (ES6),
142136 octets6 octets sauvegardés grâce à @nderscore !
Explication
Tester
Afficher l'extrait de code
la source
.map((t,i,l)=>
,slice(0,r=t.indexOf`*`+1)
,o=++b&&s+2
,[b]+f+r
[b]+f+r
conseil!awk, 70
Exemple:
la source
C,
131130119113 octetsPrend une entrée sur stdin; l'entrée ne doit pas avoir de fin de ligne. Suppose le complément de 2.
Ungolfed:
la source
Stackgoat , 73 bytes [non-concurrent]
Stackgoat est un langage en pile qui n'a rien à voir avec les chèvres.
C'est un langage assez nouveau, alors laissez-moi savoir s'il y a un problème. Je me suis donné tout un mal à la tête pour comprendre cela, donc c'est à peu près autant que je joue au golf.
Explication
Ce programme a 3 parties pour chaque 3 chiffres du numéro de chambre
la source
Ruby, 103
Programme non testé
la source
$`
celui-ci.JavaScript (ES6), 121
Moins joué au golf et expliqué
TESTER
la source
Python 2.7,
153168 caractèresJ'ai aimé ce challenge! Si une liste Python est acceptée en entrée (voir la suite de tests pour des exemples), cette solution fonctionne.
Edit 2016-01-05: ajout d'une ligne (10 caractères) pour fractionner la chaîne en plusieurs lignes.
Brève explication:
t
est la ligne dans laquelle se trouve la salle (comptée à partir de la ligne supérieure comme tableau index = 0);i
est l'index de la pièce dans sa rangée;i
;t
;i
le début de l'étage avec la pièce, ajouté par un espace blanc pour couvrir le cas où la pièce se trouve dans le premier bâtiment.Code:
Suite de tests:
la source
Escargots , 32 octets
la source
C,
142138137 octets(
123119118 octets + 19 pour la#include
ligne)J'ai volé l'idée de fusion de valeur d'ecatmur, mais je les ai fusionnées de manière tout à fait différente (
sauvegarde de 8 octets à la fin). Cela fait également la même hypothèse queEOF == -1
.L'entrée est extraite de stdin et ne doit pas contenir d'espaces ni de nouvelles lignes après le dernier bâtiment de la dernière ligne. Un exemple d'entrée serait:
Panne:
la source
&&(f=p,p=x)
à?f=p,p=x:0
- le deuxième opérande d'une condition ternaire a entre parenthèses implicites.Haskell,
128 à125 octetsExemple d'utilisation:
f "# # * # #"
->311
.Comment ça marche:
la source
Lua, 165 octets
Ungolfed
la source
CoffeeScript, 110 octets & JavaScript, 121 octets
Lisible
Fondamentalement la même chose en Javascript:
la source
Java, 231 octets
Détartré
la source
Powershell, 154 octets
Script de test moins joué:
Sortie:
la source
05AB1E , 34 octets
Zip avec des listes de chaînes est actuellement buggé.
€SζJ
aurait pu être justeζ
dans l'ancienne version héritée de Python de 05AB1E, mais pour une raison quelconque ne fonctionne plus dans la version de réécriture Elixir.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Dart , 165 octets
Essayez-le en ligne!
la source