...Triviális és uncsi megoldás PostgreSQL-ben:
select i, case when i % 3 = 0 AND i % 5 = 0 then 'FizzBuzz'
when i % 3 = 0 then 'Fizz'
when i % 5 = 0 then 'Buzz'
else i::VARCHAR end
from GENERATE_SERIES(1,100) as i
Hosszú ronda és még unalmasabb uniózással:
select i, t
from (
SELECT i, 'Fizz'::varchar as t FROM GENERATE_SERIES(3,100,3) as i where i % 5 <> 0
union
SELECT i, 'Buzz'::varchar as t FROM GENERATE_SERIES(5,100,5) as i where i % 3 <> 0
union
SELECT i, 'FizzBuzz'::varchar as t FROM GENERATE_SERIES(15,100,15) as i
union
select i, i::VARCHAR FROM GENERATE_SERIES(1,100) as i where i % 3 <> 0 and i % 5 <> 0
) t
order by i
Vagy a személyes kedvencemmel a LEFT JOIN-os megoldással:
select i, coalesce(f||b, f, b, i::varchar)
from generate_series(1,100) as i
left join (SELECT i, 'Fizz'::varchar as f FROM GENERATE_SERIES(3,100,3) as i) as ff using (i)
left join (SELECT i, 'Buzz'::varchar as b FROM GENERATE_SERIES(5,100,5) as i) as bb using (i)
De van itt MySQL kompatibilis megoldás:
select @num := @num+1,
case when @num % 3 = 0 AND @num % 5 = 0 then 'FizzBuzz'
when @num % 3 = 0 then 'Fizz'
when @num % 5 = 0 then 'Buzz'
else @num end
from ( information_schema.COLLATIONS, (select @num:=0) num ) limit 100
(Izlés szerint lehet LEFT JOIN-nal is).
és az MS SQL Server se maradjon már ki, ha kéznél van:
; WITH REC_CTE (I) AS (
SELECT 1 AS I
UNION ALL
SELECT I+1 FROM REC_CTE
WHERE I<100
)
select i, case when i % 3 = 0 AND i % 5 = 0 then 'FizzBuzz'
when i % 3 = 0 then 'Fizz'
when i % 5 = 0 then 'Buzz'
else CONVERT(VARCHAR, i) end
from REC_CTE
Más nem volt kéznél, de még gondolkodok egy array-os megoldáson is, ha már a PostgreSQL támogatja.
Lazán kapcsolódik:
- http://blog.jooq.org/2013/11/19/how-to-create-a-range-from-1-to-10-in-s…
- http://sqlbisam.blogspot.hu/2014/01/generate-series-or-list-of-numbers…
- saxus blogja
- A hozzászóláshoz be kell jelentkezni
- 1365 megtekintés
Hozzászólások
off
azóta nem szerepel a "write a fizzbuzz algorythm in any programming language" a felvételi tesztünkben előző munkahelyem felvételi tesztjében, mióta a tisztelt IT szakértő urak kb. 90%-a instant elhasal rajta senior pozinál
/off
- A hozzászóláshoz be kell jelentkezni
Ezt értem, bár meglepett, mert speciel nekem sem rémlik, hogy valaha hallottam volna róla. Szóval ez olyan, hogy én azon szoktam meglepődni, hogy IT-vel foglalkozó emberek nem ismerik a Mőbius-szalagot, ti meg nem feltételeztétek, hogy van ember, aki azt se tudja, eszik-e vagy isszák. (Nyilván ha tudja és nem tudja lekódolni, az más)
- A hozzászóláshoz be kell jelentkezni
Ja, bocs, félreérthető voltam. :) Nyilván nem csak névvel hivatkoztunk a feladatra, hanem le is írtuk, mit jelent.
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy az "algorythm" kifejezés zavarta össze a jelentkezőket :)
- A hozzászóláshoz be kell jelentkezni
Sose hallottam még erről a játékról, de elszórakozom vele majd.
- A hozzászóláshoz be kell jelentkezni
Általában úgy szokott kinézni, hogy írd meg minél tömörebb kóddal. Egy ismerős versengett a kollégájával C-ben, valami 17x byte környékén volt a legtömörebb, ha jól emlékszem.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
A *.c fájl mérete, jól értem? Elsőre 213 bájt, holnap majd tömörítem valahogy.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Én ~20 karakterrel fölé lőttem.
Nem szeretem a C-t :-D
--
blogom
- A hozzászóláshoz be kell jelentkezni
Ezen is biztosan lehetne még faragni, pl. most találtam még 3 karaktert. :) És még 16-ot... :)
- A hozzászóláshoz be kell jelentkezni
Na, ezt utálom, amikor már a whitespace spórolás is számít. Régi prog. alapjai előadó mondta mindig, hogy "tíz sorban meg tudja csinálni". Persze.
Sokkal relevánsabb lenne csak a nem whitespace karakterekben mérni az ilyen kié rövidebb kód versenyekben a hosszt.
- A hozzászóláshoz be kell jelentkezni
Vagy pedig deklaráltan ugyanazzal a cb/indent paranccsal "olvashatóra" alakított kódot vizsgálni. Aki meg a C-beautifier-nek is alá dolgozik 10-100 byte-ban, az meg is érdemli :-) (Azt azért tegyük hozzá, hogy ha valaki rövid, a másik pedig hosszú változóneveket használ, az ugyanúgy nem összevethető - ezért aztán általában természetesnek tekintik, hogy 1-betűs változó-, makró- és függvénynevek szerepelnek az ilyen kódokban.
- A hozzászóláshoz be kell jelentkezni
Nem tudom, hogy számít-e vagy sem, de tessék, adtam hozzá egy csomó whitespace-t, így 168 karakter.
- A hozzászóláshoz be kell jelentkezni
Nekem space-ek nélkül 158. http://ideone.com/iRBK6n A vicc, h a PCC és a clang fordítja, a gcc-nek kell a -std=c99 :-)
Szerk: hogy beszélted rá a gcc-jét, hogy fordítsa le for-ban levő int i=0-t?
- A hozzászóláshoz be kell jelentkezni
Strict c99 beállítással fut ideone-n, illetve fordul visual studioban. Ennél többet nem foglalkoztam vele.
- A hozzászóláshoz be kell jelentkezni
Hát akkor a whitespace programozók elég csinos előnyhöz jutnának :D
_____________________________
Powered by 1,3,7-trimetilxantin
- A hozzászóláshoz be kell jelentkezni
Touché.
- A hozzászóláshoz be kell jelentkezni
egy qgis programozási feladat kapcsán most kezdtem ismerkedni a pythonnal és ezt a biszbaszt sikerült összehozni: http://ideone.com/7Bjr4k
--
[ Falu.me | Tárhely | A Linux és én ]
- A hozzászóláshoz be kell jelentkezni
Én tudtam még ehhez képest is spórolni, az include és a main előtti int elhagyásával :) Kicsit nyavalygott érte a GCC, de ilyenekre nem adunk.
- A hozzászóláshoz be kell jelentkezni
Próbáltam én is, de strict c99 módban nem fordult úgy. Gondolom különböző C szabványok különböző dolgokat engednek meg, pl. az include-ot azért hagyhatod el mert a linker így is megtalálja a függvényt, a típust pedig azért, mert pl. K&R C int-et feltételez.
- A hozzászóláshoz be kell jelentkezni
Ez a ritkább variáns, általában úgy szokott ez a fizzbuzz-téma felmerülni, hogy a jelölt egyáltalán meg tudja-e írni (például egy állásinterjún) működőre ezt a triviálisnak tekintett programot. Az a tapasztalat, hogy sokan nem tudják. A kanonikus blogbejegyzéshez (http://blog.codinghorror.com/why-cant-programmers-program/), ahol ezt felvetették, hamar született rengeteg komment, ahol minden hozzászóló kötelességének érezte prezentálni a maga minél ügyesebb megoldását, aztán a szerző egy válaszcikkben közölte, hogy igazából épp az volt a lényeg, hogy ez egy triviális feladat, és aki programozóként dolgozik (vagy akként akar dolgozni), fel sem szabadna merülnie, hogy egy ilyen triviális feladattal bármi gond legyen.
Na mindegy. Nem bírtam ellenállni a kísértésnek, íme egy kicsit rövidebb, de sokkal gonoszabb C megoldás:
- A hozzászóláshoz be kell jelentkezni
A sztringizélő operátor bennem is felmerült, de valahogy nem akaródzott összejönni (az is igaz, hogy kb a büdös életben nem használtam, csak tudtam, hogy van). Mondjuk a kódod nekem durva, és csak tippelem, hogy pl. az "i=1" azért van a többi értékadás mellett, mert csak, így látványosabb; a vessző operátor használata pedig szintén egy tipikusan "dögöljön meg a szomszéd tehene" dolog :-) De azért gratulálok a látványos kódhoz.
- A hozzászóláshoz be kell jelentkezni
"A sztringizélő operátor" - a |-ra gondolsz? Nézd meg alaposabban. Hint: printf visszatérési értéke.
- A hozzászóláshoz be kell jelentkezni
Nem. A #a preprocesszor lehetőségre. A logikai és bit-műveleteket ismerem és időnként használom is, bár mivel nem vagyok egy nagy fejlesztő, mindig újra utána kell nézzek, melyik melyik.
- A hozzászóláshoz be kell jelentkezni
Most igy kedvcsinalokent bash-ben nekialtam :)
150 byte - http://ideone.com/rgHnQW
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..
- A hozzászóláshoz be kell jelentkezni
A left joinos szép, a unionos is sql-es de az mégiscsak union. :)
Picit elborult az agyam és megírtam scalaban egy sorban keywordök nélkül:
(1 to 100).map(i => (Some(i).filter(_ % 3 == 0).map(_ => "Fizz") ++ Some(i).filter(_ % 5 == 0).map(_ => "Buzz")).reduceOption(_ + _).getOrElse(i))
- A hozzászóláshoz be kell jelentkezni
Na de gyakorlatilag ez is hasonló, mint a left joinos, csak Scalaban ;)
(Már, ha jól sejtem, hogy mit csinál).
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni