Analysieren Sie Ihren Stuhl

11

Diese Herausforderung basiert auf Downgoat's Adjust your Chair .

Herausforderung

Sie haben gerade Ihren neuen Stuhl angepasst! Es passt perfekt zu dir. Das Rad ist jedoch quietschend und Sie wissen, dass die Reparaturmitarbeiter die Einstellung ändern werden. Das Problem ist, dass Sie kein Lineal haben, also müssen Sie ein Programm schreiben, um es für Sie zu messen. Die Reparaturleute können nur so lange warten. Ihr Code muss also so kurz wie möglich sein.
Beispiel eines verstellbaren Stuhls

Beispiele

O
|
|
| _
| |
|_|_
  |
  |
  O

5,3,2,2,1

O
|  _
|  |
|__|__
   |
   |
 __|__
 OOOOO

3,5,2,3,5

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

2,13,1,1,13

Stuhlteile

Der Stuhl hat verschiedene Komponenten:

O  <- Headrest
|
|  <- Backrest
|  _  <- Armrest
|  |
|__|__ <- Seat
   |  
   |   <- Leg
  _|_
  OOO  <- Wheels

Detaillierte Stuhlbeschreibungen

Die Teile des Stuhls sind:


Kopfstütze: Über der Rückenlehne befindet sich immer eine Kopfstütze

O
|

Rückenlehne: Die Anzahl |ist die Höhe der Rückenlehne

O
|
|

Sitz: Die Anzahl _ist die Sitzbreite , |in der Mitte befindet sich eine für die Armlehne.

__|__

Armlehne: Die Anzahl |ist die Höhe der Armlehne . Dies wird in der Mitte des Sitzes eingefügt.

_
|
|

Bein: Die Anzahl |ist die Beinhöhe

|
|

Räder: Die Räder sind unter den Beinen zentriert. Wenn sie mehr als eins sind, befinden sich alle außer dem Mittelrad _in der Linie über ihnen.

_ _
OOO

Ausgabe

Bei einem Stuhl geben Sie verschiedene Variablen aus.

Die Ausgabe sollte in der folgenden Reihenfolge erfolgen:

  1. Rückenlehnenhöhe
  2. Sitzbreite immer ungerade
  3. Armlehnenhöhe Immer kleiner als die Rückenlehnenhöhe
  4. Beinhöhe
  5. Radanzahl Immer kleiner oder gleich der Sitzbreite und immer ungerade

Die Ausgabe kann einen nachgestellten Zeilenumbruch haben oder in einer Array- / Listenform vorliegen, wenn es sich um eine Funktion handelt.

Bestenliste

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift unter Verwendung der folgenden Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihrer Einreichung? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Wenn Sie dort mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder Sie die Strafen für Dolmetscherflaggen separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

# Perl, 43 + 2 (-p flag) = 45 bytes

Sie können den Sprachnamen auch zu einem Link machen, der dann im Leaderboard-Snippet angezeigt wird:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes
wizzwizz4
quelle
Wird die Armlehne gemessen?
J Atkin

Antworten:

3

Lua, 187 Bytes

Ich denke, ich könnte vielleicht noch mehr Golf spielen, aber ich denke, das ist im Moment gut. Auch wenn die Ausgabe durch Kommas getrennt werden muss, kann ich das beheben, aber dies entspricht immer noch den Anforderungen.

Außerdem wird der Eingang jeweils in einer Zeile eingespeist. Drücken Sie nach der Eingabe der Räder die Eingabetaste mit einer leeren Zeile, um die Eingabe abzuschließen.

c={}i=1t=""while c[i-1]~=""do c[i]=io.read():gsub("%s+","")t=t..c[i]a=(not a and c[i]:find("_")and i or a)s=(not s and c[i]:find("_|_")and i or s)i=i+1 end print(s-1,c[s]:len()-1,s-a,#c-s-2,c[#c-1]:len())

Ungolfed

c={}
i=1
while c[i-1]~=""do 
    c[i]=io.read():gsub("%s+","")          --remove spaces
    a=(not a and c[i]:find"_"and i or a)   --armrest position
    s=(not s and c[i]:find"_|_"and i or s) --seat position
    i=i+1
end
print(s-1, c[s]:len()-1, s-a, #c-s-2, c[#c-1]:len())

(Die Positionen werden von oben nach unten gemessen, sodass das obere 'O' Position 1 ist und die Räder die größte Position sind.

  • Die Rückenlehnenhöhe ist die Position des Sitzes minus eins, um das 'O' oben auszugleichen.
  • Die Sitzgröße ist die Länge der Saite an der Sitzposition minus eins, um die Rückenlehne auszugleichen.
  • Die Höhe der Armlehne ist die Position des Sitzes abzüglich der Position der Armlehne.
  • Die Beinhöhe ist die Höhe des Stuhls ( #c) abzüglich der Position des Sitzes minus 2, um die Räder und den Sitz auszugleichen.
  • Die Radzahl ist die Länge der letzten Saite.
Cyv
quelle
3

Groovy, 161 Bytes !!!

Yay!! Nicht im letzten !!

f={s->a=s.split(/\n/)
b=a.findIndexOf{it.contains('|_')}
d=b-a.findIndexOf{it.contains('_')}
print"$b,${a[b].count('_')+1},$d,${a.size()-b-2},${s.count('O')-1}"}

Ungolfed:

f={String s ->
    split = s.split(/\n/)
    bottomOfChairBack = split.findIndexOf {it.contains('|_')}
    armHeight = bottomOfChairBack-split.findIndexOf {it.contains('_')}
    width = split[bottomOfChairBack].count('_')+1
    height = split.size() - bottomOfChairBack - 2

    wheelCount = s.count('O')-1
    return [bottomOfChairBack, width, armHeight, height, wheelCount]
}

Tests des ungolfed Programms:

assert f('''O
|
|
| _
| |
|_|_
  |
  |
  O''') == [5, 3, 2, 2, 1]

assert f('''O
|  _
|  |
|__|__
   |
   |
 __|__
 OOOOO''') == [3,5,2,3,5]

assert f('''O
|  _
|  |
|__|__
   |
   |
 __|__
 OOOOO''') == [3,5,2,3,5]

assert f('''O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO''') == [2,13,1,1,13]
J Atkin
quelle
2

Pyth, 57 54 53 50 Bytes

Kann wahrscheinlich weiter Golf gespielt werden. -3 Bytes dank issacg für den Trick mit einer einzelnen Zeichenfolge.

=kjb.z
=H/k+b\|
-/k\_=G-/k\O2
--/k\|H=Nt/k+bd
N
hG

Erläuterung:

=kjb.z
=k              Assign k
     z          Input
  jb.           Join list by newlines

=H/k+b\|
=H              Assign H
  / +b\|        Count occurrences of "\n|"
   k            In input
                (Implicit: print backrest height)

-/k\_=G-/k\O2
     =G         Assign G
       -/k\O2   The number of wheels minus 1
-/k\_           Count the number of "_"
                (Implicit: print seat width)

--/k\|H=Nt/k+bd
       =N       Assign N
          /k+bd Count the number of lines starting with " "
         t      Subtract 1 (N is now the leg height)
  /k\|          Count the number of "|"
 -    H         Subtract the "|" for the backrest
-               Subtract leg height
                (Implicit: print armrest height)

N               Print leg height

hG              Print the number of wheels
Element118
quelle
1
Verwenden Sie zum Erstellen einer Zeichenfolge mit einem Zeichen \. Also "_"=\_
isaacg
Autsch, auf keinen Fall werde ich das schlagen;)
J Atkin
2

Perl, 93 + 2 = 95 90 + 1 = 91 83 + 1 = 84 Bytes

Anscheinend muss die Ausgabe nicht durch Kommas getrennt werden

Mit perl -n chair.pl chairInput(1B Strafe für die Flagge) aufrufen .

END{print$b,2+$u-$o,$a,$.-$b-2,$o-1}$u+=s/_//g;$o+=s/O//g;s/^\|//&&$b++&&/\|/&&$a++

Ungolfed:

END{         # Put the END block first to save 1 ;
    print
        $b,   
    2+$u-$o,
    $a,
    $.-$b-2, # $. is the number of lines total
    $o-1
}
$u+=s/_//g; # count _s incrementally
$o+=s/O//g; # count Os incrementally
s/^\|// && $b++ # it's backrest if it starts with |
    && /\|/ && $a++ # and it's armrest if it has another one

Vorherige Version:

Rufen Sie mit auf perl -0n chair.pl < chairInput

s/^\|//&&$b++?/\|/&&$a++:$h++for split"
",$_;$,=",";print$b,2+s/_//g-($o=s/O//g),$a,$h-3,$o-1

Erläuterung:

s/^\|// && $back++   # the backrest is all lines starting with |
    ? /\|/ && $arm++ # the armrest is all of those lines with another |
    : $height++      # otherwise it counts for the seat height
    for split"
",$_;       # literal newline for 1 byte saved
$,=",";     # output separator
print
    $back,
    2+s/_//g-($o_count=s/O//g),  # you can find the seat size
                                 # from the different between the number
                                 # of Os and _s
    $arm,
    $height-3,
    $o_count-1
alexander-brett
quelle
1

Python 3, 160 158 Bytes

Dieser Code funktioniert jedoch nur unter den folgenden Bedingungen: 1) armrest height > 0Andernfalls _bricht die Zählung und 2) seat width > 1Andernfalls blockiert die Armlehne den Sitz mit der Breite 1 und die _Zählung bricht.

def f(s):
 a=s.split("\n");x=[];y=[];l=len(a)
 for i in range(l):
  m=a[i].count("_")
  if m:x+=i,;y+=m,
 return x[1],y[1]+1,x[1]-x[0],l-x[1]-2,s.count("O")-1
Sherlock9
quelle