Hier ist ein Beispiel für die Eingabe von Monolithen . In diesem Beispiel gibt es 4.
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_
Der erste Monolith ist 4 Einheiten hoch, der zweite ist 2, der dritte ist 3 und der letzte ist 1.
Die Aufgabe
Ihr Programm sollte die Höhen der Monolithen in der Reihenfolge von links nach rechts ausgeben. Das Ausgabeformat kann eine beliebige Liste oder ein beliebiges Array sein.
Anmerkungen
- Die Eingabe kann als eine beliebige dimensionale Zeichenfolge, eine Liste von Zeichenfolgen oder eine Liste von Zeichen erfolgen.
- Dies ist Code-Golf , also gewinnt das niedrigste Byte .
- Es ist davon auszugehen, dass Monolithen immer die gleiche Breite haben und immer mindestens einen
_
Abstand voneinander haben. - Sie können in jeder Höhe und in jeder Menge kommen.
I / O
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_ >> [4,2,3,1]
_
| |
_ | |
| | _ | | _
_| |_| |__| |_| |_ >> [2,1,4,1]
_ _ _
| |_| |_| |_____ >> [1,1,1]
____________________ >> undefined behavior
_
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | >> [11]
_ _ _ _ _
_ | | _ | | _ | | _ | | _ | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| | >> [1,2,1,2,1,2,1,2,1,2]
[10]
Monolith nicht[11]
?Antworten:
Jelly , (8?) 9 Bytes
Ein monadischer Link, der eine Liste der angegebenen Zeichen akzeptiert und eine Liste der Ganzzahlen zurückgibt.
Hinweis: 8 Byte, wenn eine Liste von Zeichenfolgen (eine pro Zeile) als zulässiges Eingabeformat vorgesehen war - entfernen Sie einfach die Zeichenfolge
Ỵ
.Probieren Sie es online!
Wie?
quelle
Jelly , 11 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
79 bis78 Byte-1 Byte dank @Shaggy
Nimmt Eingaben als ein Array von Zeichenfolgen.
Testschnipsel
quelle
a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
replace
. Vielen Dank!C ++,
171169 BytesProbieren Sie es online!
C ++ (GCC), 150 Bytes
Danke an @aschepler!
Probieren Sie es online!
quelle
f(auto s)
und angeben, dass es einen beliebigen Container mit wahlfreiem Zugriff von Container mit wahlfreiem Zugriff von annimmtchar
.05AB1E , 11 Bytes
Probieren Sie es online!
ζ
wurde von.Bø
auf TIO ersetzt, da es dort noch nicht gezogen wurde.quelle
Dyalog APL, 29 Bytes
Laufen Sie mit
⎕IO←0
.Probieren Sie es online!
Wie?
⌽⍵='_'
- wo⍵
ist'_'
, oberste Zeile zuerst×
- mal ...(⍳≢⍵)
- der Bereich von⍵
(null indiziert)↑¨
- Füllen Sie jede Zeile mit Nullen auf, indem Sie ...(⌈/⍴¨⍵)
- die maximale Länge↑+/
- Summe der Zeilen mit Reißverschluss und Abflachung0~⍨
- Entfernt Nullenquelle
Python 2 , 75 Bytes
Probieren Sie es online!
quelle
PowerShell, 133 Byte
Sieht aus wie es nicht sehr wettbewerbsfähig ist; Es wird ein regulärer Ausdruck ersetzt, um die Türme in Spalten von 1 zu verwandeln. Ein Array von 0 wird zur Länge der Eingabezeichenfolge. Anschließend werden die Zeilen schrittweise durchlaufen, wobei die Einsen addiert werden.
Tests bereit zu laufen:
quelle
Japt , 11 Bytes
Online testen!
Erläuterung
quelle
Retina ,
4838 BytesProbieren Sie es online! Link enthält erstes Beispiel. Erläuterung: Es wird eine Zeile vorangestellt, in der die Ergebnisse erfasst werden. Da jede Spalte
_
der Reihe nach wiederholt gelöscht wird, wird die Anzahl der verbleibenden Zeilen in der Spalte gezählt , wenn eine oberirdische Ebene vorhanden ist. Schließlich werden die jetzt leeren Zeilen gelöscht. Bearbeiten: 10 Bytes dank Inspriation von @FryAmTheEggman gespeichert.quelle
_
s umgestellt, was viel sinnvoller ist, als zu versuchen, das|
s zu verwenden, danke!$.%`
, und die letzte Phase kann sein!`\d+
. Und wenn Sie die erste Stufe in einen Lookahead ändern, müssen Sie keine Schleife ausführen.Java 8,
133,117116114 BytesÜbernimmt die Eingabe als (← speichert 16 Bytes). -2 Bytes im Austausch für weniger lesbare Ausgabe dank @ OlivierGrégoire durch Umstellung auf .
String[]
char[][]
print(l-j+",")
println(l-j)
Erläuterung:
Probieren Sie es hier aus.
quelle
_
ob der Speicherort gefunden wurde, und danach zu bestellen, wobei die unterste Reihe natürlich ignoriert wurde.new[,]
anstelle des gezackten Arrays, das Sie als verwendennew[][]
. Wenn Sie das in Java haben, könnte es Ihnen einige Bytes sparen.System.out.println(l-j);
sieht listig genug für mich aus, um 2 Bytes zu sparen. Außerdem haben Sie in der Erklärung vergessen,length()
in zu wechselnlength
(kein Einfluss auf die Anzahl der Bytes, da dies in der Übermittlung korrekt ist).Haskell,
7574 BytesDie Eingabe wird als Liste von Zeichenfolgen (zeilenweise) erwartet.
quelle
Ruby , 82 Bytes
Nimmt eine Liste von Zeilen auf.
Probieren Sie es online!
quelle
APL (Dyalog) , 14 Bytes
mit
⎕IO←0
Probieren Sie es online!
Dieser Funktionszug entspricht
{((⍳≢⍵)+.×('_'=⊖⍵))~0}
quelle
MATL , 12 Bytes
Die Eingabe ist eine Zeichenmatrix mit einem
;
Zeilentrennzeichen.Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
quelle
C #,
150144137 BytesVoll / Formatierte Version:
quelle
Java 8 -
229 Bytes213 BytesProbieren Sie es online!
Ungolfed:
Woo, erster Beitrag. Jede Hilfe bei der Verbesserung wäre großartig.
Ich weiß, dass ichWusste es! Ich spielte mit der Idee, die Typen in der Karte von Integer auf Long zu ändern, aber ich denke, das ist eine Sackgasse.indexOf
das zweimal loswerden kann .Ich weiß, dass es bereits eine viel, viel bessere Java 8-Lösung gibt , aber das ist eine
char[][]
Eingabe, die meiner Meinung nach in diesem Fall einfacher zu verarbeiten ist als String.quelle
Map
aber einint[]
(möglicherweise initialisiert aufnew int[99]
?). Kein Leerzeichen danach erforderlichString[] l
: FunktioniertString[]l
genauso und ist kürzer. Verwenden Sieprintln(l.length-i-1)
anstelle vonprintln(l.length-i-1+",")
. Do not initializej
: nur schreiben:,j;
. Wenn Sie einint[]
wie zuvor vorgeschlagenes verwenden, deklarieren Sie dies wie folgt:int m[]=new int[99],i=0,j;
und entfernen Sie die Deklaration aus demfor-loop
.import java.util.*;s->{Map m=new TreeMap();String[]a=s.split("\n");int l=a.length-1,j=-1,i=j;for(;++i<l;)for(s=a[i];(j=s.indexOf("_",j+1))>=0;m.put(j,i));for(Object o:m.values())System.out.println(l-(int)o);}
. Keine Notwendigkeit für die<Integer,Integer>
Karte, wenn Sie zu werfen könnenint
;a.length-1
wird zweimal verwendet, daher können Sie eine Variable dafür verwenden. Wenn Sie alles in for-Schleifen einfügen, können Sie alle Klammern entfernen. Oh, und willkommen bei PPCG! :)MATL , 10 Bytes
Die Eingabe ist eine gepolsterte Zeichenmatrix.
Probieren Sie es online!
quelle
Mathematica,
484739 BytesProbieren Sie es online!
Function
das erwartet ein rechteckiges Array von Zeichen. NimmtMost
das Array (alle bis auf die letzte Zeile),Reverse
nimmt es dann dasTranspose
* und findet dann allePosition
s, in denen das_
Zeichen vorkommt. Die relevanten Höhen sind dieLast
Elemente von jedemPosition
.*
ist das3
Byte für den privaten Gebrauch,U+F3C7
das\[Transpose]
in Mathematica dargestellt wird. Beachten Sie, dass dies in Mathematik nicht funktioniert , daher der TIO-Link nur verwendet wirdTranspose
.quelle
SOGL V0.12 , 9 Bytes
Probieren Sie es hier aus!
Nimmt Eingaben als Array von Arrays von Zeichenfolgen (Zeichen) an.
Erläuterung:
quelle
JavaScript (ES6),
10810488 Byte16 Bytes dank @JustinMariner eingespart
Eingabe als Array von Zeichenfolgen
quelle
Array.map
, das ist ein cooler Trick.exec
und ein paar Bytes sparen.exec
der mit dem ersten übereinstimmt. Tatsächlich stürzt der Stapelaustausch-Snippet-Editor ab, wenn Sie den regulären Ausdruck einbinden. Es sei denn, ich vermisse etwas?CJam,
15 bis14 Bytes1 Byte gespart dank @BusinessCat
Dies ist ein Block, der ein Array von Zeichenfolgen auf dem Stapel aufnimmt und ein Array ausgibt.
Erläuterung:
quelle
Pip ,
1817 Bytes15 Byte Code, +2 für
-rp
Flags.Übernimmt die Eingabe von stdin. Probieren Sie es online!
Erläuterung
quelle
Pyth ,
191514 BytesOnline testen! Die Eingabe ist eine Liste von Zeilen.
Erklärungen
quelle
Oktave, 31 Bytes
Nimmt ein 2D-Array von Zeichen als Eingabe.
Überprüfen Sie alle Testfälle!
quelle
Perl 6 , 65 Bytes
Probieren Sie es online!
m:exhaustive/^^(\N+)_([\N*\n]+:)/
Durchsucht die Eingabezeichenfolge nach allen Unterstrichen und gibt jeweils ein Übereinstimmungsobjekt zurück, wobei die ersten Erfassungsklammern den vorhergehenden Teil der Zeile enthalten, in der sich der Unterstrich befindet, und die zweiten Erfassungsklammern den gesamten Rest der Zeichenfolge enthalten. Der Rest der Zeichenfolge muss mindestens eine neue Zeile enthalten, damit die Unterstriche in Bodennähe nicht gezählt werden. Das:exhaustive
Flag ermöglicht, dass sich diese Übereinstimmungen überschneiden..sort(*[0].chars)
sortiert diese Übereinstimmungsobjekte nach der Anzahl der Zeichen in dem Teil der Zeile, der jedem Unterstrich vorausgeht. Dies ordnet sie von links nach rechts..map(+*[1].comb("\n"))
Ordnet jedes Übereinstimmungsobjekt der Anzahl der Zeilenumbrüche in dem Teil der Eingabezeichenfolge zu, der hinter jedem Unterstrich (dh der Höhe) steht. Das\n
ist ein tatsächliches Newline-Zeichen, das ein Byte spart.quelle
PHP, 119 Bytes
Lassen Sie uns das aufschlüsseln! Unsere Eingabe hier ist ein 2D-Array von Zeichen.
quelle
Nimmt eine mehrzeilige Zeichenfolge auf. Das Guthaben für das Setup (Kopf- und Fußzeile) geht an @GarethPW
Python 2 , 29 Bytes
Probieren Sie es online!
Dadurch wird das Array einfach nach Zeilenumbruch aufgeteilt und Länge-1 zurückgegeben.
quelle