Scripting Contest
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Hi,
ich habe wieder eine Idee für ein kleines Script. Diesmal ein Spiel: Hoch/Tief.
Die Regeln sind denkbar einfach. Man bekommt immer zufällig fortlaufend eine Zahl aus dem Bereich 1-15 angezeigt und muss tippen, ob die nächste Zahl höher oder tiefer als die vorherige sein wird. Wobei keine Zahl zweimal aufeinander folgen darf. Hat man richtig getippt, gibt es einen Punkt, wenn nicht beginnt man wieder bei 0.
Eingabe ist von STDIN h=höher t=tiefer q|e=beenden
Ausgabe auf STDOUT ist Zahl (Punkte - Highscore)
Gewonnen hat diesmal die kürzeste Implementierung würde ich vorschlagen, wobei die Sprache nicht beachtet wird, nur die Ausgabe von wc(1) auf den Quellcode zählt.
Beispiel:
ich habe wieder eine Idee für ein kleines Script. Diesmal ein Spiel: Hoch/Tief.
Die Regeln sind denkbar einfach. Man bekommt immer zufällig fortlaufend eine Zahl aus dem Bereich 1-15 angezeigt und muss tippen, ob die nächste Zahl höher oder tiefer als die vorherige sein wird. Wobei keine Zahl zweimal aufeinander folgen darf. Hat man richtig getippt, gibt es einen Punkt, wenn nicht beginnt man wieder bei 0.
Eingabe ist von STDIN h=höher t=tiefer q|e=beenden
Ausgabe auf STDOUT ist Zahl (Punkte - Highscore)
Gewonnen hat diesmal die kürzeste Implementierung würde ich vorschlagen, wobei die Sprache nicht beachtet wird, nur die Ausgabe von wc(1) auf den Quellcode zählt.
Beispiel:
Code: Alles auswählen
$ ./ht
3 (0 – 0)
h 10 (1 – 1)
t 1 (2 – 2)
h 3 (3 – 3)
h 14 (4 – 4)
t 12 (5 – 5)
t 8 (6 – 6)
h 6 (0 – 6)
h 14 (1 – 6)
t 12 (2 – 6)
t 3 (3 – 6)
h 2 (0 – 6)
h 11 (1 – 6)
t 1 (2 – 6)
h 2 (3 – 6)
h 7 (4 – 6)
h 14 (5 – 6)
t 3 (6 – 6)
h 2 (0 – 6)
h 6 (1 – 6)
h 9 (2 – 6)
h 12 (3 – 6)
t 9 (4 – 6)
h 3 (0 – 6)
q
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Keine Rückmeldung, Leute Spielspass für 5min garantiert In 8-Ball Pool haben sie dieses Minispiel leider durch ein neues Drehrad mit Preisen als Gewinnenspiel ersetzt.
Oder beleidigt diese Aufgabe den Profi
PS: Meine Lösung (vorerst nur ein schnell dahingeschriebenes Bash Skript) werde ich aber auch nicht veröffentlichen. Da muss ich erst mal sehen, dass ich das auch wirklich kurz in Perl o.ä. hinbekomme...
Oder beleidigt diese Aufgabe den Profi
PS: Meine Lösung (vorerst nur ein schnell dahingeschriebenes Bash Skript) werde ich aber auch nicht veröffentlichen. Da muss ich erst mal sehen, dass ich das auch wirklich kurz in Perl o.ä. hinbekomme...
Zuletzt geändert von Anonymous am 28.07.2016 20:23:37, insgesamt 1-mal geändert.
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
Wann ist denn Abgabe? Ich hab vorhin auch nur ein kurzes Bashscript angefangen, aber erst am WE wieder Zeit es zu komplettieren…
Re: Scripting Contest
Soweit ich das in Erinnerung habe, wurde sich mal auf (frühestens) Sonntagnachmittag geeinigt.ThorstenS hat geschrieben:Wann ist denn Abgabe? Ich hab vorhin auch nur ein kurzes Bashscript angefangen, aber erst am WE wieder Zeit es zu komplettieren…
Re: Scripting Contest
Hi
Schön das es hier weiter geht.
Ciao
Schön das es hier weiter geht.
Sonntags ab 18:00 darf jede/r sein können veröffentlichen.ThorstenS hat geschrieben:Wann ist denn Abgabe? Ich hab vorhin auch nur ein kurzes Bashscript angefangen, aber erst am WE wieder Zeit es zu komplettieren…
Ciao
Re: Scripting Contest
Ein Einzeiler für die Bash, 301 Zeichen:
Code: Alles auswählen
p=0;h=0;r=0;m=0;a=' ';while [[ $a = [\ ht] ]];do while r=$[RANDOM%15+1];((m==r));do :;done;[ "$a" != " " ]&&{ l=t;((m-r<=0))&&l=h;((p++));[ "$a" = "$l" ]||p=0;((p>h))&&h=$p; };m=$r;printf '\r\e[K%1s%3i %s\n' "$a" $r "($p - $h)";a=;while ! [[ $a = [htqe] ]];do printf \\r\\e[K;read -n1 a;done;done;echo
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Funktioniert.
Meine aktuelle Lösung auch in Bash ist genau 100 Zeichen länger – muss ich also (noch) nicht posten.
Meine aktuelle Lösung auch in Bash ist genau 100 Zeichen länger – muss ich also (noch) nicht posten.
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
fuck wie geil , ich bin raus
Re: Scripting Contest
Warum? Ich würde gerne andere Codes sehen, auch wenn sie länger sind. Mein Code hat den Nachteil, völlig unflexibel zu sein. Kleine Regeländerungen reichen und der Code ist komplett für die Tonne.
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Hallo,
ich hätte da eine Idee für einen neuen Contest. Und zwar basierend auf dem Wikiartikel https://wiki.debianforum.de/Lokales_Repository
Gegeben ist eine Verzeichnisstruktur wie folgt:
Also ein Repository mit beliebig vielen Paketen. Das Skript soll dann alle älteren Versionen eines Pakets löschen, so das nur die aktuelle im ./pool bleibt.
IMO ist es ausreichend, wenn die Lösung nur eine Architektur und all unterstützt.
PS: Ich habe schon so ein Lösung dafür (Shell/BASH). Diese ist aber ganz rudimentär und gefällt mir nicht wirklich.
ich hätte da eine Idee für einen neuen Contest. Und zwar basierend auf dem Wikiartikel https://wiki.debianforum.de/Lokales_Repository
Gegeben ist eine Verzeichnisstruktur wie folgt:
Code: Alles auswählen
$ tree
.
├── Contents-all
├── Contents-all.gz
├── Contents-amd64
├── Contents-amd64.gz
├── InRelease
├── Packages
├── Packages.gz
├── pool
│ ├── foo_1_amd64.buildinfo
│ ├── foo_1_amd64.changes
│ ├── foo_1.dsc
│ ├── foo_1.tar.xz
│ ├── foo_2_amd64.buildinfo
│ ├── foo_2_amd64.changes
│ ├── foo_2.dsc
│ ├── foo_2.tar.xz
├── Release
├── Release.gpg
├── Sources
└── Sources.gz
IMO ist es ausreichend, wenn die Lösung nur eine Architektur und all unterstützt.
PS: Ich habe schon so ein Lösung dafür (Shell/BASH). Diese ist aber ganz rudimentär und gefällt mir nicht wirklich.
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
Keine Scriptinglösung, aber ein Tipp, wie du deine repos besser pflegen kannst: nimm reprepro!
http://www.pro-linux.de/artikel/2/1726/ ... orgen.html
Das einfach aufgebaute pkg-mozilla-archive-keyring eignet sich sehr gut als Vorlage, um seinen key selbst zu paketieren.
http://www.pro-linux.de/artikel/2/1726/ ... orgen.html
Das einfach aufgebaute pkg-mozilla-archive-keyring eignet sich sehr gut als Vorlage, um seinen key selbst zu paketieren.
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Hallo ThorstenS.
Mit reprepro habe ich mich noch nicht auseinander gesetzt, sollte es wohl aber mal tun...
Satt pkg-mozilla-archive-keyring orientiere ich mich an grml-debian-keyring.
Im Grunde:
(Ich habe es noch ein klein wenige anders gelöst)
Ich zeig mal meine Lösung, und hoffe jemand greift diese auf und wir bekommen eine Lösung für den obigen Wiki-Artikel
(Wie gesagt, gefällt mir selbst nicht so wirklich)
Mit reprepro habe ich mich noch nicht auseinander gesetzt, sollte es wohl aber mal tun...
Satt pkg-mozilla-archive-keyring orientiere ich mich an grml-debian-keyring.
Im Grunde:
Code: Alles auswählen
gpg --output "my-archive-keyring.gpg" --export "0x00000000"
# debian/rules: dh_install "my-archive-keyring.gpg" "/etc/apt/trusted.gpg.d/"
Ich zeig mal meine Lösung, und hoffe jemand greift diese auf und wir bekommen eine Lösung für den obigen Wiki-Artikel
Code: Alles auswählen
#!/bin/bash
# Ins Repository wechseln, weil der Index relativ ist
cd "/var/local/debian/"
rm_obsolet_packages () {
# TODO: Rewrite to something better
# See also https://debianforum.de/forum/viewtopic.php?t=156724&p=1174005#p1174005
find ./pool/ -iname "*.deb" -exec dpkg-name "{}" \;
ls -1 ./pool/*.deb | sed 's/\.\/pool\///;s/_.*//g' | sort -u | while read; do
p=$REPLY # package name
ls -1 ./pool/${p}_*.deb | sort -V | head -n "-1" | sed "s/\.\/pool\///;s/[^_]*_//;s/_[^_]*//" | while read; do
v=$REPLY # package version
rm -- ./pool/${p}_${v}_*.deb ./pool/${p}_${v}_*.buildinfo ./pool/${p}_${v}_*.changes ./pool/${p}_${v}.tar.* ./pool/${p}_${v}.dsc
done
done
}
rm_obsolet_packages
rm -f -- Contents-* Packages* Sources* *Release*
: # Index erzeugen
: # Release-Datei generieren und signieren
Zuletzt geändert von Anonymous am 14.05.2018 13:14:01, insgesamt 1-mal geändert.
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
Das Mozilla Paket macht im Grunde genommen nix anderes. Seit stretch darfst du aber auch direkt das asc Format nach trusted.d legen:
Unter https://deb.domain.tld/repos habe ich dann den Hinweis stehen, falls es mal schnell gehen muß:
Ansonsten platziert mir schon die FAI-Installation meinen key und das Repo unter sources.list/meinrepo.list an Ort und Stelle.
Deine Scriptinglösung macht ja anscheinend was sie soll - so häßlich ist sie jetzt nun auch ned.
Hier gibt es noch einige Hinweise, aber die kümmern sich nur um die debs, nicht um die sourcen:
https://askubuntu.com/questions/198474/ ... repository
Code: Alles auswählen
gpg --armor --export 0123456789ABCDEF > mein-keyring.asc
Code: Alles auswählen
wget -O /etc/apt/trusted.gpg.d/mein-keyring.asc https://deb.domain.tld/repos/mein-keyring.asc
Deine Scriptinglösung macht ja anscheinend was sie soll - so häßlich ist sie jetzt nun auch ned.
Hier gibt es noch einige Hinweise, aber die kümmern sich nur um die debs, nicht um die sourcen:
https://askubuntu.com/questions/198474/ ... repository
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Es wäre halt besser die Version und Paketnamen nicht vom Dateinamen abhängig zumachen, sondern auszulesen und dann in einem Array o.ä. eine Zuordnung Paketname/Version zu Datei zu haben, und mit dieser Datenstruktur zu arbeiten. Die Tools dafür hat es ja alles: dpkg --field, dpkg --compare-versions.ThorstenS hat geschrieben:14.05.2018 09:16:37Deine Scriptinglösung macht ja anscheinend was sie soll - so häßlich ist sie jetzt nun auch ned.
Oder aber zuvor noch so etwas wie find -iname "*.deb" -exec dpkg-name "{}" \; laufen zu lassen.
Was ist die zu bevorzugende Variante? Dann würde ich das ins Wiki schreiben.ThorstenS hat geschrieben:14.05.2018 09:16:37Seit stretch darfst du aber auch direkt das asc Format nach trusted.d legen
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
Die asc Variante kam wohl neu mit stretch, deswegen sehe ich sie persönlich als zukunftsträchtiger an und nutze sie. Was aber von offz. dazu besprochen oder bekannt gemacht wurde, entzieht sich meiner Kenntnis. Ich bin auch nur durch Zufall in der FAI-ML darüber stolpert.
laut https://manpages.debian.org/stretch/apt ... .8.de.html
laut https://manpages.debian.org/stretch/apt ... .8.de.html
SUPPORTED KEYRING FILES
…
Alternatively, if all systems which should be using the created keyring have at least apt version >= 1.4 installed, you can use the ASCII armored format with the "asc" extension instead which can be created with gpg --armor --export.
Re: Scripting Contest
Ich hab wieder was neues (nix neues im Kontext Internet, hab ne Menge Lösungen gefunden):
Produziere ein Histogramm für die Größe des Inhalts eines Verzeichnisses.
Einschränkungen sind glaub nicht notwendig. Von meinem eigenen Use-Case könnte man drei Schwierigkeitsgrade ableiten: 1. nur Text und Zahlen, 2. grafisches Histogramm, 3. dynamische Granularität.
Disclaimer: ich war mit Variante 1 schon glücklich
Produziere ein Histogramm für die Größe des Inhalts eines Verzeichnisses.
Einschränkungen sind glaub nicht notwendig. Von meinem eigenen Use-Case könnte man drei Schwierigkeitsgrade ableiten: 1. nur Text und Zahlen, 2. grafisches Histogramm, 3. dynamische Granularität.
Disclaimer: ich war mit Variante 1 schon glücklich
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Re: Scripting Contest
@TRex: Interessante Aufgabe, kannst du die Ziele bitte etwas detaillierter formulieren. Was ist mir ``Text und Zahlen'' gemeint? ASCII-Grafik? Oder ist das schon ``grafisch''? Wie verhaelt sich deine Aufgabe zu du(1)? ncdu(1) wird wohl das was du dir wuenschst, fertig bieten. Sowas aehnliches also in selbstgemacht?
Use ed once in a while!
Re: Scripting Contest
Du hast auf einer Achse die Größe einer Datei oder eines Verzeichnis, und auf der anderen, wie oft das vorkommt. Was du damit auf einen Blick erkennen kannst, ist die Verteilung verschiedener Dateigrößen. Mit ncdu geht das nicht besser als mit du und sort (aber damit kann man sich was scripten), außer die Menge an Dateien ist trivial überschaubar.Meillo hat geschrieben:21.05.2018 19:09:07kannst du die Ziele bitte etwas detaillierter formulieren
Erklärung: https://de.wikipedia.org/wiki/Histogramm
Beispiel: https://cloud.addictivetips.com/wp-cont ... togram.png
Mit Text und Zahlen war gemeint, die Balken (der Grafik oben) nicht grafisch darzustellen, sondern einfach eine nach den Bins sortierte Liste mit Zahlen auszugeben.
Edit: nachdem ich den Wiki-Artikel überflogen hab, fiel mir auf, dass 3. vermutlich nicht besonders sinnvoll ist. Aber das werden Bastler schon sehen
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Re: Scripting Contest
Code: Alles auswählen
du -aSd1 --block-size=1M|sort -n|cut -f1 -d'.'|uniq -c
Re: Scripting Contest
Wollen wir uns nochmal über die "Lösungen erst posten wenn Zeitpunkt x erreicht ist"-Regel verständigen? Ich geh grade von Sonntagabend (18:00?) aus, aber wie wärs wenn der Aufgabensteller das jeweils mit in die Aufgabe schreibt?
Re: Scripting Contest
Oh, Tschuldigung...
Re: Scripting Contest
Ich habe eine Loesung der Kategorie 2 in awk fertig. Diese werde ich ab Sonntag Abend posten.
Use ed once in a while!
Re: Scripting Contest
Hier nun meine Loesung:
Ich habe mich entschieden, beliebige Datei-/Verzeichnisargument zu erlauben. Der uebliche Aufruf wird wohl als `size-hist *' erfolgen, um die Dateien (und Unterverzeichnisse) des aktuellen Verzeichnisses analysieren zu lassen.
Mein Programm gibt Balken als ASCII-Grafik aus -- ein Stern entspricht einer Datei.
Ich die einzig sinnvolle generelle Klassenbildung fuer Datenmengen verwendet, naemlich Zweierpotenzen. Alle anderen haetten Know-How ueber die Dateien benoetigt, was vielleicht ja Sinn der Sache gewesen waere, aber die Sache natuerlich komplexer gemacht haette. Da habe ich mich drumrum gedrueckt. Optimal ist mein Ansatz nicht, aber er funktioniert wenigstens immer.
... und nun, da ich meine ``Pflicht'' erfuellt habe, bin ich auf eure viel kuerzeren und besseren Loesungen gespannt.
Code: Alles auswählen
#!/bin/sh
# Histogram of file sizes
# https://debianforum.de/forum/viewtopic.php?f=34&t=156724
du -s "$@" | awk '
function getpow(n) {
i = 0
while (2^i < n) {
i++
}
return i
}
function stars(n) {
s = ""
while (n--) {
s = s "*"
}
return s;
}
{
e = getpow($1)
if (e > maxe) {
maxe = e
}
hist[e]++
}
END {
for (i=0; i<=maxe; i++) {
printf("< %10d KB: %s\n", (2^i), stars(hist[i]))
}
}
'
Mein Programm gibt Balken als ASCII-Grafik aus -- ein Stern entspricht einer Datei.
Ich die einzig sinnvolle generelle Klassenbildung fuer Datenmengen verwendet, naemlich Zweierpotenzen. Alle anderen haetten Know-How ueber die Dateien benoetigt, was vielleicht ja Sinn der Sache gewesen waere, aber die Sache natuerlich komplexer gemacht haette. Da habe ich mich drumrum gedrueckt. Optimal ist mein Ansatz nicht, aber er funktioniert wenigstens immer.
... und nun, da ich meine ``Pflicht'' erfuellt habe, bin ich auf eure viel kuerzeren und besseren Loesungen gespannt.
Use ed once in a while!